new: Cleanup. De-duplicate file name removal code.
authorAustin Clements <amdragon@mit.edu>
Sun, 6 Feb 2011 09:28:01 +0000 (04:28 -0500)
committerDavid Bremner <bremner@debian.org>
Sat, 24 Sep 2011 23:00:28 +0000 (20:00 -0300)
Previously, file name removal was implemented identically in two
places.  Now it's captured in one function.

This is important because file name removal is about to get slightly
more complicated with eager tag synchronization and correct removal
atomicity.

notmuch-new.c

index c7dfbb748fb9d50f878795acaabedae22677a383..455ac10323f4c28c34f0bba5b5fcc3e9336c5fda 100644 (file)
@@ -724,6 +724,21 @@ upgrade_print_progress (void *closure,
     fflush (stdout);
 }
 
     fflush (stdout);
 }
 
+/* Remove one message filename from the database. */
+static notmuch_status_t
+remove_filename (notmuch_database_t *notmuch,
+                const char *path,
+                add_files_state_t *add_files_state)
+{
+    notmuch_status_t status;
+    status = notmuch_database_remove_message (notmuch, path);
+    if (status == NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID)
+       add_files_state->renamed_messages++;
+    else
+       add_files_state->removed_messages++;
+    return status;
+}
+
 /* Recursively remove all filenames from the database referring to
  * 'path' (or to any of its children). */
 static void
 /* Recursively remove all filenames from the database referring to
  * 'path' (or to any of its children). */
 static void
@@ -734,7 +749,6 @@ _remove_directory (void *ctx,
 {
     notmuch_directory_t *directory;
     notmuch_filenames_t *files, *subdirs;
 {
     notmuch_directory_t *directory;
     notmuch_filenames_t *files, *subdirs;
-    notmuch_status_t status;
     char *absolute;
 
     directory = notmuch_database_get_directory (notmuch, path);
     char *absolute;
 
     directory = notmuch_database_get_directory (notmuch, path);
@@ -745,11 +759,7 @@ _remove_directory (void *ctx,
     {
        absolute = talloc_asprintf (ctx, "%s/%s", path,
                                    notmuch_filenames_get (files));
     {
        absolute = talloc_asprintf (ctx, "%s/%s", path,
                                    notmuch_filenames_get (files));
-       status = notmuch_database_remove_message (notmuch, absolute);
-       if (status == NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID)
-           add_files_state->renamed_messages++;
-       else
-           add_files_state->removed_messages++;
+       remove_filename (notmuch, absolute, add_files_state);
        talloc_free (absolute);
     }
 
        talloc_free (absolute);
     }
 
@@ -780,7 +790,6 @@ notmuch_new_command (void *ctx, int argc, char *argv[])
     char *dot_notmuch_path;
     struct sigaction action;
     _filename_node_t *f;
     char *dot_notmuch_path;
     struct sigaction action;
     _filename_node_t *f;
-    notmuch_status_t status;
     int i;
     notmuch_bool_t timer_is_active = FALSE;
 
     int i;
     notmuch_bool_t timer_is_active = FALSE;
 
@@ -869,11 +878,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[])
 
     gettimeofday (&tv_start, NULL);
     for (f = add_files_state.removed_files->head; f && !interrupted; f = f->next) {
 
     gettimeofday (&tv_start, NULL);
     for (f = add_files_state.removed_files->head; f && !interrupted; f = f->next) {
-       status = notmuch_database_remove_message (notmuch, f->filename);
-       if (status == NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID)
-           add_files_state.renamed_messages++;
-       else
-           add_files_state.removed_messages++;
+       remove_filename (notmuch, f->filename, &add_files_state);
        if (do_print_progress) {
            do_print_progress = 0;
            generic_print_progress ("Cleaned up", "messages",
        if (do_print_progress) {
            do_print_progress = 0;
            generic_print_progress ("Cleaned up", "messages",