[BACK]Return to common CVS log [TXT][DIR] Up to [Development] / xfs-cmds / xfstests

File: [Development] / xfs-cmds / xfstests / common (download)

Revision 1.6, Tue Jun 15 07:32:36 2004 UTC (13 years, 4 months ago) by ptools
Branch: MAIN
Changes since 1.5: +45 -10 lines

Fixed merge problems
 


##/bin/sh 
#
# Copyright (c) 2000-2001 Silicon Graphics, Inc.  All Rights Reserved.
# 
# This program is free software; you can redistribute it and/or modify it
# under the terms of version 2 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.
# 
# Further, this software is distributed without any warranty that it is
# free of the rightful claim of any third person regarding infringement
# or the like.  Any license provided herein, whether implied or
# otherwise, applies only to this software file.  Patent licenses, if
# any, provided herein do not apply to combinations of this program with
# other software, or any other product whatsoever.
# 
# You should have received a copy of the GNU General Public License along
# with this program; if not, write the Free Software Foundation, Inc., 59
# Temple Place - Suite 330, Boston MA 02111-1307, USA.
# 
# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
# Mountain View, CA  94043, or:
# 
# http://www.sgi.com 
# 
# For further information regarding this notice, see: 
# 
# http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
#
# 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}

if $check
then
    if $MAKE_PROG >/tmp/$$.gmake 2>&1
    then
	:
    else
	cat /tmp/$$.gmake
	echo "Warning: $MAKE_PROG failed -- some tests may be missing"
	warn=1
    fi
    rm -f /tmp/$$.gmake
fi

diff=diff
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
verbose=false
quick=${quick-false}
group=false
xgroup=false
showme=false
sortme=false
expunge=true
have_test_arg=false
rm -f $tmp.list $tmp.tmp $tmp.sed

export FSTYP=xfs

for r
do

    if $group
    then
	# arg after -g
	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
	[ ! -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

	-\?)	# usage
	    echo "Usage: $0 [options] [testlist]"'

common options
    -v			verbose

check options
    -xfs                test XFS
    -udf                test UDF
    -nfs                test NFS
    -g group[,group...]	include tests from these groups
    -l			line mode diff [xdiff]
    -n			show me, do not run tests
    -q			quick, no checks (you are on your own)
    -T			output timestamps
    -x group[,group...]	exclude tests from these groups
    -r 			randomize order
'
	    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, not gdiff over modems
	    diff=diff
	    xpand=false
	    ;;

	-q)	# "quick", no checks (you are on your own)
	    quick=true
	    xpand=false
	    ;;

	-n)	# show me, don't do it
	    showme=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 $quick
then
    :
else
    
    if ( cd src; $MAKE_PROG -is)
    then
	:
    else
	echo
	echo ":----------------------------------------------"
	echo ": Warning: $MAKE_PROG failed in src -- some tests may fail as a result"
	echo ":----------------------------------------------"
	echo
	warn=1
    fi

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 not found"
	 ;;
    nfs)
	 ;;
esac