Skip to content

Commit

Permalink
Merge branch 'jk/ref-filter-colors-fix' into maint
Browse files Browse the repository at this point in the history
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.

* 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"
  color: make "always" the same as "auto" in config
  provide --color option for all ref-filter users
  t3205: use --color instead of color.branch=always
  t3203: drop "always" color test
  t6006: drop "always" color config tests
  t7502: use diff.noprefix for --verbose test
  t7508: use test_terminal for color output
  t3701: use test-terminal to collect color output
  t4015: prefer --color to -c color.diff=always
  test-terminal: set TERM=vt100
  • Loading branch information
gitster committed Oct 18, 2017
2 parents 4e4a0c6 + b521fd1 commit e3e3c6a
Show file tree
Hide file tree
Showing 23 changed files with 103 additions and 71 deletions.
5 changes: 5 additions & 0 deletions Documentation/git-for-each-ref.txt
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,11 @@ OPTIONS
`xx`; for example `%00` interpolates to `\0` (NUL),
`%09` to `\t` (TAB) and `%0a` to `\n` (LF).

--color[=<when>]:
Respect any colors specified in the `--format` option. The
`<when>` field must be one of `always`, `never`, or `auto` (if
`<when>` is absent, behave as if `always` was given).

--shell::
--perl::
--python::
Expand Down
5 changes: 5 additions & 0 deletions Documentation/git-tag.txt
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,11 @@ options for details.
variable if it exists, or lexicographic order otherwise. See
linkgit:git-config[1].

--color[=<when>]:
Respect any colors specified in the `--format` option. The
`<when>` field must be one of `always`, `never`, or `auto` (if
`<when>` is absent, behave as if `always` was given).

-i::
--ignore-case::
Sorting and filtering tags are case insensitive.
Expand Down
2 changes: 1 addition & 1 deletion builtin/branch.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ static int git_branch_config(const char *var, const char *value, void *cb)
return config_error_nonbool(var);
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)
Expand Down
3 changes: 2 additions & 1 deletion builtin/clean.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,8 @@ static int git_clean_config(const char *var, const char *value, void *cb)
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)
Expand Down
1 change: 1 addition & 0 deletions builtin/for-each-ref.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
OPT_GROUP(""),
OPT_INTEGER( 0 , "count", &maxcount, N_("show only <n> matched refs")),
OPT_STRING( 0 , "format", &format.format, N_("format"), N_("format to use for the output")),
OPT__COLOR(&format.use_color, N_("respect format colors")),
OPT_CALLBACK(0 , "sort", sorting_tail, N_("key"),
N_("field name to sort on"), &parse_opt_ref_sorting),
OPT_CALLBACK(0, "points-at", &filter.points_at,
Expand Down
2 changes: 1 addition & 1 deletion builtin/grep.c
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ static int wait_all(void)
static int grep_cmd_config(const char *var, const char *value, void *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;

if (!strcmp(var, "grep.threads")) {
Expand Down
2 changes: 1 addition & 1 deletion builtin/show-branch.c
Original file line number Diff line number Diff line change
Expand Up @@ -554,7 +554,7 @@ static int git_show_branch_config(const char *var, const char *value, void *cb)
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)
Expand Down
3 changes: 2 additions & 1 deletion builtin/tag.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ static int git_tag_config(const char *var, const char *value, void *cb)

if (starts_with(var, "column."))
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)
Expand Down Expand Up @@ -411,6 +411,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
},
OPT_STRING( 0 , "format", &format.format, N_("format"),
N_("format to use for the output")),
OPT__COLOR(&format.use_color, N_("respect format colors")),
OPT_BOOL('i', "ignore-case", &icase, N_("sorting and filtering are case insensitive")),
OPT_END()
};
Expand Down
8 changes: 8 additions & 0 deletions color.c
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,14 @@ int git_color_config(const char *var, const char *value, void *cb)
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)
{
if (*color)
Expand Down
4 changes: 0 additions & 4 deletions config.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
#include "string-list.h"
#include "utf8.h"
#include "dir.h"
#include "color.h"

struct config_source {
struct config_source *prev;
Expand Down Expand Up @@ -1351,9 +1350,6 @@ int git_default_config(const char *var, const char *value, void *dummy)
if (starts_with(var, "advice."))
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")) {
pager_use_color = git_config_bool(var,value);
return 0;
Expand Down
3 changes: 3 additions & 0 deletions diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,9 @@ int git_diff_ui_config(const char *var, const char *value, void *cb)
return 0;
}

if (git_color_config(var, value, cb) < 0)
return -1;

return git_diff_basic_config(var, value, cb);
}

Expand Down
8 changes: 1 addition & 7 deletions t/t3203-branch-output.sh
Original file line number Diff line number Diff line change
Expand Up @@ -253,13 +253,7 @@ test_expect_success '%(color) omitted without tty' '
'

