From b88c159f0b018cef52b724240da90341fb06b37d Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Wed, 28 Dec 2016 22:45:22 +0200 Subject: [PATCH] index-storage: Update mailbox last_rename_stamp on rename --- src/lib-storage/index/index-storage.c | 17 +++++++++++++++++ src/lib-storage/mail-storage-private.h | 1 + 2 files changed, 18 insertions(+) diff --git a/src/lib-storage/index/index-storage.c b/src/lib-storage/index/index-storage.c index 91ecc47c28..d3521bfdea 100644 --- a/src/lib-storage/index/index-storage.c +++ b/src/lib-storage/index/index-storage.c @@ -299,6 +299,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) @@ -794,6 +798,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); diff --git a/src/lib-storage/mail-storage-private.h b/src/lib-storage/mail-storage-private.h index dcbfa9bf64..a6bdd1caf5 100644 --- a/src/lib-storage/mail-storage-private.h +++ b/src/lib-storage/mail-storage-private.h @@ -361,6 +361,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;