Merge branch 'vr/use-our-perl-in-tests' into maint

Some implementations of Perl terminates "lines" with CRLF even when
the script is operating on just a sequence of bytes.  Make sure to
use "$PERL_PATH", the version of Perl the user told Git to use, in
our tests to avoid unnecessary breakages in tests.

* vr/use-our-perl-in-tests:
  t/README: add a bit more Don'ts
  tests: enclose $PERL_PATH in double quotes
  t/test-lib.sh: export PERL_PATH for use in scripts
  t: Replace 'perl' by $PERL_PATH
This commit is contained in:
Junio C Hamano 2012-07-22 12:59:56 -07:00
commit bb3ed291a6
26 changed files with 65 additions and 44 deletions

View file

@ -307,6 +307,25 @@ Don't:
Use test_done instead if you need to stop the tests early (see Use test_done instead if you need to stop the tests early (see
"Skipping tests" below). "Skipping tests" below).
- use '! git cmd' when you want to make sure the git command exits
with failure in a controlled way by calling "die()". Instead,
use 'test_must_fail git cmd'. This will signal a failure if git
dies in an unexpected way (e.g. segfault).
- use perl without spelling it as "$PERL_PATH". This is to help our
friends on Windows where the platform Perl often adds CR before
the end of line, and they bundle Git with a version of Perl that
does not do so, whose path is specified with $PERL_PATH.
- use sh without spelling it as "$SHELL_PATH", when the script can
be misinterpreted by broken platform shell (e.g. Solaris).
- chdir around in tests. It is not sufficient to chdir to
somewhere and then chdir back to the original location later in
the test, as any intermediate step can fail and abort the test,
causing the next test to start in an unexpected directory. Do so
inside a subshell if necessary.
- Break the TAP output - Break the TAP output
The raw output from your test may be interpreted by a TAP harness. TAP The raw output from your test may be interpreted by a TAP harness. TAP
@ -342,9 +361,9 @@ If you need to skip tests you should do so by using the three-arg form
of the test_* functions (see the "Test harness library" section of the test_* functions (see the "Test harness library" section
below), e.g.: below), e.g.:
test_expect_success PERL 'I need Perl' " test_expect_success PERL 'I need Perl' '
'$PERL_PATH' -e 'hlagh() if unf_unf()' "$PERL_PATH" -e "hlagh() if unf_unf()"
" '
The advantage of skipping tests like this is that platforms that don't The advantage of skipping tests like this is that platforms that don't
have the PERL and other optional dependencies get an indication of how have the PERL and other optional dependencies get an indication of how

View file

@ -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)' ' test_expect_success 'ls-tree output in wrong order given to mktree (1)' '
perl -e "print reverse <>" <top | "$PERL_PATH" -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 'ls-tree output in wrong order given to mktree (2)' '
perl -e "print reverse <>" <top.withsub | "$PERL_PATH" -e "print reverse <>" <top.withsub |
git mktree >actual && git mktree >actual &&
test_cmp tree.withsub actual test_cmp tree.withsub actual
' '

View file

@ -71,7 +71,7 @@ test_expect_success 'ls-files -z does not quote funny filename' '
tabs ," (dq) and spaces tabs ," (dq) and spaces
EOF EOF
git ls-files -z >ls-files.z && git ls-files -z >ls-files.z &&
perl -pe "y/\000/\012/" <ls-files.z >current && "$PERL_PATH" -pe "y/\000/\012/" <ls-files.z >current &&
test_cmp expected current test_cmp expected current
' '
@ -108,7 +108,7 @@ test_expect_success 'diff-index -z does not quote funny filename' '
tabs ," (dq) and spaces tabs ," (dq) and spaces
EOF EOF
git diff-index -z --name-status $t0 >diff-index.z && git diff-index -z --name-status $t0 >diff-index.z &&
perl -pe "y/\000/\012/" <diff-index.z >current && "$PERL_PATH" -pe "y/\000/\012/" <diff-index.z >current &&
test_cmp expected current test_cmp expected current
' '
@ -118,7 +118,7 @@ test_expect_success 'diff-tree -z does not quote funny filename' '
tabs ," (dq) and spaces tabs ," (dq) and spaces
EOF EOF
git diff-tree -z --name-status $t0 $t1 >diff-tree.z && git diff-tree -z --name-status $t0 $t1 >diff-tree.z &&
perl -pe y/\\000/\\012/ <diff-tree.z >current && "$PERL_PATH" -pe y/\\000/\\012/ <diff-tree.z >current &&
test_cmp expected current test_cmp expected current
' '

