From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>, "Jeff King" <peff@peff.net>,
"Jeffrey Walton" <noloader@gmail.com>,
"Michał Kiedrowicz" <michal.kiedrowicz@gmail.com>,
"J Smith" <dark.panda@gmail.com>,
"Victor Leschuk" <vleschuk@gmail.com>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
"Fredrik Kuivinen" <frekui@gmail.com>,
"Brandon Williams" <bmwill@google.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: [PATCH 04/29] log: add exhaustive tests for pattern style options & config
Date: Thu, 11 May 2017 09:18:04 +0000 [thread overview]
Message-ID: <20170511091829.5634-5-avarab@gmail.com> (raw)
In-Reply-To: <20170511091829.5634-1-avarab@gmail.com>
Add exhaustive tests for how the different grep.patternType options &
the corresponding command-line options affect git-log.
Before this change it was possible to patch revision.c so that the
--basic-regexp option was synonymous with --extended-regexp, and
--perl-regexp wasn't recognized at all, and still have 100% of the
test suite pass.
This was because the first test being modified here, added in commit
34a4ae55b2 ("log --grep: use the same helper to set -E/-F options as
"git grep"", 2012-10-03), didn't actually check whether we'd enabled
extended regular expressions as distinct from re-toggling non-fixed
string support.
Fix that by changing the pattern to a pattern that'll only match if
--extended-regexp option is provided, but won't match under the
default --basic-regexp option.
Other potential regressions were possible since there were no tests
for the rest of the combinations of grep.patternType configuration
toggles & corresponding git-log command-line options. Add exhaustive
tests for those.
The patterns being passed to fixed/basic/extended/PCRE are carefully
crafted to return the wrong thing if the grep engine were to pick any
other matching method than the one it's told to use.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
t/t4202-log.sh | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 76 insertions(+), 1 deletion(-)
diff --git a/t/t4202-log.sh b/t/t4202-log.sh
index f577990716..6d1411abea 100755
--- a/t/t4202-log.sh
+++ b/t/t4202-log.sh
@@ -262,7 +262,23 @@ test_expect_success 'log --grep -i' '
test_expect_success 'log -F -E --grep=<ere> uses ere' '
echo second >expect &&
- git log -1 --pretty="tformat:%s" -F -E --grep=s.c.nd >actual &&
+ git log -1 --pretty="tformat:%s" -F -E --grep="(s).c.nd" >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success PCRE 'log -F -E --perl-regexp --grep=<pcre> uses PCRE' '
+ test_when_finished "rm -rf num_commits" &&
+ git init num_commits &&
+ (
+ cd num_commits &&
+ test_commit 1d &&
+ test_commit 2e
+ ) &&
+ echo 2e >expect &&
+ git -C num_commits log -1 --pretty="tformat:%s" -F -E --perl-regexp --grep="[\d]" >actual &&
+ test_cmp expect actual &&
+ echo 1d >expect &&
+ git -C num_commits log -1 --pretty="tformat:%s" -F -E --grep="[\d]" >actual &&
test_cmp expect actual
'
@@ -280,6 +296,65 @@ test_expect_success 'log with grep.patternType configuration and command line' '
test_cmp expect actual
'
+test_expect_success 'log with various grep.patternType configurations & command-lines' '
+ git init pattern-type &&
+ (
+ cd pattern-type &&
+ test_commit 1 file A &&
+ test_commit "(1|2)" file B &&
+
+ echo "(1|2)" >expect.fixed &&
+ cp expect.fixed expect.basic &&
+ cp expect.fixed expect.extended &&
+ cp expect.fixed expect.perl &&
+
+ git -c grep.patternType=fixed log --pretty=tformat:%s \
+ --grep="(1|2)" >actual.fixed &&
+ git -c grep.patternType=basic log --pretty=tformat:%s \
+ --grep="(.|.)" >actual.basic &&
+ git -c grep.patternType=extended log --pretty=tformat:%s \
+ --grep="\|2" >actual.extended &&
+ if test_have_prereq PCRE
+ then
+ git -c grep.patternType=perl log --pretty=tformat:%s \
+ --grep="[\d]\|" >actual.perl
+ fi &&
+ test_cmp expect.fixed actual.fixed &&
+ test_cmp expect.basic actual.basic &&
+ test_cmp expect.extended actual.extended &&
+ if test_have_prereq PCRE
+ then
+ test_cmp expect.perl actual.perl
+ fi &&
+
+ git log --pretty=tformat:%s -F \
+ --grep="(1|2)" >actual.fixed.short-arg &&
+ git log --pretty=tformat:%s -E \
+ --grep="\|2" >actual.extended.short-arg &&
+ test_cmp expect.fixed actual.fixed.short-arg &&
+ test_cmp expect.extended actual.extended.short-arg &&
+
+ git log --pretty=tformat:%s --fixed-strings \
+ --grep="(1|2)" >actual.fixed.long-arg &&
+ git log --pretty=tformat:%s --basic-regexp \
+ --grep="(.|.)" >actual.basic.long-arg &&
+ git log --pretty=tformat:%s --extended-regexp \
+ --grep="\|2" >actual.extended.long-arg &&
+ if test_have_prereq PCRE
+ then
+ git log --pretty=tformat:%s --perl-regexp \
+ --grep="[\d]\|" >actual.perl.long-arg
+ fi &&
+ test_cmp expect.fixed actual.fixed.long-arg &&
+ test_cmp expect.basic actual.basic.long-arg &&
+ test_cmp expect.extended actual.extended.long-arg &&
+ if test_have_prereq PCRE
+ then
+ test_cmp expect.perl actual.perl.long-arg
+ fi
+ )
+'
+
cat > expect <<EOF
* Second
* sixth
--
2.11.0
next prev parent reply other threads:[~2017-05-11 9:19 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-11 9:18 [PATCH 00/29] Easy to review grep & pre-PCRE changes Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 01/29] Makefile & configure: reword inaccurate comment about PCRE Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 02/29] grep & rev-list doc: stop promising libpcre for --perl-regexp Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 03/29] test-lib: rename the LIBPCRE prerequisite to PCRE Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` Ævar Arnfjörð Bjarmason [this message]
2017-05-12 4:48 ` [PATCH 04/29] log: add exhaustive tests for pattern style options & config Junio C Hamano
2017-05-13 18:02 ` Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 05/29] grep: add a test asserting that --perl-regexp dies when !PCRE Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 06/29] grep: add a test for backreferences in PCRE patterns Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 07/29] grep: change non-ASCII -i test to stop using --debug Ævar Arnfjörð Bjarmason
2017-05-11 18:31 ` Brandon Williams
2017-05-11 18:35 ` Ævar Arnfjörð Bjarmason
2017-05-11 20:05 ` Brandon Williams
2017-05-11 9:18 ` [PATCH 08/29] grep: add tests for --threads=N and grep.threads Ævar Arnfjörð Bjarmason
2017-05-11 18:36 ` Brandon Williams
2017-05-11 19:22 ` Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 09/29] grep: amend submodule recursion test for regex engine testing Ævar Arnfjörð Bjarmason
2017-05-12 4:59 ` Junio C Hamano
2017-05-13 17:33 ` Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 10/29] grep: add tests for grep pattern types being passed to submodules Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 11/29] grep: add a test helper function for less verbose -f \0 tests Ævar Arnfjörð Bjarmason
2017-05-12 5:06 ` Junio C Hamano
2017-05-13 11:33 ` Ævar Arnfjörð Bjarmason
2017-05-15 1:29 ` Junio C Hamano
2017-05-11 9:18 ` [PATCH 12/29] grep: prepare for testing binary regexes containing rx metacharacters Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 13/29] grep: add tests to fix blind spots with \0 patterns Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 14/29] perf: add a GIT_PERF_MAKE_COMMAND for when *_MAKE_OPTS won't do Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 15/29] perf: emit progress output when unpacking & building Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 16/29] perf: add a performance comparison test of grep -G, -E and -P Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 17/29] perf: add a performance comparison of fixed-string grep Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 18/29] grep: catch a missing enum in switch statement Ævar Arnfjörð Bjarmason
2017-05-11 20:08 ` Brandon Williams
2017-05-11 20:40 ` Stefan Beller
2017-05-11 20:50 ` Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 19/29] grep: remove redundant regflags assignment under PCRE Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 20/29] grep: remove redundant `regflags &= ~REG_EXTENDED` assignments Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 21/29] grep: factor test for \0 in grep patterns into a function Ævar Arnfjörð Bjarmason
2017-05-11 20:15 ` Brandon Williams
2017-05-11 20:22 ` Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 22/29] grep: change the internal PCRE macro names to be PCRE1 Ævar Arnfjörð Bjarmason
2017-05-11 20:10 ` Brandon Williams
2017-05-11 9:18 ` [PATCH 23/29] grep: change internal *pcre* variable & function names to be *pcre1* Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 24/29] grep: move two functions to avoid forward declaration Ævar Arnfjörð Bjarmason
2017-05-11 20:14 ` Brandon Williams
2017-05-11 20:20 ` Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 25/29] test-lib: add a PTHREADS prerequisite Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 26/29] pack-objects & index-pack: add test for --threads warning Ævar Arnfjörð Bjarmason
2017-05-11 20:17 ` Brandon Williams
2017-05-11 20:34 ` Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 27/29] pack-objects: fix buggy warning about threads Ævar Arnfjörð Bjarmason
2017-05-11 9:18 ` [PATCH 28/29] grep: given --threads with NO_PTHREADS=YesPlease, warn Ævar Arnfjörð Bjarmason
2017-05-11 20:21 ` Brandon Williams
2017-05-11 20:33 ` Ævar Arnfjörð Bjarmason
2017-05-11 20:43 ` Brandon Williams
2017-05-11 21:20 ` [PATCH] C style: use standard style for "TRANSLATORS" comments Ævar Arnfjörð Bjarmason
2017-05-11 21:41 ` Jonathan Nieder
2017-05-11 21:50 ` Brandon Williams
2017-05-12 5:20 ` Johannes Sixt
2017-05-30 16:02 ` Jiang Xin
2017-05-30 23:03 ` Junio C Hamano
2017-05-11 9:18 ` [PATCH 29/29] grep: assert that threading is enabled when calling grep_{lock,unlock} Ævar Arnfjörð Bjarmason
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170511091829.5634-5-avarab@gmail.com \
--to=avarab@gmail.com \
--cc=bmwill@google.com \
--cc=dark.panda@gmail.com \
--cc=frekui@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=michal.kiedrowicz@gmail.com \
--cc=noloader@gmail.com \
--cc=pclouds@gmail.com \
--cc=peff@peff.net \
--cc=vleschuk@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).