diff options
author | Austin Clements <amdragon@mit.edu> | 2014-08-25 13:26:06 -0400 |
---|---|---|
committer | David Bremner <david@tethera.net> | 2014-08-30 11:36:08 -0700 |
commit | 02fec226fcb02a5c784f4322365b979639b37c76 (patch) | |
tree | dca1fc249fa906d5f1e5094a4065ff229681301e /lib | |
parent | e0635bd003244ae8b88a885e2e5f23c9104ed164 (diff) |
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.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/database.cc | 17 |
1 files 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; } } |