Browse Source

Merge branch 'db/push-single-with-HEAD'

* db/push-single-with-HEAD:
  Resolve value supplied for no-colon push refspecs
maint
Junio C Hamano 17 years ago
parent
commit
2f8e2e3eef
  1. 9
      builtin-push.c
  2. 10
      remote.c
  3. 43
      t/t5516-fetch-push.sh

9
builtin-push.c

@ -44,15 +44,6 @@ static void set_refspecs(const char **refs, int nr)
strcat(tag, refs[i]); strcat(tag, refs[i]);
ref = tag; 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); add_refspec(ref);
} }
} }

10
remote.c

@ -730,9 +730,17 @@ static int match_explicit(struct ref *src, struct ref *dst,
errs = 1; errs = 1;


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

if (!matched_src) if (!matched_src)
return errs; 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)) { switch (count_refspec_match(dst_value, dst, &matched_dst)) {

43
t/t5516-fetch-push.sh

@ -302,6 +302,49 @@ test_expect_success 'push with HEAD nonexisting at remote' '
check_push_result $the_commit heads/local 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' ' test_expect_success 'push with dry-run' '


mk_test heads/master && mk_test heads/master &&

Loading…
Cancel
Save