dovecot-2.2: doveadm mailbox create: Added -g <guid> parameter t...

dovecot at dovecot.org dovecot at dovecot.org
Thu Oct 24 11:25:48 EEST 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/f89e645cba90
changeset: 16878:f89e645cba90
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Oct 24 11:25:41 2013 +0300
description:
doveadm mailbox create: Added -g <guid> parameter to create mailbox with specific GUID.

diffstat:

 src/doveadm/doveadm-mail-mailbox.c |  34 +++++++++++++++++++++++++++++-----
 1 files changed, 29 insertions(+), 5 deletions(-)

diffs (77 lines):

diff -r 219f869cbd0d -r f89e645cba90 src/doveadm/doveadm-mail-mailbox.c
--- a/src/doveadm/doveadm-mail-mailbox.c	Wed Oct 23 16:51:55 2013 +0300
+++ b/src/doveadm/doveadm-mail-mailbox.c	Thu Oct 24 11:25:41 2013 +0300
@@ -24,6 +24,12 @@
 	ARRAY_TYPE(const_string) mailboxes;
 };
 
+struct create_cmd_context {
+	struct doveadm_mailbox_cmd_context ctx;
+	ARRAY_TYPE(const_string) mailboxes;
+	struct mailbox_update update;
+};
+
 struct delete_cmd_context {
 	struct doveadm_mailbox_cmd_context ctx;
 	ARRAY_TYPE(const_string) mailboxes;
@@ -197,7 +203,7 @@
 cmd_mailbox_create_run(struct doveadm_mail_cmd_context *_ctx,
 		       struct mail_user *user)
 {
-	struct mailbox_cmd_context *ctx = (struct mailbox_cmd_context *)_ctx;
+	struct create_cmd_context *ctx = (struct create_cmd_context *)_ctx;
 	struct mail_namespace *ns;
 	struct mailbox *box;
 	const char *const *namep;
@@ -216,7 +222,7 @@
 		}
 
 		box = mailbox_alloc(ns->list, name, 0);
-		if (mailbox_create(box, NULL, directory) < 0) {
+		if (mailbox_create(box, &ctx->update, directory) < 0) {
 			i_error("Can't create mailbox %s: %s", name,
 				mailbox_get_last_error(box, NULL));
 			doveadm_mail_failed_mailbox(_ctx, box);
@@ -252,13 +258,31 @@
 	}
 }
 
+static bool
+cmd_mailbox_create_parse_arg(struct doveadm_mail_cmd_context *_ctx, int c)
+{
+	struct create_cmd_context *ctx = (struct create_cmd_context *)_ctx;
+
+	switch (c) {
+	case 'g':
+		if (guid_128_from_string(optarg, ctx->update.mailbox_guid) < 0)
+			doveadm_mail_help_name("mailbox create");
+		break;
+	default:
+		return FALSE;
+	}
+	return TRUE;
+}
+
 static struct doveadm_mail_cmd_context *cmd_mailbox_create_alloc(void)
 {
-	struct mailbox_cmd_context *ctx;
+	struct create_cmd_context *ctx;
 
-	ctx = doveadm_mailbox_cmd_alloc(struct mailbox_cmd_context);
+	ctx = doveadm_mailbox_cmd_alloc(struct create_cmd_context);
 	ctx->ctx.ctx.v.init = cmd_mailbox_create_init;
 	ctx->ctx.ctx.v.run = cmd_mailbox_create_run;
+	ctx->ctx.ctx.v.parse_arg = cmd_mailbox_create_parse_arg;
+	ctx->ctx.ctx.getopt_args = "g:";
 	p_array_init(&ctx->mailboxes, ctx->ctx.ctx.pool, 16);
 	return &ctx->ctx.ctx;
 }
@@ -532,7 +556,7 @@
 };
 struct doveadm_mail_cmd cmd_mailbox_create = {
 	cmd_mailbox_create_alloc, "mailbox create",
-	"[-s] <mailbox> [...]"
+	"[-s] [-g <guid>] <mailbox> [...]"
 };
 struct doveadm_mail_cmd cmd_mailbox_delete = {
 	cmd_mailbox_delete_alloc, "mailbox delete",


More information about the dovecot-cvs mailing list