[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