1# tdir that only exes the files.
2args="../.."
3if test "$1" = "-a"; then
4	args=$2
5	shift
6	shift
7fi
8quiet=0
9if test "$1" = "-q"; then
10	quiet=1
11	shift
12fi
13
14if test "$1" = "clean"; then
15	if test $quiet = 0; then
16		echo "rm -f result.* .done* .tdir.var.master .tdir.var.test"
17	fi
18	rm -f result.* .done* .tdir.var.master .tdir.var.test
19	exit 0
20fi
21if test "$1" = "fake"; then
22	if test $quiet = 0; then
23		echo "minitdir fake $2"
24	fi
25	echo "fake" > .done-`basename $2 .tdir`
26	exit 0
27fi
28if test "$1" = "-f" && test "$2" = "report"; then
29	echo "Minitdir Long Report"
30	pass=0
31	fail=0
32	skip=0
33	echo "   STATUS    ELAPSED TESTNAME TESTDESCRIPTION"
34	for result in *.tdir; do
35		name=`basename $result .tdir`
36		timelen="     "
37		desc=""
38		if test -f "result.$name"; then
39			timestart=`grep ^DateRunStart: "result.$name" | sed -e 's/DateRunStart: //'`
40			timeend=`grep ^DateRunEnd: "result.$name" | sed -e 's/DateRunEnd: //'`
41			timesec=`expr $timeend - $timestart`
42			timelen=`printf %4ds $timesec`
43			if test $? -ne 0; then
44				timelen="$timesec""s"
45			fi
46			desc=`grep ^Description: "result.$name" | sed -e 's/Description: //'`
47		fi
48		if test -f ".done-$name"; then
49			if test $quiet = 0; then
50				echo "** PASSED ** $timelen $name: $desc"
51				pass=`expr $pass + 1`
52			fi
53		else
54			if test -f "result.$name"; then
55				echo "!! FAILED !! $timelen $name: $desc"
56				fail=`expr $fail + 1`
57			else
58				echo ".> SKIPPED<< $timelen $name: $desc"
59				skip=`expr $skip + 1`
60			fi
61		fi
62	done
63	echo ""
64	if test "$skip" = "0"; then
65		echo "$pass pass, $fail fail"
66	else
67		echo "$pass pass, $fail fail, $skip skip"
68	fi
69	echo ""
70	exit 0
71fi
72if test "$1" = "report" || test "$2" = "report"; then
73	echo "Minitdir Report"
74	for result in *.tdir; do
75		name=`basename $result .tdir`
76		if test -f ".done-$name"; then
77			if test $quiet = 0; then
78				echo "** PASSED ** : $name"
79			fi
80		else
81			if test -f "result.$name"; then
82				echo "!! FAILED !! : $name"
83			else
84				echo ">> SKIPPED<< : $name"
85			fi
86		fi
87	done
88	exit 0
89fi
90
91if test "$1" != 'exe'; then
92	# usage
93	echo "mini tdir. Reduced functionality for old shells."
94	echo "	tdir [-q] exe <file>"
95	echo "	tdir [-q] fake <file>"
96	echo "	tdir [-q] clean"
97	echo "	tdir [-q|-f] report"
98	exit 1
99fi
100shift
101
102# do not execute if the disk is too full
103#DISKLIMIT=100000
104# This check is not portable (to Solaris 10).
105#avail=`df . | tail -1 | awk '{print $4}'`
106#if test "$avail" -lt "$DISKLIMIT"; then
107	#echo "minitdir: The disk is too full! Only $avail."
108	#exit 1
109#fi
110
111name=`basename $1 .tdir`
112dir=$name.$$
113result=result.$name
114done=.done-$name
115success="no"
116if test -x "`which bash`"; then
117	shell="bash"
118else
119	shell="sh"
120fi
121
122# check already done
123if test -f .done-$name; then
124	echo "minitdir .done-$name exists. skip test."
125	exit 0
126fi
127
128# Copy
129if test $quiet = 0; then
130	echo "minitdir copy $1 to $dir"
131fi
132mkdir $dir
133if cp --help 2>&1 | grep -- "-a" >/dev/null; then
134cp -a $name.tdir/* $dir/
135else
136cp -R $name.tdir/* $dir/
137fi
138cd $dir
139
140# EXE
141echo "minitdir exe $name" > $result
142grep "Description:" $name.dsc >> $result 2>&1
143echo "DateRunStart: "`date "+%s" 2>/dev/null` >> $result
144if test -f $name.pre; then
145	if test $quiet = 0; then
146		echo "minitdir exe $name.pre"
147	fi
148	echo "minitdir exe $name.pre" >> $result
149	$shell $name.pre $args >> $result
150	if test $? -ne 0; then
151		echo "Warning: $name.pre did not exit successfully"
152	fi
153fi
154if test -f $name.test; then
155	if test $quiet = 0; then
156		echo "minitdir exe $name.test"
157	fi
158	echo "minitdir exe $name.test" >> $result
159	$shell $name.test $args >>$result 2>&1
160	if test $? -ne 0; then
161		echo "$name: FAILED" >> $result
162		echo "$name: FAILED"
163		success="no"
164	else
165		echo "$name: PASSED" >> $result
166		echo "$name: PASSED" > ../.done-$name
167		if test $quiet = 0; then
168			echo "$name: PASSED"
169		fi
170		success="yes"
171	fi
172fi
173if test -f $name.post; then
174	if test $quiet = 0; then
175		echo "minitdir exe $name.post"
176	fi
177	echo "minitdir exe $name.post" >> $result
178	$shell $name.post $args >> $result
179	if test $? -ne 0; then
180		echo "Warning: $name.post did not exit successfully"
181	fi
182fi
183echo "DateRunEnd: "`date "+%s" 2>/dev/null` >> $result
184
185mv $result ..
186cd ..
187rm -rf $dir
188# compat for windows where deletion may not succeed initially (files locked
189# by processes that still have to exit).
190if test $? -eq 1; then
191	echo "minitdir waiting for processes to terminate"
192	sleep 2 # some time to exit, and try again
193	rm -rf $dir
194fi
195