View file

@ -243,7 +243,7 @@ check_threading () {
(git format-patch --stdout "$@"; echo $? > status.out) | (git format-patch --stdout "$@"; echo $? > status.out) |
# Prints everything between the Message-ID and In-Reply-To, # Prints everything between the Message-ID and In-Reply-To,
# and replaces all Message-ID-lookalikes by a sequence number # and replaces all Message-ID-lookalikes by a sequence number
perl -ne ' "$PERL_PATH" -ne '
if (/^(message-id|references|in-reply-to)/i) { if (/^(message-id|references|in-reply-to)/i) {
$printing = 1; $printing = 1;
} elsif (/^\S/) { } elsif (/^\S/) {

View file

@ -118,7 +118,7 @@ test_expect_success 'no diff with -diff' '
git diff | grep Binary git diff | grep Binary
' '
echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file echo NULZbetweenZwords | "$PERL_PATH" -pe 'y/Z/\000/' > file
test_expect_success 'force diff with "diff"' ' test_expect_success 'force diff with "diff"' '
echo >.gitattributes "file diff" && echo >.gitattributes "file diff" &&

View file

@ -27,7 +27,7 @@ test_expect_success \
git config --bool diff.suppressBlankEmpty true && git config --bool diff.suppressBlankEmpty true &&
git diff f > actual && git diff f > actual &&
test_cmp exp actual && test_cmp exp actual &&
perl -i.bak -p -e "s/^\$/ /" exp && "$PERL_PATH" -i.bak -p -e "s/^\$/ /" exp &&
git config --bool diff.suppressBlankEmpty false && git config --bool diff.suppressBlankEmpty false &&
git diff f > actual && git diff f > actual &&
test_cmp exp actual && test_cmp exp actual &&

View file

@ -21,7 +21,7 @@ EOF
cat >hexdump <<'EOF' cat >hexdump <<'EOF'
#!/bin/sh #!/bin/sh
perl -e '$/ = undef; $_ = <>; s/./ord($&)/ge; print $_' < "$1" "$PERL_PATH" -e '$/ = undef; $_ = <>; s/./ord($&)/ge; print $_' < "$1"
EOF EOF
chmod +x hexdump chmod +x hexdump

View file

@ -60,7 +60,7 @@ test_expect_success 'diff --stat counts binary rewrite as 0 lines' '
{ {
echo "#!$SHELL_PATH" echo "#!$SHELL_PATH"
cat <<'EOF' cat <<'EOF'
perl -e '$/ = undef; $_ = <>; s/./ord($&)/ge; print $_' < "$1" "$PERL_PATH" -e '$/ = undef; $_ = <>; s/./ord($&)/ge; print $_' < "$1"
EOF EOF
} >dump } >dump
chmod +x dump chmod +x dump

View file

@ -25,10 +25,10 @@ test_expect_success 'setup' "
git commit -m 'Initial Version' 2>/dev/null && git commit -m 'Initial Version' 2>/dev/null &&
git checkout -b binary && git checkout -b binary &&
perl -pe 'y/x/\000/' <file1 >file3 && "$PERL_PATH" -pe 'y/x/\000/' <file1 >file3 &&
cat file3 >file4 && cat file3 >file4 &&
git add file2 && git add file2 &&
perl -pe 'y/\000/v/' <file3 >file1 && "$PERL_PATH" -pe 'y/\000/v/' <file3 >file1 &&
rm -f file2 && rm -f file2 &&
git update-index --add --remove file1 file2 file3 file4 && git update-index --add --remove file1 file2 file3 file4 &&
git commit -m 'Second Version' && git commit -m 'Second Version' &&

View file

@ -12,14 +12,14 @@ test_description='git apply in reverse
test_expect_success setup ' test_expect_success setup '
for i in a b c d e f g h i j k l m n; do echo $i; done >file1 && for i in a b c d e f g h i j k l m n; do echo $i; done >file1 &&
perl -pe "y/ijk/\\000\\001\\002/" <file1 >file2 && "$PERL_PATH" -pe "y/ijk/\\000\\001\\002/" <file1 >file2 &&
git add file1 file2 && git add file1 file2 &&
git commit -m initial && git commit -m initial &&
git tag initial && git tag initial &&
for i in a b c g h i J K L m o n p q; do echo $i; done >file1 && for i in a b c g h i J K L m o n p q; do echo $i; done >file1 &&
perl -pe "y/mon/\\000\\001\\002/" <file1 >file2 && "$PERL_PATH" -pe "y/mon/\\000\\001\\002/" <file1 >file2 &&
git commit -a -m second && git commit -a -m second &&
git tag second && git tag second &&

View file

@ -78,7 +78,7 @@ test_expect_success 'activate rerere, old style (conflicting merge)' '
test_might_fail git config --unset rerere.enabled && test_might_fail git config --unset rerere.enabled &&
test_must_fail git merge first && test_must_fail git merge first &&
sha1=$(perl -pe "s/ .*//" .git/MERGE_RR) && sha1=$("$PERL_PATH" -pe "s/ .*//" .git/MERGE_RR) &&
rr=.git/rr-cache/$sha1 && rr=.git/rr-cache/$sha1 &&
grep "^=======\$" $rr/preimage && grep "^=======\$" $rr/preimage &&
! test -f $rr/postimage && ! test -f $rr/postimage &&
@ -91,7 +91,7 @@ test_expect_success 'rerere.enabled works, too' '
git reset --hard && git reset --hard &&
test_must_fail git merge first && test_must_fail git merge first &&
sha1=$(perl -pe "s/ .*//" .git/MERGE_RR) && sha1=$("$PERL_PATH" -pe "s/ .*//" .git/MERGE_RR) &&
rr=.git/rr-cache/$sha1 && rr=.git/rr-cache/$sha1 &&
grep ^=======$ $rr/preimage grep ^=======$ $rr/preimage
' '
@ -101,7 +101,7 @@ test_expect_success 'set up rr-cache' '
git config rerere.enabled true && git config rerere.enabled true &&
git reset --hard && git reset --hard &&
test_must_fail git merge first && test_must_fail git merge first &&
sha1=$(perl -pe "s/ .*//" .git/MERGE_RR) && sha1=$("$PERL_PATH" -pe "s/ .*//" .git/MERGE_RR) &&
rr=.git/rr-cache/$sha1 rr=.git/rr-cache/$sha1
' '
@ -185,7 +185,7 @@ test_expect_success 'rerere updates postimage timestamp' '
test_expect_success 'rerere clear' ' test_expect_success 'rerere clear' '
rm $rr/postimage && rm $rr/postimage &&
echo "$sha1 a1" | perl -pe "y/\012/\000/" >.git/MERGE_RR && echo "$sha1 a1" | "$PERL_PATH" -pe "y/\012/\000/" >.git/MERGE_RR &&
git rerere clear && git rerere clear &&
! test -d $rr ! test -d $rr
' '

View file

@ -13,9 +13,9 @@ TRASH=`pwd`
test_expect_success \ test_expect_success \
'setup' \ 'setup' \
'rm -f .git/index* && 'rm -f .git/index* &&
perl -e "print \"a\" x 4096;" > a && "$PERL_PATH" -e "print \"a\" x 4096;" > a &&
perl -e "print \"b\" x 4096;" > b && "$PERL_PATH" -e "print \"b\" x 4096;" > b &&
perl -e "print \"c\" x 4096;" > c && "$PERL_PATH" -e "print \"c\" x 4096;" > c &&
test-genrandom "seed a" 2097152 > a_big && test-genrandom "seed a" 2097152 > a_big &&
test-genrandom "seed b" 2097152 > b_big && test-genrandom "seed b" 2097152 > b_big &&
git update-index --add a a_big b b_big c && git update-index --add a a_big b b_big c &&
@ -129,7 +129,7 @@ test_expect_success \
cd "$TRASH" cd "$TRASH"
test_expect_success 'compare delta flavors' ' test_expect_success 'compare delta flavors' '
perl -e '\'' "$PERL_PATH" -e '\''
defined($_ = -s $_) or die for @ARGV; defined($_ = -s $_) or die for @ARGV;
exit 1 if $ARGV[0] <= $ARGV[1]; exit 1 if $ARGV[0] <= $ARGV[1];
'\'' test-2-$packname_2.pack test-3-$packname_3.pack '\'' test-2-$packname_2.pack test-3-$packname_3.pack

View file

@ -98,7 +98,7 @@ test_expect_success \
'create_new_pack && 'create_new_pack &&
git prune-packed && git prune-packed &&
chmod +w ${pack}.pack && chmod +w ${pack}.pack &&
perl -i.bak -pe "s/ base /abcdef/" ${pack}.pack && "$PERL_PATH" -i.bak -pe "s/ base /abcdef/" ${pack}.pack &&
test_must_fail git cat-file blob $blob_1 > /dev/null && 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_2 > /dev/null &&
test_must_fail git cat-file blob $blob_3 > /dev/null' test_must_fail git cat-file blob $blob_3 > /dev/null'
@ -155,7 +155,7 @@ test_expect_success \
'create_new_pack && 'create_new_pack &&
git prune-packed && git prune-packed &&
chmod +w ${pack}.pack && chmod +w ${pack}.pack &&
perl -i.bak -pe "s/ delta1 /abcdefgh/" ${pack}.pack && "$PERL_PATH" -i.bak -pe "s/ delta1 /abcdefgh/" ${pack}.pack &&
git cat-file blob $blob_1 > /dev/null && 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_2 > /dev/null &&
test_must_fail git cat-file blob $blob_3 > /dev/null' test_must_fail git cat-file blob $blob_3 > /dev/null'

View file

@ -15,7 +15,7 @@ test_expect_success 'setup remote repo' '
cat >proxy <<'EOF' cat >proxy <<'EOF'
#!/bin/sh #!/bin/sh
echo >&2 "proxying for $*" echo >&2 "proxying for $*"
cmd=`perl -e ' cmd=`"$PERL_PATH" -e '
read(STDIN, $buf, 4); read(STDIN, $buf, 4);
my $n = hex($buf) - 4; my $n = hex($buf) - 4;
read(STDIN, $buf, $n); read(STDIN, $buf, $n);

View file

@ -130,7 +130,7 @@ test_expect_success EXPENSIVE 'create 50,000 tags in the repo' '
done | git fast-import --export-marks=marks && done | git fast-import --export-marks=marks &&
# now assign tags to all the dangling commits we created above # now assign tags to all the dangling commits we created above
tag=$(perl -e "print \"bla\" x 30") && tag=$("$PERL_PATH" -e "print \"bla\" x 30") &&
sed -e "s/^:\(.\+\) \(.\+\)$/\2 refs\/tags\/$tag-\1/" <marks >>packed-refs sed -e "s/^:\(.\+\) \(.\+\)$/\2 refs\/tags\/$tag-\1/" <marks >>packed-refs
) )
' '

View file

@ -37,7 +37,7 @@ test_expect_success 'verify number of revisions' \
test_expect_success 'corrupt second commit object' \ test_expect_success 'corrupt second commit object' \
' '
perl -i.bak -pe "s/second commit/socond commit/" .git/objects/pack/*.pack && "$PERL_PATH" -i.bak -pe "s/second commit/socond commit/" .git/objects/pack/*.pack &&
test_must_fail git fsck --full test_must_fail git fsck --full
' '

View file

@ -25,7 +25,7 @@ test_expect_success 'set up --reverse example' '
test_expect_success '--reverse --parents --full-history combines correctly' ' test_expect_success '--reverse --parents --full-history combines correctly' '
git rev-list --parents --full-history master -- foo | git rev-list --parents --full-history master -- foo |
perl -e "print reverse <>" > expected && "$PERL_PATH" -e "print reverse <>" > expected &&
git rev-list --reverse --parents --full-history master -- foo \ git rev-list --reverse --parents --full-history master -- foo \
> actual && > actual &&
test_cmp actual expected test_cmp actual expected
@ -33,7 +33,7 @@ test_expect_success '--reverse --parents --full-history combines correctly' '
test_expect_success '--boundary does too' ' test_expect_success '--boundary does too' '
git rev-list --boundary --parents --full-history master ^root -- foo | git rev-list --boundary --parents --full-history master ^root -- foo |
perl -e "print reverse <>" > expected && "$PERL_PATH" -e "print reverse <>" > expected &&
git rev-list --boundary --reverse --parents --full-history \ git rev-list --boundary --reverse --parents --full-history \
master ^root -- foo > actual && master ^root -- foo > actual &&
test_cmp actual expected test_cmp actual expected

View file

@ -941,7 +941,7 @@ test_expect_success 'status -s submodule summary (clean submodule)' '
test_expect_success 'status -z implies porcelain' ' test_expect_success 'status -z implies porcelain' '
git status --porcelain | git status --porcelain |
perl -pe "s/\012/\000/g" >expect && "$PERL_PATH" -pe "s/\012/\000/g" >expect &&
git status -z >output && git status -z >output &&
test_cmp expect output test_cmp expect output
' '

View file

@ -10,7 +10,7 @@ find_blame() {
cat >helper <<'EOF' cat >helper <<'EOF'
#!/bin/sh #!/bin/sh
grep -q '^bin: ' "$1" || { echo "E: $1 is not \"binary\" file" 1>&2; exit 1; } grep -q '^bin: ' "$1" || { echo "E: $1 is not \"binary\" file" 1>&2; exit 1; }
perl -p -e 's/^bin: /converted: /' "$1" "$PERL_PATH" -p -e 's/^bin: /converted: /' "$1"
EOF EOF
chmod +x helper chmod +x helper

View file

@ -29,7 +29,7 @@ fi
compare_svn_head_with () { compare_svn_head_with () {
# extract just the log message and strip out committer info. # extract just the log message and strip out committer info.
# don't use --limit here since svn 1.1.x doesn't have it, # don't use --limit here since svn 1.1.x doesn't have it,
LC_ALL="$a_utf8_locale" svn log `git svn info --url` | perl -w -e ' LC_ALL="$a_utf8_locale" svn log `git svn info --url` | "$PERL_PATH" -w -e '
use bytes; use bytes;
$/ = ("-"x72) . "\n"; $/ = ("-"x72) . "\n";
my @x = <STDIN>; my @x = <STDIN>;

View file

@ -20,8 +20,8 @@ test_expect_success '(supposedly) non-conflicting change from SVN' '
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 &&
(cd tmp && (cd tmp &&
perl -i.bak -p -e "s/^58$/5588/" file && "$PERL_PATH" -i.bak -p -e "s/^58$/5588/" file &&
perl -i.bak -p -e "s/^61$/6611/" file && "$PERL_PATH" -i.bak -p -e "s/^61$/6611/" file &&
poke file && poke file &&
test x"`sed -n -e 58p < file`" = x5588 && test x"`sed -n -e 58p < file`" = x5588 &&
test x"`sed -n -e 61p < file`" = x6611 && test x"`sed -n -e 61p < file`" = x6611 &&
@ -40,8 +40,8 @@ test_expect_success 'some unrelated changes to git' "
test_expect_success 'change file but in unrelated area' " test_expect_success '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_PATH" -i.bak -p -e 's/^4\$/4444/' file &&
perl -i.bak -p -e 's/^7\$/7777/' file && "$PERL_PATH" -i.bak -p -e 's/^7\$/7777/' file &&
test x\"\`sed -n -e 4p < file\`\" = x4444 && test x\"\`sed -n -e 4p < file\`\" = x4444 &&
test x\"\`sed -n -e 7p < file\`\" = x7777 && test x\"\`sed -n -e 7p < file\`\" = x7777 &&
git commit -m '4 => 4444, 7 => 7777' file && git commit -m '4 => 4444, 7 => 7777' file &&

View file

@ -12,7 +12,7 @@ test_description='test git fast-import utility'
# This could be written as "head -c $1", but IRIX "head" does not # This could be written as "head -c $1", but IRIX "head" does not
# support the -c option. # support the -c option.
head_c () { head_c () {
perl -e ' "$PERL_PATH" -e '
my $len = $ARGV[1]; my $len = $ARGV[1];
while ($len > 0) { while ($len > 0) {
my $s; my $s;

View file

@ -424,7 +424,7 @@ test_expect_success 'fast-export quotes pathnames' '
--cacheinfo 100644 $blob "path with \\backslash" \ --cacheinfo 100644 $blob "path with \\backslash" \
--cacheinfo 100644 $blob "path with space" && --cacheinfo 100644 $blob "path with space" &&
git commit -m addition && git commit -m addition &&
git ls-files -z -s | perl -0pe "s{\\t}{$&subdir/}" >index && git ls-files -z -s | "$PERL_PATH" -0pe "s{\\t}{$&subdir/}" >index &&
git read-tree --empty && git read-tree --empty &&
git update-index -z --index-info <index && git update-index -z --index-info <index &&
git commit -m rename && git commit -m rename &&

View file

@ -246,7 +246,7 @@ test_expect_success 'cope with rcs keyword expansion damage' '
git config git-p4.attemptRCSCleanup true && git config git-p4.attemptRCSCleanup true &&
(cd ../cli && p4_append_to_file kwfile1.c) && (cd ../cli && p4_append_to_file kwfile1.c) &&
old_lines=$(wc -l <kwfile1.c) && old_lines=$(wc -l <kwfile1.c) &&
perl -n -i -e "print unless m/Revision:/" kwfile1.c && "$PERL_PATH" -n -i -e "print unless m/Revision:/" kwfile1.c &&
new_lines=$(wc -l <kwfile1.c) && new_lines=$(wc -l <kwfile1.c) &&
test $new_lines = $(($old_lines - 1)) && test $new_lines = $(($old_lines - 1)) &&

View file

@ -76,11 +76,11 @@ test_decode_color () {
} }
nul_to_q () { nul_to_q () {
perl -pe 'y/\000/Q/' "$PERL_PATH" -pe 'y/\000/Q/'
} }
q_to_nul () { q_to_nul () {
perl -pe 'y/Q/\000/' "$PERL_PATH" -pe 'y/Q/\000/'
} }
q_to_cr () { q_to_cr () {

View file

@ -494,6 +494,8 @@ export PATH GIT_EXEC_PATH GIT_TEMPLATE_DIR GIT_CONFIG_NOSYSTEM GIT_ATTR_NOSYSTEM
. "$GIT_BUILD_DIR"/GIT-BUILD-OPTIONS . "$GIT_BUILD_DIR"/GIT-BUILD-OPTIONS
export PERL_PATH
if test -z "$GIT_TEST_CMP" if test -z "$GIT_TEST_CMP"
then then
if test -n "$GIT_TEST_CMP_USE_COPIED_CONTEXT" if test -n "$GIT_TEST_CMP_USE_COPIED_CONTEXT"