chiark / gitweb /
Use failedcmd to report errors when ssh psql fails. Closes:#734281.
[dgit.git] / tests / lib
1 #
2
3 exec 2>&1
4 set -x
5
6 root=`pwd`
7 troot=$root/tests
8 testname="${0##*/}"
9
10 tmp=$ADTTMP
11 if [ x"$tmp" = x ]; then
12         mkdir -p tests/tmp
13         tmp=tests/tmp/$testname
14         rm -rf $tmp
15         mkdir $tmp
16 fi
17 cd $tmp
18 tmp=`pwd`
19 export DGIT_TEST_DUMMY_DIR=$tmp
20 ln $troot/ssh ssh
21
22 mkdir $tmp/gnupg
23 cp $troot/gnupg/* $tmp/gnupg
24 chmod go-rw $tmp/gnupg/*
25 export GNUPGHOME=$tmp/gnupg
26
27 mkdir $tmp/incoming
28 cat <<END >$tmp/dput.cf
29 [test-dummy]
30 method                  = local
31 incoming                = $tmp/incoming
32 run_dinstall            = 0
33 END
34
35 fail () {
36         echo >&2 "failed: $*"
37         exit 1
38 }
39
40 t-worktree () {
41         rm -rf $p
42         tar xf $troot/worktrees/${p}_$1.tar
43 }
44
45 t-git () {
46         p=$1
47         v=$2
48         mkdir -p $tmp/git
49         (set -e; cd $tmp/git; tar xf $troot/git-srcs/${p}_$v.git.tar)
50 }
51
52 t-git-none () {
53         mkdir -p $tmp/git
54         (set -e; cd $tmp/git; tar xf $troot/git-template.tar)
55 }
56
57 t-has-ancestor () {
58         local now=`git rev-parse HEAD`
59         local ancestor=`git rev-parse $1^{}`
60         local mbase=`git merge-base $ancestor $now`
61         if [ x$mbase != x$ancestor ]; then
62                 fail "not ff $ancestor..$now, $mbase != $ancestor"
63         fi
64 }       
65
66 t-archive-none () {
67         p=$1
68         mkdir -p $tmp/aq $tmp/mirror
69         echo sid >$tmp/aq/suite.unstable
70 }
71
72 t-archive () {
73         t-archive-none $1
74         v=$2
75         local dscf=${p}_$2.dsc
76         rm -f $tmp/mirror/${p}_*
77         ln $troot/pkg-srcs/${p}_${2%-*}* $tmp/mirror/
78         echo "$2 $dscf" >>$tmp/aq/package.sid.${p}
79         rm -rf $tmp/extract
80         mkdir $tmp/extract
81         (set -e; cd $tmp/extract; dpkg-source -x ../mirror/$dscf)
82 }
83
84 t-dgit () {
85         : '{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{'
86         ${DGIT_TEST-dgit} --dget:-u --dput:--config=$tmp/dput.cf \
87                 -dtest-dummy -D -k39B13D8A "$@"
88         : '}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}'
89 }
90
91 t-diff-nogit () {
92         diff --exclude=.git -ruN $*
93 }
94
95 t-cloned-fetched-good () {
96         t-diff-nogit ../extract/$p-${v%-*} .
97         t-clean-on-branch dgit/sid
98         t-refs-same-start
99         t-refs-same \
100                 refs/heads/dgit/sid \
101                 refs/remotes/dgit/dgit/sid
102         t-refs-notexist dgit/unstable remotes/dgit/dgit/unstable
103 }
104
105 t-output () {
106         printf "%s\n" "$1" >$tmp/t.want
107         shift
108         "$@" >$tmp/t.got
109         diff $tmp/t.want $tmp/t.got
110 }
111
112 t-clean-on-branch () {
113         t-output "## $1" git status -b --porcelain
114 }
115
116 t-git-get-ref () {
117         local ref=$1
118         git show-ref -d $1 | perl -ne '
119                 $x = $1 if m#^(\w+) \Q'$1'\E(?:\^\{\})?$#;
120                 END { print "$x\n" if length $x; }
121         '
122 }
123
124 t-ref-same () {
125         local name="$1"
126         local val=`t-git-get-ref $name`
127         t-ref-same-val "$name" $val
128 }
129
130 t-ref-head () {
131         local val=`git rev-parse HEAD`
132         t-ref-same-val HEAD $val
133 }
134
135 t-ref-same-val () {
136         local name="$1"
137         local val=$2
138         case "$t_ref_val" in
139         '')             ;;
140         "$val")         ;;
141         *)              fail "ref varies: $name: $val != $t_ref_val" ;;
142         esac
143         t_ref_val="$val"
144 }
145
146 t-refs-same-start () {
147         t_ref_val=''
148 }
149
150 t-refs-same () {
151         local g
152         for g in $*; do
153                 t-ref-same $g
154         done
155 }
156
157 t-refs-notexist () {
158         local val
159         for g in $*; do
160                 val=`t-git-get-ref $g >$tmp/t.refx`
161                 if [ "x$val" != x ]; then
162                         fail "ref $g unexpectedly exists ($val)"
163                 fi
164         done
165 }
166
167 t-v-tag () {
168         echo refs/tags/debian/${v//\~/_}
169 }
170
171 t-pushed-good () {
172         local branch=$1
173         t-ref-dsc-dgit
174         t-refs-same \
175                 refs/heads/$branch \
176                 `t-v-tag` \
177                 refs/remotes/dgit/dgit/sid
178         t-refs-notexist \
179                 refs/heads/dgit/unstable \
180                 refs/remotes/dgit/dgit/unstable
181         (set -e; cd $tmp/git/$p.git
182          t-refs-same \
183                 refs/dgit/sid \
184                 `t-v-tag`
185          t-refs-notexist \
186                 refs/dgit/unstable
187         )
188         git verify-tag `t-v-tag`
189 }
190
191 t-822-field () {
192         local file=$1
193         local field=$2
194         perl -e '
195                 use Dpkg::Control::Hash;
196                 my $h = new Dpkg::Control::Hash allow_pgp=>1;
197                 $h->parse(\*STDIN,"'"$file"'");
198                 my $val = $h->{"'$field'"},"\n";
199                 die "'"$file $field"'" unless defined $val;
200                 print $val,"\n";
201         ' <$file
202 }
203
204 t-ref-dsc-dgit () {
205         local dsc=${p}_${v}.dsc
206         local val=`t-822-field $tmp/incoming/$dsc Dgit`
207         perl -e '$_=shift @ARGV; die "$dsc Dgit $_ ?" unless m/^\w+\b/;' "$val"
208         t-ref-same-val $dsc "$val"
209 }
210
211 t-apply-diff () {
212         local v1=$1
213         local v2=$2
214         (cd $troot/pkg-srcs; debdiff ${p}_${v1}.dsc ${p}_${v2}.dsc) \
215                 | patch -p1 -u
216 }