]> git.donarmstrong.com Git - wannabuild.git/blob - triggers/common
e3b450511bbb0bf3c476ca8c8b0b6a823a7443bd
[wannabuild.git] / triggers / common
1 # vim:set et ts=4 sw=4 ft=bash ai:
2
3 set -eE
4
5 LANG=C
6 PATH="/bin:/usr/bin:/org/wanna-build/bin:/org/buildd.debian.org/bin:/org/wanna-build/triggers"
7 ARCHIVE_MAIN="/org/wanna-build/tmp/archive/debian"
8 ARCHIVE_BASE="/org/wanna-build/tmp/archive/${ARCHIVE}"
9 PAS_BASE="/org/buildd.debian.org/web/quinn-diff"
10 PAS_FILE="$PAS_BASE/$SUITE/Packages-arch-specific"
11 LOCKFILE="${ARCHIVE_BASE}/lock"
12 ARCHS_lenny="alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc"
13 ARCHS_squeeze="amd64 armel i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-amd64 kfreebsd-i386"
14 ARCHS_wheezy="amd64 armel i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-amd64 kfreebsd-i386"
15 ARCHS_sid="$ARCHS_squeeze hurd-i386"
16
17 # Creates a working environment within the corresponding archive
18 # directory and jumps there.
19 ensure_workdir() {
20     mkdir -p "${ARCHIVE_BASE}/workdir"
21     cd "${ARCHIVE_BASE}/workdir"
22 }
23
24 # Puts the list of architectures for a given suite onto stdout.
25 get_architectures() {
26     SUITE="$1"
27
28     if [ "$SUITE" = "lenny" -o "$SUITE" = "oldstable" ]; then echo $ARCHS_lenny
29     elif [ "$SUITE" = "squeeze" -o "$SUITE" = "stable" ]; then echo $ARCHS_squeeze
30     elif [ "$SUITE" = "wheezy" -o "$SUITE" = "testing" ]; then echo $ARCHS_wheezy
31     elif [ "$SUITE" = "unstable" -o "$SUITE" = "sid" ]; then echo $ARCHS_sid
32     elif [ "$SUITE" = "experimental" ]; then echo $ARCHS_sid
33     else
34         echo "Unknown suite encountered, aborting." >&2
35         exit 1
36     fi
37 }
38
39 cleanup() {
40     rm -rf "$LOCKFILE"
41 }
42
43 ensure_lock() {
44     if lockfile -! -r 10 -l 6000 "$LOCKFILE"
45     then
46         echo "Cannot lock $LOCKFILE, aborting."
47         exit 1
48     fi
49 }
50
51 trigger_wb_update() {
52     SUITE="$1"
53     ARCHS="$2"
54     SOURCES="$3"
55     PACKAGES="$4"
56     WB_SUITE="$5"
57
58     if [ -z "$WB_SUITE" ]
59     then
60         WB_SUITE="${SUITE}"
61     fi
62
63     echo "`date`: Processing ${ARCHIVE}/${SUITE} ..."
64
65     keep-latest source $(eval echo ${SOURCES}) > Sources.${SUITE}
66     for ARCH in ${ARCHS}; do
67         keep-latest ${ARCH} $(eval echo $(echo ${PACKAGES} | sed -e 's/%ARCH%/${ARCH}/g')) > Packages.${SUITE}.${ARCH}
68         : > Packages.${SUITE}.${ARCH}.build-essential
69         for pkg in perl ; do
70             grep-dctrl -S -s Package,Version,Priority,Section,Architecture -X $pkg < Packages.${SUITE}.${ARCH} | sed -e '/^Version/ s,$,+build-essential,' >> Packages.${SUITE}.${ARCH}.build-essential
71         done
72         for pkg in make binutils dpkg-dev; do
73             grep-dctrl -S -s Package,Version,Priority,Section,Architecture -X $pkg < Packages.${SUITE}.${ARCH} | sed -e '/^Version/ s,$,+build-essential,' >> Packages.${SUITE}.${ARCH}.build-essential
74         done
75         grep-dctrl -F Priority required -s Package,Version,Priority,Section,Architecture < Packages.${SUITE}.${ARCH} | sed -e '/^Version/ s,$,+build-essential,' >> Packages.${SUITE}.${ARCH}.build-essential
76         grep-dctrl -F Essential -i yes -s Package,Version,Priority,Section,Architecture < Packages.${SUITE}.${ARCH} | sed -e '/^Version/ s,$,+build-essential,' >> Packages.${SUITE}.${ARCH}.build-essential
77     done
78     [ -f Packages.${SUITE}.i386.non-free ] && PNF="Packages.${SUITE}.%ARCH%.non-free" || PNF=""
79     [ -f Sources.${SUITE}.non-free ] && SNF="Sources.${SUITE}.non-free" || SNF=""
80     parallel -l 5 -i wanna-build -v --Pas ${PAS_FILE} --merge-v3 -A "{}" --dist=$WB_SUITE Packages.${SUITE}.%ARCH% $PNF . Sources.${SUITE} $SNF . Packages.${SUITE}.%ARCH% Packages.${SUITE}.%ARCH%.build-essential -- ${ARCHS} || true
81
82     echo "`date`: ${ARCHIVE}/${SUITE} done"
83 }
84
85 trigger_wb_update_for_overlay() {
86     SUITE="$1"
87     ARCHS="$2"
88     SOURCES_BASE="$3"
89     PACKAGES_BASE="$4"
90     SOURCES="$5"
91     PACKAGES="$6"
92     WB_SUITE="$7"
93     WHITELIST_FILE="$8"
94
95     if [ -z "$WB_SUITE" ]
96     then
97         WB_SUITE="${SUITE}"
98     fi
99
100     echo "`date`: Processing ${ARCHIVE}/${SUITE} ..."
101
102     keep-latest source $(eval echo ${SOURCES}) > Sources.${SUITE}
103     keep-latest source $(eval echo Sources.${SUITE} ${SOURCES_BASE}) > Sources.${SUITE}-all
104     for ARCH in ${ARCHS}; do
105         keep-latest ${ARCH} $(eval echo $(echo ${PACKAGES} | sed -e 's/%ARCH%/${ARCH}/g')) > Packages.${SUITE}.${ARCH}
106         keep-latest ${ARCH} Packages.${SUITE}.${ARCH} $(eval echo $(echo ${PACKAGES_BASE} | sed -e 's/%ARCH%/${ARCH}/g')) > Packages.${SUITE}.${ARCH}-all
107     done
108     [ -f Packages.${SUITE}.i386.non-free ] && PNF="Packages.${SUITE}.%ARCH%.non-free" || PNF=""
109     [ -f Sources.${SUITE}.non-free ] && SNF="Sources.${SUITE}.non-free" || SNF=""
110     echo parallel -l 5 -i wanna-build -v --Pas ${PAS_FILE} --merge-v3 -A "{}" --dist=$WB_SUITE Packages.${SUITE}.%ARCH% $PNF . Sources.${SUITE} $SNF . \
111         Packages.${SUITE}.%ARCH%-all . Sources.${SUITE}-all $SNF -- ${ARCHS} 
112     parallel -l 5 -i wanna-build -v --Pas ${PAS_FILE} --merge-v3 -A "{}" --dist=$WB_SUITE Packages.${SUITE}.%ARCH% $PNF . Sources.${SUITE} $SNF . \
113         Packages.${SUITE}.%ARCH%-all . Sources.${SUITE}-all $SNF -- ${ARCHS} || true
114
115     echo "`date`: ${ARCHIVE}/${SUITE} done"
116 }
117
118 # This is for the case where you get also get packages from
119 # a secondary unrelated suite, the buildd's chroot also has
120 # those packages files in it.
121 # Examples are *-{volatile,backports,edu} and experimental
122 # This is not for something like stable and proposed-updates
123 trigger_wb_update_with_secondary() {
124     SUITE="$1"
125     ARCHS="$2"
126     PACKAGES_BASE="$3"
127     SOURCES="$4"
128     PACKAGES="$5"
129     WB_SUITE="$6"
130     WHITELIST_FILE="$7"
131
132     if [ -z "$WB_SUITE" ]
133     then
134         WB_SUITE="${SUITE}"
135     fi
136
137     echo "`date`: Processing ${ARCHIVE}/${SUITE} ..."
138
139     keep-latest source $(eval echo ${SOURCES}) > Sources.${SUITE}
140
141     for ARCH in ${ARCHS}; do
142         keep-latest ${ARCH} $(eval echo $(echo ${PACKAGES} | sed -e 's/%ARCH%/${ARCH}/g')) > Packages.${SUITE}.${ARCH}
143         ucat Packages.${SUITE}.${ARCH} $(eval echo $(echo ${PACKAGES_BASE} | sed -e 's/%ARCH%/${ARCH}/g')) > Packages.${SUITE}.${ARCH}-all
144     done
145     [ -f Packages.${SUITE}.i386.non-free ] && PNF="Packages.${SUITE}.%ARCH%.non-free" || PNF=""
146     [ -f Sources.${SUITE}.non-free ] && SNF="Sources.${SUITE}.non-free" || SNF=""
147     parallel -l 5 -i wanna-build -v --Pas ${PAS_FILE} --merge-v3 -A "{}" --dist=$WB_SUITE Packages.${SUITE}.%ARCH% $PNF . Sources.${SUITE} $SNF . \
148         Packages.${SUITE}.%ARCH%-all -- ${ARCHS} || true
149
150     echo "`date`: ${ARCHIVE}/${SUITE} done"
151 }
152
153 ucat() {
154     for FILE in $*; do
155       if [ -f ${FILE} ]; then
156         case $FILE in
157             *.gz)
158                 zcat $FILE
159                 ;;
160             *.bz2)
161                 bzcat $FILE
162                 ;;
163             *)
164                 cat $FILE
165                 ;;
166         esac
167       fi
168     done
169 }
170
171 filter_out_nonfree() {
172     INPUT="$1"
173     OUTPUT="$2"
174
175     gunzip -c "$INPUT" | grep-dctrl -v -r -F Section 'non-free/.*' | gzip -c > "$OUTPUT"
176 }
177