diff --git a/meson.build b/meson.build
index e98cfa4909..8bab8f3481 100644
--- a/meson.build
+++ b/meson.build
@@ -779,7 +779,7 @@ endif
# features. It is optional if you want to neither execute tests nor use any of
# these optional features.
perl_required = get_option('perl')
-if get_option('tests') or get_option('gitweb').enabled() or 'netrc' in get_option('credential_helpers') or get_option('docs') != []
+if get_option('gitweb').enabled() or 'netrc' in get_option('credential_helpers') or get_option('docs') != []
perl_required = true
endif
diff --git a/t/Makefile b/t/Makefile
index 2994eb5fa9..791e0a0978 100644
--- a/t/Makefile
+++ b/t/Makefile
@@ -59,16 +59,21 @@ CHAINLINTSUPPRESS = GIT_TEST_EXT_CHAIN_LINT=0 && export GIT_TEST_EXT_CHAIN_LINT
all:: $(DEFAULT_TEST_TARGET)
-test: pre-clean check-chainlint check-meson $(TEST_LINT)
+test: pre-clean check-meson $(TEST_LINT)
$(CHAINLINTSUPPRESS) $(MAKE) aggregate-results-and-cleanup
+ifneq ($(PERL_PATH),)
+test: check-chainlint
+prove: check-chainlint
+endif
+
failed:
@failed=$$(cd '$(TEST_RESULTS_DIRECTORY_SQ)' && \
grep -l '^failed [1-9]' *.counts | \
sed -n 's/\.counts$$/.sh/p') && \
test -z "$$failed" || $(MAKE) $$failed
-prove: pre-clean check-chainlint $(TEST_LINT)
+prove: pre-clean $(TEST_LINT)
@echo "*** prove (shell & unit tests) ***"
@$(CHAINLINTSUPPRESS) TEST_OPTIONS='$(GIT_TEST_OPTS)' TEST_SHELL_PATH='$(TEST_SHELL_PATH_SQ)' $(PROVE) --exec ./run-test.sh $(GIT_PROVE_OPTS) $(T) $(UNIT_TESTS)
$(MAKE) clean-except-prove-cache
@@ -132,8 +137,13 @@ check-meson:
fi; \
done
-test-lint: test-lint-duplicates test-lint-executable test-lint-shell-syntax \
+test-lint: test-lint-duplicates test-lint-executable \
test-lint-filenames
+ifneq ($(PERL_PATH),)
+test-lint: test-lint-shell-syntax
+else
+GIT_TEST_CHAIN_LINT = 0
+endif
ifneq ($(GIT_TEST_CHAIN_LINT),0)
test-lint: test-chainlint
endif
diff --git a/t/helper/test-path-utils.c b/t/helper/test-path-utils.c
index f3c59e5028..086238c826 100644
--- a/t/helper/test-path-utils.c
+++ b/t/helper/test-path-utils.c
@@ -323,6 +323,19 @@ int cmd__path_utils(int argc, const char **argv)
return 0;
}
+ if (argc >= 2 && !strcmp(argv[1], "readlink")) {
+ struct strbuf target = STRBUF_INIT;
+ while (argc > 2) {
+ if (strbuf_readlink(&target, argv[2], 0) < 0)
+ die_errno("cannot read link at '%s'", argv[2]);
+ puts(target.buf);
+ argc--;
+ argv++;
+ }
+ strbuf_release(&target);
+ return 0;
+ }
+
if (argc >= 2 && !strcmp(argv[1], "absolute_path")) {
while (argc > 2) {
puts(absolute_path(argv[2]));
diff --git a/t/helper/test-sha1.sh b/t/helper/test-sha1.sh
index bf387d3db1..f03b784ddc 100755
--- a/t/helper/test-sha1.sh
+++ b/t/helper/test-sha1.sh
@@ -15,7 +15,7 @@ do
{
test -z "$pfx" || echo "$pfx"
dd if=/dev/zero bs=1048576 count=$cnt 2>/dev/null |
- perl -pe 'y/\000/g/'
+ tr "\000" "g"
} | ./t/helper/test-tool $sha1 $cnt
)
if test "$expect" = "$actual"
@@ -61,7 +61,7 @@ do
{
test -z "$pfx" || echo "$pfx"
dd if=/dev/zero bs=1048576 count=$cnt 2>/dev/null |
- perl -pe 'y/\000/g/'
+ tr "\000" "g"
} | sha1sum |
sed -e 's/ .*//'
)
diff --git a/t/lib-diff.sh b/t/lib-diff.sh
index c4606bd4b7..12b3c8fcc6 100644
--- a/t/lib-diff.sh
+++ b/t/lib-diff.sh
@@ -21,8 +21,8 @@ compare_diff_raw_z () {
# Also we do not check SHA1 hash generation in this test, which
# is a job for t0000-basic.sh
- perl -pe 'y/\000/\012/' <"$1" | sed -e "$sanitize_diff_raw_z" >.tmp-1
- perl -pe 'y/\000/\012/' <"$2" | sed -e "$sanitize_diff_raw_z" >.tmp-2
+ tr "\000" "\012" <"$1" | sed -e "$sanitize_diff_raw_z" >.tmp-1
+ tr "\000" "\012" <"$2" | sed -e "$sanitize_diff_raw_z" >.tmp-2
test_cmp .tmp-1 .tmp-2 && rm -f .tmp-1 .tmp-2
}
diff --git a/t/lib-gpg.sh b/t/lib-gpg.sh
index 3845b6ac44..937b876bd0 100644
--- a/t/lib-gpg.sh
+++ b/t/lib-gpg.sh
@@ -192,9 +192,5 @@ test_lazy_prereq GPGSSH_VERIFYTIME '
'
sanitize_pgp() {
- perl -ne '
- /^-----END PGP/ and $in_pgp = 0;
- print unless $in_pgp;
- /^-----BEGIN PGP/ and $in_pgp = 1;
- '
+ sed "/^-----BEGIN PGP/,/^-----END PGP/{/^-/p;d;}"
}
diff --git a/t/lib-httpd.sh b/t/lib-httpd.sh
index d83bafeab3..5091db949b 100644
--- a/t/lib-httpd.sh
+++ b/t/lib-httpd.sh
@@ -165,7 +165,7 @@ prepare_httpd() {
install_script broken-smart-http.sh
install_script error-smart-http.sh
install_script error.sh
- install_script apply-one-time-perl.sh
+ install_script apply-one-time-script.sh
install_script nph-custom-auth.sh
ln -s "$LIB_HTTPD_MODULE_PATH" "$HTTPD_ROOT_PATH/modules"
diff --git a/t/lib-httpd/apache.conf b/t/lib-httpd/apache.conf
index 022276a6b9..e631ab0eb5 100644
--- a/t/lib-httpd/apache.conf
+++ b/t/lib-httpd/apache.conf
@@ -135,7 +135,7 @@ SetEnv PERL_PATH ${PERL_PATH}
SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH}
SetEnv GIT_HTTP_EXPORT_ALL
-
+
SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH}
SetEnv GIT_HTTP_EXPORT_ALL
@@ -159,7 +159,7 @@ ScriptAliasMatch /smart_*[^/]*/(.*) ${GIT_EXEC_PATH}/git-http-backend/$1
ScriptAlias /broken_smart/ broken-smart-http.sh/
ScriptAlias /error_smart/ error-smart-http.sh/
ScriptAlias /error/ error.sh/
-ScriptAliasMatch /one_time_perl/(.*) apply-one-time-perl.sh/$1
+ScriptAliasMatch /one_time_script/(.*) apply-one-time-script.sh/$1
ScriptAliasMatch /custom_auth/(.*) nph-custom-auth.sh/$1
Options FollowSymlinks
@@ -182,7 +182,7 @@ ScriptAliasMatch /custom_auth/(.*) nph-custom-auth.sh/$1
Options ExecCGI
-
+
Options ExecCGI
diff --git a/t/lib-httpd/apply-one-time-perl.sh b/t/lib-httpd/apply-one-time-perl.sh
deleted file mode 100644
index d7f9fed6ae..0000000000
--- a/t/lib-httpd/apply-one-time-perl.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/sh
-
-# If "one-time-perl" exists in $HTTPD_ROOT_PATH, run perl on the HTTP response,
-# using the contents of "one-time-perl" as the perl command to be run. If the
-# response was modified as a result, delete "one-time-perl" so that subsequent
-# HTTP responses are no longer modified.
-#
-# This can be used to simulate the effects of the repository changing in
-# between HTTP request-response pairs.
-if test -f one-time-perl
-then
- LC_ALL=C
- export LC_ALL
-
- "$GIT_EXEC_PATH/git-http-backend" >out
- "$PERL_PATH" -pe "$(cat one-time-perl)" out >out_modified
-
- if cmp -s out out_modified
- then
- cat out
- else
- cat out_modified
- rm one-time-perl
- fi
-else
- "$GIT_EXEC_PATH/git-http-backend"
-fi
diff --git a/t/lib-httpd/apply-one-time-script.sh b/t/lib-httpd/apply-one-time-script.sh
new file mode 100644
index 0000000000..b1682944e2
--- /dev/null
+++ b/t/lib-httpd/apply-one-time-script.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# If "one-time-script" exists in $HTTPD_ROOT_PATH, run the script on the HTTP
+# response. If the response was modified as a result, delete "one-time-script"
+# so that subsequent HTTP responses are no longer modified.
+#
+# This can be used to simulate the effects of the repository changing in
+# between HTTP request-response pairs.
+if test -f one-time-script
+then
+ LC_ALL=C
+ export LC_ALL
+
+ "$GIT_EXEC_PATH/git-http-backend" >out
+ ./one-time-script out >out_modified
+
+ if cmp -s out out_modified
+ then
+ cat out
+ else
+ cat out_modified
+ rm one-time-script
+ fi
+else
+ "$GIT_EXEC_PATH/git-http-backend"
+fi
diff --git a/t/lib-t6000.sh b/t/lib-t6000.sh
index fba6778ca3..35c5472465 100644
--- a/t/lib-t6000.sh
+++ b/t/lib-t6000.sh
@@ -109,13 +109,12 @@ check_output () {
# All alphanums translated into -'s which are then compressed and stripped
# from front and back.
name_from_description () {
- perl -pe '
- s/[^A-Za-z0-9.]/-/g;
- s/-+/-/g;
- s/-$//;
- s/^-//;
- y/A-Z/a-z/;
- '
+ sed \
+ -e 's/[^A-Za-z0-9.]/-/g' \
+ -e 's/--*/-/g' \
+ -e 's/-$//' \
+ -e 's/^-//' \
+ -e 'y/A-Z/a-z/'
}
diff --git a/t/t0008-ignores.sh b/t/t0008-ignores.sh
index c9376dffb5..273d71411f 100755
--- a/t/t0008-ignores.sh
+++ b/t/t0008-ignores.sh
@@ -39,11 +39,11 @@ test_stderr () {
}
broken_c_unquote () {
- "$PERL_PATH" -pe 's/^"//; s/\\//; s/"$//; tr/\n/\0/' "$@"
+ sed -e 's/^"//' -e 's/\\//' -e 's/"$//' "$1" | tr '\n' '\0'
}
broken_c_unquote_verbose () {
- "$PERL_PATH" -pe 's/ "/ /; s/\\//; s/"$//; tr/:\t\n/\0/' "$@"
+ sed -e 's/ "/ /' -e 's/\\//' -e 's/"$//' "$1" | tr ':\t\n' '\000'
}
stderr_contains () {
diff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh
index 3f6433d304..bf10d253ec 100755
--- a/t/t0021-conversion.sh
+++ b/t/t0021-conversion.sh
@@ -20,8 +20,7 @@ EOF
generate_random_characters () {
LEN=$1
NAME=$2
- test-tool genrandom some-seed $LEN |
- perl -pe "s/./chr((ord($&) % 26) + ord('a'))/sge" >"$TEST_ROOT/$NAME"
+ test-tool genrandom some-seed | tr -dc 'a-z' | test_copy_bytes "$LEN" >"$TEST_ROOT/$NAME"
}
filter_git () {
@@ -841,7 +840,7 @@ test_expect_success 'process filter abort stops processing of all further files'
)
'
-test_expect_success PERL 'invalid process filter must fail (and not hang!)' '
+test_expect_success 'invalid process filter must fail (and not hang!)' '
test_config_global filter.protocol.process cat &&
test_config_global filter.protocol.required true &&
rm -rf repo &&
@@ -1111,19 +1110,19 @@ do
branch) opt='-f HEAD' ;;
esac
- test_expect_success PERL,TTY "delayed checkout shows progress by default on tty ($mode checkout)" '
+ test_expect_success TTY "delayed checkout shows progress by default on tty ($mode checkout)" '
test_delayed_checkout_progress test_terminal git checkout $opt
'
- test_expect_success PERL "delayed checkout omits progress on non-tty ($mode checkout)" '
+ test_expect_success "delayed checkout omits progress on non-tty ($mode checkout)" '
test_delayed_checkout_progress ! git checkout $opt
'
- test_expect_success PERL,TTY "delayed checkout omits progress with --quiet ($mode checkout)" '
+ test_expect_success TTY "delayed checkout omits progress with --quiet ($mode checkout)" '
test_delayed_checkout_progress ! test_terminal git checkout --quiet $opt
'
- test_expect_success PERL,TTY "delayed checkout honors --[no]-progress ($mode checkout)" '
+ test_expect_success TTY "delayed checkout honors --[no]-progress ($mode checkout)" '
test_delayed_checkout_progress ! test_terminal git checkout --no-progress $opt &&
test_delayed_checkout_progress test_terminal git checkout --quiet --progress $opt
'
diff --git a/t/t0090-cache-tree.sh b/t/t0090-cache-tree.sh
index ab80c9ef13..d901588294 100755
--- a/t/t0090-cache-tree.sh
+++ b/t/t0090-cache-tree.sh
@@ -128,7 +128,7 @@ test_expect_success 'second commit has cache-tree' '
test_cache_tree
'
-test_expect_success PERL 'commit --interactive gives cache-tree on partial commit' '
+test_expect_success 'commit --interactive gives cache-tree on partial commit' '
test_when_finished "git reset --hard" &&
cat <<-\EOT >foo.c &&
int foo()
@@ -162,7 +162,7 @@ test_expect_success PERL 'commit --interactive gives cache-tree on partial commi
test_cache_tree expected.status
'
-test_expect_success PERL 'commit -p with shrinking cache-tree' '
+test_expect_success 'commit -p with shrinking cache-tree' '
mkdir -p deep/very-long-subdir &&
echo content >deep/very-long-subdir/file &&
git add deep &&
diff --git a/t/t0210-trace2-normal.sh b/t/t0210-trace2-normal.sh
index 4287ed3fbb..96c68f65df 100755
--- a/t/t0210-trace2-normal.sh
+++ b/t/t0210-trace2-normal.sh
@@ -53,10 +53,41 @@ GIT_TRACE2_BRIEF=1 && export GIT_TRACE2_BRIEF
#
# Implicit return from cmd_ function propagates .
+scrub_normal () {
+ # Scrub the variable fields from the normal trace2 output to make
+ # testing easier:
+ #
+ # 1. Various messages include an elapsed time in the middle of the
+ # message. Replace the time with a placeholder to simplify our
+ # HEREDOC in the test script.
+ #
+ # 2. We expect:
+ #
+ # start [ [ [...]]]
+ #
+ # where argv0 might be a relative or absolute path, with or
+ # without quotes, and platform dependent. Replace argv0 with a
+ # token for HEREDOC matching in the test script.
+ #
+ # 3. Likewise, the 'cmd_path' message breaks out argv[0].
+ #
+ # This line is only emitted when RUNTIME_PREFIX is defined,
+ # so just omit it for testing purposes.
+ #
+ # 4. 'cmd_ancestry' is not implemented everywhere, so for portability's
+ # sake, skip it when parsing normal.
+ sed \
+ -e 's/elapsed:[0-9]*\.[0-9][0-9]*\([eE][-+]\{0,1\}[0-9][0-9]*\)\{0,1\}/elapsed:_TIME_/g' \
+ -e "s/^start '[^']*' \(.*\)/start _EXE_ \1/" \
+ -e 's/^start [^ ][^ ]* \(.*\)/start _EXE_ \1/' \
+ -e '/^cmd_path/d' \
+ -e '/^cmd_ancestry/d'
+}
+
test_expect_success 'normal stream, return code 0' '
test_when_finished "rm trace.normal actual expect" &&
GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 001return 0 &&
- perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" actual &&
+ scrub_normal actual &&
cat >expect <<-EOF &&
version $V
start _EXE_ trace2 001return 0
@@ -70,7 +101,7 @@ test_expect_success 'normal stream, return code 0' '
test_expect_success 'normal stream, return code 1' '
test_when_finished "rm trace.normal actual expect" &&
test_must_fail env GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 001return 1 &&
- perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" actual &&
+ scrub_normal actual &&
cat >expect <<-EOF &&
version $V
start _EXE_ trace2 001return 1
@@ -85,7 +116,7 @@ test_expect_success 'automatic filename' '
test_when_finished "rm -r traces actual expect" &&
mkdir traces &&
GIT_TRACE2="$(pwd)/traces" test-tool trace2 001return 0 &&
- perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <"$(ls traces/*)" >actual &&
+ scrub_normal <"$(ls traces/*)" >actual &&
cat >expect <<-EOF &&
version $V
start _EXE_ trace2 001return 0
@@ -103,7 +134,7 @@ test_expect_success 'automatic filename' '
test_expect_success 'normal stream, exit code 0' '
test_when_finished "rm trace.normal actual expect" &&
GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 002exit 0 &&
- perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" actual &&
+ scrub_normal actual &&
cat >expect <<-EOF &&
version $V
start _EXE_ trace2 002exit 0
@@ -117,7 +148,7 @@ test_expect_success 'normal stream, exit code 0' '
test_expect_success 'normal stream, exit code 1' '
test_when_finished "rm trace.normal actual expect" &&
test_must_fail env GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 002exit 1 &&
- perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" actual &&
+ scrub_normal actual &&
cat >expect <<-EOF &&
version $V
start _EXE_ trace2 002exit 1
@@ -135,7 +166,7 @@ test_expect_success 'normal stream, exit code 1' '
test_expect_success 'normal stream, error event' '
test_when_finished "rm trace.normal actual expect" &&
GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 003error "hello world" "this is a test" &&
- perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" actual &&
+ scrub_normal actual &&
cat >expect <<-EOF &&
version $V
start _EXE_ trace2 003error '\''hello world'\'' '\''this is a test'\''
@@ -155,7 +186,7 @@ test_expect_success 'normal stream, error event' '
test_expect_success 'BUG messages are written to trace2' '
test_when_finished "rm trace.normal actual expect" &&
test_must_fail env GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 007bug &&
- perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" actual &&
+ scrub_normal actual &&
cat >expect <<-EOF &&
version $V
start _EXE_ trace2 007bug
@@ -179,7 +210,7 @@ test_expect_success 'bug messages with BUG_if_bug() are written to trace2' '
sed "s/^.*: //" actual &&
test_cmp expect actual &&
- perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" actual &&
+ scrub_normal actual &&
cat >expect <<-EOF &&
version $V
start _EXE_ trace2 008bug
@@ -205,7 +236,7 @@ test_expect_success 'bug messages without explicit BUG_if_bug() are written to t
sed "s/^.*: //" actual &&
test_cmp expect actual &&
- perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" actual &&
+ scrub_normal actual &&
cat >expect <<-EOF &&
version $V
start _EXE_ trace2 009bug_BUG
@@ -230,7 +261,7 @@ test_expect_success 'bug messages followed by BUG() are written to trace2' '
sed "s/^.*: //" actual &&
test_cmp expect actual &&
- perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" actual &&
+ scrub_normal actual &&
cat >expect <<-EOF &&
version $V
start _EXE_ trace2 010bug_BUG
@@ -262,7 +293,7 @@ test_expect_success 'using global config, normal stream, return code 0' '
test_config_global trace2.normalBrief 1 &&
test_config_global trace2.normalTarget "$(pwd)/trace.normal" &&
test-tool trace2 001return 0 &&
- perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" actual &&
+ scrub_normal actual &&
cat >expect <<-EOF &&
version $V
start _EXE_ trace2 001return 0
@@ -280,7 +311,7 @@ test_expect_success 'using global config with include' '
mv "$(pwd)/.gitconfig" "$(pwd)/real.gitconfig" &&
test_config_global include.path "$(pwd)/real.gitconfig" &&
test-tool trace2 001return 0 &&
- perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" actual &&
+ scrub_normal actual &&
cat >expect <<-EOF &&
version $V
start _EXE_ trace2 001return 0
diff --git a/t/t0210/scrub_normal.perl b/t/t0210/scrub_normal.perl
deleted file mode 100644
index 7cc4de392a..0000000000
--- a/t/t0210/scrub_normal.perl
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/perl
-#
-# Scrub the variable fields from the normal trace2 output to
-# make testing easier.
-
-use strict;
-use warnings;
-
-my $float = '[0-9]*\.[0-9]+([eE][-+]?[0-9]+)?';
-
-# This code assumes that the trace2 data was written with bare
-# turned on (which omits the " :" prefix.
-
-while (<>) {
- # Various messages include an elapsed time in the middle
- # of the message. Replace the time with a placeholder to
- # simplify our HEREDOC in the test script.
- s/elapsed:$float/elapsed:_TIME_/g;
-
- my $line = $_;
-
- # we expect:
- # start [ [ [...]]]
- #
- # where argv0 might be a relative or absolute path, with
- # or without quotes, and platform dependent. Replace argv0
- # with a token for HEREDOC matching in the test script.
-
- if ($line =~ m/^start/) {
- $line =~ /^start\s+(.*)/;
- my $argv = $1;
- $argv =~ m/(\'[^\']*\'|[^ ]+)\s+(.*)/;
- my $argv_0 = $1;
- my $argv_rest = $2;
-
- print "start _EXE_ $argv_rest\n";
- }
- elsif ($line =~ m/^cmd_path/) {
- # Likewise, the 'cmd_path' message breaks out argv[0].
- #
- # This line is only emitted when RUNTIME_PREFIX is defined,
- # so just omit it for testing purposes.
- # print "cmd_path _EXE_\n";
- }
- elsif ($line =~ m/^cmd_ancestry/) {
- # 'cmd_ancestry' is not implemented everywhere, so for portability's
- # sake, skip it when parsing normal.
- #
- # print "$line";
- }
- else {
- print "$line";
- }
-}
diff --git a/t/t0211-trace2-perf.sh b/t/t0211-trace2-perf.sh
index bac9046540..760cf69087 100755
--- a/t/t0211-trace2-perf.sh
+++ b/t/t0211-trace2-perf.sh
@@ -4,6 +4,12 @@ test_description='test trace2 facility (perf target)'
. ./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.
sane_unset GIT_TRACE2 GIT_TRACE2_PERF GIT_TRACE2_EVENT
sane_unset GIT_TRACE2_PERF_BRIEF
diff --git a/t/t0610-reftable-basics.sh b/t/t0610-reftable-basics.sh
index 002a75dee8..1be534a895 100755
--- a/t/t0610-reftable-basics.sh
+++ b/t/t0610-reftable-basics.sh
@@ -653,9 +653,8 @@ test_expect_success 'basic: commit and list refs' '
test_expect_success 'basic: can write large commit message' '
test_when_finished "rm -rf repo" &&
git init repo &&
- perl -e "
- print \"this is a long commit message\" x 50000
- " >commit-msg &&
+
+ awk "BEGIN { for (i = 0; i < 50000; i++) printf \"%s\", \"this is a long commit message\" }" >commit-msg &&
git -C repo commit --allow-empty --file=../commit-msg
'
diff --git a/t/t0613-reftable-write-options.sh b/t/t0613-reftable-write-options.sh
index e2708e11d5..42aa1592f8 100755
--- a/t/t0613-reftable-write-options.sh
+++ b/t/t0613-reftable-write-options.sh
@@ -145,7 +145,7 @@ test_expect_success 'small block size fails with large reflog message' '
(
cd repo &&
test_commit A &&
- perl -e "print \"a\" x 500" >logmsg &&
+ test-tool genzeros 500 | tr "\000" "a" >logmsg &&
cat >expect <<-EOF &&
fatal: update_ref failed for ref ${SQ}refs/heads/logme${SQ}: reftable: transaction failure: entry too large
EOF
diff --git a/t/t1006-cat-file.sh b/t/t1006-cat-file.sh
index 398865d6eb..0a22b0a7b8 100755
--- a/t/t1006-cat-file.sh
+++ b/t/t1006-cat-file.sh
@@ -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 &&
extract_batch_output $orig actual &&
{
@@ -1323,7 +1323,7 @@ test_expect_success 'batch-command flush without --buffer' '
grep "^fatal:.*flush is only for --buffer mode.*" err
'
-script='
+perl_script='
use warnings;
use strict;
use IPC::Open2;
@@ -1345,12 +1345,16 @@ $? == 0 or die "\$?=$?";
expect="$hello_oid blob $hello_size"
-test_expect_success PERL '--batch-check is unbuffered by default' '
- perl -e "$script" -- --batch-check $hello_oid "$expect"
+test_lazy_prereq PERL_IPC_OPEN2 '
+ perl -MIPC::Open2 -e "exit 0"
'
-test_expect_success PERL '--batch-command info is unbuffered by default' '
- perl -e "$script" -- --batch-command $hello_oid "$expect" "info "
+test_expect_success PERL_IPC_OPEN2 '--batch-check is unbuffered by default' '
+ perl -e "$perl_script" -- --batch-check $hello_oid "$expect"
+'
+
+test_expect_success PERL_IPC_OPEN2 '--batch-command info is unbuffered by default' '
+ perl -e "$perl_script" -- --batch-command $hello_oid "$expect" "info "
'
test_done
diff --git a/t/t1007-hash-object.sh b/t/t1007-hash-object.sh
index a0481139de..b3cf53ff8c 100755
--- a/t/t1007-hash-object.sh
+++ b/t/t1007-hash-object.sh
@@ -205,7 +205,7 @@ test_expect_success 'too-short tree' '
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) &&
bin_oid=$(echo $hex_oid | hex2oct) &&
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
'
-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) &&
bin_oid=$(echo $hex_oid | hex2oct) &&
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
'
-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) &&
bin_oid=$(echo $hex_oid | hex2oct) &&
{
diff --git a/t/t1010-mktree.sh b/t/t1010-mktree.sh
index c291a2b33d..e9973f7494 100755
--- a/t/t1010-mktree.sh
+++ b/t/t1010-mktree.sh
@@ -42,13 +42,13 @@ test_expect_success 'ls-tree piped to mktree (2)' '
'
test_expect_success 'ls-tree output in wrong order given to mktree (1)' '
- perl -e "print reverse <>" actual &&
test_cmp tree actual
'
test_expect_success 'ls-tree output in wrong order given to mktree (2)' '
- perl -e "print reverse <>" actual &&
test_cmp tree.withsub actual
'
diff --git a/t/t1450-fsck.sh b/t/t1450-fsck.sh
index 8a456b1142..0105045376 100755
--- a/t/t1450-fsck.sh
+++ b/t/t1450-fsck.sh
@@ -346,7 +346,7 @@ test_expect_success 'unparseable tree object' '
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 \$tree" &&
test_when_finished "remove_object \$commit" &&
@@ -364,7 +364,7 @@ test_expect_success 'tree entry with type mismatch' '
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 \$tree" &&
blob=$(echo blob | git hash-object -w --stdin) &&
@@ -984,7 +984,7 @@ corrupt_index_checksum () {
# Corrupt the checksum on the index and then
# 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 &&
test_when_finished "mv .git/index.backup .git/index" &&
corrupt_index_checksum &&
diff --git a/t/t3300-funny-names.sh b/t/t3300-funny-names.sh
index f5bf16abcd..dd0586b007 100755
--- a/t/t3300-funny-names.sh
+++ b/t/t3300-funny-names.sh
@@ -70,7 +70,7 @@ test_expect_success 'ls-files -z does not quote funny filename' '
tabs ," (dq) and spaces
EOF
git ls-files -z >ls-files.z &&
- perl -pe "y/\000/\012/" current &&
+ tr "\000" "\012" current &&
test_cmp expected current
'
@@ -107,7 +107,7 @@ test_expect_success 'diff-index -z does not quote funny filename' '
tabs ," (dq) and spaces
EOF
git diff-index -z --name-status $t0 >diff-index.z &&
- perl -pe "y/\000/\012/" current &&
+ tr "\000" "\012" current &&
test_cmp expected current
'
@@ -117,7 +117,7 @@ test_expect_success 'diff-tree -z does not quote funny filename' '
tabs ," (dq) and spaces
EOF
git diff-tree -z --name-status $t0 $t1 >diff-tree.z &&
- perl -pe y/\\000/\\012/ current &&
+ tr "\000" "\012" current &&
test_cmp expected current
'
diff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh
index 3855d68dbc..782d97fb7d 100755
--- a/t/t4013-diff-various.sh
+++ b/t/t4013-diff-various.sh
@@ -11,6 +11,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
. ./test-lib.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 '
GIT_AUTHOR_DATE="2006-06-26 00:00:00 +0000" &&
diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
index 884f83fb8a..2782b1fc18 100755
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh
@@ -448,7 +448,7 @@ cat >>expect.no-threading <
References: <0>
EOF
-test_expect_success 'thread' '
+test_expect_success PERL_TEST_HELPERS 'thread' '
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 &&
check_threading expect.thread --thread main
'
@@ -490,7 +490,7 @@ In-Reply-To: <1>
References: <1>
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="" \
--thread main
'
@@ -512,7 +512,7 @@ In-Reply-To: <0>
References: <0>
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
'
@@ -538,12 +538,12 @@ References: <1>
<0>
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 \
--in-reply-to="" --thread main
'
-test_expect_success 'thread explicit shallow' '
+test_expect_success PERL_TEST_HELPERS 'thread explicit shallow' '
check_threading expect.cl-irt --cover-letter \
--in-reply-to="" --thread=shallow main
'
@@ -562,7 +562,7 @@ References: <0>
<1>
EOF
-test_expect_success 'thread deep' '
+test_expect_success PERL_TEST_HELPERS 'thread deep' '
check_threading expect.deep --thread=deep main
'
@@ -584,7 +584,7 @@ References: <1>
<2>
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 \
--in-reply-to="" main
'
@@ -609,7 +609,7 @@ References: <0>
<2>
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
'
@@ -638,27 +638,27 @@ References: <1>
<3>
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 \
--in-reply-to="" --thread=deep main
'
-test_expect_success 'thread via config' '
+test_expect_success PERL_TEST_HELPERS 'thread via config' '
test_config format.thread true &&
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 &&
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 &&
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 &&
check_threading expect.no-threading --no-thread main
'
diff --git a/t/t4020-diff-external.sh b/t/t4020-diff-external.sh
index f1efe482a5..c8a23d5148 100755
--- a/t/t4020-diff-external.sh
+++ b/t/t4020-diff-external.sh
@@ -237,7 +237,7 @@ check_external_diff 0 empty empty 0 on --quiet
check_external_diff 1 empty empty 1 on --quiet
check_external_diff 128 empty error 2 on --quiet
-echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file
+echo NULZbetweenZwords | tr "Z" "\000" > file
test_expect_success 'force diff with "diff"' '
after=$(git hash-object file) &&
diff --git a/t/t4029-diff-trailing-space.sh b/t/t4029-diff-trailing-space.sh
index 32b6e9a4e7..90cdde88d8 100755
--- a/t/t4029-diff-trailing-space.sh
+++ b/t/t4029-diff-trailing-space.sh
@@ -31,7 +31,8 @@ test_expect_success "$test_description" '
git config --bool diff.suppressBlankEmpty true &&
git diff f > actual &&
test_cmp exp actual &&
- perl -i.bak -p -e "s/^\$/ /" exp &&
+ sed "s/^\$/ /" exp >exp.munged &&
+ mv exp.munged exp &&
git config --bool diff.suppressBlankEmpty false &&
git diff f > actual &&
test_cmp exp actual &&
diff --git a/t/t4030-diff-textconv.sh b/t/t4030-diff-textconv.sh
index daebf9796f..f904fc19f6 100755
--- a/t/t4030-diff-textconv.sh
+++ b/t/t4030-diff-textconv.sh
@@ -20,13 +20,10 @@ cat >expect.text <<'EOF'
+1
EOF
-cat >hexdump <<'EOF'
-#!/bin/sh
-"$PERL_PATH" -e '$/ = undef; $_ = <>; s/./ord($&)/ge; print $_' < "$1"
-EOF
-chmod +x hexdump
-
test_expect_success 'setup binary file with history' '
+ write_script hexdump <<-\EOF &&
+ tr "\000\001" "01" <"$1"
+ EOF
test_commit --printf one file "\\0\\n" &&
test_commit --printf --append two file "\\01\\n"
'
diff --git a/t/t4031-diff-rewrite-binary.sh b/t/t4031-diff-rewrite-binary.sh
index c4394a27b5..15e012ccc7 100755
--- a/t/t4031-diff-rewrite-binary.sh
+++ b/t/t4031-diff-rewrite-binary.sh
@@ -57,24 +57,19 @@ test_expect_success 'diff --stat counts binary rewrite as 0 lines' '
grep " rewrite file" diff
'
-{
- echo "#!$SHELL_PATH"
- cat <<'EOF'
-"$PERL_PATH" -e '$/ = undef; $_ = <>; s/./ord($&)/ge; print $_' < "$1"
-EOF
-} >dump
-chmod +x dump
-
test_expect_success 'setup textconv' '
+ write_script dump <<-\EOF &&
+ test-tool hexdump <"$1"
+ EOF
echo file diff=foo >.gitattributes &&
git config diff.foo.textconv "\"$(pwd)\""/dump
'
test_expect_success 'rewrite diff respects textconv' '
git diff -B >diff &&
- grep "dissimilarity index" diff &&
- grep "^-61" diff &&
- grep "^-0" diff
+ test_grep "dissimilarity index" diff &&
+ test_grep "^-3d 0a 00" diff &&
+ test_grep "^+3d 0a 01" diff
'
test_done
diff --git a/t/t4058-diff-duplicates.sh b/t/t4058-diff-duplicates.sh
index 2fce4a9897..16266dff2a 100755
--- a/t/t4058-diff-duplicates.sh
+++ b/t/t4058-diff-duplicates.sh
@@ -13,6 +13,12 @@ test_description='test tree diff when trees have duplicate entries'
. ./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
#
# We have to rely on perl here because not all printfs understand
diff --git a/t/t4103-apply-binary.sh b/t/t4103-apply-binary.sh
index d370ecfe0d..8e302a5a57 100755
--- a/t/t4103-apply-binary.sh
+++ b/t/t4103-apply-binary.sh
@@ -26,10 +26,10 @@ test_expect_success 'setup' '
git commit -m "Initial Version" 2>/dev/null &&
git checkout -b binary &&
- perl -pe "y/x/\000/" file3 &&
+ tr "x" "\000" file3 &&
cat file3 >file4 &&
git add file2 &&
- perl -pe "y/\000/v/" file1 &&
+ tr "y" "\000" file1 &&
rm -f file2 &&
git update-index --add --remove file1 file2 file3 file4 &&
git commit -m "Second Version" &&
@@ -158,7 +158,7 @@ test_expect_success 'apply binary -p0 diff' '
test -z "$(git diff --name-status binary -- file3)"
'
-test_expect_success 'reject truncated binary diff' '
+test_expect_success PERL_TEST_HELPERS 'reject truncated binary diff' '
do_reset &&
# this length is calculated to get us very close to
diff --git a/t/t4116-apply-reverse.sh b/t/t4116-apply-reverse.sh
index 0784ba033a..1e7beab001 100755
--- a/t/t4116-apply-reverse.sh
+++ b/t/t4116-apply-reverse.sh
@@ -13,14 +13,14 @@ test_description='git apply in reverse
test_expect_success setup '
test_write_lines a b c d e f g h i j k l m n >file1 &&
- perl -pe "y/ijk/\\000\\001\\002/" file2 &&
+ tr "ijk" "\000\001\002" file2 &&
git add file1 file2 &&
git commit -m initial &&
git tag initial &&
test_write_lines a b c g h i J K L m o n p q >file1 &&
- perl -pe "y/mon/\\000\\001\\002/" file2 &&
+ tr "mon" "\000\001\002" file2 &&
git commit -a -m second &&
git tag second &&
diff --git a/t/t4150-am.sh b/t/t4150-am.sh
index 5e2b6c80ea..2ae93d3c96 100755
--- a/t/t4150-am.sh
+++ b/t/t4150-am.sh
@@ -1084,13 +1084,13 @@ test_expect_success 'am works with multi-line in-body headers' '
Body test" --author="$LONG " &&
git format-patch --stdout -1 >patch &&
# bump from, date, and subject down to in-body header
- perl -lpe "
- if (/^From:/) {
+ awk "
+ /^From:/{
print \"From: x \";
print \"Date: Sat, 1 Jan 2000 00:00:00 +0000\";
print \"Subject: x\n\";
- }
- " patch >msg &&
+ }; 1
+ " msg &&
git checkout HEAD^ &&
git am msg &&
# Ensure that the author and full message are present
diff --git a/t/t4200-rerere.sh b/t/t4200-rerere.sh
index b0a3e84984..204325f4d5 100755
--- a/t/t4200-rerere.sh
+++ b/t/t4200-rerere.sh
@@ -81,7 +81,7 @@ test_expect_success 'activate rerere, old style (conflicting merge)' '
test_might_fail git config --unset rerere.enabled &&
test_must_fail git merge first &&
- sha1=$(perl -pe "s/ .*//" .git/MERGE_RR) &&
+ sha1=$(sed "s/ .*//" .git/MERGE_RR) &&
rr=.git/rr-cache/$sha1 &&
grep "^=======\$" $rr/preimage &&
! test -f $rr/postimage &&
@@ -94,7 +94,7 @@ test_expect_success 'rerere.enabled works, too' '
git reset --hard &&
test_must_fail git merge first &&
- sha1=$(perl -pe "s/ .*//" .git/MERGE_RR) &&
+ sha1=$(sed "s/ .*//" .git/MERGE_RR) &&
rr=.git/rr-cache/$sha1 &&
grep ^=======$ $rr/preimage
'
@@ -104,7 +104,7 @@ test_expect_success 'set up rr-cache' '
git config rerere.enabled true &&
git reset --hard &&
test_must_fail git merge first &&
- sha1=$(perl -pe "s/ .*//" .git/MERGE_RR) &&
+ sha1=$(sed "s/ .*//" .git/MERGE_RR) &&
rr=.git/rr-cache/$sha1
'
@@ -188,7 +188,7 @@ test_expect_success 'rerere updates postimage timestamp' '
test_expect_success 'rerere clear' '
mv $rr/postimage .git/post-saved &&
- echo "$sha1 a1" | perl -pe "y/\012/\000/" >.git/MERGE_RR &&
+ echo "$sha1 a1" | tr "\012" "\000" >.git/MERGE_RR &&
git rerere clear &&
! test -d $rr
'
diff --git a/t/t4205-log-pretty-formats.sh b/t/t4205-log-pretty-formats.sh
index f81e42a84d..8f2ba98963 100755
--- a/t/t4205-log-pretty-formats.sh
+++ b/t/t4205-log-pretty-formats.sh
@@ -698,7 +698,7 @@ test_expect_success '%(trailers:only=no,only=true) shows only "key: value" trail
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 &&
{
unfold actual &&
git log --no-walk --pretty="%(trailers:unfold,only)" >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_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 &&
unfold expect &&
test_cmp expect actual
diff --git a/t/t4216-log-bloom.sh b/t/t4216-log-bloom.sh
index 3f163dc396..8910d53cac 100755
--- a/t/t4216-log-bloom.sh
+++ b/t/t4216-log-bloom.sh
@@ -738,20 +738,20 @@ check_corrupt_graph () {
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 &&
echo "warning: ignoring too-small changed-path chunk" \
"(4 < 12) in commit-graph file" >expect.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 &&
# 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
'
-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
# lookups out-of-bounds
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_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
# something plausible; we should not get to the point of
# actually reading from the bogus offsets anyway.
diff --git a/t/t5004-archive-corner-cases.sh b/t/t5004-archive-corner-cases.sh
index 50344e17ca..5174995191 100755
--- a/t/t5004-archive-corner-cases.sh
+++ b/t/t5004-archive-corner-cases.sh
@@ -4,6 +4,12 @@ test_description='test corner cases of git-archive'
. ./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
# without having to invoke tar because an otherwise valid empty GNU tar
# will be considered broken by {Open,Net}BSD tar
diff --git a/t/t5300-pack-object.sh b/t/t5300-pack-object.sh
index 5ac8d39094..a5932b6a8b 100755
--- a/t/t5300-pack-object.sh
+++ b/t/t5300-pack-object.sh
@@ -9,9 +9,9 @@ test_description='git pack-object'
test_expect_success 'setup' '
rm -f .git/index* &&
- perl -e "print \"a\" x 4096;" >a &&
- perl -e "print \"b\" x 4096;" >b &&
- perl -e "print \"c\" x 4096;" >c &&
+ test-tool genzeros 4096 | tr "\000" "a" >a &&
+ test-tool genzeros 4096 | tr "\000" "b" >b &&
+ test-tool genzeros 4096 | tr "\000" "c" >c &&
test-tool genrandom "seed a" 2097152 >a_big &&
test-tool genrandom "seed b" 2097152 >b_big &&
git update-index --add a a_big b b_big c &&
@@ -140,7 +140,7 @@ test_expect_success 'pack-object
# e.g.: check_deltas stderr -gt 0
check_deltas() {
- deltas=$(perl -lne '/delta (\d+)/ and print $1' "$1") &&
+ deltas=$(sed -n 's/Total [0-9][0-9]* (delta \([0-9][0-9]*\)).*/\1/p' "$1") &&
shift &&
if ! test "$deltas" "$@"
then
@@ -215,7 +215,7 @@ test_expect_success 'unpack with OFS_DELTA (core.fsyncmethod=batch)' '
check_unpack test-3-${packname_3} obj-list "$BATCH_CONFIGURATION"
'
-test_expect_success 'compare delta flavors' '
+test_expect_success PERL_TEST_HELPERS 'compare delta flavors' '
perl -e '\''
defined($_ = -s $_) or die for @ARGV;
exit 1 if $ARGV[0] <= $ARGV[1];
diff --git a/t/t5303-pack-corruption-resilience.sh b/t/t5303-pack-corruption-resilience.sh
index de58ca654a..ab99c8b685 100755
--- a/t/t5303-pack-corruption-resilience.sh
+++ b/t/t5303-pack-corruption-resilience.sh
@@ -103,7 +103,8 @@ test_expect_success 'create corruption in data of first object' '
create_new_pack &&
git prune-packed &&
chmod +w ${pack}.pack &&
- perl -i.bak -pe "s/ base /abcdef/" ${pack}.pack &&
+ sed "s/ base /abcdef/" ${pack}.pack >${pack}.pack.munged &&
+ mv ${pack}.pack.munged ${pack}.pack &&
test_must_fail git cat-file blob $blob_1 > /dev/null &&
test_must_fail git cat-file blob $blob_2 > /dev/null &&
test_must_fail git cat-file blob $blob_3 > /dev/null
@@ -160,7 +161,8 @@ test_expect_success 'create corruption in data of first delta' '
create_new_pack &&
git prune-packed &&
chmod +w ${pack}.pack &&
- perl -i.bak -pe "s/ delta1 /abcdefgh/" ${pack}.pack &&
+ sed "s/ delta1 /abcdefgh/" ${pack}.pack >${pack}.pack.munged &&
+ mv ${pack}.pack.munged ${pack}.pack &&
git cat-file blob $blob_1 > /dev/null &&
test_must_fail git cat-file blob $blob_2 > /dev/null &&
test_must_fail git cat-file blob $blob_3 > /dev/null
diff --git a/t/t5310-pack-bitmaps.sh b/t/t5310-pack-bitmaps.sh
index 621bbbdd26..a62b463eaf 100755
--- a/t/t5310-pack-bitmaps.sh
+++ b/t/t5310-pack-bitmaps.sh
@@ -421,7 +421,7 @@ test_bitmap_cases () {
# mark the commits which did not receive bitmaps as preferred,
# and generate the bitmap again
- perl -pe "s{^}{create refs/tags/include/$. }" output &&
- perl -lne '
- BEGIN { $len = 0 }
- /chain length = (\d+)/ and $len = $1;
- END { print $len }
- ' output
+ awk '
+ BEGIN { len=0 }
+ /chain length = [0-9]+:/{ len=$4 }
+ END { print len }
+ '