diff options
-rw-r--r-- | notmuch-new.c | 26 | ||||
-rwxr-xr-x | test/new | 6 |
2 files changed, 20 insertions, 12 deletions
diff --git a/notmuch-new.c b/notmuch-new.c index 56c4a6fd..718a5387 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -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); @@ -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) |