From 02fec226fcb02a5c784f4322365b979639b37c76 Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Mon, 25 Aug 2014 13:26:06 -0400 Subject: [PATCH] lib: Report progress for combined upgrade operation Previously, some parts of upgrade didn't report progress and for others it was possible for the progress meter to restart at 0 part way through the upgrade because each stage was reported separately. Fix this by computing the total amount of work that needs to be done up-front and updating completed work monotonically. --- lib/database.cc | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/database.cc b/lib/database.cc index 6a7ce299..53397bb0 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -1241,6 +1241,19 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, timer_is_active = TRUE; } + /* Figure out how much total work we need to do. */ + if (new_features & + (NOTMUCH_FEATURE_FILE_TERMS | NOTMUCH_FEATURE_BOOL_FOLDER)) { + notmuch_query_t *query = notmuch_query_create (notmuch, ""); + total += notmuch_query_count_messages (query); + notmuch_query_destroy (query); + } + if (new_features & NOTMUCH_FEATURE_DIRECTORY_DOCS) { + t_end = db->allterms_end ("XTIMESTAMP"); + for (t = db->allterms_begin ("XTIMESTAMP"); t != t_end; t++) + ++total; + } + /* Perform the upgrade in a transaction. */ db->begin_transaction (true); @@ -1256,8 +1269,6 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, notmuch_message_t *message; char *filename; - total = notmuch_query_count_messages (query); - for (messages = notmuch_query_search_messages (query); notmuch_messages_valid (messages); notmuch_messages_move_to_next (messages)) @@ -1340,6 +1351,8 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, db->delete_document (*p); } + + ++count; } }