t5516: test pushing two refspecs creating the same new branch

Pushing two refspecs that create the same new branch fails client-side
as desired with "dst ref <dst> receives from more than one src", as long
as the remote advertises at least one ref.

But pushing the same to an empty remote does not fail client-side as
expected: a --dry-run push prints "[new branch]" twice, and an actual
push fails on the server side with "multiple updates for ref '<dst>'
not allowed".

Add tests for both remotes, with and without --dry-run.  The empty repo
passes are marked as test_expect_failure, in preparation for a commit
that includes a fix and toggles them to test_expect_success.

Signed-off-by: Jon Simons <jon@jonsimons.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
seen
Jon Simons 2026-10-09 15:29:45 -04:00 committed by Junio C Hamano
parent 1d803681e1
commit 732abd6821
1 changed files with 36 additions and 0 deletions

View File

@ -400,6 +400,42 @@ test_expect_success 'push with no ambiguity (2)' '
check_push_result testrepo $the_commit remotes/origin/main
'

test_expect_success 'push --dry-run two refspecs targeting the same ref fails' '
mk_test testrepo heads/main &&
test_must_fail git push --dry-run testrepo main:frotz main:frotz 2>err &&
test_grep "dst ref refs/heads/frotz receives from more than one src" err
'

test_expect_success 'push two refspecs targeting the same ref fails' '
mk_test testrepo heads/main &&
test_must_fail git push testrepo main:frotz main:frotz 2>err &&
test_grep "dst ref refs/heads/frotz receives from more than one src" err
'

test_expect_failure 'push --dry-run two refspecs creating the same ref fails on empty repo' '
mk_empty testrepo &&
test_must_fail git push --dry-run testrepo main:frotz main:frotz 2>err &&
test_grep "dst ref refs/heads/frotz receives from more than one src" err
'

test_expect_failure 'push two refspecs creating the same ref fails on empty repo' '
mk_empty testrepo &&
test_must_fail git push testrepo main:frotz main:frotz 2>err &&
test_grep "dst ref refs/heads/frotz receives from more than one src" err
'

test_expect_failure 'push --dry-run abbreviated then full refspec creating the same ref fails on empty repo' '
mk_empty testrepo &&
test_must_fail git push --dry-run testrepo main:frotz main:refs/heads/frotz 2>err &&
test_grep "dst ref refs/heads/frotz receives from more than one src" err
'

test_expect_failure 'push abbreviated then full refspec creating the same ref fails on empty repo' '
mk_empty testrepo &&
test_must_fail git push testrepo main:frotz main:refs/heads/frotz 2>err &&
test_grep "dst ref refs/heads/frotz receives from more than one src" err
'

test_expect_success 'push with colon-less refspec, no ambiguity' '
mk_test testrepo heads/main heads/t/main &&
git branch -f t/main main &&