Merge branch 'jk/ref-filter-colors-fix'

This is the "theoretically more correct" approach of simply
stepping back to the state before plumbing commands started paying
attention to "color.ui" configuration variable.

Let's run with this one.

* jk/ref-filter-colors-fix:
  tag: respect color.ui config
  Revert "color: check color.ui in git_default_config()"
  Revert "t6006: drop "always" color config tests"
  Revert "color: make "always" the same as "auto" in config"
This commit is contained in:
Junio C Hamano 2017-10-18 10:19:08 +09:00
commit 1c0b983a77
12 changed files with 62 additions and 32 deletions

View File

@ -1058,10 +1058,10 @@ clean.requireForce::
color.branch:: color.branch::
A boolean to enable/disable color in the output of A boolean to enable/disable color in the output of
linkgit:git-branch[1]. May be set to `false` (or `never`) to linkgit:git-branch[1]. May be set to `always`,
disable color entirely, `auto` (or `true` or `always`) in which `false` (or `never`) or `auto` (or `true`), in which case colors are used
case colors are used only when the output is to a terminal. If only when the output is to a terminal. If unset, then the
unset, then the value of `color.ui` is used (`auto` by default). value of `color.ui` is used (`auto` by default).
color.branch.<slot>:: color.branch.<slot>::
Use customized color for branch coloration. `<slot>` is one of Use customized color for branch coloration. `<slot>` is one of
@ -1072,11 +1072,12 @@ color.branch.<slot>::
color.diff:: color.diff::
Whether to use ANSI escape sequences to add color to patches. Whether to use ANSI escape sequences to add color to patches.
If this is set to `true` or `auto`, linkgit:git-diff[1], If this is set to `always`, linkgit:git-diff[1],
linkgit:git-log[1], and linkgit:git-show[1] will use color linkgit:git-log[1], and linkgit:git-show[1] will use color
when output is to the terminal. The value `always` is a for all patches. If it is set to `true` or `auto`, those
historical synonym for `auto`. If unset, then the value of commands will only use color when output is to the terminal.
`color.ui` is used (`auto` by default). If unset, then the value of `color.ui` is used (`auto` by
default).
+ +
This does not affect linkgit:git-format-patch[1] or the This does not affect linkgit:git-format-patch[1] or the
'git-diff-{asterisk}' plumbing commands. Can be overridden on the 'git-diff-{asterisk}' plumbing commands. Can be overridden on the
@ -1140,12 +1141,12 @@ color.grep.<slot>::
-- --
color.interactive:: color.interactive::
When set to `true` or `auto`, use colors for interactive prompts When set to `always`, always use colors for interactive prompts
and displays (such as those used by "git-add --interactive" and and displays (such as those used by "git-add --interactive" and
"git-clean --interactive") when the output is to the terminal. "git-clean --interactive"). When false (or `never`), never.
When false (or `never`), never show colors. The value `always` When set to `true` or `auto`, use colors only when the output is
is a historical synonym for `auto`. If unset, then the value of to the terminal. If unset, then the value of `color.ui` is
`color.ui` is used (`auto` by default). used (`auto` by default).
color.interactive.<slot>:: color.interactive.<slot>::
Use customized color for 'git add --interactive' and 'git clean Use customized color for 'git add --interactive' and 'git clean
@ -1192,10 +1193,10 @@ color.ui::
configuration to set a default for the `--color` option. Set it configuration to set a default for the `--color` option. Set it
to `false` or `never` if you prefer Git commands not to use to `false` or `never` if you prefer Git commands not to use
color unless enabled explicitly with some other configuration color unless enabled explicitly with some other configuration
or the `--color` option. Set it to `true` or `auto` to enable or the `--color` option. Set it to `always` if you want all
color when output is written to the terminal (this is also the output not intended for machine consumption to use color, to
default since Git 1.8.4). The value `always` is a historical `true` or `auto` (this is the default since Git 1.8.4) if you
synonym for `auto`. want such output to use color when written to the terminal.
column.ui:: column.ui::
Specify whether supported commands should output in columns. Specify whether supported commands should output in columns.

View File

@ -93,7 +93,7 @@ static int git_branch_config(const char *var, const char *value, void *cb)
return config_error_nonbool(var); return config_error_nonbool(var);
return color_parse(value, branch_colors[slot]); return color_parse(value, branch_colors[slot]);
} }
return git_default_config(var, value, cb); return git_color_default_config(var, value, cb);
} }
static const char *branch_get_color(enum color_branch ix) static const char *branch_get_color(enum color_branch ix)

View File

@ -126,7 +126,8 @@ static int git_clean_config(const char *var, const char *value, void *cb)
return 0; return 0;
} }
return git_default_config(var, value, cb); /* inspect the color.ui config variable and others */
return git_color_default_config(var, value, cb);
} }
static const char *clean_get_color(enum color_clean ix) static const char *clean_get_color(enum color_clean ix)

View File

@ -275,7 +275,7 @@ static int wait_all(void)
static int grep_cmd_config(const char *var, const char *value, void *cb) static int grep_cmd_config(const char *var, const char *value, void *cb)
{ {
int st = grep_config(var, value, cb); int st = grep_config(var, value, cb);
if (git_default_config(var, value, cb) < 0) if (git_color_default_config(var, value, cb) < 0)
st = -1; st = -1;
if (!strcmp(var, "grep.threads")) { if (!strcmp(var, "grep.threads")) {

View File

@ -554,7 +554,7 @@ static int git_show_branch_config(const char *var, const char *value, void *cb)
return 0; return 0;
} }
return git_default_config(var, value, cb); return git_color_default_config(var, value, cb);
} }
static int omit_in_dense(struct commit *commit, struct commit **rev, int n) static int omit_in_dense(struct commit *commit, struct commit **rev, int n)

