On Tue, Sep 3, 2013 at 9:41 AM, Jeff King <peff@xxxxxxxx> wrote: > On Mon, Sep 02, 2013 at 10:27:48PM -0400, Dale R. Worley wrote: > >> > I guess the "else" could and should be dropped. If you do so (and >> > possibly insert a blank line between the DEFAULT_PAGER case and the >> > "pager = NULL" case), you get a nice pattern >> > >> > if (!pager) >> > try_something(); >> > if (!pager) >> > try_next_option(); >> >> That's true, but it would change the effect of using "cat" as a value: >> "cat" as a value of DEFAULT_PAGER would cause git_pager() to return >> NULL, whereas now it causes git_pager() to return "cat". (All other >> places where "cat" can be a value are translated to NULL already.) >> >> This is why I want to know what the *intended* behavior is, because we >> might be changing Git's behavior, and I want to know that if we do >> that, we're changing it to what it should be. And I haven't seen >> anyone venture an opinion on what the intended behavior is. > > I'll venture my opinion. We should do this: > > -- >8 -- > Subject: pager: turn on "cat" optimization for DEFAULT_PAGER > > If the user specifies a pager of "cat" (or the empty > string), whether it is in the environment or from config, we > automagically optimize it out to mean "no pager" and avoid > forking at all. We treat an empty pager variable similary. > > However, we did not apply this optimization when > DEFAULT_PAGER was set to "cat" (or the empty string). There > is no reason to treat DEFAULT_PAGER any differently. The > optimization should not be user-visible (unless the user has > a bizarre "cat" in their PATH). And even if it is, we are > better off behaving consistently between the compile-time > default and the environment and config settings. > > The stray "else" we are removing from this code was > introduced by 402461a (pager: do not fork a pager if PAGER > is set to empty., 2006-04-16). At that time, the line > directly above used: > > if (!pager) > pager = "less"; > > as a fallback, meaning that it could not possibly trigger > the optimization. Later, a3d023d (Provide a build time > default-pager setting, 2009-10-30) turned that constant into > a build-time setting which could be anything, but didn't > loosen the "else" to let DEFAULT_PAGER use the optimization. > > Noticed-by: Dale R. Worley <worley@xxxxxxxxxxxx> > Suggested-by: Matthieu Moy <Matthieu.Moy@xxxxxxxxxxxxxxx> > Signed-off-by: Jeff King <peff@xxxxxxxx> > --- > pager.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/pager.c b/pager.c > index c1ecf65..fa19765 100644 > --- a/pager.c > +++ b/pager.c > @@ -54,7 +54,7 @@ const char *git_pager(int stdout_is_tty) > pager = getenv("PAGER"); > if (!pager) > pager = DEFAULT_PAGER; > - else if (!*pager || !strcmp(pager, "cat")) > + if (!*pager || !strcmp(pager, "cat")) Hmmpf. It's sometimes useful to actually pipe through cat rather than disabling the pager, as this changes the return-code from isatty. I sometimes use this for debugging-purposes. Does this patch break that? -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html