diff options
author | Antoine Pelisse <apelisse@gmail.com> | 2013-01-06 23:09:39 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-01-07 11:06:29 -0800 |
commit | a45fb697f13bb789aca930ce786cf416ef1ecd0e (patch) | |
tree | 5f0dc7bde88e00f22a7341750f72d9a1e9badd82 /dir.c | |
parent | eb8c5b872ef144add4ac89f85bcddc974ac7114d (diff) | |
download | git-a45fb697f13bb789aca930ce786cf416ef1ecd0e.tar.gz |
status: always report ignored tracked directories
When enumerating paths that are ignored, paths the index knows
about are not included in the result. The "index knows about"
check is done by consulting the name hash, not the actual
contents of the index:
- When core.ignorecase is false, directory names are not in the
name hash, and ignored ones are shown as ignored (directories
can never be tracked anyway).
- When core.ignorecase is true, however, the name hash keeps
track of the names of directories, in order to detect
additions of the paths under different cases. This causes
ignored directories to be mistakenly excluded when
enumerating ignored paths.
Stop excluding directories that are in the name hash when
looking for ignored files in dir_add_name(); the names that are
actually in the index are excluded much earlier in the callchain
in treat_file(), so this fix will not make them mistakenly
identified as ignored.
Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'dir.c')
-rw-r--r-- | dir.c | 9 |
1 files changed, 3 insertions, 6 deletions
@@ -672,7 +672,8 @@ static struct dir_entry *dir_entry_new(const char *pathname, int len) static struct dir_entry *dir_add_name(struct dir_struct *dir, const char *pathname, int len) { - if (cache_name_exists(pathname, len, ignore_case)) + if (!(dir->flags & DIR_SHOW_IGNORED) && + cache_name_exists(pathname, len, ignore_case)) return NULL; ALLOC_GROW(dir->entries, dir->nr+1, dir->alloc); @@ -877,11 +878,7 @@ static int treat_file(struct dir_struct *dir, struct strbuf *path, int exclude, if (exclude) exclude_file = !(dir->flags & DIR_SHOW_IGNORED); else if (dir->flags & DIR_SHOW_IGNORED) { - /* - * Optimization: - * Don't spend time on indexed files, they won't be - * added to the list anyway - */ + /* Always exclude indexed files */ struct cache_entry *ce = index_name_exists(&the_index, path->buf, path->len, ignore_case); |