test_expect_success TTY '%(color) present with tty' '
test_terminal env TERM=vt100 git branch $color_args >actual.raw &&
test_decode_color <actual.raw >actual &&
test_cmp expect.color actual
'

test_expect_success 'color.branch=always overrides auto-color' '
git -c color.branch=always branch $color_args >actual.raw &&
test_terminal git branch $color_args >actual.raw &&
test_decode_color <actual.raw >actual &&
test_cmp expect.color actual
'
Expand Down
5 changes: 2 additions & 3 deletions t/t3205-branch-color.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ test_expect_success 'set up some sample branches' '
# choose non-default colors to make sure config
# is taking effect
test_expect_success 'set up some color config' '
git config color.branch always &&
git config color.branch.local blue &&
git config color.branch.remote yellow &&
git config color.branch.current cyan
Expand All @@ -24,7 +23,7 @@ test_expect_success 'regular output shows colors' '
<BLUE>other<RESET>
<YELLOW>remotes/origin/master<RESET>
EOF
git branch -a >actual.raw &&
git branch --color -a >actual.raw &&
test_decode_color <actual.raw >actual &&
test_cmp expect actual
'
Expand All @@ -36,7 +35,7 @@ test_expect_success 'verbose output shows colors' '
<BLUE>other <RESET> $oid foo
<YELLOW>remotes/origin/master<RESET> $oid foo
EOF
git branch -v -a >actual.raw &&
git branch --color -v -a >actual.raw &&
test_decode_color <actual.raw >actual &&
test_cmp expect actual
'
Expand Down
18 changes: 13 additions & 5 deletions t/t3701-add-interactive.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

test_description='add -i basic tests'
. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-terminal.sh

if ! test_have_prereq PERL
then
Expand Down Expand Up @@ -380,14 +381,11 @@ test_expect_success 'patch mode ignores unmerged entries' '
test_cmp expected diff
'

test_expect_success 'diffs can be colorized' '
test_expect_success TTY 'diffs can be colorized' '
git reset --hard &&
# force color even though the test script has no terminal
test_config color.ui always &&
echo content >test &&
printf y | git add -p >output 2>&1 &&
printf y | test_terminal git add -p >output 2>&1 &&
# We do not want to depend on the exact coloring scheme
# git uses for diffs, so just check that we saw some kind of color.
Expand Down Expand Up @@ -485,4 +483,14 @@ test_expect_success 'hunk-editing handles custom comment char' '
git diff --exit-code
'

test_expect_success 'add -p works even with color.ui=always' '
git reset --hard &&
echo change >>file &&
test_config color.ui always &&
echo y | git add -p &&
echo file >expect &&
git diff --cached --name-only >actual &&
test_cmp expect actual
'

test_done
28 changes: 14 additions & 14 deletions t/t4015-diff-whitespace.sh
Original file line number Diff line number Diff line change
Expand Up @@ -821,7 +821,7 @@ test_expect_success 'diff that introduces a line with only tabs' '
echo "test" >x &&
git commit -m "initial" x &&
echo "{NTN}" | tr "NT" "\n\t" >>x &&
git -c color.diff=always diff | test_decode_color >current &&
git diff --color | test_decode_color >current &&
cat >expected <<-\EOF &&
<BOLD>diff --git a/x b/x<RESET>
Expand Down Expand Up @@ -851,7 +851,7 @@ test_expect_success 'diff that introduces and removes ws breakages' '
echo "2. and a new line "
} >x &&
git -c color.diff=always diff |
git diff --color |
test_decode_color >current &&
cat >expected <<-\EOF &&
Expand Down Expand Up @@ -923,50 +923,50 @@ test_expect_success 'ws-error-highlight test setup' '

test_expect_success 'test --ws-error-highlight option' '
git -c color.diff=always diff --ws-error-highlight=default,old |
git diff --color --ws-error-highlight=default,old |
test_decode_color >current &&
test_cmp expect.default-old current &&
git -c color.diff=always diff --ws-error-highlight=all |
git diff --color --ws-error-highlight=all |
test_decode_color >current &&
test_cmp expect.all current &&
git -c color.diff=always diff --ws-error-highlight=none |
git diff --color --ws-error-highlight=none |
test_decode_color >current &&
test_cmp expect.none current
'

test_expect_success 'test diff.wsErrorHighlight config' '
git -c color.diff=always -c diff.wsErrorHighlight=default,old diff |
git -c diff.wsErrorHighlight=default,old diff --color |
test_decode_color >current &&
test_cmp expect.default-old current &&
git -c color.diff=always -c diff.wsErrorHighlight=all diff |
git -c diff.wsErrorHighlight=all diff --color |
test_decode_color >current &&
test_cmp expect.all current &&
git -c color.diff=always -c diff.wsErrorHighlight=none diff |
git -c diff.wsErrorHighlight=none diff --color |
test_decode_color >current &&
test_cmp expect.none current
'

