On Sun, Oct 24, 2021 at 07:03:49PM +0200, SZEDER Gábor wrote: > > What makes us expect that the "git log" invocation should trigger a > > SIGPIPE in the first place? > > A misunderstanding, perhaps, because those 'git log' commands with > their early-exiting pagers rarely trigger SIGPIPE. I happened to be looking in this area today[1], and I think it turns out not to be "rarely", but rather "never" for some of the tests. The test in question sets the pager to "does-not-exist". But in that case we will realize immediately via run-command.c that we could not run the pager, and will not even redirect our stdout to it. For example, doing this: GIT_PAGER=does-not-exist git -c alias.foo='!yes' -p foo will never get SIGPIPE; it will just write infinitely to the original stdout, and return success. Whereas this: GIT_PAGER=false git -c alias.foo='!yes' -p foo will reliably get SIGPIPE. But even if we used it (with a while loop to instead of "yes" address the portability concern), the tests in t7006 would still be wrong, because they are sending test-terminal's output to a closed pipe (so we'd still see SIGPIPE regardless of Git's behavior). They should be sending test_terminal's output to a file or /dev/null. It seems like this thread stalled. Ævar, were you planning to fix these tests? It's not too hard to swap out a "yes" as I showed above, but it further confuses the trace2 output, because now we have the child yes (or its shell equivalent) exiting as well. The non-child "log --stdin" example I gave earlier in the thread avoids that, but the fifo hackery is so horrible that I'd just as soon avoid it. I guess yet another option is a builtin which produces infinite output. Perhaps: oid=$(git rev-parse HEAD) while true; do echo $oid; done | test_terminal git -p cat-file --batch-check That's guaranteed to get SIGPIPE eventually if the pager stops reading. I seem to recall that test_terminal's handling of stdin is somewhat broken, though, and would probably get in our way[2]. Possibly we could just rip it out, as nobody is relying on it (they can't be, because it's broken). -Peff [1] https://lore.kernel.org/git/YZqSBlvzz2KgOMnJ@xxxxxxxxxxxxxxxxxxxxxxx/ [2] https://lore.kernel.org/git/20190520125016.GA13474@xxxxxxxxxxxxxxxxxxxxx/