From e307e990c9394b6426e55b28c748c265358a1c89 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Thu, 7 Jan 2010 18:30:32 -0800 Subject: [PATCH] notmuch new: Automatically upgrade the database if necessary. This takes advantage of the recently added library support to detect if the database needs to be upgraded and then automatically performs that upgrade, (with a nice progress report). --- notmuch-new.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/notmuch-new.c b/notmuch-new.c index 739ca118..0d06253d 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -616,6 +616,28 @@ count_files (const char *path, int *count) free (fs_entries); } +static void +upgrade_print_progress (void *closure, + unsigned int count, + unsigned int total) +{ + add_files_state_t *state = closure; + struct timeval tv_now; + double elapsed_overall, rate_overall, time_remaining; + + gettimeofday (&tv_now, NULL); + + elapsed_overall = notmuch_time_elapsed (state->tv_start, tv_now); + rate_overall = count / elapsed_overall; + time_remaining = ((total - count) / rate_overall); + + printf ("Upgraded %d of %d messages (", count, total); + notmuch_time_print_formatted_seconds (time_remaining); + printf (" remaining). \r"); + + fflush (stdout); +} + /* Recursively remove all filenames from the database referring to * 'path' (or to any of its children). */ static void @@ -718,6 +740,18 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) } else { notmuch = notmuch_database_open (db_path, NOTMUCH_DATABASE_MODE_READ_WRITE); + if (notmuch == NULL) + return 1; + + if (notmuch_database_needs_upgrade (notmuch)) { + printf ("Welcome to a new version of notmuch! Your database will now be upgraded.\n"); + gettimeofday (&add_files_state.tv_start, NULL); + notmuch_database_upgrade (notmuch, upgrade_print_progress, + &add_files_state); + printf ("Your notmuch database has now been upgraded to database format version %u.\n", + notmuch_database_get_version (notmuch)); + } + add_files_state.total_files = 0; } -- 2.26.2