dovecot-2.2: lib-storage: Removed rename_children parameter from...

dovecot at dovecot.org dovecot at dovecot.org
Mon Sep 10 17:20:00 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.2/rev/92cc78c5dc77
changeset: 15038:92cc78c5dc77
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Sep 10 17:19:43 2012 +0300
description:
lib-storage: Removed rename_children parameter from mailbox_rename()
The children are now always renamed. The only reason this feature was added
in the first place was to make dsync's job easier, but this is no longer
needed.

diffstat:

 src/doveadm/doveadm-mail-mailbox.c                |   2 +-
 src/doveadm/dsync/dsync-brain-mailbox-tree-sync.c |   2 +-
 src/imap/cmd-rename.c                             |   2 +-
 src/lib-storage/fail-mailbox.c                    |   3 +-
 src/lib-storage/index/imapc/imapc-list.c          |  12 +-----
 src/lib-storage/index/index-storage.c             |   6 +--
 src/lib-storage/index/index-storage.h             |   3 +-
 src/lib-storage/index/shared/shared-list.c        |   6 +--
 src/lib-storage/list/mailbox-list-fs.c            |  42 ++++------------------
 src/lib-storage/list/mailbox-list-index.c         |   6 +--
 src/lib-storage/list/mailbox-list-maildir.c       |   7 +--
 src/lib-storage/list/mailbox-list-none.c          |   3 +-
 src/lib-storage/mail-storage-private.h            |   3 +-
 src/lib-storage/mail-storage.c                    |   5 +-
 src/lib-storage/mail-storage.h                    |   9 ++--
 src/lib-storage/mailbox-list-private.h            |   3 +-
 src/plugins/acl/acl-mailbox.c                     |   5 +-
 src/plugins/lazy-expunge/lazy-expunge-plugin.c    |   5 +-
 src/plugins/mail-log/mail-log-plugin.c            |   3 +-
 src/plugins/notify/notify-plugin-private.h        |   3 +-
 src/plugins/notify/notify-plugin.c                |   5 +-
 src/plugins/notify/notify-plugin.h                |   3 +-
 src/plugins/notify/notify-storage.c               |   7 +--
 src/plugins/replication/replication-plugin.c      |   3 +-
 24 files changed, 45 insertions(+), 103 deletions(-)

diffs (truncated from 476 to 300 lines):

diff -r 920756cd29b8 -r 92cc78c5dc77 src/doveadm/doveadm-mail-mailbox.c
--- a/src/doveadm/doveadm-mail-mailbox.c	Fri Sep 07 16:43:44 2012 +0300
+++ b/src/doveadm/doveadm-mail-mailbox.c	Mon Sep 10 17:19:43 2012 +0300
@@ -421,7 +421,7 @@
 
 	oldbox = mailbox_alloc(oldns->list, oldname, 0);
 	newbox = mailbox_alloc(newns->list, newname, 0);
