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

[PATCH v2 1/1] status: do not get confused by submodules in excluded directories

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Oct 25, 2017, 20:40 UTC
Message-ID
<33355d901d5f1c4d040b33bfd5b94e01803c03cd.1508964005.git.johannes.schindelin@gmx.de>
In-Reply-To
<cover.1508964005.git.johannes.schindelin@gmx.de>

We meticulously pass the `exclude` flag to the `treat_directory()` function so that we can indicate that files in it are excluded rather than untracked when recursing.

But we did not yet treat submodules the same way.

Because of that, `git status --ignored --untracked` with a submodule `submodule` in a gitignored `tracked/` would show the submodule in the "Untracked files" section, e.g.

	On branch master
	Untracked files:
	  (use "git add <file>..." to include in what will be committed)
		tracked/submodule/
	Ignored files:
	  (use "git add -f <file>..." to include in what will be committed)
		tracked/submodule/initial.t

Instead, we would want it to show the submodule in the "Ignored files" section:

	On branch master
	Ignored files:
	  (use "git add -f <file>..." to include in what will be committed)
		tracked/submodule/
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 dir.c                      |  2 +-
 t/t7061-wtstatus-ignore.sh | 11 +++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/dir.c b/dir.c
index 1d17b800cf3..9987011da57 100644
--- a/dir.c
+++ b/dir.c
@@ -1392,7 +1392,7 @@ static enum path_treatment treat_directory(struct dir_struct *dir,
 		if (!(dir->flags & DIR_NO_GITLINKS)) {
 			unsigned char sha1[20];
 			if (resolve_gitlink_ref(dirname, "HEAD", sha1) == 0)
-				return path_untracked;
+				return exclude ? path_excluded : path_untracked;
 		}
 		return path_recurse;
 	}
diff --git a/t/t7061-wtstatus-ignore.sh b/t/t7061-wtstatus-ignore.sh
index fc6013ba3c8..0c394cf995c 100755
--- a/t/t7061-wtstatus-ignore.sh
+++ b/t/t7061-wtstatus-ignore.sh
@@ -272,4 +272,15 @@ test_expect_success 'status ignored tracked directory with uncommitted file in t
 	test_cmp expected actual
 '
 
+cat >expected <<\EOF
+!! tracked/submodule/
+EOF
+
+test_expect_success 'status ignores submodule in excluded directory' '
+	git init tracked/submodule &&
+	test_commit -C tracked/submodule initial &&
+	git status --porcelain --ignored -u tracked/submodule >actual &&
+	test_cmp expected actual
+'
+
 test_done
-- 
2.14.3.windows.1
Previous: Johannes SchindelinNext: Junio C Hamano
Message 11 of 12 in “status: do not get confused by submodules in excluded directories”
  1. status: do not get confused by submodules in excluded directoriesJohannes Schindelin, Oct 17, 2017
  2. Junio C HamanoOct 24, 2017
  3. Heiko VoigtOct 24, 2017
  4. Stefan BellerOct 24, 2017
  5. Junio C HamanoOct 25, 2017
  6. Heiko VoigtOct 25, 2017
  7. Johannes SchindelinOct 25, 2017
  8. Kevin DaudtOct 24, 2017
  9. Johannes SchindelinOct 25, 2017
  10. 0/1 Do not handle submodules in excluded directories as untrackedJohannes Schindelin, Oct 25, 2017
  11. 1/1 status: do not get confused by submodules in excluded directoriesJohannes Schindelin, Oct 25, 2017
  12. Junio C HamanoOct 26, 2017

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.