summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefano Lattarini <stefano.lattarini@gmail.com>2011-06-18 17:57:53 +0200
committerJim Meyering <meyering@redhat.com>2011-06-19 21:57:43 +0200
commit2f60384d6abc787f5c4dfb5e9bffa328265b3028 (patch)
treef3875507368572d2c2a38be2530bca1fe68545bd
parenta51c6e0356e5c66fd9c2539f220c6cd2ad2de1e7 (diff)
downloadcoreutils-2f60384d6abc787f5c4dfb5e9bffa328265b3028.tar.xz
tests: avoid extra forks in the testsuite
* tests/shell-or-perl: Prefer the `read' builtin over `grep' to look at the shebang line of test scripts. Since `read' is a special builtin, it might abort the whole program upon failures, so add extra sanity checks, verifying that the test script exists and is readable, before trying to read from it.
-rw-r--r--tests/shell-or-perl16
1 files changed, 12 insertions, 4 deletions
diff --git a/tests/shell-or-perl b/tests/shell-or-perl
index 08604eb5d..accb37a85 100644
--- a/tests/shell-or-perl
+++ b/tests/shell-or-perl
@@ -84,12 +84,19 @@ test -z "$test_name" && test_name=$test_script
# Run the test script #
# --------------------- #
-if grep '^#!/usr/bin/perl' "$test_script" >/dev/null; then
+test -f "$test_script" && test -r "$test_script" \
+ || error_ "test script '$test_script' does not exist, or isn't readable"
+
+read shebang_line < "$test_script" \
+ || error_ "cannot read from the test script '$test_script'"
+
+case $shebang_line in
+'#!/usr/bin/perl'*)
# The test is a perl script.
if $cu_PERL -e 'use warnings' > /dev/null 2>&1; then
# Perl is available, see if we must run the test with taint
# mode on or not.
- grep '^#!/usr/bin/perl -T' "$test_script" >/dev/null && T_=T || T_=
+ case $shebang_line in *\ -T*) T_=T;; *) T_=;; esac
# Now run it.
exec $cu_PERL -w$T_ -I"$srcdir" -MCoreutils -MCuSkip \
-M"CuTmpdir qw($test_name)" \
@@ -99,10 +106,11 @@ if grep '^#!/usr/bin/perl' "$test_script" >/dev/null; then
echo "$test_name: skip: no usable version of Perl found"
exit 77
fi
-else
+ ;;
+*)
# Assume the test is a shell script.
exec $cu_SHELL "$test_script" ${1+"$@"}
-fi
+esac
# ------------- #
# Not reached #