X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=lib%2Fdatabase.cc;h=19f960e2d621d378f2254d8a1ddd5dc8554eec15;hb=d12801c8b4d04a50fcb912b75017244fb09658e8;hp=6b8c9989ea4f9c75ada9df3ae0591fca1b65c20f;hpb=909f52bd8c4bdfa11cd3e75e3d0959e0293689bd;p=notmuch diff --git a/lib/database.cc b/lib/database.cc index 6b8c9989..19f960e2 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -722,7 +722,7 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, } /* Before version 1, each message document had its filename in the - * data field. Move that into the new format by calling + * data field. Copy that into the new format by calling * notmuch_message_add_filename. */ if (version < 1) { @@ -730,6 +730,7 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, notmuch_query_t *query = notmuch_query_create (notmuch, ""); notmuch_messages_t *messages; notmuch_message_t *message; + char *filename; total = notmuch_query_count_messages (query); @@ -737,20 +738,31 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, notmuch_messages_has_more (messages); notmuch_messages_advance (messages)) { - if (do_progress_notify) + if (do_progress_notify) { progress_notify (closure, count, total); + do_progress_notify = 0; + } message = notmuch_messages_get (messages); - _notmuch_message_upgrade_filename_storage (message); + filename = _notmuch_message_talloc_copy_data (message); + if (filename && *filename != '\0') { + _notmuch_message_add_filename (message, filename); + _notmuch_message_sync (message); + } + talloc_free (filename); + + notmuch_message_destroy (message); count++; } + + notmuch_query_destroy (query); } /* Also, before version 1 we stored directory timestamps in * XTIMESTAMP documents instead of the current XDIRECTORY - * documents. So convert those as well. */ + * documents. So copy those as well. */ if (version < 1) { Xapian::TermIterator t, t_end; @@ -788,6 +800,66 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, db->set_metadata ("version", STRINGIFY (NOTMUCH_DATABASE_VERSION)); db->flush (); + /* Now that the upgrade is complete we can remove the old data + * and documents that are no longer needed. */ + if (version < 1) { + unsigned int count = 0, total; + notmuch_query_t *query = notmuch_query_create (notmuch, ""); + notmuch_messages_t *messages; + notmuch_message_t *message; + char *filename; + + total = notmuch_query_count_messages (query); + + for (messages = notmuch_query_search_messages (query); + notmuch_messages_has_more (messages); + notmuch_messages_advance (messages)) + { + if (do_progress_notify) { + progress_notify (closure, count, total); + do_progress_notify = 0; + } + + message = notmuch_messages_get (messages); + + filename = _notmuch_message_talloc_copy_data (message); + if (filename && *filename != '\0') { + _notmuch_message_clear_data (message); + _notmuch_message_sync (message); + } + talloc_free (filename); + + notmuch_message_destroy (message); + + count++; + } + + notmuch_query_destroy (query); + } + + if (version < 1) { + Xapian::TermIterator t, t_end; + + t_end = notmuch->xapian_db->allterms_end ("XTIMESTAMP"); + + for (t = notmuch->xapian_db->allterms_begin ("XTIMESTAMP"); + t != t_end; + t++) + { + Xapian::PostingIterator p, p_end; + std::string term = *t; + + p_end = notmuch->xapian_db->postlist_end (term); + + for (p = notmuch->xapian_db->postlist_begin (term); + p != p_end; + p++) + { + db->delete_document (*p); + } + } + } + if (timer_is_active) { /* Now stop the timer. */ timerval.it_interval.tv_sec = 0;