diff options
author | Adam Spiers <git@adamspiers.org> | 2013-04-29 23:55:25 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-04-29 16:08:33 -0700 |
commit | b96114edb36e16d214af1e7945a1d19b8a5e1686 (patch) | |
tree | 515aa4c4e6abea2cad467f5d6b94a09739d1da2f /t/t0008-ignores.sh | |
parent | f1ed7fea7974218db15155f3b8d2e29d3fe0971c (diff) | |
download | git-b96114edb36e16d214af1e7945a1d19b8a5e1686.tar.gz |
t0008: use named pipe (FIFO) to test check-ignore streaming
sleeps in the check-ignore test suite are not ideal since they can
fail when the system is under load, or when a tool like valgrind is
used which drastically alters the timing. Therefore we replace them
with a more robust solution using a named pipe (FIFO).
Thanks to Jeff King for coming up with the redirection wizardry
required to make this work.
http://article.gmane.org/gmane.comp.version-control.git/220916
Signed-off-by: Adam Spiers <git@adamspiers.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t0008-ignores.sh')
-rwxr-xr-x | t/t0008-ignores.sh | 38 |
1 files changed, 17 insertions, 21 deletions
diff --git a/t/t0008-ignores.sh b/t/t0008-ignores.sh index fbf12ae4e2..a56db804cb 100755 --- a/t/t0008-ignores.sh +++ b/t/t0008-ignores.sh @@ -688,27 +688,23 @@ do ' done -test_expect_success 'setup: have stdbuf?' ' - if which stdbuf >/dev/null 2>&1 - then - test_set_prereq STDBUF - fi -' - -test_expect_success STDBUF 'streaming support for --stdin' ' - ( - echo one - sleep 2 - echo two - ) | stdbuf -oL git check-ignore -v -n --stdin >out & - pid=$! && - sleep 1 && - grep "^\.gitignore:1:one one" out && - test $( wc -l <out ) = 1 && - sleep 2 && - grep "^:: two" out && - test $( wc -l <out ) = 2 && - ( wait $pid || kill $pid || : ) 2>/dev/null +test_expect_success PIPE 'streaming support for --stdin' ' + mkfifo in out && + (git check-ignore -n -v --stdin <in >out &) && + + # We cannot just "echo >in" because check-ignore would get EOF + # after echo exited; instead we open the descriptor in our + # shell, and then echo to the fd. We make sure to close it at + # the end, so that the subprocess does get EOF and dies + # properly. + exec 9>in && + test_when_finished "exec 9>&-" && + echo >&9 one && + read response <out && + echo "$response" | grep "^\.gitignore:1:one one" && + echo >&9 two && + read response <out && + echo "$response" | grep "^:: two" ' test_done |