-	if (mailbox_rename(oldbox, newbox, TRUE) < 0) {
+	if (mailbox_rename(oldbox, newbox) < 0) {
 		i_error("Can't rename mailbox %s to %s: %s", oldname, newname,
 			mailbox_get_last_error(oldbox, NULL));
 		doveadm_mail_failed_mailbox(_ctx, oldbox);
diff -r 920756cd29b8 -r 92cc78c5dc77 src/doveadm/dsync/dsync-brain-mailbox-tree-sync.c
--- a/src/doveadm/dsync/dsync-brain-mailbox-tree-sync.c	Fri Sep 07 16:43:44 2012 +0300
+++ b/src/doveadm/dsync/dsync-brain-mailbox-tree-sync.c	Mon Sep 10 17:19:43 2012 +0300
@@ -119,7 +119,7 @@
 	case DSYNC_MAILBOX_TREE_SYNC_TYPE_RENAME:
 		destbox = mailbox_alloc(change->ns->list,
 					change->rename_dest_name, 0);
-		ret = mailbox_rename(box, destbox, TRUE);
+		ret = mailbox_rename(box, destbox);
 		func_name = "mailbox_rename";
 		mailbox_free(&destbox);
 		break;
diff -r 920756cd29b8 -r 92cc78c5dc77 src/imap/cmd-rename.c
--- a/src/imap/cmd-rename.c	Fri Sep 07 16:43:44 2012 +0300
+++ b/src/imap/cmd-rename.c	Mon Sep 10 17:19:43 2012 +0300
@@ -37,7 +37,7 @@
 
 	old_box = mailbox_alloc(old_ns->list, oldname, 0);
 	new_box = mailbox_alloc(new_ns->list, newname, 0);
-	if (mailbox_rename(old_box, new_box, TRUE) < 0)
+	if (mailbox_rename(old_box, new_box) < 0)
 		client_send_storage_error(cmd, mailbox_get_storage(old_box));
 	else
 		client_send_tagline(cmd, "OK Rename completed.");
diff -r 920756cd29b8 -r 92cc78c5dc77 src/lib-storage/fail-mailbox.c
--- a/src/lib-storage/fail-mailbox.c	Fri Sep 07 16:43:44 2012 +0300
+++ b/src/lib-storage/fail-mailbox.c	Mon Sep 10 17:19:43 2012 +0300
@@ -70,8 +70,7 @@
 }
 
 static int fail_mailbox_rename(struct mailbox *src,
-			       struct mailbox *dest ATTR_UNUSED,
-			       bool rename_children ATTR_UNUSED)
+			       struct mailbox *dest ATTR_UNUSED)
 {
 	mail_storage_set_error(src->storage, MAIL_ERROR_NOTPOSSIBLE,
 			       "Mailbox can't be renamed");
diff -r 920756cd29b8 -r 92cc78c5dc77 src/lib-storage/index/imapc/imapc-list.c
--- a/src/lib-storage/index/imapc/imapc-list.c	Fri Sep 07 16:43:44 2012 +0300
+++ b/src/lib-storage/index/imapc/imapc-list.c	Mon Sep 10 17:19:43 2012 +0300
@@ -633,20 +633,13 @@
 
 static int
 imapc_list_rename_mailbox(struct mailbox_list *oldlist, const char *oldname,
-			  struct mailbox_list *newlist, const char *newname,
-			  bool rename_children)
+			  struct mailbox_list *newlist, const char *newname)
 {
 	struct imapc_mailbox_list *list = (struct imapc_mailbox_list *)oldlist;
 	struct mailbox_list *fs_list = imapc_list_get_fs(list);
 	struct imapc_command *cmd;
 	struct imapc_simple_context ctx;
 
-	if (!rename_children) {
-		mailbox_list_set_error(oldlist, MAIL_ERROR_NOTPOSSIBLE,
-			"Renaming without children not supported.");
-		return -1;
-	}
-
 	if (oldlist != newlist) {
 		mailbox_list_set_error(oldlist, MAIL_ERROR_NOTPOSSIBLE,
 			"Can't rename mailboxes across storages.");
@@ -660,8 +653,7 @@
 		oldname = imapc_list_get_fs_name(list, oldname);
 		newname = imapc_list_get_fs_name(list, newname);
 		(void)fs_list->v.rename_mailbox(fs_list, oldname,
-						fs_list, newname,
-						rename_children);
+						fs_list, newname);
 	}
 	return ctx.ret;
 }
diff -r 920756cd29b8 -r 92cc78c5dc77 src/lib-storage/index/index-storage.c
--- a/src/lib-storage/index/index-storage.c	Fri Sep 07 16:43:44 2012 +0300
+++ b/src/lib-storage/index/index-storage.c	Mon Sep 10 17:19:43 2012 +0300
@@ -584,14 +584,12 @@
 	return 0;
 }
 
-int index_storage_mailbox_rename(struct mailbox *src, struct mailbox *dest,
-				 bool rename_children)
+int index_storage_mailbox_rename(struct mailbox *src, struct mailbox *dest)
 {
 	guid_128_t guid;
 
 	if (src->list->v.rename_mailbox(src->list, src->name,
-					dest->list, dest->name,
-					rename_children) < 0) {
+					dest->list, dest->name) < 0) {
 		mail_storage_copy_list_error(src->storage, src->list);
 		return -1;
 	}
diff -r 920756cd29b8 -r 92cc78c5dc77 src/lib-storage/index/index-storage.h
--- a/src/lib-storage/index/index-storage.h	Fri Sep 07 16:43:44 2012 +0300
+++ b/src/lib-storage/index/index-storage.h	Mon Sep 10 17:19:43 2012 +0300
@@ -75,8 +75,7 @@
 					const struct mailbox_update *update);
 int index_storage_mailbox_delete(struct mailbox *box);
 int index_storage_mailbox_delete_dir(struct mailbox *box, bool mailbox_deleted);
-int index_storage_mailbox_rename(struct mailbox *src, struct mailbox *dest,
-				 bool rename_children);
+int index_storage_mailbox_rename(struct mailbox *src, struct mailbox *dest);
 
 bool index_storage_is_readonly(struct mailbox *box);
 bool index_storage_is_inconsistent(struct mailbox *box);
