commit: factor out clear_commit_marks_for_object_array
[gitweb.git] / builtin / fetch-pack.c
index bf9990ce15bf582293535606467fb209457bcfe1..436798410210b868cfbe439a1603b0a340a32c50 100644 (file)
@@ -226,20 +226,21 @@ static void insert_one_alternate_ref(const struct ref *ref, void *unused)
 
 static void insert_alternate_refs(void)
 {
-       foreach_alt_odb(refs_from_alternate_cb, insert_one_alternate_ref);
+       for_each_alternate_ref(insert_one_alternate_ref, NULL);
 }
 
 #define INITIAL_FLUSH 16
+#define PIPESAFE_FLUSH 32
 #define LARGE_FLUSH 1024
 
 static int next_flush(int count)
 {
-       if (count < INITIAL_FLUSH * 2)
-               count += INITIAL_FLUSH;
-       else if (count < LARGE_FLUSH)
+       int flush_limit = args.stateless_rpc ? LARGE_FLUSH : PIPESAFE_FLUSH;
+
+       if (count < flush_limit)
                count <<= 1;
        else
-               count += LARGE_FLUSH;
+               count += flush_limit;
        return count;
 }
 
@@ -471,8 +472,10 @@ static int mark_complete(const char *path, const unsigned char *sha1, int flag,
        }
        if (o && o->type == OBJ_COMMIT) {
                struct commit *commit = (struct commit *)o;
-               commit->object.flags |= COMPLETE;
-               commit_list_insert_by_date(commit, &complete);
+               if (!(commit->object.flags & COMPLETE)) {
+                       commit->object.flags |= COMPLETE;
+                       commit_list_insert_by_date(commit, &complete);
+               }
        }
        return 0;
 }
@@ -735,7 +738,8 @@ static struct ref *do_fetch_pack(int fd[2],
                if (server_supports("no-done")) {
                        if (args.verbose)
                                fprintf(stderr, "Server supports no-done\n");
-                       no_done = 1;
+                       if (args.stateless_rpc)
+                               no_done = 1;
                }
        }
        else if (server_supports("multi_ack")) {