From: Jon Simons Date: Fri, 09 Oct 2026 19:29:45 GMT Subject: [PATCH 07/15] t5516: test pushing two refspecs creating the same new branch Message-ID: <20261009192953.81794-8-jon@jonsimons.org> In-Reply-To: <20261009192953.81794-1-jon@jonsimons.org> Pushing two refspecs that create the same new branch fails client-side as desired with "dst ref 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 '' 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 --- t/t5516-fetch-push.sh | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh index 81ad6cd52f..e150246577 100755 --- a/t/t5516-fetch-push.sh +++ b/t/t5516-fetch-push.sh @@ -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 && -- 2.55.0