diff -r 920756cd29b8 -r 92cc78c5dc77 src/lib-storage/index/shared/shared-list.c
--- a/src/lib-storage/index/shared/shared-list.c	Fri Sep 07 16:43:44 2012 +0300
+++ b/src/lib-storage/index/shared/shared-list.c	Mon Sep 10 17:19:43 2012 +0300
@@ -313,8 +313,7 @@
 
 static int
 shared_list_rename_mailbox(struct mailbox_list *oldlist, const char *oldname,
-			   struct mailbox_list *newlist, const char *newname,
-			   bool rename_children)
+			   struct mailbox_list *newlist, const char *newname)
 {
 	struct mail_namespace *ns;
 	int ret;
@@ -323,8 +322,7 @@
 				      newlist, &newname, &ns) < 0)
 		return -1;
 
-	ret = ns->list->v.rename_mailbox(ns->list, oldname, ns->list, newname,
-					 rename_children);
+	ret = ns->list->v.rename_mailbox(ns->list, oldname, ns->list, newname);
 	if (ret < 0)
 		shared_list_copy_error(oldlist, ns);
 	return ret;
diff -r 920756cd29b8 -r 92cc78c5dc77 src/lib-storage/list/mailbox-list-fs.c
--- a/src/lib-storage/list/mailbox-list-fs.c	Fri Sep 07 16:43:44 2012 +0300
+++ b/src/lib-storage/list/mailbox-list-fs.c	Mon Sep 10 17:19:43 2012 +0300
@@ -482,11 +482,10 @@
 static int fs_list_rename_mailbox(struct mailbox_list *oldlist,
 				  const char *oldname,
 				  struct mailbox_list *newlist,
-				  const char *newname, bool rename_children)
+				  const char *newname)
 {
 	struct mail_storage *oldstorage;
 	const char *oldvname, *oldpath, *newpath, *alt_newpath, *root_path, *p;
-	enum mailbox_list_path_type path_type, alt_path_type;
 	struct stat st;
 	struct mailbox_permissions old_perm, new_perm;
 	bool rmdir_parent = FALSE;
@@ -495,23 +494,12 @@
 	if (mailbox_list_get_storage(&oldlist, oldvname, &oldstorage) < 0)
 		return -1;
 
-	if (rename_children) {
-		path_type = MAILBOX_LIST_PATH_TYPE_DIR;
-		alt_path_type = MAILBOX_LIST_PATH_TYPE_ALT_DIR;
-	} else if (mail_storage_is_mailbox_file(oldstorage) ||
-		   *oldlist->set.maildir_name != '\0') {
-		path_type = MAILBOX_LIST_PATH_TYPE_MAILBOX;
-		alt_path_type = MAILBOX_LIST_PATH_TYPE_ALT_MAILBOX;
-	} else {
-		/* we can't do this, our children would get renamed with us */
-		mailbox_list_set_error(oldlist, MAIL_ERROR_NOTPOSSIBLE,
-			"Can't rename mailbox without its children.");
-		return -1;
-	}
-
-	oldpath = mailbox_list_get_path(oldlist, oldname, path_type);
-	newpath = mailbox_list_get_path(newlist, newname, path_type);
-	alt_newpath = mailbox_list_get_path(newlist, newname, alt_path_type);
+	oldpath = mailbox_list_get_path(oldlist, oldname,
+					MAILBOX_LIST_PATH_TYPE_DIR);
+	newpath = mailbox_list_get_path(newlist, newname,
+					MAILBOX_LIST_PATH_TYPE_DIR);
+	alt_newpath = mailbox_list_get_path(newlist, newname,
+					    MAILBOX_LIST_PATH_TYPE_ALT_DIR);
 
 	root_path = mailbox_list_get_root_path(oldlist, MAILBOX_LIST_PATH_TYPE_MAILBOX);
 	if (strcmp(oldpath, root_path) == 0) {
@@ -597,23 +585,9 @@
 		return -1;
 	}
 
-	if (!rename_children) {
-		/* if there are no child mailboxes, get rid of the mailbox
-		   directory entirely. */
-		oldpath = mailbox_list_get_path(oldlist, oldname,
-						MAILBOX_LIST_PATH_TYPE_DIR);
-		if (rmdir(oldpath) == 0)
-			rmdir_parent = TRUE;
-		else if (errno != ENOENT &&
-			 errno != ENOTEMPTY && errno != EEXIST) {
-			mailbox_list_set_critical(oldlist,
-				"rmdir(%s) failed: %m", oldpath);
-		}
-	}
-
 	if (alt_newpath != NULL) {
 		(void)rename_dir(oldlist, oldname, newlist, newname,
-				 alt_path_type, rmdir_parent);
+				 MAILBOX_LIST_PATH_TYPE_ALT_DIR, rmdir_parent);
 	}
 	(void)rename_dir(oldlist, oldname, newlist, newname,
 			 MAILBOX_LIST_PATH_TYPE_CONTROL, rmdir_parent);
