зеркало из https://github.com/microsoft/git.git
Merge branch 'jc/grep-commandline-vs-configuration' into maint
"git -c grep.patternType=extended log --basic-regexp" misbehaved because the internal API to access the grep machinery was not designed well. * jc/grep-commandline-vs-configuration: grep: further simplify setting the pattern type
This commit is contained in:
Коммит
7b163e9187
22
grep.c
22
grep.c
|
@ -163,17 +163,7 @@ void grep_init(struct grep_opt *opt, const char *prefix)
|
||||||
color_set(opt->color_sep, def->color_sep);
|
color_set(opt->color_sep, def->color_sep);
|
||||||
}
|
}
|
||||||
|
|
||||||
void grep_commit_pattern_type(enum grep_pattern_type pattern_type, struct grep_opt *opt)
|
static void grep_set_pattern_type_option(enum grep_pattern_type pattern_type, struct grep_opt *opt)
|
||||||
{
|
|
||||||
if (pattern_type != GREP_PATTERN_TYPE_UNSPECIFIED)
|
|
||||||
grep_set_pattern_type_option(pattern_type, opt);
|
|
||||||
else if (opt->pattern_type_option != GREP_PATTERN_TYPE_UNSPECIFIED)
|
|
||||||
grep_set_pattern_type_option(opt->pattern_type_option, opt);
|
|
||||||
else if (opt->extended_regexp_option)
|
|
||||||
grep_set_pattern_type_option(GREP_PATTERN_TYPE_ERE, opt);
|
|
||||||
}
|
|
||||||
|
|
||||||
void grep_set_pattern_type_option(enum grep_pattern_type pattern_type, struct grep_opt *opt)
|
|
||||||
{
|
{
|
||||||
switch (pattern_type) {
|
switch (pattern_type) {
|
||||||
case GREP_PATTERN_TYPE_UNSPECIFIED:
|
case GREP_PATTERN_TYPE_UNSPECIFIED:
|
||||||
|
@ -205,6 +195,16 @@ void grep_set_pattern_type_option(enum grep_pattern_type pattern_type, struct gr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void grep_commit_pattern_type(enum grep_pattern_type pattern_type, struct grep_opt *opt)
|
||||||
|
{
|
||||||
|
if (pattern_type != GREP_PATTERN_TYPE_UNSPECIFIED)
|
||||||
|
grep_set_pattern_type_option(pattern_type, opt);
|
||||||
|
else if (opt->pattern_type_option != GREP_PATTERN_TYPE_UNSPECIFIED)
|
||||||
|
grep_set_pattern_type_option(opt->pattern_type_option, opt);
|
||||||
|
else if (opt->extended_regexp_option)
|
||||||
|
grep_set_pattern_type_option(GREP_PATTERN_TYPE_ERE, opt);
|
||||||
|
}
|
||||||
|
|
||||||
static struct grep_pat *create_grep_pat(const char *pat, size_t patlen,
|
static struct grep_pat *create_grep_pat(const char *pat, size_t patlen,
|
||||||
const char *origin, int no,
|
const char *origin, int no,
|
||||||
enum grep_pat_token t,
|
enum grep_pat_token t,
|
||||||
|
|
1
grep.h
1
grep.h
|
@ -145,7 +145,6 @@ struct grep_opt {
|
||||||
extern void init_grep_defaults(void);
|
extern void init_grep_defaults(void);
|
||||||
extern int grep_config(const char *var, const char *value, void *);
|
extern int grep_config(const char *var, const char *value, void *);
|
||||||
extern void grep_init(struct grep_opt *, const char *prefix);
|
extern void grep_init(struct grep_opt *, const char *prefix);
|
||||||
void grep_set_pattern_type_option(enum grep_pattern_type, struct grep_opt *opt);
|
|
||||||
void grep_commit_pattern_type(enum grep_pattern_type, struct grep_opt *opt);
|
void grep_commit_pattern_type(enum grep_pattern_type, struct grep_opt *opt);
|
||||||
|
|
||||||
extern void append_grep_pat(struct grep_opt *opt, const char *pat, size_t patlen, const char *origin, int no, enum grep_pat_token t);
|
extern void append_grep_pat(struct grep_opt *opt, const char *pat, size_t patlen, const char *origin, int no, enum grep_pat_token t);
|
||||||
|
|
|
@ -1971,16 +1971,16 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
|
||||||
} else if (!strcmp(arg, "--grep-debug")) {
|
} else if (!strcmp(arg, "--grep-debug")) {
|
||||||
revs->grep_filter.debug = 1;
|
revs->grep_filter.debug = 1;
|
||||||
} else if (!strcmp(arg, "--basic-regexp")) {
|
} else if (!strcmp(arg, "--basic-regexp")) {
|
||||||
grep_set_pattern_type_option(GREP_PATTERN_TYPE_BRE, &revs->grep_filter);
|
revs->grep_filter.pattern_type_option = GREP_PATTERN_TYPE_BRE;
|
||||||
} else if (!strcmp(arg, "--extended-regexp") || !strcmp(arg, "-E")) {
|
} else if (!strcmp(arg, "--extended-regexp") || !strcmp(arg, "-E")) {
|
||||||
grep_set_pattern_type_option(GREP_PATTERN_TYPE_ERE, &revs->grep_filter);
|
revs->grep_filter.pattern_type_option = GREP_PATTERN_TYPE_ERE;
|
||||||
} else if (!strcmp(arg, "--regexp-ignore-case") || !strcmp(arg, "-i")) {
|
} else if (!strcmp(arg, "--regexp-ignore-case") || !strcmp(arg, "-i")) {
|
||||||
revs->grep_filter.regflags |= REG_ICASE;
|
revs->grep_filter.regflags |= REG_ICASE;
|
||||||
DIFF_OPT_SET(&revs->diffopt, PICKAXE_IGNORE_CASE);
|
DIFF_OPT_SET(&revs->diffopt, PICKAXE_IGNORE_CASE);
|
||||||
} else if (!strcmp(arg, "--fixed-strings") || !strcmp(arg, "-F")) {
|
} else if (!strcmp(arg, "--fixed-strings") || !strcmp(arg, "-F")) {
|
||||||
grep_set_pattern_type_option(GREP_PATTERN_TYPE_FIXED, &revs->grep_filter);
|
revs->grep_filter.pattern_type_option = GREP_PATTERN_TYPE_FIXED;
|
||||||
} else if (!strcmp(arg, "--perl-regexp")) {
|
} else if (!strcmp(arg, "--perl-regexp")) {
|
||||||
grep_set_pattern_type_option(GREP_PATTERN_TYPE_PCRE, &revs->grep_filter);
|
revs->grep_filter.pattern_type_option = GREP_PATTERN_TYPE_PCRE;
|
||||||
} else if (!strcmp(arg, "--all-match")) {
|
} else if (!strcmp(arg, "--all-match")) {
|
||||||
revs->grep_filter.all_match = 1;
|
revs->grep_filter.all_match = 1;
|
||||||
} else if (!strcmp(arg, "--invert-grep")) {
|
} else if (!strcmp(arg, "--invert-grep")) {
|
||||||
|
|
|
@ -255,6 +255,20 @@ test_expect_success 'log -F -E --grep=<ere> uses ere' '
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'log with grep.patternType configuration' '
|
||||||
|
>expect &&
|
||||||
|
git -c grep.patterntype=fixed \
|
||||||
|
log -1 --pretty=tformat:%s --grep=s.c.nd >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'log with grep.patternType configuration and command line' '
|
||||||
|
echo second >expect &&
|
||||||
|
git -c grep.patterntype=fixed \
|
||||||
|
log -1 --pretty=tformat:%s --basic-regexp --grep=s.c.nd >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
cat > expect <<EOF
|
cat > expect <<EOF
|
||||||
* Second
|
* Second
|
||||||
* sixth
|
* sixth
|
||||||
|
|
Загрузка…
Ссылка в новой задаче