Merge branch 'jk/pager-with-external-command'
[gitweb.git] / builtin / send-pack.c
index 4ac2ca984ff36588c68274f10f131ef88023d622..40a1675997cee19afb77b94bdd514fb5bc9a27bc 100644 (file)
@@ -228,11 +228,11 @@ static void print_helper_status(struct ref *ref)
 
 static int sideband_demux(int in, int out, void *data)
 {
-       int *fd = data;
+       int *fd = data, ret;
 #ifdef NO_PTHREADS
        close(fd[1]);
 #endif
-       int ret = recv_sideband("send-pack", fd[0], out);
+       ret = recv_sideband("send-pack", fd[0], out);
        close(out);
        return ret;
 }
@@ -344,6 +344,8 @@ int send_pack(struct send_pack_args *args,
                                ref->status = REF_STATUS_NONE;
                        if (args->stateless_rpc)
                                close(out);
+                       if (git_connection_is_socket(conn))
+                               shutdown(fd[0], SHUT_WR);
                        if (use_sideband)
                                finish_async(&demux);
                        return -1;
@@ -437,6 +439,10 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix)
                                args.force_update = 1;
                                continue;
                        }
+                       if (!strcmp(arg, "--quiet")) {
+                               args.quiet = 1;
+                               continue;
+                       }
                        if (!strcmp(arg, "--verbose")) {
                                args.verbose = 1;
                                continue;
@@ -486,8 +492,13 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix)
                fd[0] = 0;
                fd[1] = 1;
        } else {
-               conn = git_connect(fd, dest, receivepack,
+               struct strbuf sb = STRBUF_INIT;
+               strbuf_addstr(&sb, receivepack);
+               if (args.quiet)
+                       strbuf_addstr(&sb, " --quiet");
+               conn = git_connect(fd, dest, sb.buf,
                        args.verbose ? CONNECT_VERBOSE : 0);
+               strbuf_release(&sb);
        }
 
        memset(&extra_have, 0, sizeof(extra_have));