]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm instance: Convert to v2 commands
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 9 Jun 2021 21:18:17 +0000 (00:18 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 21 Jul 2021 09:03:09 +0000 (09:03 +0000)
src/doveadm/doveadm-instance.c

index fc2755fb32d1c378f95df219c63a47d0fec34b7a..cd3d55e07d41c6ccb540d5393ad28b000825d718 100644 (file)
@@ -11,9 +11,9 @@
 #include <fcntl.h>
 #include <signal.h>
 
-extern struct doveadm_cmd doveadm_cmd_instance[];
+extern struct doveadm_cmd_ver2 doveadm_cmd_instance[];
 
-static void instance_cmd_help(doveadm_command_t *cmd) ATTR_NORETURN;
+static void instance_cmd_help(const struct doveadm_cmd_ver2 *cmd) ATTR_NORETURN;
 
 static bool pid_file_read(const char *path)
 {
@@ -44,25 +44,17 @@ static bool pid_file_read(const char *path)
        return found;
 }
 
-static void cmd_instance_list(int argc, char *argv[])
+static void cmd_instance_list(struct doveadm_cmd_context *cctx)
 {
        struct master_instance_list *list;
        struct master_instance_list_iter *iter;
        const struct master_instance *inst;
        const char *instance_path, *pidfile_path;
        bool show_config = FALSE;
-       int c;
-
-       while ((c = getopt(argc, argv, "c")) > 0) {
-               switch (c) {
-               case 'c':
-                       show_config = TRUE;
-                       break;
-               default:
-                       help(&doveadm_cmd_instance[0]);
-               }
-       }
-       argv += optind;
+       const char *name = NULL;
+
+       (void)doveadm_cmd_param_bool(cctx, "show-config", &show_config);
+       (void)doveadm_cmd_param_str(cctx, "name", &name);
 
        if (!show_config) {
                doveadm_print_init(DOVEADM_PRINT_TYPE_TABLE);
@@ -77,7 +69,7 @@ static void cmd_instance_list(int argc, char *argv[])
        list = master_instance_list_init(instance_path);
        iter = master_instance_list_iterate_init(list);
        while ((inst = master_instance_iterate_list_next(iter)) != NULL) {
-               if (argv[0] != NULL && strcmp(argv[0], inst->name) != 0)
+               if (name != NULL && strcmp(name, inst->name) != 0)
                        continue;
 
                if (show_config) {
@@ -98,21 +90,21 @@ static void cmd_instance_list(int argc, char *argv[])
        master_instance_list_deinit(&list);
 }
 
-static void cmd_instance_remove(int argc, char *argv[])
+static void cmd_instance_remove(struct doveadm_cmd_context *cctx)
 {
        struct master_instance_list *list;
        const struct master_instance *inst;
-       const char *base_dir, *instance_path;
+       const char *base_dir, *instance_path, *name;
        int ret;
 
-       if (argc != 2)
-               instance_cmd_help(cmd_instance_remove);
+       if (!doveadm_cmd_param_str(cctx, "name", &name))
+               instance_cmd_help(cctx->cmd);
 
        instance_path = t_strconcat(service_set->state_dir,
                                    "/"MASTER_INSTANCE_FNAME, NULL);
        list = master_instance_list_init(instance_path);
-       inst = master_instance_list_find_by_name(list, argv[1]);
-       base_dir = inst != NULL ? inst->base_dir : argv[1];
+       inst = master_instance_list_find_by_name(list, name);
+       base_dir = inst != NULL ? inst->base_dir : name;
        if ((ret = master_instance_list_remove(list, base_dir)) < 0) {
                i_error("Failed to remove instance");
                doveadm_exit_code = EX_TEMPFAIL;
@@ -123,18 +115,33 @@ static void cmd_instance_remove(int argc, char *argv[])
        master_instance_list_deinit(&list);
 }
 
-struct doveadm_cmd doveadm_cmd_instance[] = {
-       { cmd_instance_list, "instance list", "[-c] [<name>]" },
-       { cmd_instance_remove, "instance remove", "<name> | <base dir>" }
+struct doveadm_cmd_ver2 doveadm_cmd_instance[] = {
+{
+       .name = "instance list",
+       .cmd = cmd_instance_list,
+       .usage = "[-c] [<name>]",
+DOVEADM_CMD_PARAMS_START
+DOVEADM_CMD_PARAM('c', "show-config", CMD_PARAM_BOOL, 0)
+DOVEADM_CMD_PARAM('\0', "name", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAMS_END
+},
+{
+       .name = "instance remove",
+       .cmd = cmd_instance_remove,
+       .usage = "<name> | <base dir>",
+DOVEADM_CMD_PARAMS_START
+DOVEADM_CMD_PARAM('\0', "name", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAMS_END
+}
 };
 
-static void instance_cmd_help(doveadm_command_t *cmd)
+static void instance_cmd_help(const struct doveadm_cmd_ver2 *cmd)
 {
        unsigned int i;
 
        for (i = 0; i < N_ELEMENTS(doveadm_cmd_instance); i++) {
-               if (doveadm_cmd_instance[i].cmd == cmd)
-                       help(&doveadm_cmd_instance[i]);
+               if (doveadm_cmd_instance[i].cmd == cmd->cmd)
+                       help_ver2(&doveadm_cmd_instance[i]);
        }
        i_unreached();
 }
@@ -144,5 +151,5 @@ void doveadm_register_instance_commands(void)
        unsigned int i;
 
        for (i = 0; i < N_ELEMENTS(doveadm_cmd_instance); i++)
-               doveadm_register_cmd(&doveadm_cmd_instance[i]);
+               doveadm_cmd_register_ver2(&doveadm_cmd_instance[i]);
 }