diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/database.cc | 72 |
1 files changed, 26 insertions, 46 deletions
diff --git a/lib/database.cc b/lib/database.cc index 525c9c37..6a7ce299 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -1248,11 +1248,9 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, * format. */ notmuch->features = target_features; - /* Before version 1, each message document had its filename in the - * data field. Copy that into the new format by calling - * notmuch_message_add_filename. - */ - if (new_features & NOTMUCH_FEATURE_FILE_TERMS) { + /* Perform per-message upgrades. */ + if (new_features & + (NOTMUCH_FEATURE_FILE_TERMS | NOTMUCH_FEATURE_BOOL_FOLDER)) { notmuch_query_t *query = notmuch_query_create (notmuch, ""); notmuch_messages_t *messages; notmuch_message_t *message; @@ -1271,13 +1269,27 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, message = notmuch_messages_get (messages); - filename = _notmuch_message_talloc_copy_data (message); - if (filename && *filename != '\0') { - _notmuch_message_add_filename (message, filename); - _notmuch_message_clear_data (message); - _notmuch_message_sync (message); + /* Before version 1, each message document had its + * filename in the data field. Copy that into the new + * format by calling notmuch_message_add_filename. + */ + if (new_features & NOTMUCH_FEATURE_FILE_TERMS) { + filename = _notmuch_message_talloc_copy_data (message); + if (filename && *filename != '\0') { + _notmuch_message_add_filename (message, filename); + _notmuch_message_clear_data (message); + } + talloc_free (filename); } - talloc_free (filename); + + /* Prior to version 2, the "folder:" prefix was + * probabilistic and stemmed. Change it to the current + * boolean prefix. Add "path:" prefixes while at it. + */ + if (new_features & NOTMUCH_FEATURE_BOOL_FOLDER) + _notmuch_message_upgrade_folder (message); + + _notmuch_message_sync (message); notmuch_message_destroy (message); @@ -1287,7 +1299,9 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, notmuch_query_destroy (query); } - /* Also, before version 1 we stored directory timestamps in + /* Perform per-directory upgrades. */ + + /* Before version 1 we stored directory timestamps in * XTIMESTAMP documents instead of the current XDIRECTORY * documents. So copy those as well. */ if (new_features & NOTMUCH_FEATURE_DIRECTORY_DOCS) { @@ -1329,40 +1343,6 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, } } - /* - * Prior to version 2, the "folder:" prefix was probabilistic and - * stemmed. Change it to the current boolean prefix. Add "path:" - * prefixes while at it. - */ - if (new_features & NOTMUCH_FEATURE_BOOL_FOLDER) { - notmuch_query_t *query = notmuch_query_create (notmuch, ""); - notmuch_messages_t *messages; - notmuch_message_t *message; - - count = 0; - total = notmuch_query_count_messages (query); - - for (messages = notmuch_query_search_messages (query); - notmuch_messages_valid (messages); - notmuch_messages_move_to_next (messages)) { - if (do_progress_notify) { - progress_notify (closure, (double) count / total); - do_progress_notify = 0; - } - - message = notmuch_messages_get (messages); - - _notmuch_message_upgrade_folder (message); - _notmuch_message_sync (message); - - notmuch_message_destroy (message); - - count++; - } - - notmuch_query_destroy (query); - } - db->set_metadata ("features", _print_features (local, notmuch->features)); db->set_metadata ("version", STRINGIFY (NOTMUCH_DATABASE_VERSION)); |