| ##/bin/bash | |
| # | |
| # Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved. | |
| # | |
| # This program is free software; you can redistribute it and/or | |
| # modify it under the terms of the GNU General Public License as | |
| # published by the Free Software Foundation. | |
| # | |
| # This program is distributed in the hope that it would be useful, | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| # GNU General Public License for more details. | |
| # | |
| # You should have received a copy of the GNU General Public License | |
| # along with this program; if not, write the Free Software Foundation, | |
| # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
| # | |
| # | |
| # common procedures for QA scripts | |
| # | |
| # $Header: /disk7/depot/linux/pcp/dev/qa/RCS/common,v 2.52 2000/04/05 18:24:51 kenmcd Exp $ | |
| # | |
| _setenvironment() | |
| { | |
| MSGVERB="text:action" | |
| export MSGVERB | |
| } | |
| here=`pwd` | |
| rm -f $here/$iam.out | |
| _setenvironment | |
| check=${check-true} | |
| diff="diff -u" | |
| verbose=false | |
| group=false | |
| xgroup=false | |
| showme=false | |
| sortme=false | |
| expunge=true | |
| have_test_arg=false | |
| randomize=false | |
| rm -f $tmp.list $tmp.tmp $tmp.sed | |
| # Autodetect fs type based on what's on $TEST_DEV | |
| if [ "$HOSTOS" == "Linux" ] | |
| then | |
| export FSTYP=`blkid -c /dev/null -s TYPE -o value $TEST_DEV` | |
| 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 | |
| ;; | |
| -udiff) # show a unified diff, default now, keep for backward compat | |
| xpand=false | |
| diff="$diff -u" | |
| ;; | |
| -q) # "quick", no longer used - always quick :-) | |
| xpand=false | |
| ;; | |
| -n) # show me, don't do it | |
| showme=true | |
| xpand=false | |
| ;; | |
| -r) # randomize test order | |
| randomize=true | |
| xpand=false | |
| ;; | |
| -T) # turn on timestamp output | |
| timestamp=true | |
| xpand=false | |
| ;; | |
| -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 | |
| ;; | |
| [0-9]*-[0-9]*) | |
| eval `echo $r | sed -e 's/^/start=/' -e 's/-/ end=/'` | |
| ;; | |
| [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\"?" | |
| status=1 | |
| exit $status | |
| fi | |
| ;; | |
| *) | |
| start=$r | |
| end=$r | |
| ;; | |
| esac | |
| # get rid of leading 0s as can be interpreted as octal | |
| start=`echo $start | sed 's/^0*//'` | |
| end=`echo $end | sed 's/^0*//'` | |
| 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 | |
| done | |
| if [ -s $tmp.list ] | |
| then | |
| # found some valid test numbers ... this is good | |
| : | |
| else | |
| if $have_test_arg | |
| then | |
| # had test numbers, but none in group file ... do nothing | |
| touch $tmp.list | |
| 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` | |
| rm -f $tmp.list $tmp.tmp $tmp.sed | |
| if $randomize | |
| then | |
| list=`echo $list | awk -f randomize.awk` | |
| fi | |
| 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) | |
| ;; | |
| esac |