t6044: add more testcases with staged changes before a merge is invoked
[gitweb.git] / send-pack.c
index 11d6f3d98398e8b7a1add501dd7ee85a736531b6..8d9190f5e7815c6b2f18afd266643a8c862e526e 100644 (file)
@@ -58,35 +58,25 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *extra, struc
         * the revision parameters to it via its stdin and
         * let its stdout go back to the other end.
         */
-       const char *argv[] = {
-               "pack-objects",
-               "--all-progress-implied",
-               "--revs",
-               "--stdout",
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-       };
        struct child_process po = CHILD_PROCESS_INIT;
        FILE *po_in;
        int i;
        int rc;
 
-       i = 4;
+       argv_array_push(&po.args, "pack-objects");
+       argv_array_push(&po.args, "--all-progress-implied");
+       argv_array_push(&po.args, "--revs");
+       argv_array_push(&po.args, "--stdout");
        if (args->use_thin_pack)
-               argv[i++] = "--thin";
+               argv_array_push(&po.args, "--thin");
        if (args->use_ofs_delta)
-               argv[i++] = "--delta-base-offset";
+               argv_array_push(&po.args, "--delta-base-offset");
        if (args->quiet || !args->progress)
-               argv[i++] = "-q";
+               argv_array_push(&po.args, "-q");
        if (args->progress)
-               argv[i++] = "--progress";
+               argv_array_push(&po.args, "--progress");
        if (is_repository_shallow())
-               argv[i++] = "--shallow";
-       po.argv = argv;
+               argv_array_push(&po.args, "--shallow");
        po.in = -1;
        po.out = args->stateless_rpc ? -1 : fd;
        po.git_cmd = 1;
@@ -147,6 +137,8 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *extra, struc
 static int receive_unpack_status(int in)
 {
        const char *line = packet_read_line(in, NULL);
+       if (!line)
+               return error(_("unexpected flush packet while reading remote unpack status"));
        if (!skip_prefix(line, "unpack ", &line))
                return error(_("unable to parse remote unpack status: %s"), line);
        if (strcmp(line, "ok"))
@@ -492,9 +484,12 @@ int send_pack(struct send_pack_args *args,
                         * we were to send it and we're trying to send the refs
                         * atomically, abort the whole operation.
                         */
-                       if (use_atomic)
+                       if (use_atomic) {
+                               strbuf_release(&req_buf);
+                               strbuf_release(&cap_buf);
                                return atomic_push_failure(args, remote_refs, ref);
-                       /* Fallthrough for non atomic case. */
+                       }
+                       /* else fallthrough */
                default:
                        continue;
                }