t: introduce PERL_TEST_HELPERS prerequisite

In the early days of Git, Perl was used quite prominently throughout the
project. This has changed significantly as almost all of the executables
we ship nowadays have eventually been rewritten in C. Only a handful of
subsystems remain that require Perl:

  - gitweb, a read-only web interface.

  - A couple of scripts that allow importing repositories from GNU Arch,
    CVS and Subversion.

  - git-send-email(1), which can be used to send mails.

  - git-request-pull(1), which is used to request somebody to pull from
    a URL by sending an email.

  - git-filter-branch(1), which uses Perl with the `--state-branch`
    option. This command is typically recommended against nowadays in
    favor of git-filter-repo(1).

  - Our Perl bindings for Git.

  - The netrc Git credential helper.

None of these subsystems can really be considered to be part of the
"core" of Git, and an installation without them is fully functional.
It is more likely than not that an end user wouldn't even notice that
any features are missing if those tools weren't installed. But while
Perl nowadays very much is an optional dependency of Git, there is a
significant limitation when Perl isn't available: developers cannot run
our test suite.

Preceding commits have started to lift this restriction by removing the
strict dependency on Perl in many central parts of the test library. But
there are still many tests that rely on small Perl helpers to do various
different things.

Introduce a new PERL_TEST_HELPERS prerequisite that guards all tests
that require Perl. This prerequisite is explicitly different than the
preexisting PERL prerequisite:

  - PERL records whether or not features depending on the Perl
    interpreter are built.

  - PERL_TEST_HELPERS records whether or not a Perl interpreter is
    available for our tests.

By having these two separate prerequisites we can thus distinguish
between tests that inherently depend on Perl because the underlying
feature does, and those tests that depend on Perl because the test
itself is using Perl.

Adapt all tests to set the PERL_TEST_HELPERS prerequisite as needed.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
main
Patrick Steinhardt 2025-04-03 07:05:57 +02:00 committed by Junio C Hamano
parent 21386ed6eb
commit 23e21a58d5
71 changed files with 281 additions and 93 deletions

View File

@ -5,6 +5,12 @@ test_description=check-ignore
TEST_CREATE_REPO_NO_TEMPLATE=1 TEST_CREATE_REPO_NO_TEMPLATE=1
. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping ignores tests; Perl not available'
test_done
fi

init_vars () { init_vars () {
global_excludes="global-excludes" global_excludes="global-excludes"
} }

View File

@ -619,7 +619,7 @@ test_expect_success 'required process filter should be used only for "clean" ope
) )
' '


test_expect_success 'required process filter should process multiple packets' ' test_expect_success PERL_TEST_HELPERS 'required process filter should process multiple packets' '
test_config_global filter.protocol.process "test-tool rot13-filter --log=debug.log clean smudge" && test_config_global filter.protocol.process "test-tool rot13-filter --log=debug.log clean smudge" &&
test_config_global filter.protocol.required true && test_config_global filter.protocol.required true &&


@ -684,7 +684,7 @@ test_expect_success 'required process filter should process multiple packets' '
) )
' '


test_expect_success 'required process filter with clean error should fail' ' test_expect_success PERL_TEST_HELPERS 'required process filter with clean error should fail' '
test_config_global filter.protocol.process "test-tool rot13-filter --log=debug.log clean smudge" && test_config_global filter.protocol.process "test-tool rot13-filter --log=debug.log clean smudge" &&
test_config_global filter.protocol.required true && test_config_global filter.protocol.required true &&
rm -rf repo && rm -rf repo &&

View File

@ -4,6 +4,12 @@ test_description='test trace2 facility (normal target)'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping trace2 tests; Perl not available'
test_done
fi

# Turn off any inherited trace2 settings for this test. # Turn off any inherited trace2 settings for this test.
sane_unset GIT_TRACE2 GIT_TRACE2_PERF GIT_TRACE2_EVENT sane_unset GIT_TRACE2 GIT_TRACE2_PERF GIT_TRACE2_EVENT
sane_unset GIT_TRACE2_BRIEF sane_unset GIT_TRACE2_BRIEF

View File

@ -4,6 +4,12 @@ test_description='test trace2 facility (perf target)'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping trace2 tests; Perl not available'
test_done
fi

# Turn off any inherited trace2 settings for this test. # Turn off any inherited trace2 settings for this test.
sane_unset GIT_TRACE2 GIT_TRACE2_PERF GIT_TRACE2_EVENT sane_unset GIT_TRACE2 GIT_TRACE2_PERF GIT_TRACE2_EVENT
sane_unset GIT_TRACE2_PERF_BRIEF sane_unset GIT_TRACE2_PERF_BRIEF

View File

@ -643,7 +643,7 @@ test_expect_success 'basic: commit and list refs' '
test_cmp actual expect test_cmp actual expect
' '


test_expect_success 'basic: can write large commit message' ' test_expect_success PERL_TEST_HELPERS 'basic: can write large commit message' '
test_when_finished "rm -rf repo" && test_when_finished "rm -rf repo" &&
git init repo && git init repo &&
perl -e " perl -e "

View File

@ -139,7 +139,7 @@ test_expect_success 'small block size leads to multiple ref blocks' '
) )
' '


