dir.c: git-ls-files --directories: don't hide empty directories
authorKarsten Blees <karsten.blees@gmail.com>
Mon, 15 Apr 2013 19:08:02 +0000 (21:08 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 15 Apr 2013 19:33:59 +0000 (12:33 -0700)
'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>
dir.c
t/t3001-ls-files-others-exclude.sh
wt-status.c
diff --git a/dir.c b/dir.c
index 4723cd537df8f546546d620b8924a800321f557c..15d7277a0281bdaf631b2b3cc49dcfbe2ae0fa04 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -1120,15 +1120,13 @@ static enum directory_treatment treat_directory(struct dir_struct *dir,
        if ((dir->flags & DIR_SHOW_IGNORED) && !exclude) {
                int ignored;
                dir->flags &= ~DIR_SHOW_IGNORED;
-               dir->flags |= DIR_HIDE_EMPTY_DIRECTORIES;
                ignored = read_directory_recursive(dir, dirname, len, 1, simplify);
-               dir->flags &= ~DIR_HIDE_EMPTY_DIRECTORIES;
                dir->flags |= DIR_SHOW_IGNORED;
 
                return ignored ? ignore_directory : show_directory;
        }
-       if (!(dir->flags & DIR_SHOW_IGNORED) &&
-           !(dir->flags & DIR_HIDE_EMPTY_DIRECTORIES))
+
+       if (!(dir->flags & DIR_HIDE_EMPTY_DIRECTORIES))
                return show_directory;
        if (!read_directory_recursive(dir, dirname, len, 1, simplify))
                return ignore_directory;
index efb7ebc91f2f46b38e0c02f4dd11e2224678baea..859da350ab16f0087074971f3debae33f9e57956 100755 (executable)
@@ -214,6 +214,29 @@ test_expect_success 'subdirectory ignore (l1)' '
        test_cmp expect actual
 '
 
+test_expect_success 'show/hide empty ignored directory (setup)' '
+       rm top/l1/l2/l1 &&
+       rm top/l1/.gitignore
+'
+
+test_expect_success 'show empty ignored directory with --directory' '
+       (
+               cd top &&
+               git ls-files -o -i --exclude l1 --directory
+       ) >actual &&
+       echo l1/ >expect &&
+       test_cmp expect actual
+'
+
+test_expect_success 'hide empty ignored directory with --no-empty-directory' '
+       (
+               cd top &&
+               git ls-files -o -i --exclude l1 --directory --no-empty-directory
+       ) >actual &&
+       >expect &&
+       test_cmp expect actual
+'
+
 test_expect_success 'pattern matches prefix completely' '
        : >expect &&
        git ls-files -i -o --exclude "/three/a.3[abc]" >actual &&
index ec5f27c5992e5fec5fb54384a04ffacf1745ce4a..676b058e59541b5fab0322f29cc6ef65babc1d60 100644 (file)
@@ -526,7 +526,7 @@ static void wt_status_collect_untracked(struct wt_status *s)
                dir.nr = 0;
                dir.flags = DIR_SHOW_IGNORED;
                if (s->show_untracked_files != SHOW_ALL_UNTRACKED_FILES)
-                       dir.flags |= DIR_SHOW_OTHER_DIRECTORIES;
+                       dir.flags |= DIR_SHOW_OTHER_DIRECTORIES | DIR_HIDE_EMPTY_DIRECTORIES;
                fill_directory(&dir, s->pathspec);
                for (i = 0; i < dir.nr; i++) {
                        struct dir_entry *ent = dir.entries[i];