diff --git a/remote.c b/remote.c index 120df36be002b543e609060b8f318fe7b38d437c..754d5130e3895acc59e43eb1d46338a835ad72ef 100644 --- a/remote.c +++ b/remote.c @@ -455,7 +455,7 @@ static int match_explicit(struct ref *src, struct ref *dst, errs = 1; if (dst_value == NULL) - dst_value = rs->src; + dst_value = matched_src->name; switch (count_refspec_match(dst_value, dst, &matched_dst)) { case 1: @@ -463,11 +463,6 @@ static int match_explicit(struct ref *src, struct ref *dst, case 0: if (!memcmp(dst_value, "refs/", 5)) matched_dst = make_dst(dst_value, dst_tail); - else if (!strcmp(rs->src, dst_value) && matched_src) - /* pushing "master:master" when - * remote does not have master yet. - */ - matched_dst = make_dst(matched_src->name, dst_tail); else error("dst refspec %s does not match any " "existing ref on the remote and does " diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh index b3b57faf9c4548aef5431b3862f9991348fe473f..08d58e1c8c8d61d50c97b48d795ac1a574d56035 100755 --- a/t/t5516-fetch-push.sh +++ b/t/t5516-fetch-push.sh @@ -189,6 +189,58 @@ test_expect_success 'push with ambiguity (2)' ' else check_push_result $the_first_commit heads/frotz tags/frotz fi + +' + +test_expect_success 'push with colon-less refspec (1)' ' + + mk_test heads/frotz tags/frotz && + git branch -f frotz master && + git push testrepo frotz && + check_push_result $the_commit heads/frotz && + check_push_result $the_first_commit tags/frotz + +' + +test_expect_success 'push with colon-less refspec (2)' ' + + mk_test heads/frotz tags/frotz && + if git show-ref --verify -q refs/heads/frotz + then + git branch -D frotz + fi && + git tag -f frotz && + git push testrepo frotz && + check_push_result $the_commit tags/frotz && + check_push_result $the_first_commit heads/frotz + +' + +test_expect_success 'push with colon-less refspec (3)' ' + + mk_test && + if git show-ref --verify -q refs/tags/frotz + then + git tag -d frotz + fi && + git branch -f frotz master && + git push testrepo frotz && + check_push_result $the_commit heads/frotz && + test "$( cd testrepo && git show-ref | wc -l )" = 1 +' + +test_expect_success 'push with colon-less refspec (4)' ' + + mk_test && + if git show-ref --verify -q refs/heads/frotz + then + git branch -D frotz + fi && + git tag -f frotz && + git push testrepo frotz && + check_push_result $the_commit tags/frotz && + test "$( cd testrepo && git show-ref | wc -l )" = 1 + ' test_done