J Smith <[email protected]> writes:
> Enables the -P flag for perl regexps by default. When both the
> perlRegexp and extendedRegexp options are enabled, the last enabled
> option wins.
Turning "grep.extendedregexp" from boolean to an extended boolean to
allow "grep.extendedregexp = perl" might be a better alternative.
That way, the user wouldn't have to worry about 7 variants of
grep.fooRegexp variables twenty years down the road, even though the
set of possible values given to "grep.extendedregexp" may have grown
over time by then.
> ---
> Documentation/config.txt | 6 ++++++
> Documentation/git-grep.txt | 6 ++++++
> builtin/grep.c | 17 +++++++++++++++--
> t/t7810-grep.sh | 34 ++++++++++++++++++++++++++++++++++
> 4 files changed, 61 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index a95e5a4..ff3019b 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -1213,6 +1213,12 @@ grep.lineNumber::
> grep.extendedRegexp::
> If set to true, enable '--extended-regexp' option by default.
>
> +grep.perlRegexp::
> + If set to true, enable '--perl-regexp' option by default.
> +
> +When both the 'grep.extendedRegexp' and 'grep.perlRegexp' options
> +are used, the last enabled option wins.
> +
> gpg.program::
> Use this custom program instead of "gpg" found on $PATH when
> making or verifying a PGP signature. The program must support the
> diff --git a/Documentation/git-grep.txt b/Documentation/git-grep.txt
> index 3bec036..8816968 100644
> --- a/Documentation/git-grep.txt
> +++ b/Documentation/git-grep.txt
> @@ -45,6 +45,12 @@ grep.lineNumber::
> grep.extendedRegexp::
> If set to true, enable '--extended-regexp' option by default.
>
> +grep.perlRegexp::
> + If set to true, enable '--perl-regexp' option by default.
> +
> +When both the 'grep.extendedRegexp' and 'grep.perlRegexp' options
> +are used, the last enabled option wins.
> +
>
> OPTIONS
> -------
> diff --git a/builtin/grep.c b/builtin/grep.c
> index 29adb0a..b4475e6 100644
> --- a/builtin/grep.c
> +++ b/builtin/grep.c
> @@ -268,11 +268,24 @@ static int grep_config(const char *var, const char
> *value, void *cb)
> if (userdiff_config(var, value) < 0)
> return -1;
>
> + if (!strcmp(var, "grep.perlregexp")) {
> + if (git_config_bool(var, value)) {
> + opt->fixed = 0;
> + opt->pcre = 1;
> + } else {
> + opt->pcre = 0;
> + }
> + return 0;
> + }
> +
> if (!strcmp(var, "grep.extendedregexp")) {
> - if (git_config_bool(var, value))
> + if (git_config_bool(var, value)) {
> opt->regflags |= REG_EXTENDED;
> - else
> + opt->pcre = 0;
> + opt->fixed = 0;
> + } else {
> opt->regflags &= ~REG_EXTENDED;
> + }
> return 0;
> }
>
> diff --git a/t/t7810-grep.sh b/t/t7810-grep.sh
> index 24e9b19..5479dc9 100755
> --- a/t/t7810-grep.sh
> +++ b/t/t7810-grep.sh
> @@ -729,6 +729,40 @@ test_expect_success LIBPCRE 'grep -P pattern' '
> test_cmp expected actual
> '
>
> +test_expect_success LIBPCRE 'grep pattern with grep.perlRegexp=true' '
> + git \
> + -c grep.perlregexp=true \
> + grep "\p{Ps}.*?\p{Pe}" hello.c >actual &&
> + test_cmp expected actual
> +'
> +
> +test_expect_success LIBPCRE 'grep pattern with grep.perlRegexp=true and then
> grep.extendedRegexp=true' '
> + test_must_fail git \
> + -c grep.perlregexp=true \
> + -c grep.extendedregexp=true \
> + grep "\p{Ps}.*?\p{Pe}" hello.c
> +'
> +
> +test_expect_success LIBPCRE 'grep pattern with grep.extendedRegexp=true and
> then grep.perlRegexp=true' '
> + git \
> + -c grep.extendedregexp=true \
> + -c grep.perlregexp=true \
> + grep "\p{Ps}.*?\p{Pe}" hello.c >actual &&
> + test_cmp expected actual
> +'
> +
> +test_expect_success LIBPCRE 'grep -E pattern with grep.perlRegexp=true' '
> + test_must_fail git \
> + -c grep.perlregexp=true \
> + grep -E "\p{Ps}.*?\p{Pe}" hello.c
> +'
> +
> +test_expect_success LIBPCRE 'grep -G pattern with grep.perlRegexp=true' '
> + test_must_fail git \
> + -c grep.perlregexp=true \
> + grep -G "\p{Ps}.*?\p{Pe}" hello.c
> +'
> +
> test_expect_success 'grep pattern with grep.extendedRegexp=true' '
> >empty &&
> test_must_fail git -c grep.extendedregexp=true \
> --
> 1.7.11.3
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html