Jameson Miller <jameson.miller81@xxxxxxxxx> writes: > Teach status command to handle matching ignored mode when showing > untracked files with the normal option. > > Signed-off-by: Jameson Miller <jamill@xxxxxxxxxxxxx> > --- > dir.c | 20 ++++++++++++++++++-- > 1 file changed, 18 insertions(+), 2 deletions(-) > > diff --git a/dir.c b/dir.c > index b9af87eca9..8636d080b2 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 we are only want to return directories that > + * match an exclude pattern, and this directories does s/are //; s/directories/directory/ > + * not match an exclude pattern but all 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; The required change to the code is surprisingly small ;-) and it is well explained in the comment. Good job. > case DT_REG: > case DT_LNK: > return exclude ? path_excluded : path_untracked;