send-pack: refactor inspecting and resetting status and sending commands
authorJunio C Hamano <gitster@pobox.com>
Fri, 15 Aug 2014 19:29:42 +0000 (12:29 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 15 Sep 2014 20:23:19 +0000 (13:23 -0700)
The main loop over remote_refs list inspects the ref status
to see if we need to generate pack data (i.e. a delete-only push
does not need to send any additional data), resets it to "expecting
the status report" state, and formats the actual update commands
to be sent.

Split the former two out of the main loop, as it will become
conditional in later steps.

Besides, we should have code that does real thing here, before the
"Finally, tell the other end!" part ;-)

Signed-off-by: Junio C Hamano <gitster@pobox.com>
send-pack.c
index 716c11bbdc3ab8e374d94f880df6afb1c92acd3a..6dc8a460c2165756d839788d98f42d5121dc4ff6 100644 (file)
@@ -274,7 +274,8 @@ int send_pack(struct send_pack_args *args,
                advertise_shallow_grafts_buf(&req_buf);
 
        /*
-        * Finally, tell the other end!
+        * Clear the status for each ref and see if we need to send
+        * the pack data.
         */
        for (ref = remote_refs; ref; ref = ref->next) {
                if (!ref_update_to_be_sent(ref, args))
@@ -283,25 +284,35 @@ int send_pack(struct send_pack_args *args,
                if (!ref->deletion)
                        need_pack_data = 1;
 
-               if (args->dry_run) {
+               if (args->dry_run || !status_report)
                        ref->status = REF_STATUS_OK;
-               } else {
-                       char *old_hex = sha1_to_hex(ref->old_sha1);
-                       char *new_hex = sha1_to_hex(ref->new_sha1);
-
-                       if (!cmds_sent)
-                               packet_buf_write(&req_buf,
-                                                "%s %s %s%c%s",
-                                                old_hex, new_hex, ref->name, 0,
-                                                cap_buf.buf);
-                       else
-                               packet_buf_write(&req_buf, "%s %s %s",
-                                                old_hex, new_hex, ref->name);
-                       ref->status = status_report ?
-                               REF_STATUS_EXPECTING_REPORT :
-                               REF_STATUS_OK;
-                       cmds_sent++;
-               }
+               else
+                       ref->status = REF_STATUS_EXPECTING_REPORT;
+       }
+
+       /*
+        * Finally, tell the other end!
+        */
+       for (ref = remote_refs; ref; ref = ref->next) {
+               char *old_hex, *new_hex;
+
+               if (args->dry_run)
+                       continue;
+
+               if (!ref_update_to_be_sent(ref, args))
+                       continue;
+
+               old_hex = sha1_to_hex(ref->old_sha1);
+               new_hex = sha1_to_hex(ref->new_sha1);
+               if (!cmds_sent)
+                       packet_buf_write(&req_buf,
+                                        "%s %s %s%c%s",
+                                        old_hex, new_hex, ref->name, 0,
+                                        cap_buf.buf);
+               else
+                       packet_buf_write(&req_buf, "%s %s %s",
+                                        old_hex, new_hex, ref->name);
+               cmds_sent++;
        }
 
        if (args->stateless_rpc) {