diff options
author | Jeff King <peff@peff.net> | 2007-11-17 07:55:15 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-11-17 12:10:50 -0800 |
commit | 1f0e2a1a65477c2b8eb8812e5bf0ad07bf03738e (patch) | |
tree | 22c3baee5e0a8a0a407d1c6e67f215969a65ce4c | |
parent | 8736a8489080509516f5f4cc1cc74de33150f397 (diff) | |
download | git-1f0e2a1a65477c2b8eb8812e5bf0ad07bf03738e.tar.gz git-1f0e2a1a65477c2b8eb8812e5bf0ad07bf03738e.tar.xz |
send-pack: check ref->status before updating tracking refs
Previously, we manually checked the 'NONE' and 'UPTODATE'
conditions. Now that we have ref->status, we can easily
say "only update if we pushed successfully".
This adds a test for and fixes a regression introduced in
ed31df31 where deleted refs did not have their tracking
branches removed. This was due to a bogus per-ref error test
that is superseded by the more accurate ref->status flag.
Signed-off-by: Jeff King <peff@peff.net>
Completely-Acked-By: Alex "Sleepy" Riesen <raa.lkml@gmail.com>
Acked-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin-send-pack.c | 18 | ||||
-rwxr-xr-x | t/t5404-tracking-branches.sh | 5 |
2 files changed, 10 insertions, 13 deletions
diff --git a/builtin-send-pack.c b/builtin-send-pack.c index dafc02bcb..3f86acb31 100644 --- a/builtin-send-pack.c +++ b/builtin-send-pack.c @@ -180,24 +180,17 @@ static int receive_status(int in) static void update_tracking_ref(struct remote *remote, struct ref *ref) { struct refspec rs; - int will_delete_ref; - rs.src = ref->name; - rs.dst = NULL; - - if (!ref->peer_ref) + if (ref->status != REF_STATUS_OK) return; - will_delete_ref = is_null_sha1(ref->peer_ref->new_sha1); - - if (!will_delete_ref && - !hashcmp(ref->old_sha1, ref->peer_ref->new_sha1)) - return; + rs.src = ref->name; + rs.dst = NULL; if (!remote_find_tracking(remote, &rs)) { if (args.verbose) fprintf(stderr, "updating local tracking ref '%s'\n", rs.dst); - if (is_null_sha1(ref->peer_ref->new_sha1)) { + if (ref->deletion) { if (delete_ref(rs.dst, NULL)) error("Failed to delete"); } else @@ -444,8 +437,7 @@ static int do_send_pack(int in, int out, struct remote *remote, const char *dest if (!args.dry_run && remote) { for (ref = remote_refs; ref; ref = ref->next) - if (!is_null_sha1(ref->new_sha1)) - update_tracking_ref(remote, ref); + update_tracking_ref(remote, ref); } if (!new_refs) diff --git a/t/t5404-tracking-branches.sh b/t/t5404-tracking-branches.sh index 799e47e5b..1493a92c0 100755 --- a/t/t5404-tracking-branches.sh +++ b/t/t5404-tracking-branches.sh @@ -45,4 +45,9 @@ test_expect_success 'check tracking branches not updated for failed refs' ' test "$(git rev-parse origin/b2)" = "$b2" ' +test_expect_success 'deleted branches have their tracking branches removed' ' + git push origin :b1 && + test "$(git rev-parse origin/b1)" = "origin/b1" +' + test_done |