Skip to content

Commit 26c986e

Browse files
committed
treat_directory(): do not declare submodules to be untracked
When the working tree walker encounters a directory, it asks the function treat_directory() if it should descend into it, show it as an untracked directory, or do something else. When the directory is the top of the submodule working tree, we used to say "That is an untracked directory", which was bogus. It is an entity that is tracked in the index of the repository we are looking at, and that is not to be descended into it. Return path_none, not path_untracked, to report that. The existing case that path_untracked is returned for a newly discovered submodule that is not tracked in the index (this only happens when DIR_NO_GITLINKS option is not used) is unchanged, but that is exactly because the submodule is not tracked in the index. Signed-off-by: Junio C Hamano <[email protected]>
1 parent ebeea52 commit 26c986e

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

dir.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,9 +1036,7 @@ static enum path_treatment treat_directory(struct dir_struct *dir,
10361036
return path_recurse;
10371037

10381038
case index_gitdir:
1039-
if (dir->flags & DIR_SHOW_OTHER_DIRECTORIES)
1040-
return path_none;
1041-
return path_untracked;
1039+
return path_none;
10421040

10431041
case index_nonexistent:
10441042
if (dir->flags & DIR_SHOW_OTHER_DIRECTORIES)

t/t3010-ls-files-killed-modified.sh

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ This test prepares the following in the cache:
1111
path1 - a symlink
1212
path2/file2 - a file in a directory
1313
path3/file3 - a file in a directory
14+
submod1/ - a submodule
15+
submod2/ - another submodule
1416
1517
and the following on the filesystem:
1618
@@ -21,9 +23,11 @@ and the following on the filesystem:
2123
path4 - a file
2224
path5 - a symlink
2325
path6/file6 - a file in a directory
26+
submod1/ - a submodule (modified from the cache)
27+
submod2/ - a submodule (matches the cache)
2428
25-
git ls-files -k should report that existing filesystem
26-
objects except path4, path5 and path6/file6 to be killed.
29+
git ls-files -k should report that existing filesystem objects
30+
path0/*, path1/*, path2 and path3 to be killed.
2731
2832
Also for modification test, the cache and working tree have:
2933
@@ -33,7 +37,7 @@ Also for modification test, the cache and working tree have:
3337
path10 - a non-empty file, cache dirtied.
3438
3539
We should report path0, path1, path2/file2, path3/file3, path7 and path8
36-
modified without reporting path9 and path10.
40+
modified without reporting path9 and path10. submod1 is also modified.
3741
'
3842
. ./test-lib.sh
3943

@@ -48,6 +52,18 @@ test_expect_success 'git update-index --add to add various paths.' '
4852
: >path9 &&
4953
date >path10 &&
5054
git update-index --add -- path0 path?/file? path7 path8 path9 path10 &&
55+
for i in 1 2
56+
do
57+
git init submod$i &&
58+
(
59+
cd submod$i && git commit --allow-empty -m "empty $i"
60+
) || break
61+
done &&
62+
git update-index --add submod[12]
63+
(
64+
cd submod1 &&
65+
git commit --allow-empty -m "empty 1 (updated)"
66+
) &&
5167
rm -fr path? # leave path10 alone
5268
'
5369

@@ -94,6 +110,7 @@ test_expect_success 'validate git ls-files -m output.' '
94110
path3/file3
95111
path7
96112
path8
113+
submod1
97114
EOF
98115
test_cmp .expected .output
99116
'

0 commit comments

Comments
 (0)