summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Lijin <sxlijin@gmail.com>2017-05-18 04:21:51 -0400
committerJunio C Hamano <gitster@pobox.com>2017-05-22 12:06:52 +0900
commitdf5bcdf83aeb94718602ebc8c0f597166bb493f1 (patch)
treea87b7017d396ee38a7ea30dd49f7e8a3436fc3d7
parent0a81d4a55917514091727696a09ac649d03b57ff (diff)
downloadgit-df5bcdf83aeb94718602ebc8c0f597166bb493f1.tar.gz
dir: recurse into untracked dirs for ignored files
We consider directories containing only untracked and ignored files to be themselves untracked, which in the usual case means we don't have to search these directories. This is problematic when we want to collect ignored files with DIR_SHOW_IGNORED_TOO, though, so we teach read_directory_recursive() to recurse into untracked directories to find the ignored files they contain when DIR_SHOW_IGNORED_TOO is set. This has the side effect of also collecting all untracked files in untracked directories as well. Signed-off-by: Samuel Lijin <sxlijin@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--dir.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/dir.c b/dir.c
index aeeb5ce104..6b4eeef584 100644
--- a/dir.c
+++ b/dir.c
@@ -1747,7 +1747,10 @@ static enum path_treatment read_directory_recursive(struct dir_struct *dir,
dir_state = state;
/* recurse into subdir if instructed by treat_path */
- if (state == path_recurse) {
+ if ((state == path_recurse) ||
+ ((state == path_untracked) &&
+ (dir->flags & DIR_SHOW_IGNORED_TOO) &&
+ (get_dtype(cdir.de, path.buf, path.len) == DT_DIR))) {
struct untracked_cache_dir *ud;
ud = lookup_untracked(dir->untracked, untracked,
path.buf + baselen,