Browse Source

grep: prepare for new header field filter

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>
maint
Nguyễn Thái Ngọc Duy 13 years ago committed by Junio C Hamano
parent
commit
ad4813b3c2
  1. 9
      grep.c
  2. 6
      grep.h
  3. 12
      t/t7810-grep.sh

9
grep.c

@ -720,7 +720,14 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol, @@ -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:

6
grep.h

@ -29,9 +29,11 @@ enum grep_context { @@ -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;

12
t/t7810-grep.sh

@ -628,6 +628,18 @@ test_expect_success 'log --all-match --grep --grep --author takes intersection' @@ -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 &&

Loading…
Cancel
Save