blob: 836d1ecef921e6c8e2ac30fa146691812fb3575f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
bm-prep () {
t-tstunt-parsechangelog
t-prep-newpackage example 1.0
cd $p
git checkout -b bad-build-deps indep-arch
perl -pe 's/Build-Depends.*/$&, x-dgit-no-such-package/' \
-i debian/control
git commit -a -m bad-build-deps
cat <<'END' >$tmp/stunt-git
#!/bin/sh -e
case "$*" in
*clean*) echo >&2 "BUILD-MODES PROGRAM git $*" ;;
esac
exec git "$@"
END
chmod +x $tmp/stunt-git
counter=0
if zgrep 'dpkg-buildpackage: Make dependency checks fatal for -S' \
/usr/share/doc/dpkg-dev/changelog.gz; then
dpkgbuildpackage_deps_for_clean=true
else
dpkgbuildpackage_deps_for_clean=false
fi
}
bm-guess-e-source-e-targets () {
local some_act=$1
case "$some_act" in
*" -b") e_source=false; e_targets='build binary' ;;
*" -B") e_source=false; e_targets='build-arch binary-arch' ;;
*" -A") e_source=false; e_targets='build-indep binary-indep' ;;
*" -S") e_source=true; e_targets=' ' ;;
*" -F") e_source=true; e_targets='build binary' ;;
*) e_source=true; e_targets='build binary' ;;
esac
}
bm-report-source () {
if "$@"; then
echo >&4 "SOURCE EXISTS"
else
echo >&4 "SOURCE MISSING"
fi
}
bm-build-deps-ok () {
case "$branch" in
indep-arch) return 0 ;;
bad-build-deps) return 1 ;;
esac
}
bm-compute-expected () {
require_fail=unexpect # or required
tolerate_fail=unexpect # or tolerate
exec 4>$bmexp
echo >&4 "$heading"
case $cleanmode in
git) echo >&4 'BUILD-MODES PROGRAM git clean -xdf' ;;
git-ff) echo >&4 'BUILD-MODES PROGRAM git clean -xdff' ;;
check) echo >&4 'BUILD-MODES PROGRAM git clean -xdn' ;;
dpkg-source-d) echo >&4 "EXAMPLE RULES TARGET clean" ;;
dpkg-source) bm-build-deps-ok || tolerate_fail=tolerate
echo >&4 "EXAMPLE RULES TARGET clean"
;;
none) ;;
*) fail "t-compute-expected-run $cleanmode ??" ;;
esac
if [ "x$e_targets" != x ]; then
# e_targets can be " " to mean `/may/ fail due to b-d'
bm-build-deps-ok || tolerate_fail=tolerate
fi
for t in $e_targets; do
bm-build-deps-ok || require_fail=required
echo >&4 "EXAMPLE RULES TARGET $t"
done
bm-report-source $e_source
exec 4>&-
}
bm-run-one () {
local args="--clean=$cleanmode $real_act"
heading="===== [$counter $branch $cleanmode $act] dgit $args ====="
bmlog=$tmp/run-$counter-output
bmexp=$tmp/run-$counter-expected
bmgot=$tmp/run-$counter-results
bm-compute-expected
git checkout $branch
dsc='../example_1.0.dsc'
rm -f $dsc
set +o pipefail
t-dgit --git=$tmp/stunt-git $args 2>&1 | tee $bmlog
local ps="${PIPESTATUS[*]}"
set -o pipefail
$bm_quirk_after_act
exec 4>$bmgot
echo >&4 "$heading"
case $ps in
"0 0") actual_status=success ;;
*" 0") actual_status=failure; echo >&4 "OPERATION FAILED"; ;;
*) fail "tee failed" ;;
esac
case "$require_fail-$tolerate_fail-$actual_status" in
required-********-failure) echo >>$bmexp "REQUIRED FAILURE" ;;
********-tolerate-failure) echo >>$bmexp "TOLERATED FAILURE" ;;
unexpect-********-success) ;;
*) fail "RF=$require_fail TF=$tolerate_fail AS=$actual_status" ;;
esac
egrep >&4 '^EXAMPLE RULES TARGET|^BUILD-MODES' $bmlog || [ $? = 1 ]
bm-report-source [ -e $dsc ]
exec 4>&-
$bm_quirk_before_diff
[ $actual_status = failure ] || diff -U10 $bmexp $bmgot
counter=$(( $counter + 1 ))
}
bm-act-iterate () {
for cleanmode in git none dpkg-source dpkg-source-d; do
# git-ff check removed because they're really very similar
for branch in indep-arch bad-build-deps; do
bm-run-one
done
done
: bm-act-iterate done.
}
|