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

Reply via email to