notmuch-new: backup tags before database upgrade

All we do here is calculate the backup filename, and call the existing
dump routine.

Also take the opportunity to add a message about being safe to
interrupt.
This commit is contained in:
David Bremner 2014-04-01 11:06:05 -03:00
parent 4c62d9366a
commit a7eaa4d84a
2 changed files with 31 additions and 2 deletions

View file

@ -989,8 +989,35 @@ notmuch_new_command (notmuch_config_t *config, int argc, char *argv[])
return EXIT_FAILURE;
if (notmuch_database_needs_upgrade (notmuch)) {
if (add_files_state.verbosity >= VERBOSITY_NORMAL)
time_t now = time (NULL);
struct tm *gm_time = gmtime (&now);
/* since dump files are written atomically, the amount of
* harm from overwriting one within a second seems
* relatively small. */
const char *backup_name =
talloc_asprintf (notmuch, "%s/dump-%04d%02d%02dT%02d%02d%02d.gz",
dot_notmuch_path,
gm_time->tm_year + 1900,
gm_time->tm_mon + 1,
gm_time->tm_mday,
gm_time->tm_hour,
gm_time->tm_min,
gm_time->tm_sec);
if (add_files_state.verbosity >= VERBOSITY_NORMAL) {
printf ("Welcome to a new version of notmuch! Your database will now be upgraded.\n");
printf ("This process is safe to interrupt.\n");
printf ("Backing up tags to %s...\n", backup_name);
}
if (notmuch_database_dump (notmuch, backup_name, "",
DUMP_FORMAT_BATCH_TAG, TRUE)) {
fprintf (stderr, "Backup failed. Aborting upgrade.");
return EXIT_FAILURE;
}
gettimeofday (&add_files_state.tv_start, NULL);
notmuch_database_upgrade (notmuch,
add_files_state.verbosity >= VERBOSITY_NORMAL ? upgrade_print_progress : NULL,

View file

@ -26,9 +26,11 @@ output=$(notmuch search path:foo)
test_expect_equal "$output" ""
test_begin_subtest "database upgrade from format version 1"
output=$(notmuch new)
output=$(notmuch new | sed -e 's/^Backing up tags to .*$/Backing up tags to FILENAME/')
test_expect_equal "$output" "\
Welcome to a new version of notmuch! Your database will now be upgraded.
This process is safe to interrupt.
Backing up tags to FILENAME
Your notmuch database has now been upgraded to database format version 2.
No new mail."