]> git.ipfire.org Git - thirdparty/git.git/commitdiff
grep tests: add missing "grep.patternType" config tests
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Wed, 16 Feb 2022 00:00:33 +0000 (01:00 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 16 Feb 2022 02:00:50 +0000 (18:00 -0800)
Extend the grep tests to assert that setting
"grep.patternType=extended" followed by "grep.patternType=default"
will behave as if "--basic-regexp" was provided, and not as
"--extended-regexp". In a subsequent commit we'll need to treat
"grep.patternType=default" as a special-case, but let's make sure we
ignore it if it's being set to "default" following an earlier
non-"default" "grep.patternType" setting.

Let's also test what happens when we have a sequence of "extended"
followed by "default" and "fixed". In that case the "fixed" should
prevail, as well as tests to check that a "grep.extendedRegexp=true"
followed by a "grep.extendedRegexp=false" behaves as though
"grep.extendedRegexp" wasn't provided.

See [1] for the source of some of these tests, and their
initial (pseudocode) implementation, and [2] for a later discussion
about a breakage due to missing testing (which had been noted in [1]
all along).

1. https://lore.kernel.org/git/xmqqv8zf6j86.fsf@gitster.g/
2. https://lore.kernel.org/git/xmqqpmoczwtu.fsf@gitster.g/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t7810-grep.sh

index 6f1103b54b9ca0840c05f06644e11400f87193cb..69356011713fad1add8044471f01f9d6d3dee892 100755 (executable)
@@ -461,6 +461,58 @@ do
                -c grep.extendedRegexp=true \
                -c grep.patternType=basic
 
+       # grep.extendedRegexp is last-one-wins
+       test_pattern_type "$H" "$HC" "$L" BRE \
+               -c grep.extendedRegexp=true \
+               -c grep.extendedRegexp=false
+
+       # grep.patternType=basic pays no attention to grep.extendedRegexp
+       test_pattern_type "$H" "$HC" "$L" BRE \
+               -c grep.extendedRegexp=true \
+               -c grep.patternType=basic \
+               -c grep.extendedRegexp=false
+
+       # grep.patternType=extended pays no attention to grep.extendedRegexp
+       test_pattern_type "$H" "$HC" "$L" ERE \
+               -c grep.extendedRegexp=true \
+               -c grep.patternType=extended \
+               -c grep.extendedRegexp=false
+
+       # grep.extendedRegexp is used with a last-one-wins grep.patternType=default
+       test_pattern_type "$H" "$HC" "$L" ERE \
+               -c grep.patternType=fixed \
+               -c grep.extendedRegexp=true \
+               -c grep.patternType=default
+
+       # grep.extendedRegexp is used with earlier grep.patternType=default
+       test_pattern_type "$H" "$HC" "$L" ERE \
+               -c grep.extendedRegexp=false \
+               -c grep.patternType=default \
+               -c grep.extendedRegexp=true
+
+       # grep.extendedRegexp is used with a last-one-loses grep.patternType=default
+       test_pattern_type "$H" "$HC" "$L" ERE \
+               -c grep.extendedRegexp=false \
+               -c grep.extendedRegexp=true \
+               -c grep.patternType=default
+
+       # grep.extendedRegexp and grep.patternType are both last-one-wins independently
+       test_pattern_type "$H" "$HC" "$L" BRE \
+               -c grep.patternType=default \
+               -c grep.extendedRegexp=true \
+               -c grep.patternType=basic
+
+       # grep.patternType=extended and grep.patternType=default
+       test_pattern_type "$H" "$HC" "$L" BRE \
+               -c grep.patternType=extended \
+               -c grep.patternType=default
+
+       # grep.patternType=[extended -> default -> fixed] (BRE)" '
+       test_pattern_type "$H" "$HC" "$L" FIX \
+               -c grep.patternType=extended \
+               -c grep.patternType=default \
+               -c grep.patternType=fixed
+
        test_expect_success "grep --count $L" '
                echo ${HC}ab:3 >expected &&
                git grep --count -e b $H -- ab >actual &&