Mercurial > hg
changeset 32102:9a85ea1daf49 stable
color: turn 'ui.color' into a boolean (auto or off)
Previously, 'ui.color=yes' meant "always show color", While
"ui.color=auto" meant "use color automatically when it appears
sensible".
This feels problematic to some people because if an administrator has
disabled color with "ui.color=off", and a user turn it back on using
"color=on", it will get surprised (because it breaks their output when
redirected to a file.) This patch changes ui.color=true to only move the
default value of --color from "never" to "auto".
I'm not really in favor of this changes as I suspect the above case will
be pretty rare and I would rather keep the logic simpler. However, I'm
providing this patch to help the 4.2 release in the case were others
decide to make this changes.
Users that want to force colors without specifying --color on the
command line can use the 'ui.formatted' config knob, which had to be
enabled in a handful of tests for this patch.
Nice summary table (credit: Augie Fackler)
That is, before this patch:
+--------------------+--------------------+--------------------+
| | not a tty | a tty |
| | --color not set | --color not set |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color (not set) | no color | no color |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color = auto | no color | color |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color = yes | *color* | color |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color = no | no color | no color |
| | | |
+--------------------+--------------------+--------------------+
(if --color is specified, it always clobbers the setting in [ui])
and after this patch:
+--------------------+--------------------+--------------------+
| | not a tty | a tty |
| | --color not set | --color not set |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color (not set) | no color | no color |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color = auto | no color | color |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color = yes | *no color* | color |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color = no | no color | no color |
| | | |
+--------------------+--------------------+--------------------+
(if --color is specified, it always clobbers the setting in [ui])
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Tue, 02 May 2017 20:01:54 +0200 |
parents | 8e1708947496 |
children | 9a98023ac8db |
files | mercurial/color.py mercurial/help/color.txt mercurial/help/config.txt tests/test-diff-color.t tests/test-pager-legacy.t tests/test-pager.t tests/test-status-color.t |
diffstat | 7 files changed, 50 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/color.py Mon May 01 16:43:43 2017 +0200 +++ b/mercurial/color.py Tue May 02 20:01:54 2017 +0200 @@ -193,7 +193,14 @@ return 'debug' auto = (config == 'auto') - always = not auto and util.parsebool(config) + always = False + if not auto and util.parsebool(config): + # we want the config to behave like a boolean, "on" is actually auto + if ui.configsource('ui', 'color') == '--color': + always = True + else: + auto = True + if not always and not auto: return None
--- a/mercurial/help/color.txt Mon May 01 16:43:43 2017 +0200 +++ b/mercurial/help/color.txt Tue May 02 20:01:54 2017 +0200 @@ -5,15 +5,15 @@ other commands have analogous colors. It is possible to customize these colors. -To enable color (default) use:: +To enable color (default) whenever possible use:: [ui] - color = auto + color = yes To disable color use:: [ui] - color = never + color = no See :hg:`help config.ui.color` for details.
--- a/mercurial/help/config.txt Mon May 01 16:43:43 2017 +0200 +++ b/mercurial/help/config.txt Tue May 02 20:01:54 2017 +0200 @@ -1884,9 +1884,9 @@ By default, the first bundle advertised by the server is used. ``color`` - When to colorize output. Possible value are Boolean, "always", "auto", - "never", or "debug". (default: "auto"). "auto" will use color - whenever it seems possible. See :hg:`help color` for details. + When to colorize output. Possible value are Boolean ("yes" or "no"), or + "debug". (default: "yes"). "yes" will use color whenever it seems possible. + See :hg:`help color` for details. ``commitsubrepos`` Whether to commit modified subrepositories when committing the
--- a/tests/test-diff-color.t Mon May 01 16:43:43 2017 +0200 +++ b/tests/test-diff-color.t Tue May 02 20:01:54 2017 +0200 @@ -3,6 +3,7 @@ $ cat <<EOF >> $HGRCPATH > [ui] > color = always + > formatted = always > [color] > mode = ansi > EOF @@ -49,6 +50,38 @@ a c +(check that 'ui.color=yes' match '--color=auto') + + $ hg diff --nodates --config ui.formatted=no + diff -r cf9f4ba66af2 a + --- a/a + +++ b/a + @@ -2,7 +2,7 @@ + c + a + a + -b + +dd + a + a + c + +(check that 'ui.color=no' disable color) + + $ hg diff --nodates --config ui.formatted=yes --config ui.color=no + diff -r cf9f4ba66af2 a + --- a/a + +++ b/a + @@ -2,7 +2,7 @@ + c + a + a + -b + +dd + a + a + c + --unified=2 $ hg diff --nodates -U 2
--- a/tests/test-pager-legacy.t Mon May 01 16:43:43 2017 +0200 +++ b/tests/test-pager-legacy.t Tue May 02 20:01:54 2017 +0200 @@ -161,6 +161,7 @@ $ cat >> $HGRCPATH <<EOF > [ui] > color = yes + > formatted = yes > [color] > mode = ansi > EOF