mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-25 10:54:52 +01:00
notmuch new: Fix bug resulting in file removal on initial build of database.
The bug here was that we would see that the database did not know anything about a directory so would get results from the filesystem in inode rather than strcmp order. However, we wouldn't actually ask for the list of files from the database until after recursing into the sub-directories. So by the time we traverse the filenames looking for deletions, the database *does* have entries and we end up detecting erroneous deletions because our filename list from the filesystem isn't in strcmp order. So ask for the list of names from the database before doing any additions to avoid this problem.
This commit is contained in:
parent
59c09623c8
commit
7d8271dd9d
1 changed files with 2 additions and 3 deletions
|
@ -239,6 +239,8 @@ add_files_recursive (notmuch_database_t *notmuch,
|
|||
|
||||
directory = notmuch_database_get_directory (notmuch, path);
|
||||
db_mtime = notmuch_directory_get_mtime (directory);
|
||||
db_files = notmuch_directory_get_child_files (directory);
|
||||
db_subdirs = notmuch_directory_get_child_directories (directory);
|
||||
|
||||
/* If the database knows about this directory, then we sort based
|
||||
* on strcmp to match the database sorting. Otherwise, we can do
|
||||
|
@ -294,9 +296,6 @@ add_files_recursive (notmuch_database_t *notmuch,
|
|||
goto DONE;
|
||||
|
||||
/* Pass 2: Scan for new files, removed files, and removed directories. */
|
||||
db_files = notmuch_directory_get_child_files (directory);
|
||||
db_subdirs = notmuch_directory_get_child_directories (directory);
|
||||
|
||||
for (i = 0; i < num_fs_entries; i++)
|
||||
{
|
||||
if (interrupted)
|
||||
|
|
Loading…
Reference in a new issue