test_expect_success 'option overrides diff.wsErrorHighlight' '
git -c color.diff=always -c diff.wsErrorHighlight=none \
diff --ws-error-highlight=default,old |
git -c diff.wsErrorHighlight=none \
diff --color --ws-error-highlight=default,old |
test_decode_color >current &&
test_cmp expect.default-old current &&
git -c color.diff=always -c diff.wsErrorHighlight=default \
diff --ws-error-highlight=all |
git -c diff.wsErrorHighlight=default \
diff --color --ws-error-highlight=all |
test_decode_color >current &&
test_cmp expect.all current &&
git -c color.diff=always -c diff.wsErrorHighlight=all \
diff --ws-error-highlight=none |
git -c diff.wsErrorHighlight=all \
diff --color --ws-error-highlight=none |
test_decode_color >current &&
test_cmp expect.none current
Expand Down
2 changes: 1 addition & 1 deletion t/t4202-log.sh
Original file line number Diff line number Diff line change
Expand Up @@ -750,7 +750,7 @@ test_expect_success 'log.decorate config parsing' '
'

test_expect_success TTY 'log output on a TTY' '
git log --oneline --decorate >expect.short &&
git log --color --oneline --decorate >expect.short &&
test_terminal git log --oneline >actual &&
test_cmp expect.short actual
Expand Down
3 changes: 1 addition & 2 deletions t/t6006-rev-list-format.sh
Original file line number Diff line number Diff line change
Expand Up @@ -229,8 +229,7 @@ do
'

test_expect_success TTY "$desc respects --color=auto (stdout is tty)" '
test_terminal env TERM=vt100 \
git log --format=$color -1 --color=auto >actual &&
test_terminal git log --format=$color -1 --color=auto >actual &&
has_color actual
'

Expand Down
12 changes: 8 additions & 4 deletions t/t6300-for-each-ref.sh
Original file line number Diff line number Diff line change
Expand Up @@ -426,8 +426,7 @@ test_expect_success 'set up color tests' '
'

test_expect_success TTY '%(color) shows color with a tty' '
test_terminal env TERM=vt100 \
git for-each-ref --format="$color_format" >actual.raw &&
test_terminal git for-each-ref --format="$color_format" >actual.raw &&
test_decode_color <actual.raw >actual &&
test_cmp expected.color actual
'
Expand All @@ -437,12 +436,17 @@ test_expect_success '%(color) does not show color without tty' '
test_cmp expected.bare actual
'

test_expect_success 'color.ui=always can override tty check' '
git -c color.ui=always for-each-ref --format="$color_format" >actual.raw &&
test_expect_success '--color can override tty check' '
git for-each-ref --color --format="$color_format" >actual.raw &&
test_decode_color <actual.raw >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
heads/master
tags/master
Expand Down
8 changes: 7 additions & 1 deletion t/t7004-tag.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1914,7 +1914,13 @@ test_expect_success '%(color) omitted without tty' '
'

test_expect_success TTY '%(color) present with tty' '
test_terminal env TERM=vt100 git tag $color_args >actual.raw &&
test_terminal git tag $color_args >actual.raw &&
test_decode_color <actual.raw >actual &&
test_cmp expect.color actual
'

test_expect_success '--color overrides auto-color' '
git tag --color $color_args >actual.raw &&
test_decode_color <actual.raw >actual &&
test_cmp expect.color actual
'
Expand Down
6 changes: 3 additions & 3 deletions t/t7006-pager.sh
Original file line number Diff line number Diff line change
Expand Up @@ -239,15 +239,15 @@ test_expect_success 'no color when stdout is a regular file' '
test_expect_success TTY 'color when writing to a pager' '
rm -f paginated.out &&
test_config color.ui auto &&
test_terminal env TERM=vt100 git log &&
test_terminal git log &&
colorful paginated.out
'

test_expect_success TTY 'colors are suppressed by color.pager' '
rm -f paginated.out &&
test_config color.ui auto &&
test_config color.pager false &&
test_terminal env TERM=vt100 git log &&
test_terminal git log &&
! colorful paginated.out
'

Expand All @@ -266,7 +266,7 @@ test_expect_success 'color when writing to a file intended for a pager' '
test_expect_success TTY 'colors are sent to pager for external commands' '
test_config alias.externallog "!git log" &&
test_config color.ui auto &&
test_terminal env TERM=vt100 git -p externallog &&
test_terminal git -p externallog &&
colorful paginated.out
'

Expand Down
4 changes: 2 additions & 2 deletions t/t7502-commit.sh
Original file line number Diff line number Diff line change
Expand Up @@ -171,9 +171,9 @@ test_expect_success 'verbose' '

test_expect_success 'verbose respects diff config' '
test_config color.diff always &&
test_config diff.noprefix true &&
git status -v >actual &&
grep "\[1mdiff --git" actual
grep "diff --git negative negative" actual
'

mesg_with_comment_and_newlines='
Expand Down
Loading

0 comments on commit e3e3c6a

Please sign in to comment.