Flush output in start_async
authorAnders Melchiorsen <mail@cup.kalibalik.dk>
Mon, 4 Aug 2008 00:30:03 +0000 (02:30 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 4 Aug 2008 00:55:40 +0000 (17:55 -0700)
This prevents double output in case stdout is redirected.

Signed-off-by: Anders Melchiorsen <mail@cup.kalibalik.dk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
run-command.c
t/t5601-clone.sh

index a3b28a64dc2d1b888b0ba2a135be10fe04651201..6af83c526ef8ddba7486457282e56093a9e3d0d4 100644 (file)
@@ -304,6 +304,9 @@ int start_async(struct async *async)
        async->out = pipe_out[0];
 
 #ifndef __MINGW32__
+       /* Flush stdio before fork() to avoid cloning buffers */
+       fflush(NULL);
+
        async->pid = fork();
        if (async->pid < 0) {
                error("fork (async) failed: %s", strerror(errno));
index 57173b4c50ec5f30198c9bf8bd8d03edd17bb235..a13b6f9d3d9c0735ce87c82150283727fab8e378 100755 (executable)
@@ -31,6 +31,12 @@ test_expect_success 'clone with excess parameters (2)' '
 
 '
 
+test_expect_success 'output from clone' '
+       rm -fr dst &&
+       git clone -n "file://$(pwd)/src" dst >output &&
+       test $(grep Initialized output | wc -l) = 1
+'
+
 test_expect_success 'clone does not keep pack' '
 
        rm -fr dst &&