summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Lehmann <Jens.Lehmann@web.de>2014-01-07 22:32:37 +0100
committerJunio C Hamano <gitster@pobox.com>2014-01-07 14:34:06 -0800
commitbbad9f9314f658b5c0f302148fc9780f5788dcd8 (patch)
tree9c1c6f25614f987ddeb45bba0e748035e888fbd7
parent1cbd18300a8755ba46791b2aa6249fa537a1d651 (diff)
downloadgit-jl/submodule-mv-checkout-caveat.tar.gz
rm: better document side effects when removing a submodulejl/submodule-mv-checkout-caveat
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>
-rw-r--r--Documentation/git-rm.txt9
-rwxr-xr-xt/t3600-rm.sh16
2 files changed, 25 insertions, 0 deletions
diff --git a/Documentation/git-rm.txt b/Documentation/git-rm.txt
index 9d731b453d..f1efc116eb 100644
--- a/Documentation/git-rm.txt
+++ b/Documentation/git-rm.txt
@@ -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]
diff --git a/t/t3600-rm.sh b/t/t3600-rm.sh
index 540c49bab6..3d305814b9 100755
--- a/t/t3600-rm.sh
+++ b/t/t3600-rm.sh
@@ -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 &&