From: Phil White <pwhite@xxxxxxx>
This is a rebasing & resubmit of a dchinner patch. His comments on the
original:
-----------------
The option parise in a messy loop of option parsing and actions on
secondary arguments. Turn it into something much neater and esay to
understand rather than a mess of temporary variables and tortured
logic...
-----------------
This required some deviation owing to the decision made in patch #2 of this
series.
Signed-off-by: Phil White <pwhite@xxxxxxx>
---
check | 39 ++++---
common | 383 ++++++++++++++++++++++++++--------------------------------------
2 files changed, 174 insertions(+), 248 deletions(-)
diff --git a/check b/check
index 9a5b256..bad2e4d 100755
--- a/check
+++ b/check
@@ -33,19 +33,9 @@ export QA_CHECK_FS=${QA_CHECK_FS:=true}
# number of diff lines from a failed test, 0 for whole output
export DIFF_LENGTH=${DIFF_LENGTH:=10}
-# by default don't output timestamps
-timestamp=${TIMESTAMP:=false}
-
# generic initialization
iam=check
-# we need common.config
-if ! . ./common.config
-then
- echo "$iam: failed to source common.config"
- exit 1
-fi
-
# we need common
. ./common
@@ -63,15 +53,26 @@ then
exit 1
fi
-_wallclock()
-{
- date "+%H %M %S" | $AWK_PROG '{ print $1*3600 + $2*60 + $3 }'
-}
-
-_timestamp()
+usage()
{
- now=`date "+%T"`
- echo -n " [$now]"
+ echo "Usage: $0 [options] [testlist]"'
+
+check options
+ -xfs test XFS (default)
+ -udf test UDF
+ -nfs test NFS
+ -l line mode diff
+ -udiff show unified diff (default)
+ -n show me, do not run tests
+ -T output timestamps
+ -r randomize test order
+
+testlist options
+ -g group[,group...] include tests from these groups
+ -x group[,group...] exclude tests from these groups
+ NNN include test NNN
+ NNN-NNN include test range (eg. 012-021)
+'
}
_wrapup()
@@ -276,7 +277,7 @@ do
echo " - no qualified output"
err=true
else
- if diff $seq.out $tmp.out >/dev/null 2>&1
+ if $diff $seq.out $tmp.out >/dev/null 2>&1
then
if $err
then
diff --git a/common b/common
index 0723224..2553fe9 100644
--- a/common
+++ b/common
@@ -27,13 +27,55 @@ _setenvironment()
export MSGVERB
}
+get_group_list()
+{
+ grp=$1
+ grpl=$(sed -n < group \
+ -e 's/#.*//' \
+ -e 's/$/ /' \
+ -e "/^[0-9][0-9][0-9].* $grp /"'{ s/ .*//p }')
+ echo $grpl
+}
+
+expand_test_numbers()
+{
+ # strip leading zeros, could be considered octal.
+ start=`echo $1 | sed 's/^0*//'`
+ end=`echo $2 | sed 's/^0*//'`
+ $AWK_PROG </dev/null '
+BEGIN { for (t='$start'; t<='$end'; t++) printf "%03d\n",t }' \
+ | while read id
+ do
+ if grep -s "^$id " group >/dev/null ; then
+ # in group file ... OK
+ echo $id >>$tmp.list
+ elif [ -f expunged ] && $expunge && \
+ egrep "^$id([ ]|\$)" expunged >/dev/null; then
+ # expunged ... will be reported, but not run, later
+ echo $id >>$tmp.list
+ else
+ # oops
+ echo "$id - unknown test, ignored"
+ fi
+ done
+}
+
+_wallclock()
+{
+ date "+%H %M %S" | $AWK_PROG '{ print $1*3600 + $2*60 + $3 }'
+}
+
+_timestamp()
+{
+ now=`date "+%T"`
+ echo -n " [$now]"
+}
+
here=`pwd`
-rm -f $here/$iam.out
-_setenvironment
check=${check-true}
-diff="diff -u"
+diff="`which diff`"
verbose=false
group=false
xgroup=false
@@ -42,7 +84,13 @@ sortme=false
expunge=true
have_test_arg=false
randomize=false
-rm -f $tmp.list $tmp.tmp $tmp.sed
+timestamp=${TIMESTAMP:=false}
+
+SUPPORTED_TESTS="[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]"
+
+# start the initialisation work now
+_setenvironment
+rm -f $tmp.list $tmp.tmp $tmp.sed $here/$iam.out
# Autodetect fs type based on what's on $TEST_DEV
if [ "$HOSTOS" == "Linux" ]
@@ -52,242 +100,118 @@ else
export FSTYP=xfs
fi
-for r
-do
-
- if $group
- then
- # arg after -g
- group_list=$(sed -n < group \
- -e 's/#.*//' \
- -e 's/$/ /' \
- -e "/^[0-9][0-9][0-9].* $r /"'{ s/ .*//p }')
- if [ -z "$group_list" ]
- then
- echo "Group \"$r\" is empty or not defined?"
- exit 1
- fi
- [ ! -s $tmp.list ] && touch $tmp.list
- for t in $group_list
- do
- if grep -s "^$t\$" $tmp.list >/dev/null
- then
- :
- else
- echo "$t" >>$tmp.list
- fi
- done
- group=false
- continue
-
- elif $xgroup
- then
- # arg after -x
- [ ! -s $tmp.list ] && ls [0-9][0-9][0-9] [0-9][0-9][0-9][0-9]
>$tmp.list 2>/dev/null
- group_list=`sed -n <group -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{
-s/ .*//p
-}'`
- if [ -z "$group_list" ]
- then
- echo "Group \"$r\" is empty or not defined?"
- exit 1
- fi
- numsed=0
- rm -f $tmp.sed
- for t in $group_list
- do
- if [ $numsed -gt 100 ]
- then
- sed -f $tmp.sed <$tmp.list >$tmp.tmp
- mv $tmp.tmp $tmp.list
- numsed=0
- rm -f $tmp.sed
- fi
- echo "/^$t\$/d" >>$tmp.sed
- numsed=`expr $numsed + 1`
- done
- sed -f $tmp.sed <$tmp.list >$tmp.tmp
- mv $tmp.tmp $tmp.list
- xgroup=false
- continue
- fi
-
- xpand=true
- case "$r"
- in
-
- -\? | -h | --help) # usage
- echo "Usage: $0 [options] [testlist]"'
-
-common options
- -v verbose
-
-check options
- -xfs test XFS (default)
- -udf test UDF
- -nfs test NFS
- -l line mode diff
- -xdiff graphical mode diff
- -udiff show unified diff (default)
- -n show me, do not run tests
- -q quick [deprecated]
- -T output timestamps
- -r randomize test order
-
-testlist options
- -g group[,group...] include tests from these groups
- -x group[,group...] exclude tests from these groups
- NNN include test NNN
- NNN-NNN include test range (eg. 012-021)
-'
- exit 0
- ;;
-
- -udf) # -udf ... set FSTYP to udf
- FSTYP=udf
- xpand=false
- ;;
-
- -xfs) # -xfs ... set FSTYP to xfs
- FSTYP=xfs
- xpand=false
- ;;
-
- -nfs) # -nfs ... set FSTYP to nfs
- FSTYP=nfs
- xpand=false
- ;;
-
- -g) # -g group ... pick from group file
- group=true
- xpand=false
- ;;
-
- -l) # line mode for diff, was default before
- diff="diff"
- xpand=false
- ;;
-
- -xdiff) # graphical diff mode
- xpand=false
-
- if [ ! -z "$DISPLAY" ]
- then
- which xdiff >/dev/null 2>&1 && diff=xdiff
- which gdiff >/dev/null 2>&1 && diff=gdiff
- which tkdiff >/dev/null 2>&1 && diff=tkdiff
- which xxdiff >/dev/null 2>&1 && diff=xxdiff
- fi
- ;;
+# we need common.config
+if ! . ./common.config
+then
+ echo "$iam: failed to source common.config"
+ exit 1
+fi
- -udiff) # show a unified diff, default now, keep for backward compat
- xpand=false
- diff="$diff -u"
- ;;
+while [ $# -gt 0 ]; do
+ case "$1" in
+ -\? | -h | --help) usage ;;
- -q) # "quick", no longer used - always quick :-)
- xpand=false
- ;;
+ -udf) FSTYP=udf ;;
+ -xfs) FSTYP=xfs ;;
+ -nfs) FSTYP=nfs ;;
- -n) # show me, don't do it
- showme=true
- xpand=false
- ;;
- -r) # randomize test order
- randomize=true
- xpand=false
- ;;
+ -g) group=$2 ; shift ;
+ group_list=$(get_group_list $group)
+ if [ -z "$group_list" ]; then
+ echo "Group \"$group\" is empty or not defined?"
+ exit 1
+ fi
+ [ ! -s $tmp.list ] && touch $tmp.list
+ for t in $group_list; do
+ grep -s "^$t\$" $tmp.list >/dev/null || \
+ echo "$t" >>$tmp.list
+ done
+ ;;
+
+ -x) xgroup=$2 ; shift ;
+ [ ! -s $tmp.list ] && ls $SUPPORTED_TESTS >$tmp.list 2>/dev/null
+ group_list=$(get_group_list $xgroup)
+ if [ -z "$group_list" ]; then
+ echo "Group \"$xgroup\" is empty or not defined?"
+ exit 1
+ fi
- -T) # turn on timestamp output
- timestamp=true
- xpand=false
- ;;
+ rm -f $tmp.sed
+ numsed=0
+ for t in $group_list
+ do
+ if [ $numsed -gt 100 ]; then
+ sed -f $tmp.sed <$tmp.list >$tmp.tmp
+ mv $tmp.tmp $tmp.list
+ numsed=0
+ rm -f $tmp.sed
+ fi
+ echo "/^$t\$/d" >>$tmp.sed
+ numsed=`expr $numsed + 1`
+ done
+ sed -f $tmp.sed <$tmp.list >$tmp.tmp
+ mv $tmp.tmp $tmp.list
+ ;;
- -v)
- verbose=true
- xpand=false
- ;;
- -x) # -x group ... exclude from group file
- xgroup=true
- xpand=false
- ;;
- '[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]')
- echo "No tests?"
- status=1
- exit $status
- ;;
+ -l) diff="`which diff`" ;;
+ -udiff) diff="$diff -u" ;;
- [0-9]*-[0-9]*)
- eval `echo $r | sed -e 's/^/start=/' -e 's/-/ end=/'`
- ;;
+ -n) showme=true ;;
+ -r) randomize=true ;;
+ -T) timestamp=true ;;
- [0-9]*-)
- eval `echo $r | sed -e 's/^/start=/' -e 's/-//'`
- end=`echo [0-9][0-9][0-9] [0-9][0-9][0-9][0-9] | sed -e
's/\[0-9]//g' -e 's/ *$//' -e 's/.* //'`
- if [ -z "$end" ]
- then
- echo "No tests in range \"$r\"?"
+ "$SUPPORTED_TESTS")
+ echo "No tests?"
status=1
exit $status
- fi
- ;;
+ ;;
- *)
- start=$r
- end=$r
- ;;
+ [0-9]*-[0-9]*)
+ eval `echo $1 | sed -e 's/^/start=/' -e 's/-/ end=/'`
+ expand_test_numbers $start $end
+ have_test_arg=true
+ ;;
- esac
+ [0-9]*-)
+ eval `echo $1 | sed -e 's/^/start=/' -e 's/-//'`
+ end=`echo $SUPPORTED_TESTS | \
+ sed -e 's/\[0-9]//g' -e 's/ *$//' -e 's/.* //'`
+ if [ -z "$end" ]; then
+ echo "No tests in range \"$1\"?"
+ status=1
+ exit $status
+ fi
- # get rid of leading 0s as can be interpreted as octal
- start=`echo $start | sed 's/^0*//'`
- end=`echo $end | sed 's/^0*//'`
+ expand_test_numbers $start $end
+ have_test_arg=true
+ ;;
- if $xpand
- then
- have_test_arg=true
- $AWK_PROG </dev/null '
-BEGIN { for (t='$start'; t<='$end'; t++) printf "%03d\n",t }' \
- | while read id
- do
- if grep -s "^$id " group >/dev/null
- then
- # in group file ... OK
- echo $id >>$tmp.list
- else
- if [ -f expunged ] && $expunge && egrep "^$id([ ]|\$)"
expunged >/dev/null
- then
- # expunged ... will be reported, but not run, later
- echo $id >>$tmp.list
- else
- # oops
- echo "$id - unknown test, ignored"
- fi
- fi
- done
- fi
+ --large-fs) export LARGE_SCRATCH_DEV=yes ;;
+ --extra-space=*) export SCRATCH_DEV_EMPTY_SPACE=${r#*=} ;;
+ -*) usage ;;
+ *) expand_test_numbers $1 $1 ;
+ have_test_arg=true
+ ;;
+ esac
+ shift
done
if [ -s $tmp.list ]
then
# found some valid test numbers ... this is good
:
-else
- if $have_test_arg
- then
+elif $have_test_arg
+then
# had test numbers, but none in group file ... do nothing
touch $tmp.list
- else
+else
# no test numbers, do everything from group file
sed -n -e '/^[0-9][0-9][0-9]*/s/[ ].*//p' <group >$tmp.list
- fi
fi
-# should be sort -n, but this did not work for Linux when this
-# was ported from IRIX
-#
-list=`sort $tmp.list`
+# sort the list of tests into numeric order
+list=`sort -n $tmp.list`
rm -f $tmp.list $tmp.tmp $tmp.sed
if $randomize
@@ -295,20 +219,21 @@ then
list=`echo $list | awk -f randomize.awk`
fi
+# check for correct setup
case "$FSTYP" in
- xfs)
- [ "$XFS_LOGPRINT_PROG" = "" ] && _fatal "xfs_logprint not found"
- [ "$XFS_REPAIR_PROG" = "" ] && _fatal "xfs_repair not found"
- [ "$XFS_CHECK_PROG" = "" ] && _fatal "xfs_check not found"
- [ "$XFS_DB_PROG" = "" ] && _fatal "xfs_db not found"
- [ "$MKFS_XFS_PROG" = "" ] && _fatal "mkfs_xfs not found"
- ;;
- udf)
- [ "$MKFS_UDF_PROG" = "" ] && _fatal "mkfs_udf/mkudffs not found"
- ;;
- btrfs)
- [ "$MKFS_BTRFS_PROG" = "" ] && _fatal "mkfs.btrfs not found"
- ;;
- nfs)
- ;;
+ xfs)
+ [ "$XFS_LOGPRINT_PROG" = "" ] && _fatal "xfs_logprint not found"
+ [ "$XFS_REPAIR_PROG" = "" ] && _fatal "xfs_repair not found"
+ [ "$XFS_CHECK_PROG" = "" ] && _fatal "xfs_check not found"
+ [ "$XFS_DB_PROG" = "" ] && _fatal "xfs_db not found"
+ [ "$MKFS_XFS_PROG" = "" ] && _fatal "mkfs_xfs not found"
+ ;;
+ udf)
+ [ "$MKFS_UDF_PROG" = "" ] && _fatal "mkfs_udf/mkudffs not found"
+ ;;
+ btrfs)
+ [ "$MKFS_BTRFS_PROG" = "" ] && _fatal "mkfs.btrfs not found"
+ ;;
+ nfs)
+ ;;
esac
--
1.5.3.8
|