J Smith <dark.pa...@gmail.com> 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to