submodule--helper tests: add missing "display path" coverage

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>
maint
Glen Choo 2022-06-30 19:11:51 -07:00 committed by Junio C Hamano
parent c9e221b124
commit 8fc36c39d9
1 changed files with 62 additions and 0 deletions

View File

@ -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