diff -r 920756cd29b8 -r 92cc78c5dc77 src/lib-storage/list/mailbox-list-index.c
--- a/src/lib-storage/list/mailbox-list-index.c	Fri Sep 07 16:43:44 2012 +0300
+++ b/src/lib-storage/list/mailbox-list-index.c	Mon Sep 10 17:19:43 2012 +0300
@@ -373,8 +373,7 @@
 mailbox_list_index_rename_mailbox(struct mailbox_list *oldlist,
 				  const char *oldname,
 				  struct mailbox_list *newlist,
-				  const char *newname,
-				  bool rename_children)
+				  const char *newname)
 {
 	struct mailbox_list_index *oldilist = INDEX_LIST_CONTEXT(oldlist);
 
@@ -382,8 +381,7 @@
 	if (oldlist != newlist)
 		mailbox_list_index_refresh_later(newlist);
 	return oldilist->module_ctx.super.
-		rename_mailbox(oldlist, oldname,
-			       newlist, newname, rename_children);
+		rename_mailbox(oldlist, oldname, newlist, newname);
 }
 
 static int
diff -r 920756cd29b8 -r 92cc78c5dc77 src/lib-storage/list/mailbox-list-maildir.c
--- a/src/lib-storage/list/mailbox-list-maildir.c	Fri Sep 07 16:43:44 2012 +0300
+++ b/src/lib-storage/list/mailbox-list-maildir.c	Mon Sep 10 17:19:43 2012 +0300
@@ -555,8 +555,7 @@
 
 static int
 maildir_list_rename_mailbox(struct mailbox_list *oldlist, const char *oldname,
-			    struct mailbox_list *newlist, const char *newname,
-			    bool rename_children)
+			    struct mailbox_list *newlist, const char *newname)
 {
 	const char *oldpath, *newpath, *root_path;
 	int ret;
@@ -606,9 +605,7 @@
 				 MAILBOX_LIST_PATH_TYPE_INDEX);
 
 		found = ret == 0;
-		if (!rename_children)
-			ret = 0;
-		else T_BEGIN {
+		T_BEGIN {
 			ret = maildir_rename_children(oldlist, oldname,
 						      newlist, newname);
 		} T_END;
diff -r 920756cd29b8 -r 92cc78c5dc77 src/lib-storage/list/mailbox-list-none.c
--- a/src/lib-storage/list/mailbox-list-none.c	Fri Sep 07 16:43:44 2012 +0300
+++ b/src/lib-storage/list/mailbox-list-none.c	Mon Sep 10 17:19:43 2012 +0300
@@ -119,8 +119,7 @@
 none_list_rename_mailbox(struct mailbox_list *oldlist,
 			 const char *oldname ATTR_UNUSED,
 			 struct mailbox_list *newlist ATTR_UNUSED,
-			 const char *newname ATTR_UNUSED,
-			 bool rename_children ATTR_UNUSED)
+			 const char *newname ATTR_UNUSED)
 {
 	mailbox_list_set_error(oldlist, MAIL_ERROR_NOTPOSSIBLE,
 			       "Not supported");
diff -r 920756cd29b8 -r 92cc78c5dc77 src/lib-storage/mail-storage-private.h
--- a/src/lib-storage/mail-storage-private.h	Fri Sep 07 16:43:44 2012 +0300
+++ b/src/lib-storage/mail-storage-private.h	Mon Sep 10 17:19:43 2012 +0300
@@ -131,8 +131,7 @@
 		      bool directory);
 	int (*update)(struct mailbox *box, const struct mailbox_update *update);
 	int (*delete)(struct mailbox *box);
-	int (*rename)(struct mailbox *src, struct mailbox *dest,
-		      bool rename_children);
+	int (*rename)(struct mailbox *src, struct mailbox *dest);
 
 	int (*get_status)(struct mailbox *box, enum mailbox_status_items items,
 			  struct mailbox_status *status_r);
diff -r 920756cd29b8 -r 92cc78c5dc77 src/lib-storage/mail-storage.c
--- a/src/lib-storage/mail-storage.c	Fri Sep 07 16:43:44 2012 +0300
+++ b/src/lib-storage/mail-storage.c	Mon Sep 10 17:19:43 2012 +0300
@@ -1206,8 +1206,7 @@
 	return TRUE;
 }
 
-int mailbox_rename(struct mailbox *src, struct mailbox *dest,
-		   bool rename_children)
+int mailbox_rename(struct mailbox *src, struct mailbox *dest)
 {
 	const char *error = NULL;
 
@@ -1238,7 +1237,7 @@
 		return -1;
 	}


More information about the dovecot-cvs mailing list