git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4 11/19] grep: make grep.patternType=[pcre|pcre1] a synonym for "perl"

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Apr 25, 2017, 21:05 UTC
Message-ID
<20170425210548.24612-12-avarab@gmail.com>
In-Reply-To
<20170425210548.24612-1-avarab@gmail.com>

Make the pattern types "pcre" & "pcre1" synonyms for the long-standing "perl" grep.patternType.

This change is part of a longer patch series to add pcre2 support to Git. It's nice to be able to performance test PCRE v1 v.s. v2 without having to recompile git, and doing that via grep.patternType makes sense.

However, just adding "pcre2" when we only have "perl" would be confusing, so start by adding a "pcre" & "pcre1" synonym.

In the future "perl" and "pcre" might be changed to default to "pcre2" instead of "pcre1", and depending on how Git is compiled the more specific "pcre1" or "pcre2" pattern types might produce an error.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 Documentation/config.txt           |  9 +++++++++
 grep.c                             |  4 +++-
 t/t7810-grep.sh                    | 10 ++++++++++
 t/t7814-grep-recurse-submodules.sh |  4 ++++
 4 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 475e874d51..5ef12d0694 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1624,6 +1624,15 @@ grep.patternType::
 	'fixed', or 'perl' will enable the `--basic-regexp`, `--extended-regexp`,
 	`--fixed-strings`, or `--perl-regexp` option accordingly, while the
 	value 'default' will return to the default matching behavior.
++
+The 'pcre' and 'pcre1' values are synonyms for 'perl'. The other
+values starting with 'pcre' are reserved for future use, e.g. if we'd
+like to use 'pcre2' for the PCRE v2 library.
++
+In the future 'perl' and 'pcre' might become synonyms for some other
+implementation or PCRE version, such as 'pcre2', while the more
+specific 'pcre1' & 'pcre2' might throw errors depending on whether git
+is compiled to include those libraries.
 
 grep.extendedRegexp::
 	If set to true, enable `--extended-regexp` option by default. This
diff --git a/grep.c b/grep.c
index 6995f0989a..62c3749d9f 100644
--- a/grep.c
+++ b/grep.c
@@ -60,7 +60,9 @@ static int parse_pattern_type_arg(const char *opt, const char *arg)
 		return GREP_PATTERN_TYPE_ERE;
 	else if (!strcmp(arg, "fixed"))
 		return GREP_PATTERN_TYPE_FIXED;
-	else if (!strcmp(arg, "perl"))
+	else if (!strcmp(arg, "perl") ||
+		 !strcmp(arg, "pcre") ||
+		 !strcmp(arg, "pcre1"))
 		return GREP_PATTERN_TYPE_PCRE;
 	die("bad %s argument: %s", opt, arg);
 }
diff --git a/t/t7810-grep.sh b/t/t7810-grep.sh
index ec8fe585a7..7199356d35 100755
--- a/t/t7810-grep.sh
+++ b/t/t7810-grep.sh
@@ -1512,4 +1512,14 @@ test_expect_success 'grep does not report i-t-a and assume unchanged with -L' '
 	test_cmp expected actual
 '
 
+test_expect_success LIBPCRE "grep with grep.patternType synonyms perl/pcre/pcre1" '
+	echo "#include <stdio.h>" >expected &&
+	git -c grep.patternType=perl  grep -h --no-line-number "st(?=dio)" >actual &&
+	test_cmp expected actual &&
+	git -c grep.patternType=pcre  grep -h --no-line-number "st(?=dio)" >actual &&
+	test_cmp expected actual &&
+	git -c grep.patternType=pcre1 grep -h --no-line-number "st(?=dio)" >actual &&
+	test_cmp expected actual
+'
+
 test_done
