This patch series fixes the bug where git clean -d culls directories containing only untracked and ignored files, by first teaching read_directory() and read_directory_recursive() to search "untracked" directories (read: directories *treated* as untracked because they only contain untracked and ignored files) for ignored contents, and then teaching cmd_clean() to skip untracked directories containing ignored files. This does, however, introduce a breaking change in the behavior of git status: when invoked with --ignored, git status will now return ignored files in an untracked directory, whereas previously it would not. First patches to the actual C code that I'm sending out! :D Looking forward to feedback - the changes I made in read_directory_recursive() and read_directory() feel a bit hacky, but I'm not sure how to get around that. Samuel Lijin (7): t7300: skip untracked dirs containing ignored files dir: recurse into untracked dirs for ignored files dir: add method to check if a dir_entry lexically contains another dir: hide untracked contents of untracked dirs dir: change linkage of cmp_name() and check_contains() builtin/clean: teach clean -d to skip dirs containing ignored files t7061: check for ignored file in untracked dir builtin/clean.c | 24 ++++++++++++++++-- dir.c | 61 ++++++++++++++++++++++++++++++++++++++++++++-- dir.h | 3 +++ t/t7061-wtstatus-ignore.sh | 1 + t/t7300-clean.sh | 10 ++++++++ 5 files changed, 95 insertions(+), 4 deletions(-) -- 2.12.2