summaryrefslogtreecommitdiff
path: root/dir.c
diff options
context:
space:
mode:
authorJameson Miller <jamill@microsoft.com>2017-10-30 17:21:38 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-10-31 02:54:21 (GMT)
commit07966ed19ed6936442bdb9cf40f315369e78bd0d (patch)
tree6d132ec4f524323c689e4054c0fe9631b7b96d6c /dir.c
parenteec0f7f2b7532f4ec74461f969701911b8876162 (diff)
downloadgit-07966ed19ed6936442bdb9cf40f315369e78bd0d.zip
git-07966ed19ed6936442bdb9cf40f315369e78bd0d.tar.gz
git-07966ed19ed6936442bdb9cf40f315369e78bd0d.tar.bz2
status: report matching ignored and normal untracked
Teach status command to handle `--ignored=matching` with `--untracked-files=normal` Signed-off-by: Jameson Miller <jamill@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'dir.c')
-rw-r--r--dir.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/dir.c b/dir.c
index b9af87e..2045772 100644
--- a/dir.c
+++ b/dir.c
@@ -1585,6 +1585,7 @@ static enum path_treatment treat_one_path(struct dir_struct *dir,
{
int exclude;
int has_path_in_index = !!index_file_exists(istate, path->buf, path->len, ignore_case);
+ enum path_treatment path_treatment;
if (dtype == DT_UNKNOWN)
dtype = get_dtype(de, istate, path->buf, path->len);
@@ -1631,8 +1632,23 @@ static enum path_treatment treat_one_path(struct dir_struct *dir,
return path_none;
case DT_DIR:
strbuf_addch(path, '/');
- return treat_directory(dir, istate, untracked, path->buf, path->len,
- baselen, exclude, pathspec);
+ path_treatment = treat_directory(dir, istate, untracked,
+ path->buf, path->len,
+ baselen, exclude, pathspec);
+ /*
+ * If 1) we only want to return directories that
+ * match an exclude pattern and 2) this directory does
+ * not match an exclude pattern but all of its
+ * contents are excluded, then indicate that we should
+ * recurse into this directory (instead of marking the
+ * directory itself as an ignored path).
+ */
+ if (!exclude &&
+ path_treatment == path_excluded &&
+ (dir->flags & DIR_SHOW_IGNORED_TOO) &&
+ (dir->flags & DIR_SHOW_IGNORED_TOO_MODE_MATCHING))
+ return path_recurse;
+ return path_treatment;
case DT_REG:
case DT_LNK:
return exclude ? path_excluded : path_untracked;