]> git.ipfire.org Git - thirdparty/git.git/commitdiff
submodule--helper tests: add missing "display path" coverage
authorGlen Choo <chooglen@google.com>
Fri, 1 Jul 2022 02:11:51 +0000 (19:11 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 1 Jul 2022 05:41:45 +0000 (22:41 -0700)
There are two locations in prepare_to_clone_next_submodule() that
manually calculate the submodule display path. As discussed in the
next commit the "Skipping" output isn't exactly what we want, but
let's test how we behave now, before changing the existing behavior.

Signed-off-by: Glen Choo <chooglen@google.com>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t7406-submodule-update.sh

index 06d804e21314532cf68b527d70ad95e8e9a4a80b..9a076e025f33f9377e1ccf4872d128b9ed0be7f2 100755 (executable)
@@ -1116,4 +1116,66 @@ test_expect_success 'submodule update --filter sets partial clone settings' '
        test_cmp_config -C super-filter/submodule blob:none remote.origin.partialclonefilter
 '
 
+# NEEDSWORK: Clean up the tests so that we can reuse the test setup.
+# Don't reuse the existing repos because the earlier tests have
+# intentionally disruptive configurations.
+test_expect_success 'setup clean recursive superproject' '
+       git init bottom &&
+       test_commit -C bottom "bottom" &&
+       git init middle &&
+       git -C middle submodule add ../bottom bottom &&
+       git -C middle commit -m "middle" &&
+       git init top &&
+       git -C top submodule add ../middle middle &&
+       git -C top commit -m "top" &&
+       git clone --recurse-submodules top top-clean
+'
+
+test_expect_success 'submodule update should skip unmerged submodules' '
+       test_when_finished "rm -fr top-cloned" &&
+       cp -r top-clean top-cloned &&
+
+       # Create an upstream commit in each repo, starting with bottom
+       test_commit -C bottom upstream_commit &&
+       # Create middle commit
+       git -C middle/bottom fetch &&
+       git -C middle/bottom checkout -f FETCH_HEAD &&
+       git -C middle add bottom &&
+       git -C middle commit -m "upstream_commit" &&
+       # Create top commit
+       git -C top/middle fetch &&
+       git -C top/middle checkout -f FETCH_HEAD &&
+       git -C top add middle &&
+       git -C top commit -m "upstream_commit" &&
+
+       # Create a downstream conflict
+       test_commit -C top-cloned/middle/bottom downstream_commit &&
+       git -C top-cloned/middle add bottom &&
+       git -C top-cloned/middle commit -m "downstream_commit" &&
+       git -C top-cloned/middle fetch --recurse-submodules origin &&
+       test_must_fail git -C top-cloned/middle merge origin/main &&
+
+       # Make the update of "middle" a no-op, otherwise we error out
+       # because of its unmerged state
+       test_config -C top-cloned submodule.middle.update !true &&
+       git -C top-cloned submodule update --recursive 2>actual.err &&
+       cat >expect.err <<-\EOF &&
+       Skipping unmerged submodule middle//bottom
+       EOF
+       test_cmp expect.err actual.err
+'
+
+test_expect_success 'submodule update --recursive skip submodules with strategy=none' '
+       test_when_finished "rm -fr top-cloned" &&
+       cp -r top-clean top-cloned &&
+
+       test_commit -C top-cloned/middle/bottom downstream_commit &&
+       git -C top-cloned/middle config submodule.bottom.update none &&
+       git -C top-cloned submodule update --recursive 2>actual.err &&
+       cat >expect.err <<-\EOF &&
+       Skipping submodule '\''../middle/'\''
+       EOF
+       test_cmp expect.err actual.err
+'
+
 test_done