Skip to content

Commit

Permalink
grep -O: Do not pass color sequences as filenames to pager
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Nazri Ramliy authored and Junio C Hamano committed Jul 7, 2010
1 parent 0c72cea commit e7b082a
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 0 deletions.
1 change: 1 addition & 0 deletions builtin/grep.c
Original file line number Diff line number Diff line change
Expand Up @@ -997,6 +997,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
if (show_in_pager == default_pager)
show_in_pager = git_pager(1);
if (show_in_pager) {
opt.color = 0;
opt.name_only = 1;
opt.null_following_name = 1;
opt.output_priv = &path_list;
Expand Down
15 changes: 15 additions & 0 deletions t/t7811-grep-open.sh
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,21 @@ test_expect_success 'modified file' '
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' '
rm -f actual &&
echo grep.c >expect &&
Expand Down

0 comments on commit e7b082a

Please sign in to comment.