When cloning a superproject with the option
 --recurse-submodules='.', it is easy to find yourself wanting
a submodule active, but not having that submodule present in
the modules directory.

Signed-off-by: Stefan Beller <sbel...@google.com>
---
 t/t2013-checkout-submodule.sh | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/t/t2013-checkout-submodule.sh b/t/t2013-checkout-submodule.sh
index 6ef15738e44..c69640fc341 100755
--- a/t/t2013-checkout-submodule.sh
+++ b/t/t2013-checkout-submodule.sh
@@ -63,6 +63,30 @@ test_expect_success '"checkout <submodule>" honors 
submodule.*.ignore from .git/
        ! test -s actual
 '
 
+test_expect_success 'setup superproject with historic submodule' '
+       test_create_repo super1 &&
+       test_create_repo sub1 &&
+       test_commit -C sub1 sub_content &&
+       git -C super1 submodule add ../sub1 &&
+       git -C super1 commit -a -m "sub1 added" &&
+       test_commit -C super1 historic_state &&
+       git -C super1 rm sub1 &&
+       git -C super1 commit -a -m "deleted sub" &&
+       test_commit -C super1 new_state &&
+       test_path_is_missing super1/sub &&
+
+       # The important part is to ensure sub1 is not in there any more.
+       # There is another series in flight, that may remove an
+       # empty .gitmodules file entirely.
+       test_must_be_empty super1/.gitmodules
+'
+
+test_expect_failure 'checkout old state with deleted submodule' '
+       test_when_finished "rm -rf super1 sub1 super1_clone" &&
+       git clone --recurse-submodules super1 super1_clone &&
+       git -C super1_clone checkout --recurse-submodules historic_state
+'
+
 KNOWN_FAILURE_DIRECTORY_SUBMODULE_CONFLICTS=1
 test_submodule_switch_recursing_with_args "checkout"
 
-- 
2.18.0

Reply via email to