git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 4/8] dir.c: git-status --ignored: don't list empty directories as ignored

From
Karsten Blees <karsten.blees@gmail.com>
Date
Mar 18, 2013, 20:28 UTC
Message-ID
<51477901.9020804@gmail.com>
In-Reply-To
<514775FA.9080304@gmail.com>

'git-status --ignored' lists empty untracked directories as ignored, even though they don't have any ignored files.

When checking if a directory is already listed as untracked (i.e. shouldn't be listed as ignored as well), don't assume that the dirctory has only ignored files if it doesn't have untracked files, as the directory may be empty.

Signed-off-by: Karsten Blees <blees@dcon.de>
---
 dir.c                      | 17 ++++++++---------
 t/t7061-wtstatus-ignore.sh | 26 ++++++++++++++++++++++++--
 2 files changed, 32 insertions(+), 11 deletions(-)
diff --git a/dir.c b/dir.c
index fd1f088..64457db 100644
--- a/dir.c
+++ b/dir.c
@@ -1071,17 +1071,16 @@ static enum directory_treatment treat_directory(struct dir_struct *dir,
 
 	/*
 	 * We are looking for ignored files and our directory is not ignored,
-	 * check if it contains only ignored files
+	 * check if it contains untracked files (i.e. is listed as untracked)
 	 */
 	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;
+		int untracked;
+		dir->flags &= ~(DIR_SHOW_IGNORED|DIR_SHOW_OTHER_DIRECTORIES);
+		untracked = read_directory_recursive(dir, dirname, len, 1, simplify);
+		dir->flags |= DIR_SHOW_IGNORED|DIR_SHOW_OTHER_DIRECTORIES;
+
+		if (untracked)
+			return ignore_directory;
 	}
 	if (!(dir->flags & DIR_SHOW_IGNORED) &&
 	    !(dir->flags & DIR_HIDE_EMPTY_DIRECTORIES))
diff --git a/t/t7061-wtstatus-ignore.sh b/t/t7061-wtstatus-ignore.sh
index 28b7d95..6171a49 100755
--- a/t/t7061-wtstatus-ignore.sh
+++ b/t/t7061-wtstatus-ignore.sh
@@ -64,13 +64,35 @@ cat >expected <<\EOF
 ?? .gitignore
 ?? actual
 ?? expected
-!! untracked-ignored/
 EOF
 
-test_expect_success 'status untracked directory with ignored files with --ignore' '
+test_expect_success 'status empty untracked directory with --ignore' '
 	rm -rf ignored &&
 	mkdir untracked-ignored &&
 	mkdir untracked-ignored/test &&
+	git status --porcelain --ignored >actual &&
+	test_cmp expected actual
+'
+
+cat >expected <<\EOF
+?? .gitignore
+?? actual
+?? expected
+EOF
+
+test_expect_success 'status empty untracked directory with --ignore -u' '
+	git status --porcelain --ignored -u >actual &&
+	test_cmp expected actual
+'
+
+cat >expected <<\EOF
+?? .gitignore
+?? actual
+?? expected
+!! untracked-ignored/
+EOF
+
+test_expect_success 'status untracked directory with ignored files with --ignore' '
 	: >untracked-ignored/ignored &&
 	: >untracked-ignored/test/ignored &&
 	git status --porcelain --ignored >actual &&
-- 
1.8.1.2.8021.g7e51819
Previous: Karsten BleesNext: Eric Sunshine
Message 4 of 10 in “dir.c: git-status --ignored: don't drop ignored directories”
  1. 1/8 dir.c: git-status --ignored: don't drop ignored directoriesKarsten Blees, Mar 18, 2013
  2. 2/8 dir.c: git-status --ignored: don't list files in ignored directoriesKarsten Blees, Mar 18, 2013
  3. 3/8 dir.c: git-status --ignored: don't list empty ignored directoriesKarsten Blees, Mar 18, 2013
  4. 4/8 dir.c: git-status --ignored: don't list empty directories as ignoredKarsten Blees, Mar 18, 2013
  5. Eric SunshineMar 18, 2013
  6. 5/8 dir.c: move prep_exclude and factor out parts of last_exclude_matchingKarsten Blees, Mar 18, 2013
  7. 6/8 dir.c: unify is_excluded and is_path_excluded APIsKarsten Blees, Mar 18, 2013
  8. Eric SunshineMar 18, 2013
  9. 7/8 dir.c: replace is_path_excluded with now equivalent is_excluded APIKarsten Blees, Mar 18, 2013
  10. 8/8 dir.c: git-status: avoid is_excluded checks for tracked filesKarsten Blees, Mar 18, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.