path: root/t/
diff options
authorJunio C Hamano <>2010-01-18 04:09:06 (GMT)
committerJunio C Hamano <>2010-01-26 03:28:13 (GMT)
commit80235ba79ef43349f455cce869397b3e726f4058 (patch)
tree3ec0247fba884fe708ec771833a981cb4ebf61ea /t/
parentff6d26a0e1d8fad775010fa3b689c0c027da8bb0 (diff)
"log --author=me --grep=it" should find intersection, not union
Historically, any grep filter in "git log" family of commands were taken as restricting to commits with any of the words in the commit log message. However, the user almost always want to find commits "done by this person on that topic". With "--all-match" option, a series of grep patterns can be turned into a requirement that all of them must produce a match, but that makes it impossible to ask for "done by me, on either this or that" with: log --author=me --committer=him --grep=this --grep=that because it will require both "this" and "that" to appear. Change the "header" parser of grep library to treat the headers specially, and parse it as: (all-match-OR (HEADER-AUTHOR me) (HEADER-COMMITTER him) (OR (PATTERN this) (PATTERN that) ) ) Even though the "log" command line parser doesn't give direct access to the extended grep syntax to group terms with parentheses, this change will cover the majority of the case the users would want. This incidentally revealed that one test in t7002 was bogus. It ran: log --author=Thor --grep=Thu --format='%s' and expected (wrongly) "Thu" to match "Thursday" in the author/committer date, but that would never match, as the timestamp in raw commit buffer does not have the name of the day-of-the-week. Signed-off-by: Junio C Hamano <>
Diffstat (limited to 't/')
1 files changed, 9 insertions, 1 deletions
diff --git a/t/ b/t/
index 76c5e09..6baa446 100755
--- a/t/
+++ b/t/
@@ -357,7 +357,7 @@ test_expect_success 'log grep (4)' '
test_expect_success 'log grep (5)' '
- git log --author=Thor -F --grep=Thu --pretty=tformat:%s >actual &&
+ git log --author=Thor -F --pretty=tformat:%s >actual &&
( echo third ; echo initial ) >expect &&
test_cmp expect actual
@@ -368,6 +368,14 @@ test_expect_success 'log grep (6)' '
test_cmp expect actual
+test_expect_success 'log --grep --author implicitly uses all-match' '
+ # grep matches initial and second but not third
+ # author matches only initial and third
+ git log --author="A U Thor" --grep=s --grep=l --format=%s >actual &&
+ echo initial >expect &&
+ test_cmp expect actual
test_expect_success 'grep with CE_VALID file' '
git update-index --assume-unchanged t/t &&
rm t/t &&