Re: [RFC] sending errors to stdout under $PAGER
- From
Shawn O. Pearce <spearce@spearce.org>
- Date
- Feb 17, 2008, 07:50 UTC
- Message-ID
- <20080217075033.GP24004@spearce.org>
- In-Reply-To
- <7vbq6g90gy.fsf@gitster.siamese.dyndns.org>
Junio C Hamano <gitster@pobox.com> wrote:
Show 9 quoted lines
> Because we spawn the pager as the foreground process and feed > its input via pipe from the real command, we cannot affect the > exit status the shell sees from git command when the pager is in > use (I think there is not much gain we can have by working it > around, though). But at least it may make sense to show the > error message to the user sitting in front of the pager, perhaps > like this. > > What do people think? Have I overlooked any downsides?
I think this is a good idea.
If you are using an interactive pager, you have asked for the content to come to you through that. Not unlike how I have chosen to have the content come to me through a virtual pty and not a printer with green-and-white bar paper. :)
I've been bitten by this in the past a few times, but I have also been knowledgable enough about git, the command I ran, and the project I ran it on to realize something wasn't right with the output I am seeing in the pager and retry without the pager to see the real error(s).
Show 16 quoted lines
> +++ b/usage.c
> @@ -4,12 +4,15 @@
> * Copyright (C) Linus Torvalds, 2005
> */
> #include "git-compat-util.h"
> +#include "cache.h"
>
> static void report(const char *prefix, const char *err, va_list params)
> {
> char msg[256];
> + FILE *outto = (pager_in_use() ? stdout : stderr);
> +
> vsnprintf(msg, sizeof(msg), err, params);
> - fprintf(stderr, "%s%s\n", prefix, msg);
> + fprintf(outto, "%s%s\n", prefix, msg);
> }-- Shawn.