grep: prepare for new header field filter
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Sat, 29 Sep 2012 04:41:27 +0000 (11:41 +0700)
committerJunio C Hamano <gitster@pobox.com>
Sat, 29 Sep 2012 18:40:58 +0000 (11:40 -0700)
grep supports only author and committer headers, which have the same
special treatment that later headers may or may not have. Check for
field type and only strip_timestamp() when the field is either author
or committer.

GREP_HEADER_FIELD_MAX is put in the grep_header_field enum to be
calculated automatically, correctly, as long as it's at the end of the
enum.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
grep.c
grep.h
t/t7810-grep.sh

diff --git a/grep.c b/grep.c
index 898be6ebfaf2a4247ee3a64993253237b4dcc706..8d73995e87c5f76d6fd0bac0d2a758774415fc6b 100644 (file)
--- a/grep.c
+++ b/grep.c
@@ -720,7 +720,14 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
                if (strncmp(bol, field, len))
                        return 0;
                bol += len;
-               saved_ch = strip_timestamp(bol, &eol);
+               switch (p->field) {
+               case GREP_HEADER_AUTHOR:
+               case GREP_HEADER_COMMITTER:
+                       saved_ch = strip_timestamp(bol, &eol);
+                       break;
+               default:
+                       break;
+               }
        }
 
  again:
diff --git a/grep.h b/grep.h
index 8a28a676fc3b16a0857e3f4b80824d929b6b444d..d54adbe56c4665dad6626f2c8c845da7233bd4a9 100644 (file)
--- a/grep.h
+++ b/grep.h
@@ -29,9 +29,11 @@ enum grep_context {
 
 enum grep_header_field {
        GREP_HEADER_AUTHOR = 0,
-       GREP_HEADER_COMMITTER
+       GREP_HEADER_COMMITTER,
+
+       /* Must be at the end of the enum */
+       GREP_HEADER_FIELD_MAX
 };
-#define GREP_HEADER_FIELD_MAX (GREP_HEADER_COMMITTER + 1)
 
 struct grep_pat {
        struct grep_pat *next;
index 91db352cc7ed5faa24eb27542d5ce8c4fe622303..30eaa9a54b8b7ea855a2cb781202cfc79e29f217 100755 (executable)
@@ -628,6 +628,18 @@ test_expect_success 'log --all-match --grep --grep --author takes intersection'
        test_cmp expect actual
 '
 
+test_expect_success 'log --author does not search in timestamp' '
+       : >expect &&
+       git log --author="$GIT_AUTHOR_DATE" >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'log --committer does not search in timestamp' '
+       : >expect &&
+       git log --committer="$GIT_COMMITTER_DATE" >actual &&
+       test_cmp expect actual
+'
+
 test_expect_success 'grep with CE_VALID file' '
        git update-index --assume-unchanged t/t &&
        rm t/t &&