1 |
commit: fdeeafe1f410a94c5bca1b245e3c4c39b7518ada |
2 |
Author: Mike Frysinger <vapier <AT> gentoo <DOT> org> |
3 |
AuthorDate: Mon Dec 31 00:35:20 2012 +0000 |
4 |
Commit: Mike Frysinger <vapier <AT> gentoo <DOT> org> |
5 |
CommitDate: Mon Dec 31 01:19:05 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gcc-config.git;a=commit;h=fdeeafe1 |
7 |
|
8 |
tests: run in parallel |
9 |
|
10 |
Signed-off-by: Mike Frysinger <vapier <AT> gentoo.org> |
11 |
|
12 |
--- |
13 |
tests/run_tests | 60 +++++++++++++++++++++++++++++++++++++----------------- |
14 |
1 files changed, 41 insertions(+), 19 deletions(-) |
15 |
|
16 |
diff --git a/tests/run_tests b/tests/run_tests |
17 |
index caca986..b0a45c0 100755 |
18 |
--- a/tests/run_tests |
19 |
+++ b/tests/run_tests |
20 |
@@ -3,20 +3,20 @@ |
21 |
# Avoid bash localization of error messages |
22 |
export LC_ALL=C |
23 |
|
24 |
-if ! . /etc/init.d/functions.sh 2>/dev/null ; then |
25 |
- ebegin() { printf '%s ... ' "$*" ; } |
26 |
- eend() { |
27 |
- local r=${1:-0} |
28 |
- shift |
29 |
- if [[ $r -eq 0 ]] ; then |
30 |
- echo "[ ok ]" |
31 |
- else |
32 |
- echo "$* [ !! ]" |
33 |
- fi |
34 |
- return $r |
35 |
- } |
36 |
- die() { echo "$*"; exit 1; } |
37 |
-fi |
38 |
+. /etc/init.d/functions.sh 2>/dev/null |
39 |
+ebegin() { printf '%s*%s %s ... ' "${GOOD}" "${NORMAL}" "$*" ; } |
40 |
+eend() { |
41 |
+ local r=${1:-0} |
42 |
+ shift |
43 |
+ if [[ $r -eq 0 ]] ; then |
44 |
+ printf '[ %sok%s ]\n' "${GOOD}" "${NORMAL}" |
45 |
+ else |
46 |
+ printf '%s [ %s!!%s ]\n' "$*" "${BAD}" "${NORMAL}" |
47 |
+ fi |
48 |
+ return $r |
49 |
+} |
50 |
+die() { echo "$*" 1>&2; exit 1; } |
51 |
+eval $(eval_ecolors) |
52 |
|
53 |
vars=( CHOST GCC_CONFIG ROOT TROOT NOCOLOR RC_NOCOLOR ) |
54 |
unset ${vars[@]} |
55 |
@@ -38,7 +38,7 @@ CHOST="x86_64-pc-linux-gnu" |
56 |
cmp_log() { |
57 |
local ret log=$1 exp=$2 |
58 |
local v args=() |
59 |
- for v in ${vars[@]} ; do |
60 |
+ for v in "${vars[@]}" ; do |
61 |
args+=( -e "s:@${v}@:${!v}:g" ) |
62 |
done |
63 |
args+=( -e "s|: line [0-9]*: |: |g" ) |
64 |
@@ -50,20 +50,25 @@ cmp_log() { |
65 |
return ${ret} |
66 |
} |
67 |
|
68 |
-rm -f */*.log* |
69 |
+rm -f */*.log* */*.runit |
70 |
rm -rf TMP-*-rw-* |
71 |
|
72 |
if [[ $# -eq 0 ]] ; then |
73 |
set -- */test* |
74 |
else |
75 |
- set -- ${@/%//test*} |
76 |
- set -- ${@//\/\///} |
77 |
+ set -- "${@/%//test*}" |
78 |
+ set -- "${@//\/\///}" |
79 |
fi |
80 |
|
81 |
+max_jobs=$(getconf _NPROCESSORS_ONLN) |
82 |
+jobs=() |
83 |
tret=0 |
84 |
for t in "$@" ; do |
85 |
[[ ${t} == *.exp ]] && continue |
86 |
|
87 |
+ ( |
88 |
+ out=$( |
89 |
+ ( |
90 |
ebegin "Running ${t}" |
91 |
|
92 |
test=${t##*/} |
93 |
@@ -75,7 +80,7 @@ for t in "$@" ; do |
94 |
|
95 |
ROOT=${TROOT}/${tdir} |
96 |
|
97 |
- r="${ROOT}/runit" |
98 |
+ r="${ROOT}/${test}.runit" |
99 |
cat <<-EOF > "${r}" |
100 |
#!/bin/bash |
101 |
cd "${ROOT}" |
102 |
@@ -101,5 +106,22 @@ for t in "$@" ; do |
103 |
else |
104 |
: $(( tret += $? )) |
105 |
fi |
106 |
+ |
107 |
+ ) 2>&1 |
108 |
+ ) |
109 |
+ echo "${out}" |
110 |
+ ) & |
111 |
+ |
112 |
+ # Run all the tests in parallel. |
113 |
+ jobs+=( $! ) |
114 |
+ if [[ ${#jobs[@]} -ge ${max_jobs} ]] ; then |
115 |
+ wait ${jobs[0]} |
116 |
+ : $(( tret += $? )) |
117 |
+ jobs=( ${jobs[@]:1} ) |
118 |
+ fi |
119 |
+done |
120 |
+for j in ${jobs[@]} ; do |
121 |
+ wait ${j} |
122 |
+ : $(( tret += $? )) |
123 |
done |
124 |
exit ${tret} |