pretty: colorize pattern matches in commit messages
The "git log" command limits its output to the commits that contain strings matched by a pattern when the "--grep=<pattern>" option is used, but unlike output from "git grep -e <pattern>", the matches are not highlighted, making them harder to spot. Teach the pretty-printer code to highlight matches from the "--grep=<pattern>", "--author=<pattern>" and "--committer=<pattern>" options (to view the last one, you may have to ask for --pretty=fuller). Also, it must be noted that we are effectively greping the content twice (because it would be a hassle to rework the existing matching code to do a /g match and then pass it all down to the coloring code), however it only slows down "git log --author=^H" on this repository by around 1-2% (compared to v2.33.0), so it should be a small enough slow down to justify the addition of the feature. Signed-off-by: Hamza Mahfooz <someguy@effective-light.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
3f566c4e69
commit
6a5c337922
@ -449,6 +449,57 @@ test_expect_success !FAIL_PREREQS 'log with various grep.patternType configurati
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'log --author' '
|
||||
cat >expect <<-\EOF &&
|
||||
Author: <BOLD;RED>A U<RESET> Thor <author@example.com>
|
||||
EOF
|
||||
git log -1 --color=always --author="A U" >log &&
|
||||
grep Author log >actual.raw &&
|
||||
test_decode_color <actual.raw >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'log --committer' '
|
||||
cat >expect <<-\EOF &&
|
||||
Commit: C O Mitter <committer@<BOLD;RED>example<RESET>.com>
|
||||
EOF
|
||||
git log -1 --color=always --pretty=fuller --committer="example" >log &&
|
||||
grep "Commit:" log >actual.raw &&
|
||||
test_decode_color <actual.raw >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'log -i --grep with color' '
|
||||
cat >expect <<-\EOF &&
|
||||
<BOLD;RED>Sec<RESET>ond
|
||||
<BOLD;RED>sec<RESET>ond
|
||||
EOF
|
||||
git log --color=always -i --grep=^sec >log &&
|
||||
grep -i sec log >actual.raw &&
|
||||
test_decode_color <actual.raw >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '-c color.grep.selected log --grep' '
|
||||
cat >expect <<-\EOF &&
|
||||
<GREEN>th<RESET><BOLD;RED>ir<RESET><GREEN>d<RESET>
|
||||
EOF
|
||||
git -c color.grep.selected="green" log --color=always --grep=ir >log &&
|
||||
grep ir log >actual.raw &&
|
||||
test_decode_color <actual.raw >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '-c color.grep.matchSelected log --grep' '
|
||||
cat >expect <<-\EOF &&
|
||||
<BLUE>i<RESET>n<BLUE>i<RESET>t<BLUE>i<RESET>al
|
||||
EOF
|
||||
git -c color.grep.matchSelected="blue" log --color=always --grep=i >log &&
|
||||
grep al log >actual.raw &&
|
||||
test_decode_color <actual.raw >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
cat > expect <<EOF
|
||||
* Second
|
||||
* sixth
|
||||
|
Reference in New Issue
Block a user