From: Timo Sirainen Date: Wed, 9 Jun 2021 19:47:35 +0000 (+0300) Subject: doveadm sis deduplicate/find: Convert to v2 command X-Git-Tag: 2.3.17~322 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=07ba60c061d88bcb98bee984098b40f2f4e9d847;p=thirdparty%2Fdovecot%2Fcore.git doveadm sis deduplicate/find: Convert to v2 command --- diff --git a/src/doveadm/doveadm-cmd.c b/src/doveadm/doveadm-cmd.c index e216e72c2c..aba53dc20c 100644 --- a/src/doveadm/doveadm-cmd.c +++ b/src/doveadm/doveadm-cmd.c @@ -14,13 +14,13 @@ 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, diff --git a/src/doveadm/doveadm-cmd.h b/src/doveadm/doveadm-cmd.h index b2586e9ef0..326c5696a0 100644 --- a/src/doveadm/doveadm-cmd.h +++ b/src/doveadm/doveadm-cmd.h @@ -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 diff --git a/src/doveadm/doveadm-sis.c b/src/doveadm/doveadm-sis.c index bc6444ebfa..85e82e9f4d 100644 --- a/src/doveadm/doveadm-sis.c +++ b/src/doveadm/doveadm-sis.c @@ -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", " " +struct doveadm_cmd_ver2 doveadm_cmd_sis_deduplicate = { + .name = "sis deduplicate", + .cmd = cmd_sis_deduplicate, + .usage = " ", +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", " " +struct doveadm_cmd_ver2 doveadm_cmd_sis_find = { + .name = "sis find", + .cmd = cmd_sis_find, + .usage = " ", +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 };