dir.c: git-status --ignored: don't list files in ignored directories
authorKarsten Blees <karsten.blees@gmail.com>
Mon, 15 Apr 2013 19:06:30 +0000 (21:06 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 15 Apr 2013 19:33:58 +0000 (12:33 -0700)
'git-status --ignored' lists both the ignored directory and the ignored
files if the files are in a tracked sub directory.

When recursing into sub directories in read_directory_recursive, pass on
the check_only parameter so that we don't accidentally add the 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 dc3a50baf6e40cd91f4811a73618d452c69ef6ee..248cfea39fc8dcefffe53a53b140dfc82ed31c70 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -1317,7 +1317,6 @@ static enum path_treatment treat_one_path(struct dir_struct *dir,
                return path_ignored;
        case DT_DIR:
                strbuf_addch(path, '/');
-
                switch (treat_directory(dir, path->buf, path->len, exclude, simplify)) {
                case show_directory:
                        break;
@@ -1387,8 +1386,7 @@ static int read_directory_recursive(struct dir_struct *dir,
                switch (treat_path(dir, de, &path, baselen, simplify)) {
                case path_recurse:
                        contents += read_directory_recursive(dir, path.buf,
-                                                            path.len, 0,
-                                                            simplify);
+                               path.len, check_only, simplify);
                        continue;
                case path_ignored:
                        continue;
index 0f1034ed50de0467db444107b867df5629179ce5..4ece1292b493bebe70921b80e98b96b93d8b891c 100755 (executable)
@@ -170,4 +170,31 @@ test_expect_success 'status ignored tracked directory with uncommitted file in u
        test_cmp expected actual
 '
 
+cat >expected <<\EOF
+?? .gitignore
+?? actual
+?? expected
+!! tracked/
+EOF
+
+test_expect_success 'status ignored tracked directory with uncommitted file in tracked subdir with --ignore' '
+       : >tracked/ignored/committed &&
+       git add -f tracked/ignored/committed &&
+       git commit -m. &&
+       git status --porcelain --ignored >actual &&
+       test_cmp expected actual
+'
+
+cat >expected <<\EOF
+?? .gitignore
+?? actual
+?? expected
+!! tracked/ignored/uncommitted
+EOF
+
+test_expect_success 'status ignored tracked directory with uncommitted file in tracked subdir with --ignore -u' '
+       git status --porcelain --ignored -u >actual &&
+       test_cmp expected actual
+'
+
 test_done