Merge branch 'ls/p4-retry-thrice'
[gitweb.git] / t / t7408-submodule-reference.sh
index 1c1e289ffd982ab74ed80fb776b3ecc4d7abf2f1..e159fc5035d08eee2c1577afd2ac792ddce2934c 100755 (executable)
@@ -125,4 +125,70 @@ test_expect_success 'ignoring missing submodule alternates passes clone and subm
        )
 '
 
+test_expect_success 'preparing second superproject with a nested submodule plus partial clone' '
+       test_create_repo supersuper &&
+       (
+               cd supersuper &&
+               echo "I am super super." >file &&
+               git add file &&
+               git commit -m B-super-super-initial
+               git submodule add "file://$base_dir/super" subwithsub &&
+               git commit -m B-super-super-added &&
+               git submodule update --init --recursive &&
+               git repack -ad
+       ) &&
+       git clone supersuper supersuper2 &&
+       (
+               cd supersuper2 &&
+               git submodule update --init
+       )
+'
+
+# At this point there are three root-level positories: A, B, super and super2
+
+test_expect_success 'nested submodule alternate in works and is actually used' '
+       test_when_finished "rm -rf supersuper-clone" &&
+       git clone --recursive --reference supersuper supersuper supersuper-clone &&
+       (
+               cd supersuper-clone &&
+               # test superproject has alternates setup correctly
+               test_alternate_is_used .git/objects/info/alternates . &&
+               # immediate submodule has alternate:
+               test_alternate_is_used .git/modules/subwithsub/objects/info/alternates subwithsub &&
+               # nested submodule also has alternate:
+               test_alternate_is_used .git/modules/subwithsub/modules/sub/objects/info/alternates subwithsub/sub
+       )
+'
+
+check_that_two_of_three_alternates_are_used() {
+       test_alternate_is_used .git/objects/info/alternates . &&
+       # immediate submodule has alternate:
+       test_alternate_is_used .git/modules/subwithsub/objects/info/alternates subwithsub &&
+       # but nested submodule has no alternate:
+       test_must_fail test_alternate_is_used .git/modules/subwithsub/modules/sub/objects/info/alternates subwithsub/sub
+}
+
+
+test_expect_success 'missing nested submodule alternate fails clone and submodule update' '
+       test_when_finished "rm -rf supersuper-clone" &&
+       test_must_fail git clone --recursive --reference supersuper2 supersuper2 supersuper-clone &&
+       (
+               cd supersuper-clone &&
+               check_that_two_of_three_alternates_are_used &&
+               # update of the submodule fails
+               test_must_fail git submodule update --init --recursive
+       )
+'
+
+test_expect_success 'missing nested submodule alternate in --reference-if-able mode' '
+       test_when_finished "rm -rf supersuper-clone" &&
+       git clone --recursive --reference-if-able supersuper2 supersuper2 supersuper-clone &&
+       (
+               cd supersuper-clone &&
+               check_that_two_of_three_alternates_are_used &&
+               # update of the submodule succeeds
+               git submodule update --init --recursive
+       )
+'
+
 test_done