diff options
author | Junio C Hamano <gitster@pobox.com> | 2008-11-08 17:32:49 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-11-08 17:32:49 -0800 |
commit | 832e719d79296f1942a2aca5fb067bc610986fc4 (patch) | |
tree | 8dfdf706b10fa4891ebaceb5ec7543078a73cc44 /builtin-send-pack.c | |
parent | 2819854ec5013fc0958ea477fa49d53fc0faee80 (diff) | |
parent | 16ed2f48be228918af3d1a6c5a6a4fe9b832cb84 (diff) | |
download | git-832e719d79296f1942a2aca5fb067bc610986fc4.tar.gz |
Merge branch 'cb/maint-update-ref-fix' into maint
* cb/maint-update-ref-fix:
push: fix local refs update if already up-to-date
do not force write of packed refs
Diffstat (limited to 'builtin-send-pack.c')
-rw-r--r-- | builtin-send-pack.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/builtin-send-pack.c b/builtin-send-pack.c index ed94f9a460..e428eace2b 100644 --- a/builtin-send-pack.c +++ b/builtin-send-pack.c @@ -222,7 +222,7 @@ static void update_tracking_ref(struct remote *remote, struct ref *ref) { struct refspec rs; - if (ref->status != REF_STATUS_OK) + if (ref->status != REF_STATUS_OK && ref->status != REF_STATUS_UPTODATE) return; rs.src = ref->name; @@ -424,24 +424,19 @@ static int do_send_pack(int in, int out, struct remote *remote, const char *dest */ new_refs = 0; for (ref = remote_refs; ref; ref = ref->next) { - const unsigned char *new_sha1; - - if (!ref->peer_ref) { - if (!args.send_mirror) - continue; - new_sha1 = null_sha1; - } - else - new_sha1 = ref->peer_ref->new_sha1; + if (ref->peer_ref) + hashcpy(ref->new_sha1, ref->peer_ref->new_sha1); + else if (!args.send_mirror) + continue; - ref->deletion = is_null_sha1(new_sha1); + ref->deletion = is_null_sha1(ref->new_sha1); if (ref->deletion && !allow_deleting_refs) { ref->status = REF_STATUS_REJECT_NODELETE; continue; } if (!ref->deletion && - !hashcmp(ref->old_sha1, new_sha1)) { + !hashcmp(ref->old_sha1, ref->new_sha1)) { ref->status = REF_STATUS_UPTODATE; continue; } @@ -469,14 +464,13 @@ static int do_send_pack(int in, int out, struct remote *remote, const char *dest !ref->deletion && !is_null_sha1(ref->old_sha1) && (!has_sha1_file(ref->old_sha1) - || !ref_newer(new_sha1, ref->old_sha1)); + || !ref_newer(ref->new_sha1, ref->old_sha1)); if (ref->nonfastforward && !ref->force && !args.force_update) { ref->status = REF_STATUS_REJECT_NONFASTFORWARD; continue; } - hashcpy(ref->new_sha1, new_sha1); if (!ref->deletion) new_refs++; |