]> git.decadent.org.uk Git - dak.git/blob - config/debian/dinstall.functions
Merge commit 'mhy/master'
[dak.git] / config / debian / dinstall.functions
1 # Timestamp. Used for dinstall stat graphs
2 function ts() {
3         echo "Archive maintenance timestamp ($1): $(date +%H:%M:%S)"
4 }
5
6 # Cleanup actions
7 function cleanup() {
8         rm -f ${LOCK_DAILY}
9         rm -f ${LOCK_ACCEPTED}
10 }
11
12 # If we error out this one is called, *FOLLOWED* by cleanup above
13 function onerror() {
14     ERRDATE=$(date "+%Y.%m.%d-%H:%M:%S")
15
16     subject="ATTENTION ATTENTION!"
17     if [ "${error}" = "false" ]; then
18         subject="${subject} (continued)"
19     else
20         subject="${subject} (interrupted)"
21     fi
22     subject="${subject} dinstall error at ${ERRDATE} in ${STAGEFILE} - (Be quiet, Brain, or I'll stab you with a Q-tip)"
23
24     cat "${STAGEFILE}.log" | mail -s "${subject}" -a "X-Debian: DAK" cron@ftp-master.debian.org
25 }
26
27 ########################################################################
28 # the actual dinstall functions follow                                 #
29 ########################################################################
30
31 # pushing merkels QA user, part one
32 function merkel1() {
33     log "Telling merkels QA user that we start dinstall"
34     ssh -2 -i ~dak/.ssh/push_merkel_qa  -o BatchMode=yes -o SetupTimeOut=90 -o ConnectTimeout=90 qa@merkel.debian.org sleep 1
35 }
36
37 # Create the postgres dump files
38 function pgdump_pre() {
39     log "Creating pre-daily-cron-job backup of projectb database..."
40     pg_dump projectb > $base/backup/dump_pre_$(date +%Y.%m.%d-%H:%M:%S)
41 }
42
43 function pgdump_post() {
44     log "Creating post-daily-cron-job backup of projectb database..."
45     cd $base/backup
46     POSTDUMP=$(date +%Y.%m.%d-%H:%M:%S)
47     pg_dump projectb > $base/backup/dump_$POSTDUMP
48     pg_dumpall --globals-only > $base/backup/dumpall_$POSTDUMP
49     ln -sf $base/backup/dump_$POSTDUMP current
50     ln -sf $base/backup/dumpall_$POSTDUMP currentall
51 }
52
53 # Load the dak-dev projectb
54 function pgdakdev() {
55     cd $base/backup
56     echo "drop database projectb" | psql -p 5433 template1
57         cat currentall | psql -p 5433 template1
58     createdb -p 5433 -T template0 projectb
59     fgrep -v '\connect' current | psql -p 5433 projectb
60 }
61
62 # Updating various files
63 function updates() {
64     log "Updating Bugs docu, Mirror list and mailing-lists.txt"
65     cd $configdir
66     $scriptsdir/update-bugdoctxt
67     $scriptsdir/update-mirrorlists
68     $scriptsdir/update-mailingliststxt
69     $scriptsdir/update-pseudopackages.sh
70 }
71
72 # Process (oldstable)-proposed-updates "NEW" queue
73 function punew_do() {
74     cd "${queuedir}/${1}"
75     date -u -R >> REPORT
76     dak process-new -a -C COMMENTS >> REPORT || true
77     echo >> REPORT
78 }
79 function punew() {
80     log "Doing automated p-u-new processing"
81     punew_do "$1"
82 }
83 function opunew() {
84     log "Doing automated o-p-u-new processing"
85     punew_do "$1"
86 }
87
88 # The first i18n one, syncing new descriptions
89 function i18n1() {
90     log "Synchronizing i18n package descriptions"
91     # First sync their newest data
92     cd ${scriptdir}/i18nsync
93     rsync -aq --delete --delete-after ddtp-sync:/does/not/matter . || true
94
95     # Now check if we still know about the packages for which they created the files
96     # is the timestamp signed by us?
97     if $(gpgv --keyring /srv/ftp.debian.org/s3kr1t/dot-gnupg/pubring.gpg timestamp.gpg timestamp); then
98         # now read it. As its signed by us we are sure the content is what we expect, no need
99         # to do more here. And we only test -d a directory on it anyway.
100         TSTAMP=$(cat timestamp)
101         # do we have the dir still?
102         if [ -d ${scriptdir}/i18n/${TSTAMP} ]; then
103             # Lets check!
104             if ${scriptsdir}/ddtp-i18n-check.sh . ${scriptdir}/i18n/${TSTAMP}; then
105                 # Yay, worked, lets copy around
106                 for dir in squeeze sid; do
107                     if [ -d dists/${dir}/ ]; then
108                         cd dists/${dir}/main/i18n
109                         rsync -aq --delete --delete-after  . ${ftpdir}/dists/${dir}/main/i18n/.
110                     fi
111                     cd ${scriptdir}/i18nsync
112                 done
113             else
114                 echo "ARRRR, bad guys, wrong files, ARRR"
115                 echo "Arf, Arf, Arf, bad guys, wrong files, arf, arf, arf" | mail -s "Don't you kids take anything. I'm watching you. I've got eye implants in the back of my head." debian-l10n-devel@lists.alioth.debian.org
116             fi
117         else
118             echo "ARRRR, missing the timestamp ${TSTAMP} directory, not updating i18n, ARRR"
119             echo "Arf, Arf, Arf, missing the timestamp ${TSTAMP} directory, not updating i18n, arf, arf, arf" | mail -s "Lisa, if you don't like your job you don't strike. You just go in every day and do it really half-assed. That's the American way." debian-l10n-devel@lists.alioth.debian.org
120         fi
121     else
122         echo "ARRRRRRR, could not verify our timestamp signature, ARRR. Don't mess with our files, i18n guys, ARRRRR."
123         echo "Arf, Arf, Arf, could not verify our timestamp signature, arf. Don't mess with our files, i18n guys, arf, arf, arf" | mail -s "You can't keep blaming yourself. Just blame yourself once, and move on." debian-l10n-devel@lists.alioth.debian.org
124     fi
125 }
126
127 function cruft() {
128     log "Checking for cruft in overrides"
129     dak check-overrides
130 }
131
132 function msfl() {
133     log "Generating suite file lists for apt-ftparchive"
134     dak make-suite-file-list
135 }
136
137 function filelist() {
138     log "Generating file lists for apt-ftparchive"
139     dak generate-filelist
140 }
141
142 function fingerprints() {
143     log "Not updating fingerprints - scripts needs checking"
144
145 #    log "Updating fingerprints"
146 #    dak import-keyring -L /srv/keyring.debian.org/keyrings/debian-keyring.gpg
147
148 #    OUTFILE=$(mktemp)
149 #    dak import-keyring --generate-users "%s" /srv/keyring.debian.org/keyrings/debian-maintainers.gpg >"${OUTFILE}"
150
151 #    if [ -s "${OUTFILE}" ]; then
152 #        /usr/sbin/sendmail -odq -oi -t -f envelope@ftp-master.debian.org <<EOF
153 #From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>
154 #To: <debian-project@lists.debian.org>
155 #Subject: Debian Maintainers Keyring changes
156 #Content-Type: text/plain; charset=utf-8
157 #MIME-Version: 1.0
158 #
159 #The following changes to the debian-maintainers keyring have just been activated:
160 #
161 #$(cat $OUTFILE)
162 #
163 #Debian distribution maintenance software,
164 #on behalf of the Keyring maintainers
165 #
166 #EOF
167 #    fi
168 #    rm -f "$OUTFILE"
169 }
170
171 function overrides() {
172     log "Writing overrides into text files"
173     cd $overridedir
174     dak make-overrides
175
176     # FIXME
177     rm -f override.sid.all3
178     for i in main contrib non-free main.debian-installer; do cat override.sid.$i >> override.sid.all3; done
179 }
180
181 function mpfm() {
182     log "Generating package / file mapping"
183     dak make-pkg-file-mapping | bzip2 -9 > $base/ftp/indices/package-file.map.bz2
184 }
185
186 function packages() {
187     log "Generating Packages and Sources files"
188     cd $configdir
189     GZIP='--rsyncable' ; export GZIP
190     apt-ftparchive generate apt.conf
191 }
192
193 function pdiff() {
194     log "Generating pdiff files"
195     dak generate-index-diffs
196 }
197
198 function release() {
199     log "Generating Release files"
200     dak generate-releases
201 }
202
203 function dakcleanup() {
204     log "Cleanup old packages/files"
205     dak clean-suites -m 10000
206     dak clean-queues
207 }
208
209 function buildd() {
210     # Needs to be rebuilt, as files have moved.  Due to unaccepts, we need to
211     # update this before wanna-build is updated.
212     log "Regenerating wanna-build/buildd information"
213     psql projectb -A -t -q -c "SELECT build_queue.path || '/' || build_queue_files.filename FROM build_queue_files LEFT JOIN build_queue ON (build_queue.id =build_queue_files.build_queue_id) WHERE queue_name = 'buildd' AND filename ~ 'd(sc|eb)$'"  > $dbdir/dists/unstable_accepted.list
214     symlinks -d /srv/incoming.debian.org/buildd > /dev/null
215     apt-ftparchive generate apt.conf.buildd
216 }
217
218 function buildd_dir() {
219     # Rebuilt the buildd dir to avoid long times of 403
220     log "Regenerating the buildd incoming dir"
221     STAMP=$(date "+%Y%m%d%H%M")
222     make_buildd_dir
223 }
224
225 function mklslar() {
226     cd $ftpdir
227
228     FILENAME=ls-lR
229
230     log "Removing any core files ..."
231     find -type f -name core -print0 | xargs -0r rm -v
232
233     log "Checking permissions on files in the FTP tree ..."
234     find -type f \( \! -perm -444 -o -perm +002 \) -ls
235     find -type d \( \! -perm -555 -o -perm +002 \) -ls
236
237     log "Checking symlinks ..."
238     symlinks -rd .
239
240     log "Creating recursive directory listing ... "
241     rm -f .${FILENAME}.new
242     TZ=UTC ls -lR > .${FILENAME}.new
243
244     if [ -r ${FILENAME}.gz ] ; then
245         mv -f ${FILENAME}.gz ${FILENAME}.old.gz
246         mv -f .${FILENAME}.new ${FILENAME}
247         rm -f ${FILENAME}.patch.gz
248         zcat ${FILENAME}.old.gz | diff -u - ${FILENAME} | gzip --rsyncable -9cfn - >${FILENAME}.patch.gz
249         rm -f ${FILENAME}.old.gz
250     else
251         mv -f .${FILENAME}.new ${FILENAME}
252     fi
253
254     gzip --rsyncable -9cfN ${FILENAME} >${FILENAME}.gz
255     rm -f ${FILENAME}
256 }
257
258 function mkmaintainers() {
259     log -n 'Creating Maintainers index ... '
260
261     cd $indices
262     dak make-maintainers ${scriptdir}/masterfiles/pseudo-packages.maintainers | \
263         sed -e "s/~[^  ]*\([   ]\)/\1/"  | awk '{printf "%-20s ", $1; for (i=2; i<=NF; i++) printf "%s ", $i; printf "\n";}' > .new-maintainers
264
265     set +e
266     cmp .new-maintainers Maintainers >/dev/null
267     rc=$?
268     set -e
269     if [ $rc = 1 ] || [ ! -f Maintainers ] ; then
270             log -n "installing Maintainers ... "
271             mv -f .new-maintainers Maintainers
272             gzip --rsyncable -9v <Maintainers >.new-maintainers.gz
273             mv -f .new-maintainers.gz Maintainers.gz
274     elif [ $rc = 0 ] ; then
275             log '(same as before)'
276             rm -f .new-maintainers
277     else
278             log cmp returned $rc
279             false
280     fi
281 }
282
283 function copyoverrides() {
284     log 'Copying override files into public view ...'
285
286     for f in $copyoverrides ; do
287             cd $overridedir
288             chmod g+w override.$f
289
290             cd $indices
291             rm -f .newover-$f.gz
292             pc="`gzip 2>&1 -9nv <$overridedir/override.$f >.newover-$f.gz`"
293             set +e
294             nf=override.$f.gz
295             cmp -s .newover-$f.gz $nf
296             rc=$?
297             set -e
298         if [ $rc = 0 ]; then
299                     rm -f .newover-$f.gz
300             elif [ $rc = 1 -o ! -f $nf ]; then
301                     log "   installing new $nf $pc"
302                     mv -f .newover-$f.gz $nf
303                     chmod g+w $nf
304             else
305                     log $? $pc
306                     exit 1
307             fi
308     done
309 }
310
311 function mkfilesindices() {
312     umask 002
313     cd $base/ftp/indices/files/components
314
315     ARCHLIST=$(tempfile)
316
317     log "Querying projectb..."
318     echo 'SELECT l.path, f.filename, a.arch_string FROM location l JOIN files f ON (f.location = l.id) LEFT OUTER JOIN (binaries b JOIN architecture a ON (b.architecture = a.id)) ON (f.id = b.file)' | psql projectb -At | sed 's/|//;s,^/srv/ftp.debian.org/ftp,.,' | sort >$ARCHLIST
319
320     includedirs () {
321         perl -ne 'print; while (m,/[^/]+$,) { $_=$`; print $_ . "\n" unless $d{$_}++; }'
322     }
323     poolfirst () {
324         perl -e '@nonpool=(); while (<>) { if (m,^\./pool/,) { print; } else { push @nonpool, $_; } } print for (@nonpool);'
325     }
326
327     log "Generating sources list
328     (
329         sed -n 's/|$//p' $ARCHLIST
330         cd $base/ftp
331         find ./dists -maxdepth 1 \! -type d
332         find ./dists \! -type d | grep "/source/"
333     ) | sort -u | gzip --rsyncable -9 > source.list.gz
334
335     log "Generating arch lists
336
337     ARCHES=$( (<$ARCHLIST sed -n 's/^.*|//p'; echo amd64) | grep . | grep -v all | sort -u)
338     for a in $ARCHES; do
339         (sed -n "s/|$a$//p" $ARCHLIST
340             sed -n 's/|all$//p' $ARCHLIST
341
342             cd $base/ftp
343             find ./dists -maxdepth 1 \! -type d
344             find ./dists \! -type d | grep -E "(proposed-updates.*_$a.changes$|/main/disks-$a/|/main/installer-$a/|/Contents-$a|/binary-$a/)"
345         ) | sort -u | gzip --rsyncable -9 > arch-$a.list.gz
346     done
347
348     log "Generating suite lists"
349
350     suite_list () {
351         printf 'SELECT DISTINCT l.path, f.filename FROM (SELECT sa.source AS source FROM src_associations sa WHERE sa.suite = %d UNION SELECT b.source AS source FROM bin_associations ba JOIN binaries b ON (ba.bin = b.id) WHERE ba.suite = %d) s JOIN dsc_files df ON (s.source = df.source) JOIN files f ON (df.file = f.id) JOIN location l ON (f.location = l.id)\n' $1 $1 | psql -F' ' -A -t projectb
352
353         printf 'SELECT l.path, f.filename FROM bin_associations ba JOIN binaries b ON (ba.bin = b.id) JOIN files f ON (b.file = f.id) JOIN location l ON (f.location = l.id) WHERE ba.suite = %d\n' $1 | psql -F' ' -A -t projectb
354     }
355
356     printf 'SELECT id, suite_name FROM suite\n' | psql -F' ' -At projectb |
357     while read id suite; do
358         [ -e $base/ftp/dists/$suite ] || continue
359         (
360             (cd $base/ftp
361                 distname=$(cd dists; readlink $suite || echo $suite)
362                 find ./dists/$distname \! -type d
363                 for distdir in ./dists/*; do
364                     [ "$(readlink $distdir)" != "$distname" ] || echo $distdir
365                 done
366             )
367             suite_list $id | tr -d ' ' | sed 's,^/srv/ftp.debian.org/ftp,.,'
368         ) | sort -u | gzip --rsyncable -9 > suite-${suite}.list.gz
369     done
370
371     log "Finding everything on the ftp site to generate sundries"
372
373     (cd $base/ftp; find . \! -type d \! -name 'Archive_Maintenance_In_Progress' | sort) >$ARCHLIST
374
375     rm -f sundries.list
376     zcat *.list.gz | cat - *.list | sort -u |
377     diff - $ARCHLIST | sed -n 's/^> //p' > sundries.list
378
379     log "Generating files list"
380
381     for a in $ARCHES; do
382         (echo ./project/trace; zcat arch-$a.list.gz source.list.gz) |
383         cat - sundries.list dists.list project.list docs.list indices.list |
384         sort -u | poolfirst > ../arch-$a.files
385     done
386
387     (cd $base/ftp/
388             for dist in sid squeeze; do
389                     find ./dists/$dist/main/i18n/ \! -type d | sort -u | gzip --rsyncable -9 > $base/ftp/indices/files/components/translation-$dist.list.gz
390             done
391     )
392
393     (cat ../arch-i386.files ../arch-amd64.files; zcat suite-oldstable.list.gz suite-proposed-updates.list.gz ; zcat translation-sid.list.gz ; zcat translation-squeeze.list.gz) |
394     sort -u | poolfirst > ../typical.files
395
396     rm -f $ARCHLIST
397     log "Done!"
398 }
399
400 function mkchecksums() {
401     dsynclist=$dbdir/dsync.list
402     md5list=$indices/md5sums
403
404     log -n "Creating md5 / dsync index file ... "
405
406     cd "$ftpdir"
407     ${bindir}/dsync-flist -q generate $dsynclist --exclude $dsynclist --md5
408     ${bindir}/dsync-flist -q md5sums $dsynclist | gzip -9n --rsyncable > ${md5list}.gz
409     ${bindir}/dsync-flist -q link-dups $dsynclist || true
410 }
411
412 function scripts() {
413     log "Running various scripts from $scriptsdir"
414     mkmaintainers
415     copyoverrides
416     mklslar
417     mkfilesindices
418     mkchecksums
419 }
420
421 function mirror() {
422     log "Regenerating \"public\" mirror/ hardlink fun"
423     cd ${mirrordir}
424     rsync -aH --link-dest ${ftpdir} --delete --delete-after --ignore-errors ${ftpdir}/. .
425 }
426
427 function wb() {
428     log "Trigger daily wanna-build run"
429     ssh -o BatchMode=yes -o SetupTimeOut=90 -o ConnectTimeout=90 wbadm@buildd /org/wanna-build/trigger.daily || echo "W-B trigger.daily failed" | mail -s "W-B Daily trigger failed" ftpmaster@ftp-master.debian.org
430 }
431
432 function expire() {
433     log "Expiring old database dumps..."
434     cd $base/backup
435     $scriptsdir/expire_dumps -d . -p -f "dump_*"
436 }
437
438 function transitionsclean() {
439     log "Removing out of date transitions..."
440     cd $base
441     dak transitions -c -a
442 }
443
444 function reports() {
445     # Send a report on NEW/BYHAND packages
446     log "Nagging ftpteam about NEW/BYHAND packages"
447     dak queue-report | mail -e -s "NEW and BYHAND on $(date +%D)" ftpmaster@ftp-master.debian.org
448     # and one on crufty packages
449     log "Sending information about crufty packages"
450     dak cruft-report > $webdir/cruft-report-daily.txt
451     dak cruft-report -s experimental >> $webdir/cruft-report-daily.txt
452     cat $webdir/cruft-report-daily.txt | mail -e -s "Debian archive cruft report for $(date +%D)" ftpmaster@ftp-master.debian.org
453 }
454
455 function dm() {
456     log "Updating DM html page"
457     $scriptsdir/dm-monitor >$webdir/dm-uploaders.html
458 }
459
460 function bts() {
461     log "Categorizing uncategorized bugs filed against ftp.debian.org"
462     dak bts-categorize
463 }
464
465 function merkel2() {
466     # Push dak@merkel so it syncs the projectb there. Returns immediately, the sync runs detached
467     log "Trigger merkel/flotows projectb sync"
468     ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_merkel_projectb dak@merkel.debian.org sleep 1
469     # Also trigger flotow, the ftpmaster test box
470     ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_flotow_projectb dak@flotow.debconf.org sleep 1
471 }
472
473 function merkel3() {
474     # Push dak@merkel to tell it to sync the dd accessible parts. Returns immediately, the sync runs detached
475     log "Trigger merkels dd accessible parts sync"
476     ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_merkel_ddaccess dak@merkel.debian.org sleep 1
477 }
478
479 function mirrorpush() {
480     log "Starting the mirrorpush"
481     date -u > /srv/ftp.debian.org/web/mirrorstart
482     echo "Using dak v1" >> /srv/ftp.debian.org/web/mirrorstart
483     echo "Running on host $(hostname -f)" >> /srv/ftp.debian.org/web/mirrorstart
484     sudo -H -u archvsync /home/archvsync/runmirrors > ~dak/runmirrors.log 2>&1 &
485 }
486
487 function i18n2() {
488     log "Exporting package data foo for i18n project"
489     STAMP=$(date "+%Y%m%d%H%M")
490     mkdir -p ${scriptdir}/i18n/${STAMP}
491     cd ${scriptdir}/i18n/${STAMP}
492     dak control-suite -l stable > lenny
493     dak control-suite -l testing > squeeze
494     dak control-suite -l unstable > sid
495     echo "${STAMP}" > timestamp
496     gpg --secret-keyring /srv/ftp.debian.org/s3kr1t/dot-gnupg/secring.gpg --keyring /srv/ftp.debian.org/s3kr1t/dot-gnupg/pubring.gpg --no-options --batch --no-tty --armour --default-key 55BE302B --detach-sign -o timestamp.gpg timestamp
497     rm -f md5sum
498     md5sum * > md5sum
499     cd ${webdir}/
500     ln -sfT ${scriptdir}/i18n/${STAMP} i18n
501
502     cd ${scriptdir}
503     find ./i18n -mindepth 1 -maxdepth 1 -mtime +2 -not -name "${STAMP}" -type d -print0 | xargs --no-run-if-empty -0 rm -rf
504 }
505
506 function stats() {
507     log "Updating stats data"
508     cd $configdir
509     $scriptsdir/update-ftpstats $base/log/* > $base/misc/ftpstats.data
510     R --slave --vanilla < $base/misc/ftpstats.R
511     dak stats arch-space > $webdir/arch-space
512     dak stats pkg-nums > $webdir/pkg-nums
513 }
514
515 function aptftpcleanup() {
516     log "Clean up apt-ftparchive's databases"
517     cd $configdir
518     apt-ftparchive -q clean apt.conf
519 }
520
521 function compress() {
522     log "Compress old psql backups"
523     cd $base/backup/
524     find -maxdepth 1 -mindepth 1 -type f -name 'dump_pre_*' -mtime +2 -print0 | xargs -0 --no-run-if-empty rm
525
526     find -maxdepth 1 -mindepth 1 -type f -name 'dump_*' \! -name '*.bz2' \! -name '*.gz' -mmin +720 |
527     while read dumpname; do
528         echo "Compressing $dumpname"
529         bzip2 -9fv "$dumpname"
530     done
531     find -maxdepth 1 -mindepth 1 -type f -name "dumpall_*" \! -name '*.bz2' \! -name '*.gz' -mmin +720 |
532     while read dumpname; do
533         echo "Compressing $dumpname"
534         bzip2 -9fv "$dumpname"
535     done
536     finddup -l -d $base/backup
537 }
538
539 function logstats() {
540     $masterdir/tools/logs.py "$1"
541 }
542
543 # save timestamp when we start
544 function savetimestamp() {
545         NOW=`date "+%Y.%m.%d-%H:%M:%S"`
546         echo ${NOW} > "${dbdir}/dinstallstart"
547 }
548
549 function maillogfile() {
550     cat "$LOGFILE" | mail -s "Log for dinstall run of ${NOW}" cron@ftp-master.debian.org
551 }
552
553 function renamelogfile() {
554     if [ -f "${dbdir}/dinstallstart" ]; then
555         NOW=$(cat "${dbdir}/dinstallstart")
556 #        maillogfile
557         mv "$LOGFILE" "$logdir/dinstall_${NOW}.log"
558         logstats "$logdir/dinstall_${NOW}.log"
559         bzip2 -9 "$logdir/dinstall_${NOW}.log"
560     else
561         error "Problem, I don't know when dinstall started, unable to do log statistics."
562         NOW=`date "+%Y.%m.%d-%H:%M:%S"`
563 #        maillogfile
564         mv "$LOGFILE" "$logdir/dinstall_${NOW}.log"
565         bzip2 -9 "$logdir/dinstall_${NOW}.log"
566     fi
567 }
568
569 function testingsourcelist() {
570     dak ls -s testing -f heidi -r .| egrep 'source$' > ${webdir}/testing.list
571 }
572
573 # do a last run of process-unchecked before dinstall is on.
574 function process_unchecked() {
575     log "Processing the unchecked queue"
576     UNCHECKED_WITHOUT_LOCK="-p"
577     do_unchecked
578     sync_debbugs
579 }