grep -O: Do not pass color sequences as filenames to pager
With a .gitconfig like this: [color] ui = auto [color "grep"] filename = magenta if stdout is a terminal, the grep machinery will output the color sequence \e[36m before each filename in its output. In the case of "git grep -O foo", output is argv for the pager. Disable color when calling the grep machinery in this case. Signed-off-by: Nazri Ramliy <ayiehere@gmail.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
0c72cead84
commit
e7b082a411
@ -997,6 +997,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
|
|||||||
if (show_in_pager == default_pager)
|
if (show_in_pager == default_pager)
|
||||||
show_in_pager = git_pager(1);
|
show_in_pager = git_pager(1);
|
||||||
if (show_in_pager) {
|
if (show_in_pager) {
|
||||||
|
opt.color = 0;
|
||||||
opt.name_only = 1;
|
opt.name_only = 1;
|
||||||
opt.null_following_name = 1;
|
opt.null_following_name = 1;
|
||||||
opt.output_priv = &path_list;
|
opt.output_priv = &path_list;
|
||||||
|
@ -125,6 +125,21 @@ test_expect_success 'modified file' '
|
|||||||
test_cmp empty out
|
test_cmp empty out
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_config() {
|
||||||
|
git config "$1" "$2" &&
|
||||||
|
test_when_finished "git config --unset $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_expect_success 'copes with color settings' '
|
||||||
|
rm -f actual &&
|
||||||
|
echo grep.h >expect &&
|
||||||
|
test_config color.grep always &&
|
||||||
|
test_config color.grep.filename yellow &&
|
||||||
|
test_config color.grep.separator green &&
|
||||||
|
git grep -O'\''printf "%s\n" >actual'\'' GREP_AND &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'run from subdir' '
|
test_expect_success 'run from subdir' '
|
||||||
rm -f actual &&
|
rm -f actual &&
|
||||||
echo grep.c >expect &&
|
echo grep.c >expect &&
|
||||||
|
Loading…
Reference in New Issue
Block a user