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