On Tue, Oct 03, 2017 at 02:15:15AM -0400, Jeff King wrote:
> The two reasonable paths forward to me are:
>
> 1. Do nothing. Putting "color.ui = always" in your on-disk config is a
> bad idea, and the right fix is to stop doing it.
>
> 2. Make "always" a synonym for "auto". This has the advantage over (1)
> that you can't shoot yourself in the foot with it (so the expanded
> foot-shooting capabilities of 4c7f1819b don't matter). The
> disadvantage is that you can no longer do:
>
> git -c color.ui=always foo >not-a-tty
>
> to ask for color in all sub-programs of "foo". I have no idea if
> anybody cares. I came up with that example in 4c7f1819b as the most
> plausible reason somebody might actually care about "always", but
> I've never used it myself.
>
> And there _is_ a way to get the same thing, which is:
>
> GIT_PAGER_IN_USE=1 git foo >not-a-tty
>
> I.e., stay in "auto" but make the claim that "auto" really ought to
> be showing color because the output is going to be consumed
> eventually by a human. While it looks a bit funny in my made-up
> example above (because the variables says "pager" but we're not
> actually piping to a pager directly), I think this is the most
> plausible reason that an actual program might want to override the
> auto-color decision.
I've got a series mostly done for option 2. It actually touches quite a
few of the test scripts, since we use "-c color.ui=always" to test
color output. Normally having to touch the test suite a lot gives me
pause that we're breaking something for real users, but I think in this
case the test suite is doing something that normal users simply don't.
A variant of 2 (let's call it 2a) is to convert "always" to "auto"
_only_ for on-disk config, allowing "-c" to still work. This dull the
test-suite pain, but there are still several test scripts which use
test_config and need updating. And it introduces a weird inconsistency
that I'd just as soon skip.
If we buy into the idea that "color.ui=always" is actually a useful
construct to put in your on-disk config (and I'm not sure that I do),
then our options are basically:
3. Go back to the earlier behavior, which i what Junio's 2-patch
revert series does. That has two issues though:
- after patch 2, for-each-ref still respects color.ui=always,
even though it's plumbing. This is maybe-OK because we don't
generate colors unless somebody puts %C() codes into their
format.
- plumbing like diff-tree still doesn't respect color.ui=never
4. Read color.ui everywhere, but downgrade "always" to "auto" in
plumbing commands (which would have to mark themselves as such by
setting a global). This again falls into the "inconsistent and hard
to explain" category, though I think it at least behaves as people
would generally want. Except for people who really do want:
git -c color.always=true foo >file
to produce color when "foo" is a script that uses diff plumbing
under the hood. I don't think that _can_ be solved, since from the
plumbing perspective this is the same as the buggy add--interactive
case.
I still lean towards option 2 (kill off "always"), but I'm trying to
consider the full range of options.
-Peff