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

2017-10-25 Thread Junio C Hamano
Johannes Schindelin  writes:

> 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 ..." to include in what will be committed)
>
>   tracked/submodule/
>
>   Ignored files:
> (use "git add -f ..." 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:

Makes sense.  Also listing the paths in the embedded working tree
like initial.t as if it were part of our project is utterly wrong,
especially because we are not doing any --recurse-submodules thing.

Both the change and the updated description looks good.  Thanks.


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

2017-10-25 Thread Johannes Schindelin
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 ..." to include in what will be committed)

tracked/submodule/

Ignored files:
  (use "git add -f ..." 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 ..." to include in what will be committed)

tracked/submodule/

Signed-off-by: Johannes Schindelin 
---
 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