mirror of
https://git.notmuchmail.org/git/notmuch
synced 2025-01-03 07:11:41 +01:00
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).
This commit is contained in:
parent
909f52bd8c
commit
e307e990c9
1 changed files with 34 additions and 0 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue