]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm sis deduplicate/find: Convert to v2 command
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 9 Jun 2021 19:47:35 +0000 (22:47 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 21 Jul 2021 09:03:09 +0000 (09:03 +0000)
src/doveadm/doveadm-cmd.c
src/doveadm/doveadm-cmd.h
src/doveadm/doveadm-sis.c

index e216e72c2ca9765ad09b41ff537063ad172feac5..aba53dc20cbdbd32a6f8a3028db509925ed3dac3 100644 (file)
 
 static struct doveadm_cmd *doveadm_commands[] = {
        &doveadm_cmd_mailbox_mutf7,
-       &doveadm_cmd_sis_deduplicate,
-       &doveadm_cmd_sis_find,
 };
 
 static struct doveadm_cmd_ver2 *doveadm_commands_ver2[] = {
        &doveadm_cmd_service_stop_ver2,
        &doveadm_cmd_service_status_ver2,
+       &doveadm_cmd_sis_deduplicate,
+       &doveadm_cmd_sis_find,
        &doveadm_cmd_process_status_ver2,
        &doveadm_cmd_stop_ver2,
        &doveadm_cmd_reload_ver2,
index b2586e9ef0db9987968298d0d374045b5b1b3f94..326c5696a0aab87ab76c3a5254215cf3ce1bee06 100644 (file)
@@ -93,8 +93,6 @@ extern ARRAY_TYPE(doveadm_cmd_ver2) doveadm_cmds_ver2;
 extern struct doveadm_cmd doveadm_cmd_dump;
 extern struct doveadm_cmd doveadm_cmd_pw;
 extern struct doveadm_cmd doveadm_cmd_mailbox_mutf7;
-extern struct doveadm_cmd doveadm_cmd_sis_deduplicate;
-extern struct doveadm_cmd doveadm_cmd_sis_find;
 
 void doveadm_register_cmd(const struct doveadm_cmd *cmd);
 
@@ -160,6 +158,8 @@ extern struct doveadm_cmd_ver2 doveadm_cmd_oldstats_top_ver2;
 extern struct doveadm_cmd_ver2 doveadm_cmd_penalty_ver2;
 extern struct doveadm_cmd_ver2 doveadm_cmd_kick_ver2;
 extern struct doveadm_cmd_ver2 doveadm_cmd_who_ver2;
+extern struct doveadm_cmd_ver2 doveadm_cmd_sis_deduplicate;
+extern struct doveadm_cmd_ver2 doveadm_cmd_sis_find;
 extern struct doveadm_cmd_ver2 doveadm_cmd_zlibconnect;
 
 #endif
index bc6444ebfa4c33c23e36fae9ef9f291140725b2d..85e82e9f4d2636d7c76f3482d559c2e34a1f3f18 100644 (file)
@@ -206,7 +206,7 @@ static int sis_try_deduplicate(const char *rootdir, const char *fname)
        return hardlink_replace(path, hashes_path, st.st_ino) < 0 ? -1 : 0;
 }
 
-static void cmd_sis_deduplicate(int argc, char *argv[])
+static void cmd_sis_deduplicate(struct doveadm_cmd_context *cctx)
 {
        const char *rootdir, *queuedir;
        DIR *dir;
@@ -216,14 +216,12 @@ static void cmd_sis_deduplicate(int argc, char *argv[])
        size_t dir_len;
        int ret;
 
-       if (argc < 3)
-               help(&doveadm_cmd_sis_deduplicate);
+       if (!doveadm_cmd_param_str(cctx, "root-dir", &rootdir) ||
+           !doveadm_cmd_param_str(cctx, "queue-dir", &queuedir))
+               help_ver2(&doveadm_cmd_sis_deduplicate);
 
        /* go through the filenames in the queue dir and see if
           we can deduplicate them. */
-       rootdir = argv[1];
-       queuedir = argv[2];
-
        if (stat(rootdir, &st) < 0)
                i_fatal("stat(%s) failed: %m", rootdir);
 
@@ -264,7 +262,7 @@ static void cmd_sis_deduplicate(int argc, char *argv[])
                i_error("closedir(%s) failed: %m", queuedir);
 }
 
-static void cmd_sis_find(int argc, char *argv[])
+static void cmd_sis_find(struct doveadm_cmd_context *cctx)
 {
        const char *rootdir, *path, *hash;
        DIR *dir;
@@ -273,16 +271,16 @@ static void cmd_sis_find(int argc, char *argv[])
        string_t *str;
        size_t dir_len, hash_len;
 
-       if (argc < 3 || strlen(argv[2]) < 4)
-               help(&doveadm_cmd_sis_find);
+       if (!doveadm_cmd_param_str(cctx, "root-dir", &rootdir) ||
+           !doveadm_cmd_param_str(cctx, "hash", &hash) ||
+           strlen(hash) < 4)
+               help_ver2(&doveadm_cmd_sis_find);
 
-       rootdir = argv[1];
        if (stat(rootdir, &st) < 0) {
                if (errno == ENOENT)
                        i_fatal("Attachment dir doesn't exist: %s", rootdir);
                i_fatal("stat(%s) failed: %m", rootdir);
        }
-       hash = argv[2];
        hash_len = strlen(hash);
 
        path = sis_get_dir(rootdir, hash);
@@ -312,9 +310,21 @@ static void cmd_sis_find(int argc, char *argv[])
                i_error("closedir(%s) failed: %m", path);
 }
 
-struct doveadm_cmd doveadm_cmd_sis_deduplicate = {
-       cmd_sis_deduplicate, "sis deduplicate", "<root dir> <queue dir>"
+struct doveadm_cmd_ver2 doveadm_cmd_sis_deduplicate = {
+       .name = "sis deduplicate",
+       .cmd = cmd_sis_deduplicate,
+       .usage = "<root dir> <queue dir>",
+DOVEADM_CMD_PARAMS_START
+DOVEADM_CMD_PARAM('\0', "root-dir", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('\0', "queue-dir", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAMS_END
 };
-struct doveadm_cmd doveadm_cmd_sis_find = {
-       cmd_sis_find, "sis find", "<root dir> <hash>"
+struct doveadm_cmd_ver2 doveadm_cmd_sis_find = {
+       .name = "sis find",
+       .cmd = cmd_sis_find,
+       .usage = "<root dir> <hash>",
+DOVEADM_CMD_PARAMS_START
+DOVEADM_CMD_PARAM('\0', "root-dir", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('\0', "hash", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAMS_END
 };