On Thu, Oct 28, 2021 at 09:55:27PM +0200, SZEDER Gábor wrote: > > > > My usual test for an intentional SIGPIPE is "yes". So something like: > > > > git -p \ > > -c core.pager='exit 0' \ > > -c alias.yes='!yes' \ > > yes > > > > will reliably trigger SIGPIPE from yes, which git.c will then translate > > into an exit code of 141. > > Oh, that's clever. Alas it's not applicable to our tests, because > 'yes' is not portable; 8648732e29 (t/test-lib.sh: provide a shell > implementation of the 'yes' utility, 2009-08-28). True, though it would be easy enough to do: git -c alias.yes='!while true; do echo y; done' yes > > So something like "git log --stdin" works, but you have to contort > > yourself a bit to make it race-free: > [...] > Ugh. I think this would work reliably, but... ugh :) Yes. :) > I wonder whether we could do this as a new pair of 'test-tool' > helpers, one to run the pager through the usual pager-invoking > machinery and to generate a lot of output, the other to be used as the > early-exiting pager, with a pipe between the two to ensure that the > SIGPIPE does happen. Well, essentially the same that you outlined > above but in C instead of shell, which I somehow find less "ugh". Maybe, though now we may be diverging from how git.c uses the pager. As gross as what I wrote is, it is testing the code we want to test, I think. I am not sure that the alias vs builtin thing is worth caring about anyway, though, in which case the alias.yes thing above would be fine. -Peff