test_expect_success 'small block size fails with large reflog message' ' test_expect_success PERL_TEST_HELPERS 'small block size fails with large reflog message' '
test_when_finished "rm -rf repo" && test_when_finished "rm -rf repo" &&
git init repo && git init repo &&
( (

View File

@ -1270,7 +1270,7 @@ extract_batch_output () {
' "$@" ' "$@"
} }


test_expect_success 'cat-file --batch-all-objects --batch ignores replace' ' test_expect_success PERL_TEST_HELPERS 'cat-file --batch-all-objects --batch ignores replace' '
git cat-file --batch-all-objects --batch >actual.raw && git cat-file --batch-all-objects --batch >actual.raw &&
extract_batch_output $orig <actual.raw >actual && extract_batch_output $orig <actual.raw >actual &&
{ {

View File

@ -205,7 +205,7 @@ test_expect_success 'too-short tree' '
grep "too-short tree object" err grep "too-short tree object" err
' '


test_expect_success 'malformed mode in tree' ' test_expect_success PERL_TEST_HELPERS 'malformed mode in tree' '
hex_oid=$(echo foo | git hash-object --stdin -w) && hex_oid=$(echo foo | git hash-object --stdin -w) &&
bin_oid=$(echo $hex_oid | hex2oct) && bin_oid=$(echo $hex_oid | hex2oct) &&
printf "9100644 \0$bin_oid" >tree-with-malformed-mode && printf "9100644 \0$bin_oid" >tree-with-malformed-mode &&
@ -213,7 +213,7 @@ test_expect_success 'malformed mode in tree' '
grep "malformed mode in tree entry" err grep "malformed mode in tree entry" err
' '


test_expect_success 'empty filename in tree' ' test_expect_success PERL_TEST_HELPERS 'empty filename in tree' '
hex_oid=$(echo foo | git hash-object --stdin -w) && hex_oid=$(echo foo | git hash-object --stdin -w) &&
bin_oid=$(echo $hex_oid | hex2oct) && bin_oid=$(echo $hex_oid | hex2oct) &&
printf "100644 \0$bin_oid" >tree-with-empty-filename && printf "100644 \0$bin_oid" >tree-with-empty-filename &&
@ -221,7 +221,7 @@ test_expect_success 'empty filename in tree' '
grep "empty filename in tree entry" err grep "empty filename in tree entry" err
' '


test_expect_success 'duplicate filename in tree' ' test_expect_success PERL_TEST_HELPERS 'duplicate filename in tree' '
hex_oid=$(echo foo | git hash-object --stdin -w) && hex_oid=$(echo foo | git hash-object --stdin -w) &&
bin_oid=$(echo $hex_oid | hex2oct) && bin_oid=$(echo $hex_oid | hex2oct) &&
{ {

View File

@ -41,13 +41,13 @@ test_expect_success 'ls-tree piped to mktree (2)' '
test_cmp tree.withsub actual test_cmp tree.withsub actual
' '


test_expect_success 'ls-tree output in wrong order given to mktree (1)' ' test_expect_success PERL_TEST_HELPERS 'ls-tree output in wrong order given to mktree (1)' '
perl -e "print reverse <>" <top | perl -e "print reverse <>" <top |
git mktree >actual && git mktree >actual &&
test_cmp tree actual test_cmp tree actual
' '


test_expect_success 'ls-tree output in wrong order given to mktree (2)' ' test_expect_success PERL_TEST_HELPERS 'ls-tree output in wrong order given to mktree (2)' '
perl -e "print reverse <>" <top.withsub | perl -e "print reverse <>" <top.withsub |
git mktree >actual && git mktree >actual &&
test_cmp tree.withsub actual test_cmp tree.withsub actual

View File

@ -346,7 +346,7 @@ test_expect_success 'unparseable tree object' '
test_grep ! "fatal: empty filename in tree entry" out test_grep ! "fatal: empty filename in tree entry" out
' '


test_expect_success 'tree entry with type mismatch' ' test_expect_success PERL_TEST_HELPERS 'tree entry with type mismatch' '
test_when_finished "remove_object \$blob" && test_when_finished "remove_object \$blob" &&
test_when_finished "remove_object \$tree" && test_when_finished "remove_object \$tree" &&
test_when_finished "remove_object \$commit" && test_when_finished "remove_object \$commit" &&
@ -364,7 +364,7 @@ test_expect_success 'tree entry with type mismatch' '
test_grep ! "dangling blob" out test_grep ! "dangling blob" out
' '


test_expect_success 'tree entry with bogus mode' ' test_expect_success PERL_TEST_HELPERS 'tree entry with bogus mode' '
test_when_finished "remove_object \$blob" && test_when_finished "remove_object \$blob" &&
test_when_finished "remove_object \$tree" && test_when_finished "remove_object \$tree" &&
blob=$(echo blob | git hash-object -w --stdin) && blob=$(echo blob | git hash-object -w --stdin) &&
@ -984,7 +984,7 @@ corrupt_index_checksum () {


# Corrupt the checksum on the index and then # Corrupt the checksum on the index and then
# verify that only fsck notices. # verify that only fsck notices.
test_expect_success 'detect corrupt index file in fsck' ' test_expect_success PERL_TEST_HELPERS 'detect corrupt index file in fsck' '
cp .git/index .git/index.backup && cp .git/index .git/index.backup &&
test_when_finished "mv .git/index.backup .git/index" && test_when_finished "mv .git/index.backup .git/index" &&
corrupt_index_checksum && corrupt_index_checksum &&

View File

@ -63,7 +63,7 @@ test_expect_success 'ls-files quotes funny filename' '
test_cmp expected current test_cmp expected current
' '


test_expect_success 'ls-files -z does not quote funny filename' ' test_expect_success PERL_TEST_HELPERS 'ls-files -z does not quote funny filename' '
cat >expected <<-\EOF && cat >expected <<-\EOF &&
just space just space
no-funny no-funny
@ -101,7 +101,7 @@ test_expect_success 'diff-tree --name-status quotes funny filename' '
test_cmp expected current test_cmp expected current
' '


test_expect_success 'diff-index -z does not quote funny filename' ' test_expect_success PERL_TEST_HELPERS 'diff-index -z does not quote funny filename' '
cat >expected <<-\EOF && cat >expected <<-\EOF &&
A A
tabs ," (dq) and spaces tabs ," (dq) and spaces
@ -111,7 +111,7 @@ test_expect_success 'diff-index -z does not quote funny filename' '
test_cmp expected current test_cmp expected current
' '


test_expect_success 'diff-tree -z does not quote funny filename' ' test_expect_success PERL_TEST_HELPERS 'diff-tree -z does not quote funny filename' '
cat >expected <<-\EOF && cat >expected <<-\EOF &&
A A
tabs ," (dq) and spaces tabs ," (dq) and spaces

View File

@ -11,6 +11,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/lib-diff.sh . "$TEST_DIRECTORY"/lib-diff.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping diff various tests; Perl not available'
test_done
fi

test_expect_success setup ' test_expect_success setup '


GIT_AUTHOR_DATE="2006-06-26 00:00:00 +0000" && GIT_AUTHOR_DATE="2006-06-26 00:00:00 +0000" &&

View File

@ -448,7 +448,7 @@ cat >>expect.no-threading <<EOF
--- ---
EOF EOF


test_expect_success 'no threading' ' test_expect_success PERL_TEST_HELPERS 'no threading' '
git checkout side && git checkout side &&
check_threading expect.no-threading main check_threading expect.no-threading main
' '
@ -466,11 +466,11 @@ In-Reply-To: <0>
References: <0> References: <0>
EOF EOF


test_expect_success 'thread' ' test_expect_success PERL_TEST_HELPERS 'thread' '
check_threading expect.thread --thread main check_threading expect.thread --thread main
' '


test_expect_success '--thread overrides format.thread=deep' ' test_expect_success PERL_TEST_HELPERS '--thread overrides format.thread=deep' '
test_config format.thread deep && test_config format.thread deep &&
check_threading expect.thread --thread main check_threading expect.thread --thread main
' '
@ -490,7 +490,7 @@ In-Reply-To: <1>
References: <1> References: <1>
EOF EOF


test_expect_success 'thread in-reply-to' ' test_expect_success PERL_TEST_HELPERS 'thread in-reply-to' '
check_threading expect.in-reply-to --in-reply-to="<test.message>" \ check_threading expect.in-reply-to --in-reply-to="<test.message>" \
--thread main --thread main
' '
@ -512,7 +512,7 @@ In-Reply-To: <0>
References: <0> References: <0>
EOF EOF


test_expect_success 'thread cover-letter' ' test_expect_success PERL_TEST_HELPERS 'thread cover-letter' '
check_threading expect.cover-letter --cover-letter --thread main check_threading expect.cover-letter --cover-letter --thread main
' '


@ -538,12 +538,12 @@ References: <1>
<0> <0>
EOF EOF


test_expect_success 'thread cover-letter in-reply-to' ' test_expect_success PERL_TEST_HELPERS 'thread cover-letter in-reply-to' '
check_threading expect.cl-irt --cover-letter \ check_threading expect.cl-irt --cover-letter \
--in-reply-to="<test.message>" --thread main --in-reply-to="<test.message>" --thread main
' '


test_expect_success 'thread explicit shallow' ' test_expect_success PERL_TEST_HELPERS 'thread explicit shallow' '
check_threading expect.cl-irt --cover-letter \ check_threading expect.cl-irt --cover-letter \
--in-reply-to="<test.message>" --thread=shallow main --in-reply-to="<test.message>" --thread=shallow main
' '
@ -562,7 +562,7 @@ References: <0>
<1> <1>
EOF EOF


test_expect_success 'thread deep' ' test_expect_success PERL_TEST_HELPERS 'thread deep' '
check_threading expect.deep --thread=deep main check_threading expect.deep --thread=deep main
' '


@ -584,7 +584,7 @@ References: <1>
<2> <2>
EOF EOF


test_expect_success 'thread deep in-reply-to' ' test_expect_success PERL_TEST_HELPERS 'thread deep in-reply-to' '
check_threading expect.deep-irt --thread=deep \ check_threading expect.deep-irt --thread=deep \
--in-reply-to="<test.message>" main --in-reply-to="<test.message>" main
' '
@ -609,7 +609,7 @@ References: <0>
<2> <2>
EOF EOF


test_expect_success 'thread deep cover-letter' ' test_expect_success PERL_TEST_HELPERS 'thread deep cover-letter' '
check_threading expect.deep-cl --cover-letter --thread=deep main check_threading expect.deep-cl --cover-letter --thread=deep main
' '


@ -638,27 +638,27 @@ References: <1>
<3> <3>
EOF EOF


test_expect_success 'thread deep cover-letter in-reply-to' ' test_expect_success PERL_TEST_HELPERS 'thread deep cover-letter in-reply-to' '
check_threading expect.deep-cl-irt --cover-letter \ check_threading expect.deep-cl-irt --cover-letter \
--in-reply-to="<test.message>" --thread=deep main --in-reply-to="<test.message>" --thread=deep main
' '


test_expect_success 'thread via config' ' test_expect_success PERL_TEST_HELPERS 'thread via config' '
test_config format.thread true && test_config format.thread true &&
check_threading expect.thread main check_threading expect.thread main
' '


test_expect_success 'thread deep via config' ' test_expect_success PERL_TEST_HELPERS 'thread deep via config' '
test_config format.thread deep && test_config format.thread deep &&
check_threading expect.deep main check_threading expect.deep main
' '


test_expect_success 'thread config + override' ' test_expect_success PERL_TEST_HELPERS 'thread config + override' '
test_config format.thread deep && test_config format.thread deep &&
check_threading expect.thread --thread main check_threading expect.thread --thread main
' '


test_expect_success 'thread config + --no-thread' ' test_expect_success PERL_TEST_HELPERS 'thread config + --no-thread' '
test_config format.thread deep && test_config format.thread deep &&
check_threading expect.no-threading --no-thread main check_threading expect.no-threading --no-thread main
' '

View File

@ -239,7 +239,7 @@ check_external_diff 128 empty error 2 on --quiet


echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file


test_expect_success 'force diff with "diff"' ' test_expect_success PERL_TEST_HELPERS 'force diff with "diff"' '
after=$(git hash-object file) && after=$(git hash-object file) &&
after=$(git rev-parse --short $after) && after=$(git rev-parse --short $after) &&
echo >.gitattributes "file diff" && echo >.gitattributes "file diff" &&
@ -300,7 +300,7 @@ test_expect_success 'external diff with autocrlf = true' '
test $(wc -l <crlfed.txt) = $(keep_only_cr <crlfed.txt | wc -c) test $(wc -l <crlfed.txt) = $(keep_only_cr <crlfed.txt | wc -c)
' '


test_expect_success 'diff --cached' ' test_expect_success PERL_TEST_HELPERS 'diff --cached' '
test_config core.autocrlf true && test_config core.autocrlf true &&
git add file && git add file &&
git update-index --assume-unchanged file && git update-index --assume-unchanged file &&

View File

@ -18,7 +18,7 @@ index 5f6a263..8cb8bae 100644
EOF EOF
exit 1 exit 1


test_expect_success "$test_description" ' test_expect_success PERL_TEST_HELPERS "$test_description" '
printf "\nx\n" > f && printf "\nx\n" > f &&
before=$(git hash-object f) && before=$(git hash-object f) &&
before=$(git rev-parse --short $before) && before=$(git rev-parse --short $before) &&

View File

@ -4,6 +4,12 @@ test_description='diff.*.textconv tests'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping diff textconv tests; Perl not available'
test_done
fi

find_diff() { find_diff() {
sed '1,/^index /d' | sed '/^-- $/,$d' sed '1,/^index /d' | sed '/^-- $/,$d'
} }

View File

@ -70,7 +70,7 @@ test_expect_success 'setup textconv' '
git config diff.foo.textconv "\"$(pwd)\""/dump git config diff.foo.textconv "\"$(pwd)\""/dump
' '


test_expect_success 'rewrite diff respects textconv' ' test_expect_success PERL_TEST_HELPERS 'rewrite diff respects textconv' '
git diff -B >diff && git diff -B >diff &&
grep "dissimilarity index" diff && grep "dissimilarity index" diff &&
grep "^-61" diff && grep "^-61" diff &&

View File

@ -13,6 +13,12 @@ test_description='test tree diff when trees have duplicate entries'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping diff duplicates tests; Perl not available'
test_done
fi

# make_tree_entry <mode> <mode> <sha1> # make_tree_entry <mode> <mode> <sha1>
# #
# We have to rely on perl here because not all printfs understand # We have to rely on perl here because not all printfs understand

View File

@ -11,6 +11,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping apply-binary tests; Perl not available'
test_done
fi

test_expect_success 'setup' ' test_expect_success 'setup' '
cat >file1 <<-\EOF && cat >file1 <<-\EOF &&
A quick brown fox jumps over the lazy dog. A quick brown fox jumps over the lazy dog.

View File

@ -10,6 +10,12 @@ test_description='git apply in reverse


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping apply reverse tests; Perl not available'
test_done
fi

test_expect_success setup ' test_expect_success setup '


test_write_lines a b c d e f g h i j k l m n >file1 && test_write_lines a b c d e f g h i j k l m n >file1 &&

View File

@ -1073,7 +1073,7 @@ test_expect_success 'am --patch-format=mboxrd handles mboxrd' '
test_cmp msg out test_cmp msg out
' '


test_expect_success 'am works with multi-line in-body headers' ' test_expect_success PERL_TEST_HELPERS 'am works with multi-line in-body headers' '
FORTY="String that has a length of more than forty characters" && FORTY="String that has a length of more than forty characters" &&
LONG="$FORTY $FORTY" && LONG="$FORTY $FORTY" &&
rm -fr .git/rebase-apply && rm -fr .git/rebase-apply &&

View File

@ -27,6 +27,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping rerere tests; Perl not available'
test_done
fi

test_expect_success 'setup' ' test_expect_success 'setup' '
cat >a1 <<-\EOF && cat >a1 <<-\EOF &&
Some title Some title

View File

@ -698,7 +698,7 @@ test_expect_success '%(trailers:only=no,only=true) shows only "key: value" trail
test_cmp expect actual test_cmp expect actual
' '


test_expect_success '%(trailers:unfold) unfolds trailers' ' test_expect_success PERL_TEST_HELPERS '%(trailers:unfold) unfolds trailers' '
git log --no-walk --pretty="%(trailers:unfold)" >actual && git log --no-walk --pretty="%(trailers:unfold)" >actual &&
{ {
unfold <trailers && unfold <trailers &&
@ -707,7 +707,7 @@ test_expect_success '%(trailers:unfold) unfolds trailers' '
test_cmp expect actual test_cmp expect actual
' '


test_expect_success ':only and :unfold work together' ' test_expect_success PERL_TEST_HELPERS ':only and :unfold work together' '
git log --no-walk --pretty="%(trailers:only,unfold)" >actual && git log --no-walk --pretty="%(trailers:only,unfold)" >actual &&
git log --no-walk --pretty="%(trailers:unfold,only)" >reverse && git log --no-walk --pretty="%(trailers:unfold,only)" >reverse &&
test_cmp actual reverse && test_cmp actual reverse &&
@ -754,7 +754,7 @@ test_expect_success '%(trailers:key=foo) handles multiple lines even if folded'
test_cmp expect actual test_cmp expect actual
' '


test_expect_success '%(trailers:key=foo,unfold) properly unfolds' ' test_expect_success PERL_TEST_HELPERS '%(trailers:key=foo,unfold) properly unfolds' '
git log --no-walk --pretty="format:%(trailers:key=Signed-Off-by,unfold)" >actual && git log --no-walk --pretty="format:%(trailers:key=Signed-Off-by,unfold)" >actual &&
unfold <trailers | grep Signed-off-by >expect && unfold <trailers | grep Signed-off-by >expect &&
test_cmp expect actual test_cmp expect actual

View File

@ -738,20 +738,20 @@ check_corrupt_graph () {
test_cmp expect.out out test_cmp expect.out out
} }


test_expect_success 'Bloom reader notices too-small data chunk' ' test_expect_success PERL_TEST_HELPERS 'Bloom reader notices too-small data chunk' '
check_corrupt_graph BDAT clear 00000000 && check_corrupt_graph BDAT clear 00000000 &&
echo "warning: ignoring too-small changed-path chunk" \ echo "warning: ignoring too-small changed-path chunk" \
"(4 < 12) in commit-graph file" >expect.err && "(4 < 12) in commit-graph file" >expect.err &&
test_cmp expect.err err test_cmp expect.err err
' '


test_expect_success 'Bloom reader notices out-of-bounds filter offsets' ' test_expect_success PERL_TEST_HELPERS 'Bloom reader notices out-of-bounds filter offsets' '
check_corrupt_graph BIDX 12 FFFFFFFF && check_corrupt_graph BIDX 12 FFFFFFFF &&
# use grep to avoid depending on exact chunk size # use grep to avoid depending on exact chunk size
grep "warning: ignoring out-of-range offset (4294967295) for changed-path filter at pos 3 of .git/objects/info/commit-graph" err grep "warning: ignoring out-of-range offset (4294967295) for changed-path filter at pos 3 of .git/objects/info/commit-graph" err
' '


test_expect_success 'Bloom reader notices too-small index chunk' ' test_expect_success PERL_TEST_HELPERS 'Bloom reader notices too-small index chunk' '
# replace the index with a single entry, making most # replace the index with a single entry, making most
# lookups out-of-bounds # lookups out-of-bounds
check_corrupt_graph BIDX clear 00000000 && check_corrupt_graph BIDX clear 00000000 &&
@ -760,7 +760,7 @@ test_expect_success 'Bloom reader notices too-small index chunk' '
test_cmp expect.err err test_cmp expect.err err
' '


test_expect_success 'Bloom reader notices out-of-order index offsets' ' test_expect_success PERL_TEST_HELPERS 'Bloom reader notices out-of-order index offsets' '
# we do not know any real offsets, but we can pick # we do not know any real offsets, but we can pick
# something plausible; we should not get to the point of # something plausible; we should not get to the point of
# actually reading from the bogus offsets anyway. # actually reading from the bogus offsets anyway.

View File

@ -4,6 +4,12 @@ test_description='test corner cases of git-archive'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping archive corner cases tests; Perl not available'
test_done
fi

# the 10knuls.tar file is used to test for an empty git generated tar # the 10knuls.tar file is used to test for an empty git generated tar
# without having to invoke tar because an otherwise valid empty GNU tar # without having to invoke tar because an otherwise valid empty GNU tar
# will be considered broken by {Open,Net}BSD tar # will be considered broken by {Open,Net}BSD tar

View File

@ -7,6 +7,12 @@ test_description='git pack-object'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping pack-object tests; Perl not available'
test_done
fi

test_expect_success 'setup' ' test_expect_success 'setup' '
rm -f .git/index* && rm -f .git/index* &&
perl -e "print \"a\" x 4096;" >a && perl -e "print \"a\" x 4096;" >a &&

View File

@ -99,7 +99,7 @@ test_expect_success '... and loose copy of first delta allows for partial recove
git cat-file blob $blob_3 > /dev/null git cat-file blob $blob_3 > /dev/null
' '


test_expect_success 'create corruption in data of first object' ' test_expect_success PERL_TEST_HELPERS 'create corruption in data of first object' '
create_new_pack && create_new_pack &&
git prune-packed && git prune-packed &&
chmod +w ${pack}.pack && chmod +w ${pack}.pack &&
@ -156,7 +156,7 @@ test_expect_success '... and then a repack "clears" the corruption' '
git cat-file blob $blob_3 > /dev/null git cat-file blob $blob_3 > /dev/null
' '


test_expect_success 'create corruption in data of first delta' ' test_expect_success PERL_TEST_HELPERS 'create corruption in data of first delta' '
create_new_pack && create_new_pack &&
git prune-packed && git prune-packed &&
chmod +w ${pack}.pack && chmod +w ${pack}.pack &&

View File

@ -395,7 +395,7 @@ test_bitmap_cases () {
) )
' '


test_expect_success 'pack.preferBitmapTips' ' test_expect_success PERL_TEST_HELPERS 'pack.preferBitmapTips' '
git init repo && git init repo &&
test_when_finished "rm -fr repo" && test_when_finished "rm -fr repo" &&
( (

View File

@ -87,7 +87,7 @@ max_chain() {
# packing heuristics. We double-check that our test case # packing heuristics. We double-check that our test case
# actually produces a long chain. If it doesn't, it should be # actually produces a long chain. If it doesn't, it should be
# adjusted (or scrapped if the heuristics have become too unreliable) # adjusted (or scrapped if the heuristics have become too unreliable)
test_expect_success 'packing produces a long delta' ' test_expect_success PERL_TEST_HELPERS 'packing produces a long delta' '
# Use --window=0 to make sure we are seeing reused deltas, # Use --window=0 to make sure we are seeing reused deltas,
# not computing a new long chain. # not computing a new long chain.
pack=$(git pack-objects --all --window=0 </dev/null pack) && pack=$(git pack-objects --all --window=0 </dev/null pack) &&
@ -96,21 +96,21 @@ test_expect_success 'packing produces a long delta' '
test_cmp expect actual test_cmp expect actual
' '


test_expect_success '--depth limits depth' ' test_expect_success PERL_TEST_HELPERS '--depth limits depth' '
pack=$(git pack-objects --all --depth=5 </dev/null pack) && pack=$(git pack-objects --all --depth=5 </dev/null pack) &&
echo 5 >expect && echo 5 >expect &&
max_chain pack-$pack.pack >actual && max_chain pack-$pack.pack >actual &&
test_cmp expect actual test_cmp expect actual
' '


test_expect_success '--depth=0 disables deltas' ' test_expect_success PERL_TEST_HELPERS '--depth=0 disables deltas' '
pack=$(git pack-objects --all --depth=0 </dev/null pack) && pack=$(git pack-objects --all --depth=0 </dev/null pack) &&
echo 0 >expect && echo 0 >expect &&
max_chain pack-$pack.pack >actual && max_chain pack-$pack.pack >actual &&
test_cmp expect actual test_cmp expect actual
' '


test_expect_success 'negative depth disables deltas' ' test_expect_success PERL_TEST_HELPERS 'negative depth disables deltas' '
pack=$(git pack-objects --all --depth=-1 </dev/null pack) && pack=$(git pack-objects --all --depth=-1 </dev/null pack) &&
echo 0 >expect && echo 0 >expect &&
max_chain pack-$pack.pack >actual && max_chain pack-$pack.pack >actual &&

View File

@ -837,7 +837,7 @@ check_corrupt_chunk () {
test_cmp expect.out out test_cmp expect.out out
} }


test_expect_success 'reader notices too-small oid fanout chunk' ' test_expect_success PERL_TEST_HELPERS 'reader notices too-small oid fanout chunk' '
# make it big enough that the graph file is plausible, # make it big enough that the graph file is plausible,
# otherwise we hit an earlier check # otherwise we hit an earlier check
check_corrupt_chunk OIDF clear $(printf "000000%02x" $(test_seq 250)) && check_corrupt_chunk OIDF clear $(printf "000000%02x" $(test_seq 250)) &&
@ -848,7 +848,7 @@ test_expect_success 'reader notices too-small oid fanout chunk' '
test_cmp expect.err err test_cmp expect.err err
' '


test_expect_success 'reader notices fanout/lookup table mismatch' ' test_expect_success PERL_TEST_HELPERS 'reader notices fanout/lookup table mismatch' '
check_corrupt_chunk OIDF 1020 "FFFFFFFF" && check_corrupt_chunk OIDF 1020 "FFFFFFFF" &&
cat >expect.err <<-\EOF && cat >expect.err <<-\EOF &&
error: commit-graph OID lookup chunk is the wrong size error: commit-graph OID lookup chunk is the wrong size
@ -857,7 +857,7 @@ test_expect_success 'reader notices fanout/lookup table mismatch' '
test_cmp expect.err err test_cmp expect.err err
' '


test_expect_success 'reader notices out-of-bounds fanout' ' test_expect_success PERL_TEST_HELPERS 'reader notices out-of-bounds fanout' '
# Rather than try to corrupt a specific hash, we will just # Rather than try to corrupt a specific hash, we will just
# wreck them all. But we cannot just set them all to 0xFFFFFFFF or # wreck them all. But we cannot just set them all to 0xFFFFFFFF or
# similar, as they are used for hi/lo starts in a binary search (so if # similar, as they are used for hi/lo starts in a binary search (so if
@ -873,7 +873,7 @@ test_expect_success 'reader notices out-of-bounds fanout' '
test_cmp expect.err err test_cmp expect.err err
' '


test_expect_success 'reader notices too-small commit data chunk' ' test_expect_success PERL_TEST_HELPERS 'reader notices too-small commit data chunk' '
check_corrupt_chunk CDAT clear 00000000 && check_corrupt_chunk CDAT clear 00000000 &&
cat >expect.err <<-\EOF && cat >expect.err <<-\EOF &&
error: commit-graph commit data chunk is wrong size error: commit-graph commit data chunk is wrong size
@ -882,7 +882,7 @@ test_expect_success 'reader notices too-small commit data chunk' '
test_cmp expect.err err test_cmp expect.err err
' '


test_expect_success 'reader notices out-of-bounds extra edge' ' test_expect_success PERL_TEST_HELPERS 'reader notices out-of-bounds extra edge' '
check_corrupt_chunk EDGE clear && check_corrupt_chunk EDGE clear &&
cat >expect.err <<-\EOF && cat >expect.err <<-\EOF &&
error: commit-graph extra-edges pointer out of bounds error: commit-graph extra-edges pointer out of bounds
@ -890,7 +890,7 @@ test_expect_success 'reader notices out-of-bounds extra edge' '
test_cmp expect.err err test_cmp expect.err err
' '


test_expect_success 'reader notices too-small generations chunk' ' test_expect_success PERL_TEST_HELPERS 'reader notices too-small generations chunk' '
check_corrupt_chunk GDA2 clear 00000000 && check_corrupt_chunk GDA2 clear 00000000 &&
cat >expect.err <<-\EOF && cat >expect.err <<-\EOF &&
error: commit-graph generations chunk is wrong size error: commit-graph generations chunk is wrong size

View File

@ -1120,7 +1120,7 @@ corrupt_chunk () {
corrupt_chunk_file $midx "$@" corrupt_chunk_file $midx "$@"
} }


test_expect_success 'reader notices too-small oid fanout chunk' ' test_expect_success PERL_TEST_HELPERS 'reader notices too-small oid fanout chunk' '
corrupt_chunk OIDF clear 00000000 && corrupt_chunk OIDF clear 00000000 &&
test_must_fail git log 2>err && test_must_fail git log 2>err &&
cat >expect <<-\EOF && cat >expect <<-\EOF &&
@ -1130,7 +1130,7 @@ test_expect_success 'reader notices too-small oid fanout chunk' '
test_cmp expect err test_cmp expect err
' '


test_expect_success 'reader notices too-small oid lookup chunk' ' test_expect_success PERL_TEST_HELPERS 'reader notices too-small oid lookup chunk' '
corrupt_chunk OIDL clear 00000000 && corrupt_chunk OIDL clear 00000000 &&
test_must_fail git log 2>err && test_must_fail git log 2>err &&
cat >expect <<-\EOF && cat >expect <<-\EOF &&
@ -1140,7 +1140,7 @@ test_expect_success 'reader notices too-small oid lookup chunk' '
test_cmp expect err test_cmp expect err
' '


test_expect_success 'reader notices too-small pack names chunk' ' test_expect_success PERL_TEST_HELPERS 'reader notices too-small pack names chunk' '
# There is no NUL to terminate the name here, so the # There is no NUL to terminate the name here, so the
# chunk is too short. # chunk is too short.
corrupt_chunk PNAM clear 70656666 && corrupt_chunk PNAM clear 70656666 &&
@ -1151,7 +1151,7 @@ test_expect_success 'reader notices too-small pack names chunk' '
test_cmp expect err test_cmp expect err
' '


test_expect_success 'reader handles unaligned chunks' ' test_expect_success PERL_TEST_HELPERS 'reader handles unaligned chunks' '
# A 9-byte PNAM means all of the subsequent chunks # A 9-byte PNAM means all of the subsequent chunks
# will no longer be 4-byte aligned, but it is still # will no longer be 4-byte aligned, but it is still
# a valid one-pack chunk on its own (it is "foo.pack\0"). # a valid one-pack chunk on its own (it is "foo.pack\0").
@ -1165,7 +1165,7 @@ test_expect_success 'reader handles unaligned chunks' '
test_cmp expect.err err test_cmp expect.err err
' '


test_expect_success 'reader notices too-small object offset chunk' ' test_expect_success PERL_TEST_HELPERS 'reader notices too-small object offset chunk' '
corrupt_chunk OOFF clear 00000000 && corrupt_chunk OOFF clear 00000000 &&
test_must_fail git log 2>err && test_must_fail git log 2>err &&
cat >expect <<-\EOF && cat >expect <<-\EOF &&
@ -1175,7 +1175,7 @@ test_expect_success 'reader notices too-small object offset chunk' '
test_cmp expect err test_cmp expect err
' '


test_expect_success 'reader bounds-checks large offset table' ' test_expect_success PERL_TEST_HELPERS 'reader bounds-checks large offset table' '
# re-use the objects64 dir here to cheaply get access to a midx # re-use the objects64 dir here to cheaply get access to a midx
# with large offsets. # with large offsets.
git init repo && git init repo &&
@ -1197,7 +1197,7 @@ test_expect_success 'reader bounds-checks large offset table' '
) )
' '


test_expect_success 'reader notices too-small revindex chunk' ' test_expect_success PERL_TEST_HELPERS 'reader notices too-small revindex chunk' '
# We only get a revindex with bitmaps (and likewise only # We only get a revindex with bitmaps (and likewise only
# load it when they are asked for). # load it when they are asked for).
test_config repack.writeBitmaps true && test_config repack.writeBitmaps true &&
@ -1214,7 +1214,7 @@ test_expect_success 'reader notices too-small revindex chunk' '
test_cmp expect.err err test_cmp expect.err err
' '


test_expect_success 'reader notices out-of-bounds fanout' ' test_expect_success PERL_TEST_HELPERS 'reader notices out-of-bounds fanout' '
# This is similar to the out-of-bounds fanout test in t5318. The values # This is similar to the out-of-bounds fanout test in t5318. The values
# in adjacent entries should be large but not identical (they # in adjacent entries should be large but not identical (they
# are used as hi/lo starts for a binary search, which would then abort # are used as hi/lo starts for a binary search, which would then abort

View File

@ -401,7 +401,7 @@ test_expect_success 'verify across alternates' '
) )
' '


test_expect_success 'reader bounds-checks base-graph chunk' ' test_expect_success PERL_TEST_HELPERS 'reader bounds-checks base-graph chunk' '
git clone --no-hardlinks . corrupt-base-chunk && git clone --no-hardlinks . corrupt-base-chunk &&
( (
cd corrupt-base-chunk && cd corrupt-base-chunk &&

View File

@ -153,7 +153,7 @@ test_midx_bitmap_cases () {
) )
' '


test_expect_success 'pack.preferBitmapTips' ' test_expect_success PERL_TEST_HELPERS 'pack.preferBitmapTips' '
git init repo && git init repo &&
test_when_finished "rm -fr repo" && test_when_finished "rm -fr repo" &&
( (

View File

@ -74,7 +74,7 @@ test_expect_success 'single commit with generation data exceeding UINT32_MAX' '
git -C repo-uint32-max commit-graph verify git -C repo-uint32-max commit-graph verify
' '


test_expect_success 'reader notices out-of-bounds generation overflow' ' test_expect_success PERL_TEST_HELPERS 'reader notices out-of-bounds generation overflow' '
graph=.git/objects/info/commit-graph && graph=.git/objects/info/commit-graph &&
test_when_finished "rm -rf $graph" && test_when_finished "rm -rf $graph" &&
git commit-graph write --reachable && git commit-graph write --reachable &&

View File

@ -6,6 +6,12 @@ GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP=0


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping pseudo-merge bitmap tests; Perl not available'
test_done
fi

test_pseudo_merges () { test_pseudo_merges () {
test-tool bitmap dump-pseudo-merges test-tool bitmap dump-pseudo-merges
} }

View File

@ -268,7 +268,7 @@ extract_ref_advertisement () {
' '
} }


test_expect_success 'receive-pack de-dupes .have lines' ' test_expect_success PERL_TEST_HELPERS 'receive-pack de-dupes .have lines' '
git init shared && git init shared &&
git -C shared commit --allow-empty -m both && git -C shared commit --allow-empty -m both &&
git clone -s shared fork && git clone -s shared fork &&

View File

@ -20,7 +20,7 @@ extract_haves () {
depacketize | perl -lne '/^(\S+) \.have/ and print $1' depacketize | perl -lne '/^(\S+) \.have/ and print $1'
} }


test_expect_success 'with core.alternateRefsCommand' ' test_expect_success PERL_TEST_HELPERS 'with core.alternateRefsCommand' '
write_script fork/alternate-refs <<-\EOF && write_script fork/alternate-refs <<-\EOF &&
git --git-dir="$1" for-each-ref \ git --git-dir="$1" for-each-ref \
--format="%(objectname)" \ --format="%(objectname)" \
@ -33,7 +33,7 @@ test_expect_success 'with core.alternateRefsCommand' '
test_cmp expect actual.haves test_cmp expect actual.haves
' '


test_expect_success 'with core.alternateRefsPrefixes' ' test_expect_success PERL_TEST_HELPERS 'with core.alternateRefsPrefixes' '
test_config -C fork core.alternateRefsPrefixes "refs/heads/private" && test_config -C fork core.alternateRefsPrefixes "refs/heads/private" &&
git rev-parse private/branch >expect && git rev-parse private/branch >expect &&
printf "0000" | git receive-pack fork >actual && printf "0000" | git receive-pack fork >actual &&

View File

@ -7,6 +7,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping tagfollow tests; Perl not available'
test_done
fi

# End state of the repository: # End state of the repository:
# #
# T - tag1 S - tag2 # T - tag1 S - tag2

View File

@ -359,7 +359,7 @@ test_expect_success \
grep "Cannot demote unterminatedheader" act grep "Cannot demote unterminatedheader" act
' '


test_expect_success 'badFilemode is not a strict error' ' test_expect_success PERL_TEST_HELPERS 'badFilemode is not a strict error' '
git init --bare badmode.git && git init --bare badmode.git &&
tree=$( tree=$(
cd badmode.git && cd badmode.git &&

View File

@ -8,6 +8,12 @@ test_description='Per branch config variables affects "git fetch".
. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/lib-bundle.sh . "$TEST_DIRECTORY"/lib-bundle.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping fetch tests; Perl not available'
test_done
fi

D=$(pwd) D=$(pwd)


test_expect_success setup ' test_expect_success setup '

View File

@ -4,6 +4,12 @@ test_description='fetching via git:// using core.gitproxy'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping fetch proxy tests; Perl not available'
test_done
fi

test_expect_success 'setup remote repo' ' test_expect_success 'setup remote repo' '
git init remote && git init remote &&
(cd remote && (cd remote &&

View File

@ -177,7 +177,7 @@ test_expect_success GPGSSH 'ssh signed push sends push certificate' '
test_cmp expect dst/push-cert-status test_cmp expect dst/push-cert-status
' '


test_expect_success GPG 'inconsistent push options in signed push not allowed' ' test_expect_success GPG,PERL_TEST_HELPERS 'inconsistent push options in signed push not allowed' '
# First, invoke receive-pack with dummy input to obtain its preamble. # First, invoke receive-pack with dummy input to obtain its preamble.
prepare_dst && prepare_dst &&
git -C dst config receive.certnonceseed sekrit && git -C dst config receive.certnonceseed sekrit &&

View File

@ -256,7 +256,7 @@ start_httpd


REPO="$HTTPD_DOCUMENT_ROOT_PATH/repo" REPO="$HTTPD_DOCUMENT_ROOT_PATH/repo"


test_expect_success 'shallow fetches check connectivity before writing shallow file' ' test_expect_success PERL_TEST_HELPERS 'shallow fetches check connectivity before writing shallow file' '
rm -rf "$REPO" client && rm -rf "$REPO" client &&


git init "$REPO" && git init "$REPO" &&

View File

@ -7,6 +7,13 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME


. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/lib-httpd.sh . "$TEST_DIRECTORY"/lib-httpd.sh

if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping http fetch smart tests; Perl not available'
test_done
fi

test "$HTTP_PROTO" = "HTTP/2" && enable_http2 test "$HTTP_PROTO" = "HTTP/2" && enable_http2
start_httpd start_httpd



View File

@ -4,6 +4,12 @@ test_description='test git-http-backend respects CONTENT_LENGTH'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping http backend content tests; Perl not available'
test_done
fi

test_lazy_prereq GZIP 'gzip --version' test_lazy_prereq GZIP 'gzip --version'


verify_http_result() { verify_http_result() {

View File

@ -649,7 +649,7 @@ test_expect_success 'GIT_TRACE_PACKFILE produces a usable pack' '
git -C replay.git index-pack -v --stdin <tmp.pack git -C replay.git index-pack -v --stdin <tmp.pack
' '


test_expect_success 'clone on case-insensitive fs' ' test_expect_success PERL_TEST_HELPERS 'clone on case-insensitive fs' '
git init icasefs && git init icasefs &&
( (
cd icasefs && cd icasefs &&
@ -662,7 +662,7 @@ test_expect_success 'clone on case-insensitive fs' '
) )
' '


test_expect_success CASE_INSENSITIVE_FS 'colliding file detection' ' test_expect_success PERL_TEST_HELPERS,CASE_INSENSITIVE_FS 'colliding file detection' '
grep X icasefs/warning && grep X icasefs/warning &&
grep x icasefs/warning && grep x icasefs/warning &&
test_grep "the following paths have collided" icasefs/warning test_grep "the following paths have collided" icasefs/warning

View File

@ -751,7 +751,7 @@ replace_packfile () {
}' >"$HTTPD_ROOT_PATH/one-time-perl" }' >"$HTTPD_ROOT_PATH/one-time-perl"
} }


test_expect_success 'upon cloning, check that all refs point to objects' ' test_expect_success PERL_TEST_HELPERS 'upon cloning, check that all refs point to objects' '
SERVER="$HTTPD_DOCUMENT_ROOT_PATH/server" && SERVER="$HTTPD_DOCUMENT_ROOT_PATH/server" &&
rm -rf "$SERVER" repo && rm -rf "$SERVER" repo &&
test_create_repo "$SERVER" && test_create_repo "$SERVER" &&
@ -784,7 +784,7 @@ test_expect_success 'upon cloning, check that all refs point to objects' '
! test -e "$HTTPD_ROOT_PATH/one-time-perl" ! test -e "$HTTPD_ROOT_PATH/one-time-perl"
' '


test_expect_success 'when partial cloning, tolerate server not sending target of tag' ' test_expect_success PERL_TEST_HELPERS 'when partial cloning, tolerate server not sending target of tag' '
SERVER="$HTTPD_DOCUMENT_ROOT_PATH/server" && SERVER="$HTTPD_DOCUMENT_ROOT_PATH/server" &&
rm -rf "$SERVER" repo && rm -rf "$SERVER" repo &&
test_create_repo "$SERVER" && test_create_repo "$SERVER" &&
@ -825,7 +825,7 @@ test_expect_success 'when partial cloning, tolerate server not sending target of
! test -e "$HTTPD_ROOT_PATH/one-time-perl" ! test -e "$HTTPD_ROOT_PATH/one-time-perl"
' '


test_expect_success 'tolerate server sending REF_DELTA against missing promisor objects' ' test_expect_success PERL_TEST_HELPERS 'tolerate server sending REF_DELTA against missing promisor objects' '
SERVER="$HTTPD_DOCUMENT_ROOT_PATH/server" && SERVER="$HTTPD_DOCUMENT_ROOT_PATH/server" &&
rm -rf "$SERVER" repo && rm -rf "$SERVER" repo &&
test_create_repo "$SERVER" && test_create_repo "$SERVER" &&

View File

@ -220,7 +220,7 @@ test_expect_success 'refs/heads prefix' '
test_cmp expect actual test_cmp expect actual
' '


test_expect_success 'ignore very large set of prefixes' ' test_expect_success PERL_TEST_HELPERS 'ignore very large set of prefixes' '
# generate a large number of ref-prefixes that we expect # generate a large number of ref-prefixes that we expect
# to match nothing; the value here exceeds TOO_MANY_PREFIXES # to match nothing; the value here exceeds TOO_MANY_PREFIXES
# from ls-refs.c. # from ls-refs.c.

View File

@ -1120,7 +1120,7 @@ test_expect_success 'push with http:// and a config of v2 does not request v2' '
! grep "git< version 2" log ! grep "git< version 2" log
' '


test_expect_success 'when server sends "ready", expect DELIM' ' test_expect_success PERL_TEST_HELPERS 'when server sends "ready", expect DELIM' '
rm -rf "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" http_child && rm -rf "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" http_child &&


git init "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" && git init "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" &&
@ -1140,7 +1140,7 @@ test_expect_success 'when server sends "ready", expect DELIM' '
test_grep "expected packfile to be sent after .ready." err test_grep "expected packfile to be sent after .ready." err
' '


test_expect_success 'when server does not send "ready", expect FLUSH' ' test_expect_success PERL_TEST_HELPERS 'when server does not send "ready", expect FLUSH' '
rm -rf "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" http_child log && rm -rf "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" http_child log &&


git init "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" && git init "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" &&
@ -1446,7 +1446,7 @@ test_expect_success 'http:// --negotiate-only' '
grep "$COMMON" out grep "$COMMON" out
' '


test_expect_success 'http:// --negotiate-only without wait-for-done support' ' test_expect_success PERL_TEST_HELPERS 'http:// --negotiate-only without wait-for-done support' '
SERVER="server" && SERVER="server" &&
URI="$HTTPD_URL/one_time_perl/server" && URI="$HTTPD_URL/one_time_perl/server" &&



View File

@ -4,6 +4,12 @@ test_description='upload-pack ref-in-want'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping upload-pack ref-in-want tests; Perl not available'
test_done
fi

get_actual_refs () { get_actual_refs () {
sed -n -e '/wanted-refs/,/0001/{ sed -n -e '/wanted-refs/,/0001/{
/wanted-refs/d /wanted-refs/d

View File

@ -4,6 +4,12 @@ test_description='handling of promisor remote advertisement'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping promisor remote capabilities tests; Perl not available'
test_done
fi

GIT_TEST_MULTI_PACK_INDEX=0 GIT_TEST_MULTI_PACK_INDEX=0
GIT_TEST_MULTI_PACK_INDEX_WRITE_INCREMENTAL=0 GIT_TEST_MULTI_PACK_INDEX_WRITE_INCREMENTAL=0



View File

@ -7,6 +7,12 @@ test_description='Tests git rev-list --bisect functionality'
. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/lib-t6000.sh # t6xxx specific functions . "$TEST_DIRECTORY"/lib-t6000.sh # t6xxx specific functions


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping rev-list bisect tests; Perl not available'
test_done
fi

# usage: test_bisection max-diff bisect-option head ^prune... # usage: test_bisection max-diff bisect-option head ^prune...
# #
# e.g. test_bisection 1 --bisect l1 ^l0 # e.g. test_bisection 1 --bisect l1 ^l0

View File

@ -8,6 +8,12 @@ test_description='Tests git rev-list --topo-order functionality'
. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/lib-t6000.sh # t6xxx specific functions . "$TEST_DIRECTORY"/lib-t6000.sh # t6xxx specific functions


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping rev-list topo-order tests; Perl not available'
test_done
fi

list_duplicates() list_duplicates()
{ {
"$@" | sort | uniq -d "$@" | sort | uniq -d

View File

@ -4,6 +4,12 @@ test_description='git rev-list should notice bad commits'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping rev-list with bad commit tests; Perl not available'
test_done
fi

# Note: # Note:
# - compression level is set to zero to make "corruptions" easier to perform # - compression level is set to zero to make "corruptions" easier to perform
# - reflog is disabled to avoid extra references which would twart the test # - reflog is disabled to avoid extra references which would twart the test

View File

@ -26,7 +26,7 @@ test_expect_success 'set up --reverse example' '
commit five commit five
' '


test_expect_success '--reverse --parents --full-history combines correctly' ' test_expect_success PERL_TEST_HELPERS '--reverse --parents --full-history combines correctly' '
git rev-list --parents --full-history main -- foo | git rev-list --parents --full-history main -- foo |
perl -e "print reverse <>" > expected && perl -e "print reverse <>" > expected &&
git rev-list --reverse --parents --full-history main -- foo \ git rev-list --reverse --parents --full-history main -- foo \
@ -34,7 +34,7 @@ test_expect_success '--reverse --parents --full-history combines correctly' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success '--boundary does too' ' test_expect_success PERL_TEST_HELPERS '--boundary does too' '
git rev-list --boundary --parents --full-history main ^root -- foo | git rev-list --boundary --parents --full-history main ^root -- foo |
perl -e "print reverse <>" > expected && perl -e "print reverse <>" > expected &&
git rev-list --boundary --reverse --parents --full-history \ git rev-list --boundary --reverse --parents --full-history \

View File

@ -4,6 +4,12 @@ test_description='git rev-list should handle unexpected object types'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping rev-list unexpected objects tests; Perl not available'
test_done
fi

test_expect_success 'setup well-formed objects' ' test_expect_success 'setup well-formed objects' '
blob="$(printf "foo" | git hash-object -w --stdin)" && blob="$(printf "foo" | git hash-object -w --stdin)" &&
tree="$(printf "100644 blob $blob\tfoo" | git mktree)" && tree="$(printf "100644 blob $blob\tfoo" | git mktree)" &&

View File

@ -4,6 +4,12 @@ test_description='basic tests of rev-list --disk-usage'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping rev-list disk usage tests; Perl not available'
test_done
fi

# we want a mix of reachable and unreachable, as well as # we want a mix of reachable and unreachable, as well as
# objects in the bitmapped pack and some outside of it # objects in the bitmapped pack and some outside of it
test_expect_success 'set up repository' ' test_expect_success 'set up repository' '

View File

@ -10,6 +10,12 @@ GNUPGHOME_NOT_USED=$GNUPGHOME
. "$TEST_DIRECTORY"/lib-gpg.sh . "$TEST_DIRECTORY"/lib-gpg.sh
. "$TEST_DIRECTORY"/lib-terminal.sh . "$TEST_DIRECTORY"/lib-terminal.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping for-each-ref tests; Perl not available'
test_done
fi

# Mon Jul 3 23:18:43 2006 +0000 # Mon Jul 3 23:18:43 2006 +0000
datestamp=1151968723 datestamp=1151968723
setdate_and_increment () { setdate_and_increment () {

View File

@ -661,7 +661,7 @@ test_expect_success 'setup trace2' '
export GIT_TRACE2_BRIEF export GIT_TRACE2_BRIEF
' '


test_expect_success 'setup large log output' ' test_expect_success PERL_TEST_HELPERS 'setup large log output' '
perl -e " perl -e "
print \"this is a long commit message\" x 50000 print \"this is a long commit message\" x 50000
" >commit-msg && " >commit-msg &&

View File

@ -4,6 +4,12 @@ test_description='check handling of disallowed .gitmodule urls'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping submodule dash URL tests; Perl not available'
test_done
fi

test_expect_success 'setup' ' test_expect_success 'setup' '
git config --global protocol.file.allow always git config --global protocol.file.allow always
' '

View File

@ -1064,7 +1064,7 @@ test_expect_success 'status -s submodule summary (clean submodule)' '
test_cmp expect output test_cmp expect output
' '


test_expect_success 'status -z implies porcelain' ' test_expect_success PERL_TEST_HELPERS 'status -z implies porcelain' '
git status --porcelain | git status --porcelain |
perl -pe "s/\012/\000/g" >expect && perl -pe "s/\012/\000/g" >expect &&
git status -z >output && git status -z >output &&

View File

@ -4,6 +4,12 @@ test_description='git grep in binary files'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping grep binary tests; Perl not available'
test_done
fi

test_expect_success 'setup' " test_expect_success 'setup' "
echo 'binaryQfileQm[*]cQ*æQð' | q_to_nul >a && echo 'binaryQfileQm[*]cQ*æQð' | q_to_nul >a &&
git add a && git add a &&

View File

@ -7,6 +7,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
TEST_CREATE_REPO_NO_TEMPLATE=1 TEST_CREATE_REPO_NO_TEMPLATE=1
. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping annotate tests; Perl not available'
test_done
fi

PROG='git annotate' PROG='git annotate'
. "$TEST_DIRECTORY"/annotate-tests.sh . "$TEST_DIRECTORY"/annotate-tests.sh



View File

@ -7,6 +7,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
TEST_CREATE_REPO_NO_TEMPLATE=1 TEST_CREATE_REPO_NO_TEMPLATE=1
. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping blame colors tests; Perl not available'
test_done
fi

PROG='git blame -c' PROG='git blame -c'
. "$TEST_DIRECTORY"/annotate-tests.sh . "$TEST_DIRECTORY"/annotate-tests.sh



View File

@ -4,6 +4,12 @@ test_description='git blame textconv support'


. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping blame textconv tests; Perl not available'
test_done
fi

find_blame() { find_blame() {
sed -e 's/^[^(]*//' sed -e 's/^[^(]*//'
} }

View File

@ -81,7 +81,7 @@ do
git blame --root -C --$output combined >output git blame --root -C --$output combined >output
' '


test_expect_success "$output output finds correct commits" ' test_expect_success PERL_TEST_HELPERS "$output output finds correct commits" '
generate_expect >expect <<-\EOF && generate_expect >expect <<-\EOF &&
5 base 5 base
1 modified 1 modified
@ -93,7 +93,7 @@ do
test_cmp expect actual test_cmp expect actual
' '


test_expect_success "$output output shows correct filenames" ' test_expect_success PERL_TEST_HELPERS "$output output shows correct filenames" '
generate_expect >expect <<-\EOF && generate_expect >expect <<-\EOF &&
11 one 11 one
11 two 11 two
@ -102,7 +102,7 @@ do
test_cmp expect actual test_cmp expect actual
' '


test_expect_success "$output output shows correct previous pointer" ' test_expect_success PERL_TEST_HELPERS "$output output shows correct previous pointer" '
generate_expect >expect <<-EOF && generate_expect >expect <<-EOF &&
5 NONE 5 NONE
1 $(git rev-parse modified^) one 1 $(git rev-parse modified^) one

View File

@ -7,6 +7,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
TEST_CREATE_REPO_NO_TEMPLATE=1 TEST_CREATE_REPO_NO_TEMPLATE=1
. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq PERL_TEST_HELPERS
then
skip_all='skipping blame colors tests; Perl not available'
test_done
fi

PROG='git blame -c' PROG='git blame -c'
. "$TEST_DIRECTORY"/annotate-tests.sh . "$TEST_DIRECTORY"/annotate-tests.sh



View File

@ -15,7 +15,7 @@ test_expect_success 'initialize repo' '
test -e file test -e file
' '


test_expect_success '(supposedly) non-conflicting change from SVN' ' test_expect_success PERL_TEST_HELPERS '(supposedly) non-conflicting change from SVN' '
test x"$(sed -n -e 58p < file)" = x58 && test x"$(sed -n -e 58p < file)" = x58 &&
test x"$(sed -n -e 61p < file)" = x61 && test x"$(sed -n -e 61p < file)" = x61 &&
svn_cmd co "$svnrepo" tmp && svn_cmd co "$svnrepo" tmp &&
@ -37,7 +37,7 @@ test_expect_success 'some unrelated changes to git' "
git commit -m bye-life life git commit -m bye-life life
" "


test_expect_success 'change file but in unrelated area' " test_expect_success PERL_TEST_HELPERS 'change file but in unrelated area' "
test x\"\$(sed -n -e 4p < file)\" = x4 && test x\"\$(sed -n -e 4p < file)\" = x4 &&
test x\"\$(sed -n -e 7p < file)\" = x7 && test x\"\$(sed -n -e 7p < file)\" = x7 &&
perl -i.bak -p -e 's/^4\$/4444/' file && perl -i.bak -p -e 's/^4\$/4444/' file &&

View File

@ -610,7 +610,7 @@ test_expect_success 'directory becomes symlink' '
(cd result && git show main:foo) (cd result && git show main:foo)
' '


test_expect_success 'fast-export quotes pathnames' ' test_expect_success PERL_TEST_HELPERS 'fast-export quotes pathnames' '
git init crazy-paths && git init crazy-paths &&
test_config -C crazy-paths core.protectNTFS false && test_config -C crazy-paths core.protectNTFS false &&
(cd crazy-paths && (cd crazy-paths &&

View File

@ -29,7 +29,7 @@ test_expect_success 'shell allows interactive command' '
test_cmp expect actual test_cmp expect actual
' '


test_expect_success 'shell complains of overlong commands' ' test_expect_success PERL_TEST_HELPERS 'shell complains of overlong commands' '
perl -e "print \"a\" x 2**12 for (0..2**19)" | perl -e "print \"a\" x 2**12 for (0..2**19)" |
test_must_fail git shell 2>err && test_must_fail git shell 2>err &&
grep "too long" err grep "too long" err

View File

@ -1706,6 +1706,7 @@ test -n "$USE_LIBPCRE2" && test_set_prereq LIBPCRE2
test -z "$NO_GETTEXT" && test_set_prereq GETTEXT test -z "$NO_GETTEXT" && test_set_prereq GETTEXT
test -n "$SANITIZE_LEAK" && test_set_prereq SANITIZE_LEAK test -n "$SANITIZE_LEAK" && test_set_prereq SANITIZE_LEAK
test -n "$GIT_VALGRIND_ENABLED" && test_set_prereq VALGRIND test -n "$GIT_VALGRIND_ENABLED" && test_set_prereq VALGRIND
test -n "$PERL_PATH" && test_set_prereq PERL_TEST_HELPERS


if test -z "$GIT_TEST_CHECK_CACHE_TREE" if test -z "$GIT_TEST_CHECK_CACHE_TREE"
then then