Jeff King [off-list ref] writes:
I have two reservations with this patch:
1. We are ignoring SIGPIPE all the time. For an alias that is calling
"log", that is fine. But if pack-objects dies on the server side,
seeing that it died from SIGPIPE is useful data, and we are
squelching that. Maybe callers of run-command should have to pass
an "ignore SIGPIPE" flag?
What should this do:
GIT_PAGER='head -n 1' git -p -c alias.o='!cat longfile' o
Should it behave just like
cat longfile | head -n 1
or should it behave differently?
I am having a feeling that whatever external command given as the
value of alias.$cmd should choose what error status it wants to be
reported.
2. The die_errno in handle_alias is definitely wrong. Even if we want
to print a message for signal death, showing errno is bogus unless
the return value was -1. But is it the right thing to just pass the
negative value straight to exit()? It works, but it is depending on
the fact that (unsigned char)(ret & 0xff) behaves in a certain way
(i.e., that we are on a twos-complement platform, and -13 becomes
141).
Isn't that what POSIX.1 guarantees us, though?
The value of status may be 0, EXIT_SUCCESS, EXIT_FAILURE, or any
other value, though only the least significant 8 bits (that is,
status & 0377) shall be available to a waiting parent process.