receive-pack: redirect unpack-objects stdout to /dev/null
authorJeff King <peff@peff.net>
Fri, 21 Sep 2012 05:32:52 +0000 (01:32 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 21 Sep 2012 16:44:11 +0000 (09:44 -0700)
The unpack-objects command should not generally produce any
output on stdout. However, if it's given extra input after
the packfile, it will spew the remainder to stdout. When
called by receive-pack, this means we will break protocol,
since our stdout is connected to the remote send-pack.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/receive-pack.c

index 2cb854feb4b3a701201ef683c6644aaa852d50b5..f8d2f171061928aa3facfbfbd27a183f4c4ffa73 100644 (file)
@@ -821,6 +821,7 @@ static const char *unpack(void)
 
        if (ntohl(hdr.hdr_entries) < unpack_limit) {
                int code, i = 0;
+               struct child_process child;
                const char *unpacker[5];
                unpacker[i++] = "unpack-objects";
                if (quiet)
@@ -829,7 +830,11 @@ static const char *unpack(void)
                        unpacker[i++] = "--strict";
                unpacker[i++] = hdr_arg;
                unpacker[i++] = NULL;
-               code = run_command_v_opt(unpacker, RUN_GIT_CMD);
+               memset(&child, 0, sizeof(child));
+               child.argv = unpacker;
+               child.no_stdout = 1;
+               child.git_cmd = 1;
+               code = run_command(&child);
                if (!code)
                        return NULL;
                return "unpack-objects abnormal exit";