aboutsummaryrefslogtreecommitdiff
path: root/notmuch-new.c
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2010-01-05 18:59:18 -0800
committerCarl Worth <cworth@cworth.org>2010-01-06 10:32:06 -0800
commit3fa2385f7cc367725ea74a08237158bd5a4163d7 (patch)
treeca12db2b2bd3add4ba0388ea849313ea63545713 /notmuch-new.c
parent2e96464f9705be4ec772280cad71a6c9d5831e6f (diff)
notmuch new: Proper support for renamed and deleted files.
The "notmuch new" command will now efficiently notice if any files or directories have been removed from the mail store and will appropriately update its database. Any given mail message (as determined by the message ID) may have multiple corresponding filenames, and notmuch will return one of them. When a filen is deleted, the corresponding filename will be removed from the message in the database. When the last filename is removed from a message, that message will be entirely removed from the database. All file additions are handled before any file removals so that rename is supported properly.
Diffstat (limited to 'notmuch-new.c')
-rw-r--r--notmuch-new.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/notmuch-new.c b/notmuch-new.c
index f8fe66a..3f8b7fc 100644
--- a/notmuch-new.c
+++ b/notmuch-new.c
@@ -629,11 +629,28 @@ notmuch_new_command (void *ctx, int argc, char *argv[])
ret = add_files (notmuch, db_path, &add_files_state);
for (f = add_files_state.removed_files->head; f; f = f->next) {
- printf ("Detected removed file: %s\n", f->filename);
+ notmuch_database_remove_message (notmuch, f->filename);
}
for (f = add_files_state.removed_directories->head; f; f = f->next) {
- printf ("Detected removed directory: %s\n", f->filename);
+ notmuch_directory_t *directory;
+ notmuch_filenames_t *files;
+
+ directory = notmuch_database_get_directory (notmuch, f->filename);
+
+ for (files = notmuch_directory_get_child_files (directory);
+ notmuch_filenames_has_more (files);
+ notmuch_filenames_advance (files))
+ {
+ char *absolute;
+
+ absolute = talloc_asprintf (ctx, "%s/%s", f->filename,
+ notmuch_filenames_get (files));
+ notmuch_database_remove_message (notmuch, absolute);
+ talloc_free (absolute);
+ }
+
+ notmuch_directory_destroy (directory);
}
talloc_free (add_files_state.removed_files);