chiark / gitweb /
autopkgtests: fixes
[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 t-worktree () {
36         rm -rf $p
37         tar xf $troot/worktrees/${p}_$1.tar
38 }
39
40 t-git-none () {
41         mkdir -p $tmp/git
42         (set -e; cd $tmp/git; tar xf $troot/git-template.tar)
43 }
44
45 t-has-ancestor () {
46         local ancestor=`git rev-parse $1`
47         local now=`git rev-parse HEAD`
48         local mbase=`git merge-base $ancestor $now`
49         if [ x$mbase != x$ancestor ]; then
50                 echo "not ff $ancestor..$now, $mbase != $ancestor"
51                 exit 1
52         fi
53 }       
54
55 t-archive-none () {
56         p=$1
57         mkdir -p $tmp/aq $tmp/mirror
58         echo sid >$tmp/aq/suite.unstable
59 }
60
61 t-archive () {
62         t-archive-none $1
63         v=$2
64         local dscf=${p}_$2.dsc
65         rm -f $tmp/mirror/${p}_*
66         ln $troot/pkg-srcs/${p}_${2%-*}* $tmp/mirror/
67         echo "$2 $dscf" >>$tmp/aq/package.sid.${p}
68         rm -rf $tmp/extract
69         mkdir $tmp/extract
70         (set -e; cd $tmp/extract; dpkg-source -x ../mirror/$dscf)
71 }
72
73 t-dgit () {
74         : '{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{'
75         ${DGIT_TEST-dgit} --dget:-u --dput:--config=$tmp/dput.cf \
76                 -dtest-dummy -D -k39B13D8A "$@"
77         : '}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}'
78 }
79
80 t-diff-nogit () {
81         diff --exclude=.git -ruN $*
82 }
83
84 t-cloned-fetched-good () {
85         t-diff-nogit ../extract/$p-${v%-*} .
86         t-clean-on-branch dgit/sid
87         t-refs-same \
88                 refs/heads/dgit/sid \
89                 refs/remotes/dgit/dgit/sid
90         t-refs-notexist dgit/unstable remotes/dgit/dgit/unstable
91 }
92
93 t-output () {
94         printf "%s\n" "$1" >$tmp/t.want
95         shift
96         "$@" >$tmp/t.got
97         diff $tmp/t.want $tmp/t.got
98 }
99
100 t-clean-on-branch () {
101         t-output "## $1" git status -b --porcelain
102 }
103
104 t-git-get-ref () {
105         local ref=$1
106         git show-ref -d $1 | perl -ne '
107                 $x = $1 if m#^(\w+) \Q'$1'\E(?:\^\{\})?$#;
108                 END { print "$x\n" if length $x; }
109         '
110 }
111
112 t-refs-same () {
113         local f=$1
114         t-git-get-ref $f >$tmp/t.ref1
115         t-refs-same-more "$@"
116 }
117
118 t-refs-same-more () {
119         local g
120         for g in $*; do
121                 t-git-get-ref $g >$tmp/t.refn
122                 diff $tmp/t.ref1 $tmp/t.refn
123         done
124 }
125
126 t-refs-notexist () {
127         for g in $*; do
128                 t-git-get-ref $g >$tmp/t.refx
129                 diff /dev/null $tmp/t.refx
130         done
131 }
132
133 t-pushed-good () {
134         t-ref-dsc-dgit
135         t-refs-same-more \
136                 refs/heads/master \
137                 refs/tags/debian/$v \
138                 refs/remotes/dgit/dgit/sid
139         t-refs-notexist \
140                 refs/heads/dgit/unstable \
141                 refs/remotes/dgit/dgit/unstable
142         (set -e; cd $tmp/git/$p.git
143          t-refs-same-more \
144                 refs/dgit/sid \
145                 refs/tags/debian/$v
146          t-refs-notexist \
147                 refs/dgit/unstable
148         )
149 }
150
151 t-ref-dsc-dgit () {
152         perl -e '
153                 use Dpkg::Control::Hash;
154                 my $h = new Dpkg::Control::Hash allow_pgp=>1;
155                 $h->parse(\*STDIN,"dsc");
156                 my $ref = $h->{"Dgit"},"\n";
157                 die unless $ref =~ m/^\w+\b/;
158                 print $ref,"\n";
159         ' <$tmp/incoming/${p}_${v}.dsc >$tmp/t.ref1
160 }