From: Carl Worth Date: Sun, 5 Dec 2010 09:40:16 +0000 (-0800) Subject: notmuch new: Scan directory whenever fs mtime is not equal to db mtime X-Git-Tag: debian/0.6_254~235 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=73198f5c7409e530279f5dd2d4caa415358e8237;p=notmuch.git notmuch new: Scan directory whenever fs mtime is not equal to db mtime 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. --- diff --git a/notmuch-new.c b/notmuch-new.c index 4f3e52fb..cdf85135 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -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. */