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

[PATCH v4 05/31] log: make --regexp-ignore-case work with --perl-regexp

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
May 25, 2017, 19:45 UTC
Message-ID
<20170525194535.9324-6-avarab@gmail.com>
In-Reply-To
<20170525194535.9324-1-avarab@gmail.com>

Make the --regexp-ignore-case option work with --perl-regexp. This never worked, and there was no test for this. Fix the bug and add a test.

When PCRE support was added in commit 63e7e9d8b6 ("git-grep: Learn PCRE", 2011-05-09) compile_pcre_regexp() would only check opt->ignore_case, but when the --perl-regexp option was added in commit 727b6fc3ed ("log --grep: accept --basic-regexp and --perl-regexp", 2012-10-03) the code didn't set the opt->ignore_case.

Change the test suite to test for -i and --invert-regexp with basic/extended/perl patterns in addition to fixed, which was the only patternType that was tested for before in combination with those options.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 revision.c     |  1 +
 t/t4202-log.sh | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 56 insertions(+), 5 deletions(-)
diff --git a/revision.c b/revision.c
index 8a8c1789c7..4883cdd2d0 100644
--- a/revision.c
+++ b/revision.c
@@ -1991,6 +1991,7 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
 	} else if (!strcmp(arg, "--extended-regexp") || !strcmp(arg, "-E")) {
 		revs->grep_filter.pattern_type_option = GREP_PATTERN_TYPE_ERE;
 	} else if (!strcmp(arg, "--regexp-ignore-case") || !strcmp(arg, "-i")) {
+		revs->grep_filter.ignore_case = 1;
 		revs->grep_filter.regflags |= REG_ICASE;
 		DIFF_OPT_SET(&revs->diffopt, PICKAXE_IGNORE_CASE);
 	} else if (!strcmp(arg, "--fixed-strings") || !strcmp(arg, "-F")) {
diff --git a/t/t4202-log.sh b/t/t4202-log.sh
index 948fd719d2..c25eb9afd1 100755
--- a/t/t4202-log.sh
+++ b/t/t4202-log.sh
@@ -231,14 +231,47 @@ second
 initial
 EOF
 test_expect_success 'log --invert-grep --grep' '
-	git log --pretty="tformat:%s" --invert-grep --grep=th --grep=Sec >actual &&
-	test_cmp expect actual
+	# Fixed
+	git -c grep.patternType=fixed log --pretty="tformat:%s" --invert-grep --grep=th --grep=Sec >actual &&
+	test_cmp expect actual &&
+
+	# POSIX basic
+	git -c grep.patternType=basic log --pretty="tformat:%s" --invert-grep --grep=t[h] --grep=S[e]c >actual &&
+	test_cmp expect actual &&
+
+	# POSIX extended
+	git -c grep.patternType=basic log --pretty="tformat:%s" --invert-grep --grep=t[h] --grep=S[e]c >actual &&
+	test_cmp expect actual &&
+
+	# PCRE
+	if test_have_prereq PCRE
+	then
+		git -c grep.patternType=perl log --pretty="tformat:%s" --invert-grep --grep=t[h] --grep=S[e]c >actual &&
+		test_cmp expect actual
+	fi
 '
 
 test_expect_success 'log --invert-grep --grep -i' '
 	echo initial >expect &&
-	git log --pretty="tformat:%s" --invert-grep -i --grep=th --grep=Sec >actual &&
-	test_cmp expect actual
+
+	# Fixed
+	git -c grep.patternType=fixed log --pretty="tformat:%s" --invert-grep -i --grep=th --grep=Sec >actual &&
+	test_cmp expect actual &&
+
+	# POSIX basic
+	git -c grep.patternType=basic log --pretty="tformat:%s" --invert-grep -i --grep=t[h] --grep=S[e]c >actual &&
+	test_cmp expect actual &&
+
+	# POSIX extended
+	git -c grep.patternType=extended log --pretty="tformat:%s" --invert-grep -i --grep=t[h] --grep=S[e]c >actual &&
+	test_cmp expect actual &&
+
+	# PCRE
+	if test_have_prereq PCRE
+	then
+		git -c grep.patternType=perl log --pretty="tformat:%s" --invert-grep -i --grep=t[h] --grep=S[e]c >actual &&
+		test_cmp expect actual
+	fi
 '
 
 test_expect_success 'log --grep option parsing' '
@@ -256,8 +289,25 @@ test_expect_success 'log -i --grep' '
 
 test_expect_success 'log --grep -i' '
 	echo Second >expect &&
+
+	# Fixed
 	git log -1 --pretty="tformat:%s" --grep=sec -i >actual &&
-	test_cmp expect actual
+	test_cmp expect actual &&
+
+	# POSIX basic
+	git -c grep.patternType=basic log -1 --pretty="tformat:%s" --grep=s[e]c -i >actual &&
+	test_cmp expect actual &&
+
+	# POSIX extended
+	git -c grep.patternType=extended log -1 --pretty="tformat:%s" --grep=s[e]c -i >actual &&
+	test_cmp expect actual &&
+
+	# PCRE
+	if test_have_prereq PCRE
+	then
+		git -c grep.patternType=perl log -1 --pretty="tformat:%s" --grep=s[e]c -i >actual &&
+		test_cmp expect actual
+	fi
 '
 
 test_expect_success 'log -F -E --grep=<ere> uses ere' '
-- 
2.13.0.303.g4ebf302169
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 6 of 32 in “Easy to review grep & pre-PCRE changes”
  1. 00/31 Easy to review grep & pre-PCRE changesÆvar Arnfjörð Bjarmason, May 25, 2017
  2. 01/31 Makefile & configure: reword inaccurate comment about PCREÆvar Arnfjörð Bjarmason, May 25, 2017
  3. 02/31 grep & rev-list doc: stop promising libpcre for --perl-regexpÆvar Arnfjörð Bjarmason, May 25, 2017
  4. 04/31 log: add exhaustive tests for pattern style options & configÆvar Arnfjörð Bjarmason, May 25, 2017
  5. 03/31 test-lib: rename the LIBPCRE prerequisite to PCREÆvar Arnfjörð Bjarmason, May 25, 2017
  6. 05/31 log: make --regexp-ignore-case work with --perl-regexpÆvar Arnfjörð Bjarmason, May 25, 2017
  7. 07/31 grep: add a test for backreferences in PCRE patternsÆvar Arnfjörð Bjarmason, May 25, 2017
  8. 08/31 grep: change non-ASCII -i test to stop using --debugÆvar Arnfjörð Bjarmason, May 25, 2017
  9. 06/31 grep: add a test asserting that --perl-regexp dies when !PCREÆvar Arnfjörð Bjarmason, May 25, 2017
  10. 09/31 grep: add tests for --threads=N and grep.threadsÆvar Arnfjörð Bjarmason, May 25, 2017
  11. 10/31 grep: amend submodule recursion test for regex engine testingÆvar Arnfjörð Bjarmason, May 25, 2017
  12. 11/31 grep: add tests for grep pattern types being passed to submodulesÆvar Arnfjörð Bjarmason, May 25, 2017
  13. 12/31 grep: add a test helper function for less verbose -f \0 testsÆvar Arnfjörð Bjarmason, May 25, 2017
  14. 13/31 grep: prepare for testing binary regexes containing rx metacharactersÆvar Arnfjörð Bjarmason, May 25, 2017
  15. 14/31 grep: add tests to fix blind spots with \0 patternsÆvar Arnfjörð Bjarmason, May 25, 2017
  16. 16/31 perf: emit progress output when unpacking & buildingÆvar Arnfjörð Bjarmason, May 25, 2017
  17. 18/31 perf: add a comparison test of grep regex engines with -FÆvar Arnfjörð Bjarmason, May 25, 2017
  18. 17/31 perf: add a comparison test of grep regex enginesÆvar Arnfjörð Bjarmason, May 25, 2017
  19. 15/31 perf: add a GIT_PERF_MAKE_COMMAND for when *_MAKE_OPTS won't doÆvar Arnfjörð Bjarmason, May 25, 2017
  20. 19/31 perf: add a comparison test of log --grep regex enginesÆvar Arnfjörð Bjarmason, May 25, 2017
  21. 20/31 perf: add a comparison test of log --grep regex engines with -FÆvar Arnfjörð Bjarmason, May 25, 2017
  22. 24/31 grep: change the internal PCRE macro names to be PCRE1Ævar Arnfjörð Bjarmason, May 25, 2017
  23. 23/31 grep: factor test for \0 in grep patterns into a functionÆvar Arnfjörð Bjarmason, May 25, 2017
  24. 21/31 grep: catch a missing enum in switch statementÆvar Arnfjörð Bjarmason, May 25, 2017
  25. 22/31 grep: remove redundant regflags assignmentsÆvar Arnfjörð Bjarmason, May 25, 2017
  26. 28/31 pack-objects & index-pack: add test for --threads warningÆvar Arnfjörð Bjarmason, May 25, 2017
  27. 30/31 grep: given --threads with NO_PTHREADS=YesPlease, warnÆvar Arnfjörð Bjarmason, May 25, 2017
  28. 25/31 grep: change internal *pcre* variable & function names to be *pcre1*Ævar Arnfjörð Bjarmason, May 25, 2017
  29. 31/31 grep: assert that threading is enabled when calling grep_{lock,unlock}Ævar Arnfjörð Bjarmason, May 25, 2017
  30. 29/31 pack-objects: fix buggy warning about threadsÆvar Arnfjörð Bjarmason, May 25, 2017
  31. 27/31 test-lib: add a PTHREADS prerequisiteÆvar Arnfjörð Bjarmason, May 25, 2017
  32. 26/31 grep: move is_fixed() earlier to avoid forward declarationÆvar Arnfjörð Bjarmason, May 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.