added help when using -h and --help arguments
[xfstests-dev.git] / common
1 ##/bin/sh 
2 #
3 # Copyright (c) 2000-2005 Silicon Graphics, Inc.  All Rights Reserved.
4 #
5 # common procedures for QA scripts
6 #
7 # $Header: /disk7/depot/linux/pcp/dev/qa/RCS/common,v 2.52 2000/04/05 18:24:51 kenmcd Exp $
8 #
9
10 _setenvironment()
11 {
12     MSGVERB="text:action"
13     export MSGVERB
14 }
15
16 here=`pwd`
17 rm -f $here/$iam.out
18 _setenvironment
19
20 check=${check-true}
21
22 diff=diff
23 if [ ! -z "$DISPLAY" ]
24 then
25     which xdiff >/dev/null 2>&1 && diff=xdiff
26     which gdiff >/dev/null 2>&1 && diff=gdiff
27     which tkdiff >/dev/null 2>&1 && diff=tkdiff
28     which xxdiff >/dev/null 2>&1 && diff=xxdiff
29 fi
30 verbose=false
31 group=false
32 xgroup=false
33 showme=false
34 sortme=false
35 expunge=true
36 have_test_arg=false
37 randomize=false
38 rm -f $tmp.list $tmp.tmp $tmp.sed
39
40 export FSTYP=xfs
41
42 for r
43 do
44
45     if $group
46     then
47         # arg after -g
48         group_list=`sed -n <group -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{
49 s/ .*//p
50 }'`
51         if [ -z "$group_list" ]
52         then
53             echo "Group \"$r\" is empty or not defined?"
54             exit 1
55         fi
56         [ ! -s $tmp.list ] && touch $tmp.list
57         for t in $group_list
58         do
59             if grep -s "^$t\$" $tmp.list >/dev/null
60             then
61                 :
62             else
63                 echo "$t" >>$tmp.list
64             fi
65         done
66         group=false
67         continue
68
69     elif $xgroup
70     then
71         # arg after -x
72         [ ! -s $tmp.list ] && ls [0-9][0-9][0-9] [0-9][0-9][0-9][0-9] >$tmp.list 2>/dev/null
73         group_list=`sed -n <group -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{
74 s/ .*//p
75 }'`
76         if [ -z "$group_list" ]
77         then
78             echo "Group \"$r\" is empty or not defined?"
79             exit 1
80         fi
81         numsed=0
82         rm -f $tmp.sed
83         for t in $group_list
84         do
85             if [ $numsed -gt 100 ]
86             then
87                 sed -f $tmp.sed <$tmp.list >$tmp.tmp
88                 mv $tmp.tmp $tmp.list
89                 numsed=0
90                 rm -f $tmp.sed
91             fi
92             echo "/^$t\$/d" >>$tmp.sed
93             numsed=`expr $numsed + 1`
94         done
95         sed -f $tmp.sed <$tmp.list >$tmp.tmp
96         mv $tmp.tmp $tmp.list
97         xgroup=false
98         continue
99     fi
100
101     xpand=true
102     case "$r"
103     in
104
105         -\? | -h | --help)      # usage
106             echo "Usage: $0 [options] [testlist]"'
107
108 common options
109     -v                  verbose
110
111 check options
112     -xfs                test XFS (default)
113     -udf                test UDF
114     -nfs                test NFS
115     -l                  line mode diff [xdiff]
116     -n                  show me, do not run tests
117     -q                  quick [deprecated]
118     -T                  output timestamps
119     -r                  randomize test order
120     
121 testlist options
122     -g group[,group...] include tests from these groups
123     -x group[,group...] exclude tests from these groups
124     NNN                 include test NNN
125     NNN-NNN             include test range (eg. 012-021)
126 '
127             exit 0
128             ;;
129
130         -udf)   # -udf ... set FSTYP to udf
131             FSTYP=udf
132             xpand=false
133             ;;
134
135         -xfs)   # -xfs ... set FSTYP to xfs
136             FSTYP=xfs
137             xpand=false
138             ;;
139
140         -nfs)   # -nfs ... set FSTYP to nfs
141             FSTYP=nfs
142             xpand=false
143             ;;
144
145         -g)     # -g group ... pick from group file
146             group=true
147             xpand=false
148             ;;
149
150         -l)     # line mode for diff, not gdiff over modems
151             diff=diff
152             xpand=false
153             ;;
154
155         -q)     # "quick", no longer used - always quick :-)
156             xpand=false
157             ;;
158
159         -n)     # show me, don't do it
160             showme=true
161             xpand=false
162             ;;
163         -r)     # randomize test order
164             randomize=true
165             xpand=false
166             ;;
167
168         -T)     # turn on timestamp output
169             timestamp=true
170             xpand=false
171             ;;
172
173         -v)
174             verbose=true
175             xpand=false
176             ;;
177         -x)     # -x group ... exclude from group file
178             xgroup=true
179             xpand=false
180             ;;
181         '[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]')
182             echo "No tests?"
183             status=1
184             exit $status
185             ;;
186
187         [0-9]*-[0-9]*)
188             eval `echo $r | sed -e 's/^/start=/' -e 's/-/ end=/'`
189             ;;
190
191         [0-9]*-)
192             eval `echo $r | sed -e 's/^/start=/' -e 's/-//'`
193             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/.* //'`
194             if [ -z "$end" ]
195             then
196                 echo "No tests in range \"$r\"?"
197                 status=1
198                 exit $status
199             fi
200             ;;
201
202         *)
203             start=$r
204             end=$r
205             ;;
206
207     esac
208
209     # get rid of leading 0s as can be interpreted as octal
210     start=`echo $start | sed 's/^0*//'`
211     end=`echo $end | sed 's/^0*//'`
212
213     if $xpand
214     then
215         have_test_arg=true
216         $AWK_PROG </dev/null '
217 BEGIN   { for (t='$start'; t<='$end'; t++) printf "%03d\n",t }' \
218         | while read id
219         do
220             if grep -s "^$id " group >/dev/null
221             then
222                 # in group file ... OK
223                 echo $id >>$tmp.list
224             else
225                 if [ -f expunged ] && $expunge && egrep "^$id([         ]|\$)" expunged >/dev/null
226                 then
227                     # expunged ... will be reported, but not run, later
228                     echo $id >>$tmp.list
229                 else
230                     # oops
231                     echo "$id - unknown test, ignored"
232                 fi
233             fi
234         done
235     fi
236
237 done
238
239 if [ -s $tmp.list ]
240 then
241     # found some valid test numbers ... this is good
242     :
243 else
244     if $have_test_arg
245     then
246         # had test numbers, but none in group file ... do nothing
247         touch $tmp.list
248     else
249         # no test numbers, do everything from group file
250         sed -n -e '/^[0-9][0-9][0-9]*/s/[       ].*//p' <group >$tmp.list
251     fi
252 fi
253
254 # should be sort -n, but this did not work for Linux when this
255 # was ported from IRIX
256 #
257 list=`sort $tmp.list`
258 rm -f $tmp.list $tmp.tmp $tmp.sed
259
260 if $randomize
261 then
262     list=`echo $list | awk -f randomize.awk`
263 fi
264
265 case "$FSTYP" in
266     xfs)
267          [ "$XFS_LOGPRINT_PROG" = "" ] && _fatal "xfs_logprint not found"
268          [ "$XFS_REPAIR_PROG" = "" ] && _fatal "xfs_repair not found"
269          [ "$XFS_CHECK_PROG" = "" ] && _fatal "xfs_check not found"
270          [ "$XFS_DB_PROG" = "" ] && _fatal "xfs_db not found"
271          [ "$MKFS_XFS_PROG" = "" ] && _fatal "mkfs_xfs not found" 
272          ;;
273     udf)
274          [ "$MKFS_UDF_PROG" = "" ] && _fatal "mkfs_udf/mkudffs not found"
275          ;;
276     nfs)
277          ;;
278 esac