Thread (2 messages) flat view 2 messages, 2 authors, 2016-06-15

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

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:54:23

J Smith [off-list ref] 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.
quoted hunk
---
 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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help