diff --git a/t/t7814-grep-recurse-submodules.sh b/t/t7814-grep-recurse-submodules.sh
index e1822feaf1..325fde53ef 100755
--- a/t/t7814-grep-recurse-submodules.sh
+++ b/t/t7814-grep-recurse-submodules.sh
@@ -358,6 +358,10 @@ test_expect_success 'grep --recurse-submodules should pass the pattern type alon
 		EOF
 		test_cmp expect actual &&
 		git -c grep.patternType=perl grep --recurse-submodules -e "(.|.)[\d]" >actual &&
+		test_cmp expect actual &&
+		git -c grep.patternType=pcre grep --recurse-submodules -e "(.|.)[\d]" >actual &&
+		test_cmp expect actual &&
+		git -c grep.patternType=pcre1 grep --recurse-submodules -e "(.|.)[\d]" >actual &&
 		test_cmp expect actual
 	fi
 '
-- 
2.11.0
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 20 of 24 in “PCRE v1 improvements & PCRE v2 support”
  1. 00/19 PCRE v1 improvements & PCRE v2 supportÆvar Arnfjörð Bjarmason, Apr 25, 2017
  2. 01/19 grep: amend submodule recursion test in preparation for rx engine testingÆvar Arnfjörð Bjarmason, Apr 25, 2017
  3. 02/19 grep: add tests for grep pattern types being passed to submodulesÆvar Arnfjörð Bjarmason, Apr 25, 2017
  4. 03/19 grep: submodule-related case statements should die if new fields are addedÆvar Arnfjörð Bjarmason, Apr 25, 2017
  5. 04/19 grep: remove redundant regflags assignment under PCREÆvar Arnfjörð Bjarmason, Apr 25, 2017
  6. 05/19 grep: remove redundant `regflags &= ~REG_EXTENDED` assignmentsÆvar Arnfjörð Bjarmason, Apr 25, 2017
  7. Junio C HamanoApr 26, 2017
  8. Junio C HamanoApr 26, 2017
  9. 05/19 grep: remove redundant `regflags &= ~REG_EXTENDED` assignmentsÆvar Arnfjörð Bjarmason, Apr 26, 2017
  10. Junio C HamanoApr 27, 2017
  11. 06/19 Makefile & configure: reword outdated comment about PCREÆvar Arnfjörð Bjarmason, Apr 25, 2017
  12. 07/19 grep: add a test for backreferences in PCRE patternsÆvar Arnfjörð Bjarmason, Apr 25, 2017
  13. 09/19 log: add -P as a synonym for --perl-regexpÆvar Arnfjörð Bjarmason, Apr 25, 2017
  14. 08/19 log: add exhaustive tests for pattern style options & configÆvar Arnfjörð Bjarmason, Apr 25, 2017
  15. 10/19 grep & rev-list doc: stop promising libpcre for --perl-regexpÆvar Arnfjörð Bjarmason, Apr 25, 2017
  16. 12/19 test-lib: rename the LIBPCRE prerequisite to PCREÆvar Arnfjörð Bjarmason, Apr 25, 2017
  17. 13/19 grep: change the internal PCRE macro names to be PCRE1Ævar Arnfjörð Bjarmason, Apr 25, 2017
  18. 14/19 grep: change the internal PCRE code & header names to be PCRE1Ævar Arnfjörð Bjarmason, Apr 25, 2017
  19. 15/19 perf: add a performance comparison test of grep -E and -PÆvar Arnfjörð Bjarmason, Apr 25, 2017
  20. 11/19 grep: make grep.patternType=[pcre|pcre1] a synonym for "perl"Ævar Arnfjörð Bjarmason, Apr 25, 2017
  21. 16/19 grep: add support for the PCRE v1 JIT APIÆvar Arnfjörð Bjarmason, Apr 25, 2017
  22. 17/19 grep: add support for PCRE v2Ævar Arnfjörð Bjarmason, Apr 25, 2017
  23. 18/19 grep: remove support for concurrent use of both PCRE v1 & v2Ævar Arnfjörð Bjarmason, Apr 25, 2017
  24. 19/19 Makefile & configure: make PCRE v2 the default PCRE implementationÆvar Arnfjörð Bjarmason, Apr 25, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.