cli: reset db directory mtime upon directory removal
authorJani Nikula <jani@nikula.org>
Sat, 5 Sep 2015 09:35:31 +0000 (12:35 +0300)
committerDavid Bremner <david@tethera.net>
Mon, 7 Sep 2015 12:28:00 +0000 (09:28 -0300)
The library does not have a function to remove a directory document
for a path. Usually this doesn't matter except for a slight waste of
space. However, if the same directory gets added to the filesystem
again, the old directory document is found with the old mtime. Reset
the directory mtime on removal to avoid problems.

The corner case that can hit this problem is renaming directories back
and forth. Renaming does not change the mtime of the directory in the
filesystem, and thus the old db directory document mtime may match the
fs mtime of the directory.

The long term fix might be to add a library function to remove a
directory document, however this is a much simpler and faster fix for
the time being.

notmuch-new.c

index 514e06a4d1f31326a805d1cabef4fb6631ab4b9d..33645349cd5fd8abdb5936e185b5f5c70d529c08 100644 (file)
@@ -878,6 +878,15 @@ _remove_directory (void *ctx,
            goto DONE;
     }
 
+    /*
+     * XXX: The library does not have a function to remove a directory
+     * document for a path. Usually this doesn't matter except for a
+     * slight waste of space. However, if the directory gets added to
+     * the filesystem again, the old directory document is found with
+     * the old mtime. Reset the directory mtime to avoid problems.
+     */
+    notmuch_directory_set_mtime (directory, 0);
+
   DONE:
     notmuch_directory_destroy (directory);
     return status;