Am 02.02.21 um 06:25 schrieb Junio C Hamano: > Junio C Hamano <gitster@xxxxxxxxx> writes: > >> Sorry, but you still have lost me---I do not see if/why we even care >> about atexit codepath. As far as the end users are concered, they >> are running "git" and observing the exit code from "git". There, >> reporting that "git" was killed by SIGPIPE, instead of exiting >> normally, is not something they want to hear about after quitting >> their pager, and that is why the signal reception codepath matters. > > (something I noticed that I left unsaid...) > > On the other hand, "git" spawns not just pager but other > subprocesses (e.g. "hooks"), and it is entirely up to us what to do > with the exit code from them. When we care about making an external > effect (e.g. post-$action hooks that are run for their side effects), > we can ignore their exit status just fine. > > And I do not see why the "we waited before leaving, and noticed the > pager exited with non-zero status" that we could notice in the > atexit codepath has to be so special. We _could_ (modulo the "exit > there is not portable" you noted) make our exit status reflect that, > but I do not think it is all that important a "failure" (as opposed > to, say, we tried to show a commit message but failed to recode it > into utf-8, or we tried to spawn the pager but failed to start a > process) to clobber _our_ exit status with pager's exit status. > > So... The pager is a special case of a sub-process spawned, as it really only a courtesy for the user. Without the pager facility, the user would have to use git log | less In that situation, the exit code of the pager *does* override git's, and it is also irrelevant for the user that git was killed by SIGPIPE and is not worth a visible notice. -- Hannes