Skip to content

Commit

Permalink
rm: better document side effects when removing a submodule
Browse files Browse the repository at this point in the history
The "Submodules" section of the "git rm" documentation mentions what will
happen when a submodule with a gitfile gets removed with newer git. But it
doesn't talk about what happens when the user changes between commits
before and after the removal, which does not remove the submodule from the
work tree like using the rm command did the first time.

Explain what happens and what the user has to do manually to fix that in
the new BUGS section. Also document this behavior in a new test.

Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jens Lehmann authored and Junio C Hamano committed Jan 7, 2014
1 parent 1cbd183 commit bbad9f9
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
9 changes: 9 additions & 0 deletions Documentation/git-rm.txt
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,15 @@ of files and subdirectories under the `Documentation/` directory.
(i.e. you are listing the files explicitly), it
does not remove `subdir/git-foo.sh`.

BUGS
----
Each time a superproject update removes a populated submodule
(e.g. when switching between commits before and after the removal) a
stale submodule checkout will remain in the old location. Removing the
old directory is only safe when it uses a gitfile, as otherwise the
history of the submodule will be deleted too. This step will be
obsolete when recursive submodule update has been implemented.

SEE ALSO
--------
linkgit:git-add[1]
Expand Down
16 changes: 16 additions & 0 deletions t/t3600-rm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -705,6 +705,22 @@ test_expect_success 'rm of a populated nested submodule with a nested .git direc
rm -rf submod
'

test_expect_success 'checking out a commit after submodule removal needs manual updates' '
git commit -m "submodule removal" submod &&
git checkout HEAD^ &&
git submodule update &&
git checkout -q HEAD^ 2>actual &&
git checkout -q master 2>actual &&
echo "warning: unable to rmdir submod: Directory not empty" >expected &&
test_i18ncmp expected actual &&
git status -s submod >actual &&
echo "?? submod/" >expected &&
test_cmp expected actual &&
rm -rf submod &&
git status -s -uno --ignore-submodules=none > actual &&
! test -s actual
'

test_expect_success 'rm of d/f when d has become a non-directory' '
rm -rf d &&
mkdir d &&
Expand Down

0 comments on commit bbad9f9

Please sign in to comment.