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