dovecot-2.0-sslstream: dsync: Sync mailbox renames.

dovecot at dovecot.org dovecot at dovecot.org
Sat Feb 13 02:56:35 EET 2010


details:   http://hg.dovecot.org/dovecot-2.0-sslstream/rev/b99a19d5a93c
changeset: 10372:b99a19d5a93c
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Nov 19 14:19:39 2009 -0500
description:
dsync: Sync mailbox renames.

diffstat:

2 files changed, 34 insertions(+), 7 deletions(-)
src/dsync/dsync-brain-private.h |    2 +-
src/dsync/dsync-brain.c         |   39 +++++++++++++++++++++++++++++++++------

diffs (86 lines):

diff -r ce18bbd3e964 -r b99a19d5a93c src/dsync/dsync-brain-private.h
--- a/src/dsync/dsync-brain-private.h	Wed Nov 18 23:13:08 2009 -0500
+++ b/src/dsync/dsync-brain-private.h	Thu Nov 19 14:19:39 2009 -0500
@@ -12,7 +12,7 @@ enum dsync_state {
 	DSYNC_STATE_SYNC_MSGS,
 	DSYNC_STATE_SYNC_MSGS_FLUSH,
 	DSYNC_STATE_SYNC_MSGS_FLUSH2,
-	DSYNC_STATE_SYNC_UPDATE_MAILBOX,
+	DSYNC_STATE_SYNC_UPDATE_MAILBOXES,
 	DSYNC_STATE_SYNC_FLUSH,
 	DSYNC_STATE_SYNC_FLUSH2,
 	DSYNC_STATE_SYNC_END
diff -r ce18bbd3e964 -r b99a19d5a93c src/dsync/dsync-brain.c
--- a/src/dsync/dsync-brain.c	Wed Nov 18 23:13:08 2009 -0500
+++ b/src/dsync/dsync-brain.c	Thu Nov 19 14:19:39 2009 -0500
@@ -416,6 +416,15 @@ static bool dsync_mailbox_has_changed_ms
 	return FALSE;
 }
 
+static bool dsync_mailbox_has_changes(struct dsync_brain *brain,
+				      const struct dsync_mailbox *box1,
+				      const struct dsync_mailbox *box2)
+{
+	if (strcmp(box1->name, box2->name) != 0)
+		return TRUE;
+	return dsync_mailbox_has_changed_msgs(brain, box1, box2);
+}
+
 static void
 dsync_brain_get_changed_mailboxes(struct dsync_brain *brain,
 				  ARRAY_TYPE(dsync_brain_mailbox) *brain_boxes,
@@ -439,9 +448,8 @@ dsync_brain_get_changed_mailboxes(struct
 		ret = dsync_mailbox_guid_cmp(src_boxes[src], dest_boxes[dest]);
 		if (ret == 0) {
 			if ((full_sync ||
-			     dsync_mailbox_has_changed_msgs(brain,
-							    src_boxes[src],
-							    dest_boxes[dest])) &&
+			     dsync_mailbox_has_changes(brain, src_boxes[src],
+						       dest_boxes[dest])) &&
 			    !src_deleted && !dest_deleted) {
 				brain_box = array_append_space(brain_boxes);
 				brain_box->box = *src_boxes[src];
@@ -521,11 +529,30 @@ static void dsync_brain_sync_msgs(struct
 }
 
 static void
-dsync_brain_msg_sync_update_mailbox(struct dsync_brain *brain)
+dsync_brain_sync_rename_mailbox(struct dsync_brain *brain,
+				const struct dsync_brain_mailbox *mailbox)
+{
+	if (mailbox->src->last_renamed > mailbox->dest->last_renamed) {
+		dsync_worker_rename_mailbox(brain->dest_worker,
+					    &mailbox->box.mailbox_guid,
+					    mailbox->src->name);
+	} else {
+		dsync_worker_rename_mailbox(brain->src_worker,
+					    &mailbox->box.mailbox_guid,
+					    mailbox->dest->name);
+	}
+}
+
+static void
+dsync_brain_sync_update_mailboxes(struct dsync_brain *brain)
 {
 	const struct dsync_brain_mailbox *mailbox;
 
 	array_foreach(&brain->mailbox_sync->mailboxes, mailbox) {
+		if (mailbox->src != NULL && mailbox->dest != NULL &&
+		    strcmp(mailbox->src->name, mailbox->dest->name) != 0)
+			dsync_brain_sync_rename_mailbox(brain, mailbox);
+
 		dsync_worker_update_mailbox(brain->src_worker, &mailbox->box);
 		dsync_worker_update_mailbox(brain->dest_worker, &mailbox->box);
 	}
@@ -584,8 +611,8 @@ void dsync_brain_sync(struct dsync_brain
 		break;
 	case DSYNC_STATE_SYNC_MSGS_FLUSH2:
 		break;
-	case DSYNC_STATE_SYNC_UPDATE_MAILBOX:
-		dsync_brain_msg_sync_update_mailbox(brain);
+	case DSYNC_STATE_SYNC_UPDATE_MAILBOXES:
+		dsync_brain_sync_update_mailboxes(brain);
 		brain->state++;
 		/* fall through */
 	case DSYNC_STATE_SYNC_FLUSH:


More information about the dovecot-cvs mailing list