[PATCH 15/18] xfstests: make exclude groups aware of multiple subdirectories

Dave Chinner
2012-07-26T09:28:40Z

From: Dave Chinner <dchinner@redhat.com>

Now that there are no tests in the top level directory, the exlude
group functionality no longer works (-x group) as it cannot find
tests to build an initial list of tests. Rework the the exclude
group implementation to operate correctly on the new test locations.

Also, swtich from sed to grep for exclusion because sed has problems
distnguishing the '/' in path names from regex control...

Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
check | 35 +++++++++++++++++++++++++++--------
1 file changed, 27 insertions(+), 8 deletions(-)

diff --git a/check b/check
index b65b060..44659bb 100755
--- a/check
+++ b/check
@@ -90,6 +90,19 @@ get_group_list()
echo $grpl
}

+# find all tests, excluding files that are test metadata such as group files.
+# This assumes that tests are defined purely by alphanumeric filenames with no
+# ".xyz" extensions in the name.
+get_all_tests()
+{
+ touch $tmp.list
+ for d in $SRC_GROUPS $FSTYP; do
+ ls $SRC_DIR/$d/* | \
+ grep -v "\..*" | \
+ grep -v group >> $tmp.list 2>/dev/null
+ done
+}
+
_wallclock()
{
date "+%H %M %S" | $AWK_PROG '{ print $1*3600 + $2*60 + $3 }'
@@ -104,7 +117,7 @@ _timestamp()
# start the initialisation work now
_setenvironment

-rm -f $tmp.list $tmp.tmp $tmp.sed $here/$iam.out
+rm -f $tmp.list $tmp.tmp $tmp.grep $here/$iam.out

# Autodetect fs type based on what's on $TEST_DEV
if [ "$HOSTOS" == "Linux" ]; then
@@ -144,27 +157,33 @@ while [ $# -gt 0 ]; do
;;

-x) xgroup=$2 ; shift ;
- [ ! -s $tmp.list ] && ls $SUPPORTED_TESTS >$tmp.list 2>/dev/null
+
+ # Note: behaviour is dependent on command line ordering of
+ # -g and -x parameters. If there are no preceding -g commands,
+ # this works on all tests, otherwise just the tests specified by
+ # the early -g inclusions.
+ [ ! -s $tmp.list ] && get_all_tests
+
group_list=$(get_group_list $xgroup)
if [ -z "$group_list" ]; then
echo "Group \"$xgroup\" is empty or not defined?"
exit 1
fi

- rm -f $tmp.sed
+ rm -f $tmp.grep
numsed=0
for t in $group_list
do
if [ $numsed -gt 100 ]; then
- sed -f $tmp.sed <$tmp.list >$tmp.tmp
+ grep -v -f $tmp.grep <$tmp.list >$tmp.tmp
mv $tmp.tmp $tmp.list
numsed=0
- rm -f $tmp.sed
+ rm -f $tmp.grep
fi
- echo "/^$t\$/d" >>$tmp.sed
+ echo "^$t\$" >>$tmp.grep
numsed=`expr $numsed + 1`
done
- sed -f $tmp.sed <$tmp.list >$tmp.tmp
+ grep -v -f $tmp.grep <$tmp.list >$tmp.tmp
mv $tmp.tmp $tmp.list
;;

@@ -233,7 +252,7 @@ fi

# sort the list of tests into numeric order
list=`sort -n $tmp.list`
-rm -f $tmp.list $tmp.tmp $tmp.sed
+rm -f $tmp.list $tmp.tmp $tmp.grep

if $randomize
then
--
1.7.10