View File

@ -158,7 +158,7 @@ static int git_tag_config(const char *var, const char *value, void *cb)
if (starts_with(var, "column.")) if (starts_with(var, "column."))
return git_column_config(var, value, "tag", &colopts); return git_column_config(var, value, "tag", &colopts);
return git_default_config(var, value, cb); return git_color_default_config(var, value, cb);
} }
static void write_tag_body(int fd, const struct object_id *oid) static void write_tag_body(int fd, const struct object_id *oid)

10
color.c
View File

@ -308,7 +308,7 @@ int git_config_colorbool(const char *var, const char *value)
if (!strcasecmp(value, "never")) if (!strcasecmp(value, "never"))
return 0; return 0;
if (!strcasecmp(value, "always")) if (!strcasecmp(value, "always"))
return var ? GIT_COLOR_AUTO : 1; return 1;
if (!strcasecmp(value, "auto")) if (!strcasecmp(value, "auto"))
return GIT_COLOR_AUTO; return GIT_COLOR_AUTO;
} }
@ -368,6 +368,14 @@ int git_color_config(const char *var, const char *value, void *cb)
return 0; return 0;
} }
int git_color_default_config(const char *var, const char *value, void *cb)
{
if (git_color_config(var, value, cb) < 0)
return -1;
return git_default_config(var, value, cb);
}
void color_print_strbuf(FILE *fp, const char *color, const struct strbuf *sb) void color_print_strbuf(FILE *fp, const char *color, const struct strbuf *sb)
{ {
if (*color) if (*color)

View File

@ -16,7 +16,6 @@
#include "string-list.h" #include "string-list.h"
#include "utf8.h" #include "utf8.h"
#include "dir.h" #include "dir.h"
#include "color.h"
struct config_source { struct config_source {
struct config_source *prev; struct config_source *prev;
@ -1351,9 +1350,6 @@ int git_default_config(const char *var, const char *value, void *dummy)
if (starts_with(var, "advice.")) if (starts_with(var, "advice."))
return git_default_advice_config(var, value); return git_default_advice_config(var, value);
if (git_color_config(var, value, dummy) < 0)
return -1;
if (!strcmp(var, "pager.color") || !strcmp(var, "color.pager")) { if (!strcmp(var, "pager.color") || !strcmp(var, "color.pager")) {
pager_use_color = git_config_bool(var,value); pager_use_color = git_config_bool(var,value);
return 0; return 0;

3
diff.c
View File

@ -358,6 +358,9 @@ int git_diff_ui_config(const char *var, const char *value, void *cb)
return 0; return 0;
} }
if (git_color_config(var, value, cb) < 0)
return -1;
return git_diff_basic_config(var, value, cb); return git_diff_basic_config(var, value, cb);
} }

View File

@ -208,11 +208,26 @@ do
has_no_color actual has_no_color actual
' '
test_expect_success "$desc enables colors for color.diff" '
git -c color.diff=always log --format=$color -1 >actual &&
has_color actual
'
test_expect_success "$desc enables colors for color.ui" '
git -c color.ui=always log --format=$color -1 >actual &&
has_color actual
'
test_expect_success "$desc respects --color" ' test_expect_success "$desc respects --color" '
git log --format=$color -1 --color >actual && git log --format=$color -1 --color >actual &&
has_color actual has_color actual
' '
test_expect_success "$desc respects --no-color" '
git -c color.ui=always log --format=$color -1 --no-color >actual &&
has_no_color actual
'
test_expect_success TTY "$desc respects --color=auto (stdout is tty)" ' test_expect_success TTY "$desc respects --color=auto (stdout is tty)" '
test_terminal git log --format=$color -1 --color=auto >actual && test_terminal git log --format=$color -1 --color=auto >actual &&
has_color actual has_color actual
@ -225,11 +240,6 @@ do
has_no_color actual has_no_color actual
) )
' '
test_expect_success TTY "$desc respects --no-color" '
test_terminal git log --format=$color -1 --no-color >actual &&
has_no_color actual
'
done done
test_expect_success '%C(always,...) enables color even without tty' ' test_expect_success '%C(always,...) enables color even without tty' '

View File

@ -442,6 +442,11 @@ test_expect_success '--color can override tty check' '
test_cmp expected.color actual test_cmp expected.color actual
' '
test_expect_success 'color.ui=always does not override tty check' '
git -c color.ui=always for-each-ref --format="$color_format" >actual &&
test_cmp expected.bare actual
'
cat >expected <<\EOF cat >expected <<\EOF
heads/master heads/master
tags/master tags/master

View File

@ -1918,6 +1918,12 @@ test_expect_success '--color overrides auto-color' '
test_cmp expect.color actual test_cmp expect.color actual
' '
test_expect_success 'color.ui=always overrides auto-color' '
git -c color.ui=always tag $color_args >actual.raw &&
test_decode_color <actual.raw >actual &&
test_cmp expect.color actual
'
test_expect_success 'setup --merged test tags' ' test_expect_success 'setup --merged test tags' '
git tag mergetest-1 HEAD~2 && git tag mergetest-1 HEAD~2 &&
git tag mergetest-2 HEAD~1 && git tag mergetest-2 HEAD~1 &&