aboutsummaryrefslogtreecommitdiffhomepage
path: root/notmuch-new.c
diff options
context:
space:
mode:
authorGravatar David Bremner <david@tethera.net>2014-04-01 11:06:05 -0300
committerGravatar David Bremner <david@tethera.net>2014-04-12 07:59:44 -0300
commita7eaa4d84a909275fe0c089f8dbf346ebcdc69c6 (patch)
tree0d0f6684e03fb3bdfd551cceae902947033046a0 /notmuch-new.c
parent4c62d9366a389b7ddca796009d1dfe6a885cfde0 (diff)
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.
Diffstat (limited to 'notmuch-new.c')
-rw-r--r--notmuch-new.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/notmuch-new.c b/notmuch-new.c
index 82acf695..d269c7cd 100644
--- a/notmuch-new.c
+++ b/notmuch-new.c
@@ -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,