dir.c: git-ls-files --directories: don't hide empty directories

'git-ls-files --ignored --directories' hides empty directories even though --no-empty-directory was not specified. Treat the DIR_HIDE_EMPTY_DIRECTORIES flag independently from DIR_SHOW_IGNORED to make all git-ls-files options work as expected. Signed-off-by: Karsten Blees <blees@dcon.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Karsten Blees committed Apr 15, 2013 at 21:08 UTC 184d2a8e964d721c20775026308fcf63d57c0b4d
3 files changed +26 -5
dir.c
+2 -4
@@ -1120,15 +1120,13 @@ static enum directory_treatment treat_directory(struct dir_struct *dir,
1120 if ((dir->flags & DIR_SHOW_IGNORED) && !exclude) {
1121 int ignored;
1122 dir->flags &= ~DIR_SHOW_IGNORED;
1123 - dir->flags |= DIR_HIDE_EMPTY_DIRECTORIES;
1123 ignored = read_directory_recursive(dir, dirname, len, 1, simplify);
1125 - dir->flags &= ~DIR_HIDE_EMPTY_DIRECTORIES;
1124 dir->flags |= DIR_SHOW_IGNORED;
1125
1126 return ignored ? ignore_directory : show_directory;
1127 }
1130 - if (!(dir->flags & DIR_SHOW_IGNORED) &&
1131 - !(dir->flags & DIR_HIDE_EMPTY_DIRECTORIES))
1128 +
1129 + if (!(dir->flags & DIR_HIDE_EMPTY_DIRECTORIES))
1130 return show_directory;
1131 if (!read_directory_recursive(dir, dirname, len, 1, simplify))
1132 return ignore_directory;
t/t3001-ls-files-others-exclude.sh
+23
@@ -214,6 +214,29 @@ test_expect_success 'subdirectory ignore (l1)' '
214 test_cmp expect actual
215 '
216
217 +test_expect_success 'show/hide empty ignored directory (setup)' '
218 + rm top/l1/l2/l1 &&
219 + rm top/l1/.gitignore
220 +'
221 +
222 +test_expect_success 'show empty ignored directory with --directory' '
223 + (
224 + cd top &&
225 + git ls-files -o -i --exclude l1 --directory
226 + ) >actual &&
227 + echo l1/ >expect &&
228 + test_cmp expect actual
229 +'
230 +
231 +test_expect_success 'hide empty ignored directory with --no-empty-directory' '
232 + (
233 + cd top &&
234 + git ls-files -o -i --exclude l1 --directory --no-empty-directory
235 + ) >actual &&
236 + >expect &&
237 + test_cmp expect actual
238 +'
239 +
240 test_expect_success 'pattern matches prefix completely' '
241 : >expect &&
242 git ls-files -i -o --exclude "/three/a.3[abc]" >actual &&
wt-status.c
+1 -1
@@ -526,7 +526,7 @@ static void wt_status_collect_untracked(struct wt_status *s)
526 dir.nr = 0;
527 dir.flags = DIR_SHOW_IGNORED;
528 if (s->show_untracked_files != SHOW_ALL_UNTRACKED_FILES)
529 - dir.flags |= DIR_SHOW_OTHER_DIRECTORIES;
529 + dir.flags |= DIR_SHOW_OTHER_DIRECTORIES | DIR_HIDE_EMPTY_DIRECTORIES;
530 fill_directory(&dir, s->pathspec);
531 for (i = 0; i < dir.nr; i++) {
532 struct dir_entry *ent = dir.entries[i];