diff options
author | Tay Ray Chuan <rctay89@gmail.com> | 2010-01-08 10:12:44 +0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-01-09 23:34:10 -0800 |
commit | 08d63a422ba7293119865e6cbbc3a34619be32f7 (patch) | |
tree | b15ad3ede23cae68776af087d4990d5f041d87ed | |
parent | 4232826771d5bdc4cc0bd21188b6ee5f3e700a52 (diff) | |
download | git-08d63a422ba7293119865e6cbbc3a34619be32f7.tar.gz |
transport-helper.c::push_refs(): ignore helper-reported status if ref is not to be pushed
If the status of a ref is REF_STATUS_NONE, the remote helper will not
be told to push the ref (via a 'push' command).
However, the remote helper may still act on these refs.
If the helper does act on the ref, and prints a status for it, ignore
the report (ie. don't overwrite the status of the ref with it, nor the
message in the remote_status member) if the reported status is 'no
match'.
This allows the user to be alerted to more "interesting" ref statuses,
like REF_STATUS_NONFASTFORWARD.
Cc: Jeff King <peff@peff.net>
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-x | t/t5541-http-push.sh | 2 | ||||
-rw-r--r-- | transport-helper.c | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/t/t5541-http-push.sh b/t/t5541-http-push.sh index 979624d0dc..83a8e14c6c 100755 --- a/t/t5541-http-push.sh +++ b/t/t5541-http-push.sh @@ -111,7 +111,7 @@ Merge the remote changes before pushing again. See the '"'non-fast-forward'"' section of '"'git push --help'"' for details." output ' -test_expect_failure 'push fails for non-fast-forward refs unmatched by remote helper' ' +test_expect_success 'push fails for non-fast-forward refs unmatched by remote helper' ' # create a dissimilarly-named remote ref so that git is unable to match the # two refs (viz. local, remote) unless an explicit refspec is provided. git push origin master:retsam diff --git a/transport-helper.c b/transport-helper.c index 7c9b569d94..71a1e50ee7 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -430,6 +430,15 @@ static int push_refs(struct transport *transport, continue; } + if (ref->status != REF_STATUS_NONE) { + /* + * Earlier, the ref was marked not to be pushed, so ignore the ref + * status reported by the remote helper if the latter is 'no match'. + */ + if (status == REF_STATUS_NONE) + continue; + } + ref->status = status; ref->remote_status = msg; } |