Skip to content

Commit

Permalink
Merge branch 'db/push-single-with-HEAD'
Browse files Browse the repository at this point in the history
* db/push-single-with-HEAD:
  Resolve value supplied for no-colon push refspecs
  • Loading branch information
Junio C Hamano committed Feb 27, 2008
2 parents 5372715 + 9f0ea7e commit 2f8e2e3
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 10 deletions.
9 changes: 0 additions & 9 deletions builtin-push.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,6 @@ static void set_refspecs(const char **refs, int nr)
strcat(tag, refs[i]);
ref = tag;
}
if (!strcmp("HEAD", ref)) {
unsigned char sha1_dummy[20];
ref = resolve_ref(ref, sha1_dummy, 1, NULL);
if (!ref)
die("HEAD cannot be resolved.");
if (prefixcmp(ref, "refs/heads/"))
die("HEAD cannot be resolved to branch.");
ref = xstrdup(ref + 11);
}
add_refspec(ref);
}
}
Expand Down
10 changes: 9 additions & 1 deletion remote.c
Original file line number Diff line number Diff line change
Expand Up @@ -730,9 +730,17 @@ static int match_explicit(struct ref *src, struct ref *dst,
errs = 1;

if (!dst_value) {
unsigned char sha1[20];
int flag;

if (!matched_src)
return errs;
dst_value = matched_src->name;
dst_value = resolve_ref(matched_src->name, sha1, 1, &flag);
if (!dst_value ||
((flag & REF_ISSYMREF) &&
prefixcmp(dst_value, "refs/heads/")))
die("%s cannot be resolved to branch.",
matched_src->name);
}

switch (count_refspec_match(dst_value, dst, &matched_dst)) {
Expand Down
43 changes: 43 additions & 0 deletions t/t5516-fetch-push.sh
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,49 @@ test_expect_success 'push with HEAD nonexisting at remote' '
check_push_result $the_commit heads/local
'

test_expect_success 'push with +HEAD' '
mk_test heads/master &&
git checkout master &&
git branch -D local &&
git checkout -b local &&
git push testrepo master local &&
check_push_result $the_commit heads/master &&
check_push_result $the_commit heads/local &&
# Without force rewinding should fail
git reset --hard HEAD^ &&
! git push testrepo HEAD &&
check_push_result $the_commit heads/local &&
# With force rewinding should succeed
git push testrepo +HEAD &&
check_push_result $the_first_commit heads/local
'

test_expect_success 'push with config remote.*.push = HEAD' '
mk_test heads/local &&
git checkout master &&
git branch -f local $the_commit &&
(
cd testrepo &&
git checkout local &&
git reset --hard $the_first_commit
) &&
git config remote.there.url testrepo &&
git config remote.there.push HEAD &&
git config branch.master.remote there &&
git push &&
check_push_result $the_commit heads/master &&
check_push_result $the_first_commit heads/local
'

# clean up the cruft left with the previous one
git config --remove-section remote.there
git config --remove-section branch.master

test_expect_success 'push with dry-run' '
mk_test heads/master &&
Expand Down

0 comments on commit 2f8e2e3

Please sign in to comment.