From: Junio C Hamano Date: Wed, 31 Oct 2007 04:38:04 +0000 (-0700) Subject: Merge branch 'jk/send-pack' into HEAD X-Git-Tag: v1.5.4-rc0~300 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/7ae4dd05725e1613375e03f206077959853d6b51?hp=-c Merge branch 'jk/send-pack' into HEAD * jk/send-pack: t5516: test update of local refs on push send-pack: don't update tracking refs on error --- 7ae4dd05725e1613375e03f206077959853d6b51 diff --combined send-pack.c index e9b9a39f41,1a7397f3a6..25053d2c2f --- a/send-pack.c +++ b/send-pack.c @@@ -178,6 -178,35 +178,35 @@@ static int receive_status(int in return ret; } + 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) + 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; + + if (!remote_find_tracking(remote, &rs)) { + fprintf(stderr, "updating local tracking ref '%s'\n", rs.dst); + if (is_null_sha1(ref->peer_ref->new_sha1)) { + if (delete_ref(rs.dst, NULL)) + error("Failed to delete"); + } else + update_ref("update by push", rs.dst, + ref->new_sha1, NULL, 0, 0); + free(rs.dst); + } + } + static int send_pack(int in, int out, struct remote *remote, int nr_refspec, char **refspec) { struct ref *ref; @@@ -306,22 -335,6 +335,6 @@@ fprintf(stderr, "\n from %s\n to %s\n", old_hex, new_hex); } - if (remote && !dry_run) { - struct refspec rs; - rs.src = ref->name; - rs.dst = NULL; - if (!remote_find_tracking(remote, &rs)) { - fprintf(stderr, " Also local %s\n", rs.dst); - if (will_delete_ref) { - if (delete_ref(rs.dst, NULL)) { - error("Failed to delete"); - } - } else - update_ref("update by push", rs.dst, - ref->new_sha1, NULL, 0, 0); - free(rs.dst); - } - } } packet_flush(out); @@@ -334,6 -347,11 +347,11 @@@ ret = -4; } + if (!dry_run && remote && ret == 0) { + for (ref = remote_refs; ref; ref = ref->next) + update_tracking_ref(remote, ref); + } + if (!new_refs && ret == 0) fprintf(stderr, "Everything up-to-date\n"); return ret; @@@ -428,7 -446,7 +446,7 @@@ int main(int argc, char **argv if (remote_name) { remote = remote_get(remote_name); - if (!remote_has_uri(remote, dest)) { + if (!remote_has_url(remote, dest)) { die("Destination %s is not a uri for %s", dest, remote_name); }