@@ -222,7 +222,7 @@ static void update_tracking_ref(struct remote *remote, struct ref *ref)
222222{
223223 struct refspec rs ;
224224
225- if (ref -> status != REF_STATUS_OK )
225+ if (ref -> status != REF_STATUS_OK && ref -> status != REF_STATUS_UPTODATE )
226226 return ;
227227
228228 rs .src = ref -> name ;
@@ -424,24 +424,19 @@ static int do_send_pack(int in, int out, struct remote *remote, const char *dest
424424 */
425425 new_refs = 0 ;
426426 for (ref = remote_refs ; ref ; ref = ref -> next ) {
427- const unsigned char * new_sha1 ;
428-
429- if (!ref -> peer_ref ) {
430- if (!args .send_mirror )
431- continue ;
432- new_sha1 = null_sha1 ;
433- }
434- else
435- new_sha1 = ref -> peer_ref -> new_sha1 ;
436427
428+ if (ref -> peer_ref )
429+ hashcpy (ref -> new_sha1 , ref -> peer_ref -> new_sha1 );
430+ else if (!args .send_mirror )
431+ continue ;
437432
438- ref -> deletion = is_null_sha1 (new_sha1 );
433+ ref -> deletion = is_null_sha1 (ref -> new_sha1 );
439434 if (ref -> deletion && !allow_deleting_refs ) {
440435 ref -> status = REF_STATUS_REJECT_NODELETE ;
441436 continue ;
442437 }
443438 if (!ref -> deletion &&
444- !hashcmp (ref -> old_sha1 , new_sha1 )) {
439+ !hashcmp (ref -> old_sha1 , ref -> new_sha1 )) {
445440 ref -> status = REF_STATUS_UPTODATE ;
446441 continue ;
447442 }
@@ -469,14 +464,13 @@ static int do_send_pack(int in, int out, struct remote *remote, const char *dest
469464 !ref -> deletion &&
470465 !is_null_sha1 (ref -> old_sha1 ) &&
471466 (!has_sha1_file (ref -> old_sha1 )
472- || !ref_newer (new_sha1 , ref -> old_sha1 ));
467+ || !ref_newer (ref -> new_sha1 , ref -> old_sha1 ));
473468
474469 if (ref -> nonfastforward && !ref -> force && !args .force_update ) {
475470 ref -> status = REF_STATUS_REJECT_NONFASTFORWARD ;
476471 continue ;
477472 }
478473
479- hashcpy (ref -> new_sha1 , new_sha1 );
480474 if (!ref -> deletion )
481475 new_refs ++ ;
482476
0 commit comments