Code

contrib/completion: --notes, --no-notes
[git.git] / upload-pack.c
index 0c87bc00f0e06e57b10154a026d797fb1500b4fe..eb80dd9aad35444050df1fbfd762365edf9a2ed8 100644 (file)
@@ -429,6 +429,8 @@ static int get_common_commits(void)
        static char line[1000];
        unsigned char sha1[20];
        char last_hex[41];
+       int got_common = 0;
+       int got_other = 0;
 
        save_commit_buffer = 0;
 
@@ -437,16 +439,22 @@ static int get_common_commits(void)
                reset_timeout();
 
                if (!len) {
+                       if (multi_ack == 2 && got_common
+                           && !got_other && ok_to_give_up())
+                               packet_write(1, "ACK %s ready\n", last_hex);
                        if (have_obj.nr == 0 || multi_ack)
                                packet_write(1, "NAK\n");
                        if (stateless_rpc)
                                exit(0);
+                       got_common = 0;
+                       got_other = 0;
                        continue;
                }
                strip(line, len);
                if (!prefixcmp(line, "have ")) {
                        switch (got_sha1(line+5, sha1)) {
                        case -1: /* they have what we do not */
+                               got_other = 1;
                                if (multi_ack && ok_to_give_up()) {
                                        const char *hex = sha1_to_hex(sha1);
                                        if (multi_ack == 2)
@@ -456,6 +464,7 @@ static int get_common_commits(void)
                                }
                                break;
                        default:
+                               got_common = 1;
                                memcpy(last_hex, sha1_to_hex(sha1), 41);
                                if (multi_ack == 2)
                                        packet_write(1, "ACK %s common\n", last_hex);