diff options
author | Junio C Hamano <gitster@pobox.com> | 2012-04-20 15:50:37 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-04-20 15:50:37 -0700 |
commit | c5da24a73a96a9908ae715f6430e65294115646a (patch) | |
tree | 4db197f483c8fd331cc149869da44d02c9ecacb2 /transport.c | |
parent | af78c317205ce254d9cc75fc0298ee86b579de73 (diff) | |
parent | 0aff719f489771c5e52259394d011c51317b118f (diff) | |
download | git-c5da24a73a96a9908ae715f6430e65294115646a.tar.gz |
Merge branch 'ct/advise-push-default'
Break down the cases in which "git push" fails due to non-ff into
three categories, and give separate advise messages for each case.
By Christopher Tiwald (2) and Jeff King (1)
* ct/advise-push-default:
Fix httpd tests that broke when non-ff push advice changed
clean up struct ref's nonfastforward field
push: Provide situational hints for non-fast-forward errors
Diffstat (limited to 'transport.c')
-rw-r--r-- | transport.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/transport.c b/transport.c index ea9dcb6612..2dfac700b6 100644 --- a/transport.c +++ b/transport.c @@ -721,6 +721,10 @@ void transport_print_push_status(const char *dest, struct ref *refs, { struct ref *ref; int n = 0; + unsigned char head_sha1[20]; + char *head; + + head = resolve_refdup("HEAD", head_sha1, 1, NULL); if (verbose) { for (ref = refs; ref; ref = ref->next) @@ -738,8 +742,13 @@ void transport_print_push_status(const char *dest, struct ref *refs, ref->status != REF_STATUS_UPTODATE && ref->status != REF_STATUS_OK) n += print_one_push_status(ref, dest, n, porcelain); - if (ref->status == REF_STATUS_REJECT_NONFASTFORWARD) - *nonfastforward = 1; + if (ref->status == REF_STATUS_REJECT_NONFASTFORWARD && + *nonfastforward != NON_FF_HEAD) { + if (!strcmp(head, ref->name)) + *nonfastforward = NON_FF_HEAD; + else + *nonfastforward = NON_FF_OTHER; + } } } |