On Fri, 25 Apr 2008, Denys Vlasenko wrote:
> It's so good that I removed *every and all* bashisms from it now.
>
> Total bashisms found and removed: 1
Right, and thanks for the opportunity of showing off my talents ;-)
Please consider the attached patch, which eliminates the use of 'basename'
and 'dirname'. It also corrects some integer conditions and replaces
'echo ... | grep ...' with 'expr' and some more.
It also may introduce new bugs which I dont't know of just yet ;-)
Cheers,
--
Cristian
Index: runtest
===================================================================
--- runtest (revision 21869)
+++ runtest (working copy)
@@ -14,8 +14,9 @@
local status
local uc_applet=$(echo $applet | tr a-z A-Z)
- local testname=$(basename "$testcase")
+ local testname="$testcase"
+ testname=${testname##*/}
if grep -q "^# CONFIG_${uc_applet} is not set$" $bindir/.config; then
echo "UNTESTED: $testname"
return 0
@@ -31,13 +32,13 @@
fi
rm -rf ".tmpdir.$applet"
- mkdir -p ".tmpdir.$applet"
+ mkdir -p ".tmpdir.$applet" || return 1
cd ".tmpdir.$applet" || return 1
# echo "Running testcase $testcase"
- d="$tsdir" sh -x -e "$testcase" >"$testname.stdout.txt" 2>&1
+ d="$tsdir" sh -x -e "$testcase" > "$testname.stdout.txt" 2>&1
status=$?
- if [ $status != 0 ]; then
+ if [ $status -ne 0 ]; then
echo "FAIL: $testname"
if [ x"$VERBOSE" != x ]; then
cat "$testname.stdout.txt"
@@ -57,8 +58,10 @@
{
local applet=$1
local status=0
+ local tc
for testcase in $tsdir/$applet/*; do
- case $(basename "$testcase") in
+ tc=${testcase##*/}
+ case "$tc" in
\#*)
continue
;;
@@ -71,15 +74,16 @@
continue
fi
run_applet_testcase "$applet" "$testcase"
- test $? = 0 || status=1
+ test $? -eq 0 || status=1
done
return $status
}
-[ -n "$tsdir" ] || tsdir=$(pwd)
-[ -n "$bindir" ] || bindir=$(dirname $(pwd))
+lcwd=$(pwd)
+[ "$tsdir" ] || tsdir=$lcwd
+[ "$bindir" ] || bindir=${lcwd%/*}
PATH="$bindir:$PATH"
if [ x"$VERBOSE" = x ]; then
@@ -92,7 +96,7 @@
fi
implemented=$(
- $bindir/busybox 2>&1 |
+ $bindir/busybox 2>&1 | \
while read line; do
if [ x"$line" = x"Currently defined functions:" ]; then
xargs | sed 's/,//g'
@@ -109,44 +113,45 @@
# Populate a directory with links to all busybox applets
LINKSDIR="$bindir/runtest-tempdir-links"
-rm -rf "$LINKSDIR" 2>/dev/null
+rm -rf "$LINKSDIR"
mkdir "$LINKSDIR"
for i in $implemented; do
ln -s $bindir/busybox "$LINKSDIR"/$i
done
# Set up option flags so tests can be selective.
-export OPTIONFLAGS=:$(sed -nr 's/^CONFIG_//p' $bindir/.config | sed 's/=.*//' | xargs | sed 's/ /:/g')
+export OPTIONFLAGS=:$(sed -rn 's/^CONFIG_//p' $bindir/.config | \
+ sed 's/=.*//' | xargs | sed 's/ /:/g')
status=0
for applet in $applets; do
- if [ "$applet" = "links" ]; then continue; fi
+ [ "$applet" != links ] || continue
# Any old-style tests for this applet?
- if [ "$applet" != "CVS" -a -d "$tsdir/$applet" ]; then
+ if [ "$applet" != "CVS" ] && [ -d "$tsdir/$applet" ]; then
run_applet_tests "$applet"
- test $? = 0 || status=1
+ test $? -eq 0 || status=1
fi
# Is this a new-style test?
- if [ -f "${applet}.tests" ]; then
+ if [ -f "$applet.tests" ]; then
+ echo "NEW STYLE TEST: $applet"
if [ ! -h "$LINKSDIR/$applet" ]; then
# (avoiding bash'ism "${applet:0:4}")
- if ! echo "$applet" | grep "^all_" >/dev/null; then
+ if [ "$(expr \"$applet\" : '\(all_\).*)')" != all_ ]; then
echo "SKIPPED: $applet (not built)"
continue
fi
fi
-# echo "Running test ${tsdir:-.}/${applet}.tests"
PATH="$LINKSDIR:$tsdir:$bindir:$PATH" "${tsdir:-.}/${applet}.tests"
- test $? = 0 || status=1
+ test $? -eq 0 || status=1
fi
done
# Leaving the dir makes it somewhat easier to run failed test by hand
-#rm -rf "$LINKSDIR"
-if [ $status != 0 -a x"$VERBOSE" = x ]; then
+if [ $status -ne 0 ] && [ x"$VERBOSE" = x ]; then
echo "Failures detected, running with -v (verbose) will give more info"
fi
+
exit $status
_______________________________________________
busybox mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/busybox