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