mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
new: Skip ignored broken symlinks
We now test for user ignore patterns before attempting to determine if a directory entry is itself a directory. As a result, we no longer abort for broken symlinks if the user has explicitly ignored them. This fixes the test added in the previous patch. It also slightly changes the debug output checked by another test of ignores.
This commit is contained in:
parent
f5d65615bb
commit
7611a72be2
2 changed files with 20 additions and 12 deletions
|
@ -350,6 +350,18 @@ add_files (notmuch_database_t *notmuch,
|
|||
|
||||
entry = fs_entries[i];
|
||||
|
||||
/* Ignore any files/directories the user has configured to
|
||||
* ignore. We do this before dirent_type both for performance
|
||||
* and because we don't care if dirent_type fails on entries
|
||||
* that are explicitly ignored.
|
||||
*/
|
||||
if (_entry_in_ignore_list (entry->d_name, state)) {
|
||||
if (state->debug)
|
||||
printf ("(D) add_files_recursive, pass 1: explicitly ignoring %s/%s\n",
|
||||
path, entry->d_name);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* We only want to descend into directories (and symlinks to
|
||||
* directories). */
|
||||
entry_type = dirent_type (path, entry);
|
||||
|
@ -364,22 +376,14 @@ add_files (notmuch_database_t *notmuch,
|
|||
}
|
||||
|
||||
/* Ignore special directories to avoid infinite recursion.
|
||||
* Also ignore the .notmuch directory, any "tmp" directory
|
||||
* that appears within a maildir and files/directories
|
||||
* the user has configured to be ignored.
|
||||
* Also ignore the .notmuch directory and any "tmp" directory
|
||||
* that appears within a maildir.
|
||||
*/
|
||||
if (strcmp (entry->d_name, ".") == 0 ||
|
||||
strcmp (entry->d_name, "..") == 0 ||
|
||||
(is_maildir && strcmp (entry->d_name, "tmp") == 0) ||
|
||||
strcmp (entry->d_name, ".notmuch") == 0 ||
|
||||
_entry_in_ignore_list (entry->d_name, state))
|
||||
{
|
||||
if (_entry_in_ignore_list (entry->d_name, state) && state->debug)
|
||||
printf ("(D) add_files_recursive, pass 1: explicitly ignoring %s/%s\n",
|
||||
path,
|
||||
entry->d_name);
|
||||
strcmp (entry->d_name, ".notmuch") == 0)
|
||||
continue;
|
||||
}
|
||||
|
||||
next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name);
|
||||
status = add_files (notmuch, next, state);
|
||||
|
|
6
test/new
6
test/new
|
@ -225,7 +225,12 @@ touch "${MAIL_DIR}"/{one,one/two,one/two/three}/ignored_file
|
|||
output=$(NOTMUCH_NEW --debug 2>&1 | sort)
|
||||
test_expect_equal "$output" \
|
||||
"(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/.git
|
||||
(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/.ignored_hidden_file
|
||||
(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/ignored_file
|
||||
(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/one/ignored_file
|
||||
(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/one/two/ignored_file
|
||||
(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/one/two/three/.git
|
||||
(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/one/two/three/ignored_file
|
||||
(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/.git
|
||||
(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/.ignored_hidden_file
|
||||
(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/ignored_file
|
||||
|
@ -237,7 +242,6 @@ No new mail."
|
|||
|
||||
|
||||
test_begin_subtest "Don't stop for ignored broken symlinks"
|
||||
test_subtest_known_broken
|
||||
notmuch config set new.ignore .git ignored_file .ignored_hidden_file broken_link
|
||||
ln -s i_do_not_exist "${MAIL_DIR}"/broken_link
|
||||
output=$(NOTMUCH_NEW 2>&1)
|
||||
|
|
Loading…
Reference in a new issue