From e7b082a4118d15e901f4f44b067394b314a0ae6a Mon Sep 17 00:00:00 2001 From: Nazri Ramliy Date: Fri, 2 Jul 2010 21:55:06 -0500 Subject: [PATCH] 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 Signed-off-by: Jonathan Nieder Signed-off-by: Junio C Hamano --- builtin/grep.c | 1 + t/t7811-grep-open.sh | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/builtin/grep.c b/builtin/grep.c index 4b8ddbe0d5..7a9427d357 100644 --- a/builtin/grep.c +++ b/builtin/grep.c @@ -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; diff --git a/t/t7811-grep-open.sh b/t/t7811-grep-open.sh index c110441344..568a6f2b69 100755 --- a/t/t7811-grep-open.sh +++ b/t/t7811-grep-open.sh @@ -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 &&