On Tue, Oct 10, 2017 at 10:10:19AM -0400, Jeff King wrote:
> That said, I'm still puzzled why it would return zero output. Strace
> shows that the read from stdin is getting no input. I suspect this may
> have to do with how we redirect stdin in test-terminal.perl.
>
> See 18d8c26930 (test_terminal: redirect child process' stdin to a pty,
> 2015-08-04), which claims there's some raciness with closing the
> descriptor.
Ah, yeah, I think that is it. Try:
echo input | test_terminal sed s/^/foo:/
it will randomly succeed or fail, depending on whether sed manages to
read the input before the stdin terminal is closed.
I'm not sure of an easy way to fix test-terminal, but we could work
around it like this (which also uses "-p" to actually invoke the pager,
and uses a pager that makes it clear when it's being run):
diff --git a/t/t9002-column.sh b/t/t9002-column.sh
index 9441145bf0..d322c3b745 100755
--- a/t/t9002-column.sh
+++ b/t/t9002-column.sh
@@ -180,14 +180,14 @@ EOF
test_expect_success TTY '20 columns, mode auto, pager' '
cat >expected <<\EOF &&
-one seven
-two eight
-three nine
-four ten
-five eleven
-six
+paged:one seven
+paged:two eight
+paged:three nine
+paged:four ten
+paged:five eleven
+paged:six
EOF
- test_terminal env PAGER="cat|cat" git column --mode=auto <lista >actual
&&
+ test_terminal env PAGER="sed s/^/paged:/" sh -c "git -p column
--mode=auto <lista" >actual &&
test_cmp expected actual
'
test_done
All that said, I think I'd just as soon test a real command like "git
tag", which doesn't care about reading from stdin.
-Peff