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