From: Junio C Hamano Date: Mon, 15 Dec 2008 08:15:38 GMT Subject: Re: fatal output from git-show really wants a terminal Message-ID: <7v3agpzwet.fsf@gitster.siamese.dyndns.org> In-Reply-To: <7vr64eb9ha.fsf@gitster.siamese.dyndns.org> Junio C Hamano writes: > "Boyd Stephen Smith Jr." writes: > >>> $ git log >foo.out >>> >>>and start a pager, which makes no sense. >> >> Good point, I'll try and consider that while I investgate the history of the >> issue. > > Isn't the issue about 61b8050 (sending errors to stdout under $PAGER, > 2008-02-16)? With that commit, we changed things so that when we send the > standard output to the $PAGER, we dup stderr to the $PAGER as well, > because otherwise any output to stderr will be wiped out by whatever the > pager does and the user will not notice the breakage. E.g. > > $ git log > > will just show reams of output, and you won't see any errors and warnings > even if there were any encountered during the process. > > Unfortunately we did it unconditionally. There is no reason to dup stderr > to the $PAGER if the command line was: > > $ git log 2>error.log > > in which case you would want to view the normal output in your $PAGER and > you are keeping the log of the error output in a separate file. I haven't heard anything more about this, but if you were indeed discussing the change made by 61b8050, I think the fix should just be like this. pager.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git c/pager.c w/pager.c index aa0966c..f19ddbc 100644 --- c/pager.c +++ w/pager.c @@ -70,7 +70,8 @@ void setup_pager(void) /* original process continues, but writes to the pipe */ dup2(pager_process.in, 1); - dup2(pager_process.in, 2); + if (isatty(2)) + dup2(pager_process.in, 2); close(pager_process.in); /* this makes sure that the parent terminates after the pager */