]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
index-storage: Update mailbox last_rename_stamp on rename
authorAki Tuomi <aki.tuomi@dovecot.fi>
Wed, 28 Dec 2016 20:45:22 +0000 (22:45 +0200)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Tue, 3 Jan 2017 10:43:34 +0000 (12:43 +0200)
src/lib-storage/index/index-storage.c
src/lib-storage/mail-storage-private.h

index a3908af92fb690a2db3b3e79d5208158062a00b4..d55d7501f7cf5734941079990652afedd97b96e1 100644 (file)
@@ -300,6 +300,10 @@ int index_storage_mailbox_open(struct mailbox *box, bool move_to_memory)
        box->box_name_hdr_ext_id =
                mail_index_ext_register(box->index, "box-name", 0, 0, 0);
 
+       box->box_last_rename_stamp_ext_id =
+               mail_index_ext_register(box->index, "last-rename-stamp",
+                                       sizeof(uint32_t), 0, sizeof(uint32_t));
+
        box->opened = TRUE;
 
        if ((box->enabled_features & MAILBOX_FEATURE_CONDSTORE) != 0)
@@ -795,6 +799,19 @@ int index_storage_mailbox_rename(struct mailbox *src, struct mailbox *dest)
                return -1;
        }
 
+       if (mailbox_open(dest) == 0) {
+               struct mail_index_transaction *t =
+                       mail_index_transaction_begin(dest->view, 0);
+
+               uint32_t stamp = ioloop_time;
+
+               mail_index_update_header_ext(t, dest->box_last_rename_stamp_ext_id,
+                                            0, &stamp, sizeof(stamp));
+
+               /* can't do much if this fails anyways */
+               (void)mail_index_transaction_commit(&t);
+       }
+
        /* we'll track mailbox names, instead of GUIDs. We may be renaming a
           non-selectable mailbox (directory), which doesn't even have a GUID */
        mailbox_name_get_sha128(dest->vname, guid);
index c91a447c2aed7b38636b51a1d9540986c222a45b..69bbf18da1404053804381924781ef91b6ea27ef 100644 (file)
@@ -362,6 +362,7 @@ struct mailbox {
        uint32_t vsize_hdr_ext_id;
        uint32_t pop3_uidl_hdr_ext_id;
        uint32_t box_name_hdr_ext_id;
+       uint32_t box_last_rename_stamp_ext_id;
 
        /* MAIL_RECENT flags handling */
        ARRAY_TYPE(seq_range) recent_flags;