notmuch new: Scan directory whenever fs mtime is not equal to db mtime
authorCarl Worth <cworth@cworth.org>
Sun, 5 Dec 2010 09:40:16 +0000 (01:40 -0800)
committerCarl Worth <cworth@cworth.org>
Sun, 5 Dec 2010 09:40:16 +0000 (01:40 -0800)
Previously, we would only scan a directory if the filesystem
modification time was strictly newer than the database modification
time for the directory. This would cause a problem for systems with an
unstable clock, (if a new mail was added to the filesystem, then the
system clock rolled backward, "notmuch new" would not find the message
until the clock caught up and the directory was modified again).

Now, we always scan the directory if the modification time of the
directory is not exactly the same between the filesystem and the
database. This avoids the problem described above even with an
unstable system clock.

notmuch-new.c

index 4f3e52fb455832398a7940d0dc4ec80448155334..cdf8513537f7a7c6eb19251f77695d1fc1e90a78 100644 (file)
@@ -308,9 +308,16 @@ add_files_recursive (notmuch_database_t *notmuch,
        next = NULL;
     }
 
-    /* If this directory hasn't been modified since the last
-     * "notmuch new", then we can skip the second pass entirely. */
-    if (fs_mtime <= db_mtime)
+    /* If the directory's modification time in the filesystem is the
+     * same as what we recorded in the database the last time we
+     * scanned it, then we can skip the second pass entirely.
+     *
+     * We test for strict equality here to avoid a bug that can happen
+     * if the system clock jumps backward, (preventing new mail from
+     * being discovered until the clock catches up and the directory
+     * is modified again).
+     */
+    if (fs_mtime == db_mtime)
        goto DONE;
 
     /* Pass 2: Scan for new files, removed files, and removed directories. */