Skip to content

Commit

Permalink
treat_directory(): do not declare submodules to be untracked
Browse files Browse the repository at this point in the history
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 <gitster@pobox.com>
  • Loading branch information
Junio C Hamano committed Jul 1, 2013
1 parent ebeea52 commit 26c986e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 6 deletions.
4 changes: 1 addition & 3 deletions dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -1036,9 +1036,7 @@ static enum path_treatment treat_directory(struct dir_struct *dir,
return path_recurse;

case index_gitdir:
if (dir->flags & DIR_SHOW_OTHER_DIRECTORIES)
return path_none;
return path_untracked;
return path_none;

case index_nonexistent:
if (dir->flags & DIR_SHOW_OTHER_DIRECTORIES)
Expand Down
23 changes: 20 additions & 3 deletions t/t3010-ls-files-killed-modified.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ This test prepares the following in the cache:
path1 - a symlink
path2/file2 - a file in a directory
path3/file3 - a file in a directory
submod1/ - a submodule
submod2/ - another submodule
and the following on the filesystem:
Expand All @@ -21,9 +23,11 @@ and the following on the filesystem:
path4 - a file
path5 - a symlink
path6/file6 - a file in a directory
submod1/ - a submodule (modified from the cache)
submod2/ - a submodule (matches the cache)
git ls-files -k should report that existing filesystem
objects except path4, path5 and path6/file6 to be killed.
git ls-files -k should report that existing filesystem objects
path0/*, path1/*, path2 and path3 to be killed.
Also for modification test, the cache and working tree have:
Expand All @@ -33,7 +37,7 @@ Also for modification test, the cache and working tree have:
path10 - a non-empty file, cache dirtied.
We should report path0, path1, path2/file2, path3/file3, path7 and path8
modified without reporting path9 and path10.
modified without reporting path9 and path10. submod1 is also modified.
'
. ./test-lib.sh

Expand All @@ -48,6 +52,18 @@ test_expect_success 'git update-index --add to add various paths.' '
: >path9 &&
date >path10 &&
git update-index --add -- path0 path?/file? path7 path8 path9 path10 &&
for i in 1 2
do
git init submod$i &&
(
cd submod$i && git commit --allow-empty -m "empty $i"
) || break
done &&
git update-index --add submod[12]
(
cd submod1 &&
git commit --allow-empty -m "empty 1 (updated)"
) &&
rm -fr path? # leave path10 alone
'

Expand Down Expand Up @@ -94,6 +110,7 @@ test_expect_success 'validate git ls-files -m output.' '
path3/file3
path7
path8
submod1
EOF
test_cmp .expected .output
'
Expand Down

0 comments on commit 26c986e

Please sign in to comment.