dir.c: git-status --ignored: don't list empty ignored directories
authorKarsten Blees <karsten.blees@gmail.com>
Mon, 15 Apr 2013 19:07:16 +0000 (21:07 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 15 Apr 2013 19:33:58 +0000 (12:33 -0700)
'git-status --ignored' lists ignored tracked directories without any
ignored files if a tracked file happens to match an exclude pattern.

Always exclude tracked files.

Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
dir.c
t/t7061-wtstatus-ignore.sh
diff --git a/dir.c b/dir.c
index 248cfea39fc8dcefffe53a53b140dfc82ed31c70..4723cd537df8f546546d620b8924a800321f557c 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -1153,16 +1153,13 @@ static int treat_file(struct dir_struct *dir, struct strbuf *path, int exclude,
        struct path_exclude_check check;
        int exclude_file = 0;
 
+       /* Always exclude indexed files */
+       if (index_name_exists(&the_index, path->buf, path->len, ignore_case))
+               return 1;
+
        if (exclude)
                exclude_file = !(dir->flags & DIR_SHOW_IGNORED);
        else if (dir->flags & DIR_SHOW_IGNORED) {
-               /* Always exclude indexed files */
-               struct cache_entry *ce = index_name_exists(&the_index,
-                   path->buf, path->len, ignore_case);
-
-               if (ce)
-                       return 1;
-
                path_exclude_check_init(&check, dir);
 
                if (!is_path_excluded(&check, path->buf, path->len, dtype))
index 4ece1292b493bebe70921b80e98b96b93d8b891c..28b7d957a5268837e2789e2b490d552fbceae5cc 100755 (executable)
@@ -118,6 +118,29 @@ test_expect_success 'status ignored tracked directory with --ignore -u' '
        test_cmp expected actual
 '
 
+cat >expected <<\EOF
+?? .gitignore
+?? actual
+?? expected
+EOF
+
+test_expect_success 'status ignored tracked directory and ignored file with --ignore' '
+       echo "committed" >>.gitignore &&
+       git status --porcelain --ignored >actual &&
+       test_cmp expected actual
+'
+
+cat >expected <<\EOF
+?? .gitignore
+?? actual
+?? expected
+EOF
+
+test_expect_success 'status ignored tracked directory and ignored file with --ignore -u' '
+       git status --porcelain --ignored -u >actual &&
+       test_cmp expected actual
+'
+
 cat >expected <<\EOF
 ?? .gitignore
 ?? actual
@@ -126,6 +149,7 @@ cat >expected <<\EOF
 EOF
 
 test_expect_success 'status ignored tracked directory and uncommitted file with --ignore' '
+       echo "tracked" >.gitignore &&
        : >tracked/uncommitted &&
        git status --porcelain --ignored >actual &&
        test_cmp expected actual