aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Austin Clements <amdragon@mit.edu>2011-02-06 04:28:01 -0500
committerGravatar David Bremner <bremner@debian.org>2011-09-24 20:00:28 -0300
commit191c4ae693c35ecd9e905e64c7619734171c4a8a (patch)
tree6717b2302d40f7021737f80572b17be5a40faa52
parent1353dbe8642ebf5fc7e4ff562bb4b8f3a8e15132 (diff)
new: Cleanup. De-duplicate file name removal code.
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.
-rw-r--r--notmuch-new.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/notmuch-new.c b/notmuch-new.c
index c7dfbb74..455ac103 100644
--- a/notmuch-new.c
+++ b/notmuch-new.c
@@ -724,6 +724,21 @@ upgrade_print_progress (void *closure,
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
@@ -734,7 +749,6 @@ _remove_directory (void *ctx,
{
notmuch_directory_t *directory;
notmuch_filenames_t *files, *subdirs;
- notmuch_status_t status;
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));
- 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);
}
@@ -780,7 +790,6 @@ notmuch_new_command (void *ctx, int argc, char *argv[])
char *dot_notmuch_path;
struct sigaction action;
_filename_node_t *f;
- notmuch_status_t status;
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) {
- 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",