Re: [PATCH/RFC] grep: add a perlRegexp configuration option

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



J Smith <dark.panda@xxxxxxxxx> 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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]