]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch-new.c
notmuch new: Avoid updating directory timestamp if interrupted.
[notmuch] / notmuch-new.c
index 21c9b6ac95abdb81d9983758ec3b5d7612783644..4adbdc7f60ff4280e7fe2255975afa17bf689a87 100644 (file)
 
 #include <unistd.h>
 
+typedef struct {
+    int output_is_a_tty;
+    int verbose;
+
+    int total_files;
+    int processed_files;
+    int added_messages;
+    struct timeval tv_start;
+} add_files_state_t;
+
 static volatile sig_atomic_t do_add_files_print_progress = 0;
 
 static void
@@ -143,10 +153,13 @@ add_files_recursive (notmuch_database_t *notmuch,
     notmuch_message_t *message = NULL;
     struct dirent **namelist = NULL;
     int num_entries;
+    notmuch_directory_t *directory;
 
     path_mtime = st->st_mtime;
 
-    path_dbtime = notmuch_database_get_timestamp (notmuch, path);
+    directory = notmuch_database_get_directory (notmuch, path);
+    path_dbtime = notmuch_directory_get_mtime (directory);
+
     num_entries = scandir (path, &namelist, 0, ino_cmp);
 
     if (num_entries == -1) {
@@ -277,9 +290,11 @@ add_files_recursive (notmuch_database_t *notmuch,
        next = NULL;
     }
 
-    status = notmuch_database_set_timestamp (notmuch, path, path_mtime);
-    if (status && ret == NOTMUCH_STATUS_SUCCESS)
-       ret = status;
+    if (! interrupted) {
+       status = notmuch_directory_set_mtime (directory, path_mtime);
+       if (status && ret == NOTMUCH_STATUS_SUCCESS)
+           ret = status;
+    }
 
   DONE:
     if (next)
@@ -297,7 +312,7 @@ add_files_recursive (notmuch_database_t *notmuch,
 /* This is the top-level entry point for add_files. It does a couple
  * of error checks, sets up the progress-printing timer and then calls
  * into the recursive function. */
-notmuch_status_t
+static notmuch_status_t
 add_files (notmuch_database_t *notmuch,
           const char *path,
           add_files_state_t *state)