]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dsync: Split off dsync_brain_recv_mailbox_tree_add()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 21 Sep 2021 14:10:56 +0000 (17:10 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 22 Sep 2021 11:11:23 +0000 (11:11 +0000)
src/doveadm/dsync/dsync-brain-mailbox-tree.c

index ba9ddeb07d7666fc5d9a099c8c3bc5c0c9a87146..91422e009c96cf755d33e181a087a3ea5414fce6 100644 (file)
@@ -342,12 +342,35 @@ static void dsync_brain_mailbox_trees_sync(struct dsync_brain *brain)
                brain->failed = TRUE;
 }
 
+static int
+dsync_brain_recv_mailbox_tree_add(struct dsync_brain *brain,
+                                 const char *const *parts,
+                                 const struct dsync_mailbox_node *remote_node,
+                                 const char *sep)
+{
+       struct dsync_mailbox_node *node;
+       struct mail_namespace *ns;
+       const char *name;
+
+       if (dsync_get_mailbox_name(brain, parts, &name, &ns) < 0)
+               return -1;
+       if (brain->debug) {
+               i_debug("brain %c: Remote mailbox tree: %s %s",
+                       brain->master_brain ? 'M' : 'S',
+                       t_strarray_join(parts, sep),
+                       dsync_mailbox_node_to_string(remote_node));
+       }
+       node = dsync_mailbox_tree_get(brain->remote_mailbox_tree, name);
+       node->ns = ns;
+       dsync_mailbox_node_copy_data(node, remote_node);
+       return 0;
+}
+
 bool dsync_brain_recv_mailbox_tree(struct dsync_brain *brain)
 {
        const struct dsync_mailbox_node *remote_node;
-       struct dsync_mailbox_node *node, *dup_node1, *dup_node2;
-       const char *const *parts, *name;
-       struct mail_namespace *ns;
+       struct dsync_mailbox_node *dup_node1, *dup_node2;
+       const char *const *parts;
        enum dsync_ibc_recv_ret ret;
        char sep[2];
        bool changed = FALSE;
@@ -355,21 +378,13 @@ bool dsync_brain_recv_mailbox_tree(struct dsync_brain *brain)
        sep[0] = brain->hierarchy_sep; sep[1] = '\0';
        while ((ret = dsync_ibc_recv_mailbox_tree_node(brain->ibc, &parts,
                                                       &remote_node)) > 0) {
-               if (dsync_get_mailbox_name(brain, parts, &name, &ns) < 0) {
+               if (dsync_brain_recv_mailbox_tree_add(brain, parts,
+                                                     remote_node, sep) < 0) {
                        i_error("Couldn't find namespace for mailbox %s",
                                t_strarray_join(parts, sep));
                        brain->failed = TRUE;
                        return TRUE;
                }
-               if (brain->debug) {
-                       i_debug("brain %c: Remote mailbox tree: %s %s",
-                               brain->master_brain ? 'M' : 'S',
-                               t_strarray_join(parts, sep),
-                               dsync_mailbox_node_to_string(remote_node));
-               }
-               node = dsync_mailbox_tree_get(brain->remote_mailbox_tree, name);
-               node->ns = ns;
-               dsync_mailbox_node_copy_data(node, remote_node);
        }
        if (ret != DSYNC_IBC_RECV_RET_FINISHED)
                return changed;