aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/database.cc
diff options
context:
space:
mode:
authorGravatar Austin Clements <amdragon@mit.edu>2014-08-25 13:26:06 -0400
committerGravatar David Bremner <david@tethera.net>2014-08-30 11:36:08 -0700
commit02fec226fcb02a5c784f4322365b979639b37c76 (patch)
treedca1fc249fa906d5f1e5094a4065ff229681301e /lib/database.cc
parente0635bd003244ae8b88a885e2e5f23c9104ed164 (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/database.cc')
-rw-r--r--lib/database.cc17
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;
}
}