chiark / gitweb /
merge changes from --ubuntu branch
authorIan Jackson <ian@davenant.greenend.org.uk>
Thu, 25 Oct 2007 17:01:44 +0000 (18:01 +0100)
committerIan Jackson <ian@davenant.greenend.org.uk>
Thu, 25 Oct 2007 17:01:44 +0000 (18:01 +0100)
13 files changed:
Makefile
debian/changelog
debian/host-example-WARNING [new file with mode: 0644]
debian/rules
hosts/cadmium/cfg [moved from hosts/cadmium/onepackage-config with 93% similarity]
hosts/cadmium/cronjob [deleted file]
hosts/cadmium/crontab
hosts/cadmium/lalonde-nightly [deleted file]
hosts/chinstrap/update-suppressions
runner/adt-testreport-cronjob [new file with mode: 0644]
runner/adt-testreport-onepackage.1
runner/adt-testreport-runloop [new file with mode: 0755]
runner/adt-testreport-runloop.1 [new file with mode: 0644]

index 141a970baac7e243d15590e9265c2dbafc3642f1..9f5c45ccbd1468bcc8c6589d1faba6ad3d00aa94 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -26,7 +26,9 @@ programs =    virt-subproc/adt-virt-chroot \
                virt-subproc/adt-virt-xenlvm \
                virt-subproc/adt-virt-null \
                runner/adt-run \
-               runner/adt-testreport-onepackage
+               runner/adt-testreport-onepackage \
+               runner/adt-testreport-runloop \
+               runner/adt-testreport-cronjob
 
 examples =     runner/onepackage-config \
                runner/ubuntu-config
index a88f6079f99339188fa5d4bb16ffecdb96029e28..311e01161f33f4c64ca73a08c9cb5cb188df2f9e 100644 (file)
@@ -1,4 +1,24 @@
-autopkgtest (1.1.0) nowhere; urgency=low
+autopkgtest (1.1.0~) unstable; urgency=low
+
+  * adt-testreport-runloop: manpage
+  * adt-testreport-runloop: better command line parsing
+  * adt-testreport-runloop: removed old lalonde junk
+  * adt-testreport-runloop: replaced `..._ok' vars with sentinel files
+  * hosts/chinstrap/update-suppressions: big comment
+  * adt-testreport-runloop: renamed from hosts/cadmium/lalonde-nightly
+  * hosts/cadmium/onepackage-config: set PATH (was in lalonde-nightly)
+  * adt-testreport-onepackage: many manpage improvements
+  * adt-testreport-runloop: add to Makefile
+  * hosts/* installed as examples with a big fat warning.
+  * adt-testreport-cronjob: renamed from hosts/cadmium/cronjob
+  * adt-testreport-runloop: copyright message.
+  * cfg and adt-testreport-runloop: do not cd in config files.
+  * adt-testreport-runloop: fix handling of test_classes (was xoptslist)
+  * hosts/cadmium/*, debian/rules: onepackage_config renamed to cfg.
+
+ -- Ian Jackson <ian@davenant.greenend.org.uk>  Thu, 18 Oct 2007 17:17:31 +0100
+
+autopkgtest (1.0.9) unstable; urgency=low
 
   * Separate email_sourcepackage_header and email_binarypackage_header
     to allow us to properly file bugs in LP against binary packages built
diff --git a/debian/host-example-WARNING b/debian/host-example-WARNING
new file mode 100644 (file)
index 0000000..a5090a3
--- /dev/null
@@ -0,0 +1,13 @@
+                       *** WARNING ***
+
+       DO NOT BLINDLY CUT AND PASTE FROM THIS EXAMPLE
+
+If you do so you are likely to cause serious disruption to the
+projects whose configurations are kindly reproduced here for your
+enlightenment.
+
+Please in particular be careful with email addresses and URLs.
+
+If you need to copy out of these files please search your resulting
+configuration for the `@' character and check that the addresses are
+all correct and none of them belong to anyone else.
index bf23cec880bb61be536e7e0b627ba73c9c484a5f..37c955ed28092a279e767a47e85201d0114cd695 100755 (executable)
@@ -52,6 +52,21 @@ binary binary-indep: checkdir
        cd debian/$p-$x/etc/userv/services.d && \
                mv -f adt-xenlvm-testbed:dist adt-xenlvm-testbed
 
+       set -e;                                                         \
+         d=debian/autopkgtest/usr/share/doc/autopkgtest/examples/;     \
+         mkdir -p -m755 $$d;                                           \
+         cp --preserve=timestamps -dR hosts $$d;                       \
+         find $$d -name '*~' -o -name '#*#' -exec rm -- '{}' ';';      \
+         for f in $$d/hosts/*; do                                      \
+           cp debian/host-example-WARNING $$f/WARNING;                 \
+           cf=$$f/cfg;                                                 \
+           if test -f $$cf; then                                       \
+             sed -e 's/^/# /' debian/host-example-WARNING >$$cf.new;   \
+             echo >>$$cf.new;  cat $$cf >>$$cf.new;                    \
+             mv -f $$cf.new $$cf;                                      \
+           fi;                                                         \
+         done
+
        set -e; for f in $p $p-$x; do \
                cp debian/copyright debian/$$f/usr/share/doc/$$f/copyright; \
                done
similarity index 93%
rename from hosts/cadmium/onepackage-config
rename to hosts/cadmium/cfg
index 616f06882a94165112a1c5b454a2b1b6fe40668a..4da106e9bc9d9f5df0b346afc64318b4e17c3fc8 100644 (file)
@@ -1,4 +1,6 @@
-cd /home/iwj/adt-play
+PATH=/home/iwj/autopkgtest/runner:/usr/local/sbin:/usr/sbin:$PATH
+export PATH
+
 mirror=http://archive.ubuntu.com/ubuntu
 distro=gutsy
 suite=main
diff --git a/hosts/cadmium/cronjob b/hosts/cadmium/cronjob
deleted file mode 100755 (executable)
index 28d45ce..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-set -e
-cd adt-play
-exec >>overall.log 2>&1
-test -f go
-with-lock-ex -q nightly-lock ./lalonde-nightly max_test_count=100
index 119497e30d314ee778ae0ff5f755155b634908b5..cee9cf0a3561fcf5c8effbcd1b5cc23b41364a9c 100644 (file)
@@ -1,4 +1,4 @@
 # m h dom mon dow       command
-4-59/5 * * * *         adt-play/cronjob
-22 0 * * Mon           savelog -n7 adt-play/overall.log
+4-59/5 * * * *         autopkgtest/runner/adt-testreport-cronjob adt-play cfg
+22 0 * * Mon           savelog -n7 adt-play/var/log adt-play/var/overall.log
 58 7 * * *             adt-play/cleanup
diff --git a/hosts/cadmium/lalonde-nightly b/hosts/cadmium/lalonde-nightly
deleted file mode 100644 (file)
index 70ce91a..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/bin/bash
-
-set -e
-
-PATH=/home/iwj/autopkgtest/runner:/usr/local/sbin:/usr/sbin:$PATH
-export PATH
-
-#any_tests_ok=false
-any_tests_ok=true
-source_tests_ok=true
-binary_tests_ok=true
-gutsy_tests_ok=true
-max_test_count=10
-go_anyway=false
-
-for x in "$@"; do eval "$x"; done
-
-: ${testbed_check_path:=/var/lib/autopkgtest/xenlvm/adt_gutsy/good}
-
-fail () { printf >&2 "%s\n" "$*"; exit 127; }
-progress () { printf "========== %s ==========\n" "$1"; }
-x () { printf "+ %s\n" "$*"; "$@"; }
-x2 () { printf >&2 "+ %s\n" "$*"; "$@"; }
-
-wait_for () {
-       remain=$1; interval=$2; on_not=$3; shift;shift;shift
-       progress "await ($interval/$remain) $*"
-       while true; do
-               date
-               if "$@"; then return; fi
-               remain=$(( $remain - $interval ))
-               if [ $remain -lt 0 ]; then fail "wait timed out for $*"; fi
-               eval "$on_not"
-               sleep $interval
-       done
-}
-
-progress testing
-
-xoptslist="source gutsy, target=source:binary gutsy, target=binary-amd64"
-
-test_count=0
-
-while $any_tests_ok && ($go_anyway || test -f go) && test $test_count -lt $max_test_count; do
-       now=`date`
-       printf "%s" "$now: "
-
-       if ! test -f $testbed_check_path; then
-               printf " testbed broken, bailing\n"
-               break
-       fi
-
-       xopts="${xoptslist%%:*}"
-       xopts_opts="${xopts#*,}"
-       xoptslist="${xoptslist#*:}:$xopts"
-       printf "considering (%s) " "$xopts_opts"
-
-       anybroken=false
-       for x in ${xopts%%,*}; do
-               if eval \$${x}_tests_ok; then :; else
-                       printf "   skipping because of %s\n" "$x"
-                       anybroken=true
-                       break
-               fi
-       done
-       if $anybroken; then continue; fi
-
-       adt-testreport-onepackage /home/iwj/adt-play/onepackage-config \
-               adtrun_extra_opts=--built-binaries-filter=__ \
-               interactive=false $xopts_opts
-
-       test_count=$(( $test_count + 1 ))
-done
-
-progress 'stopping'
index 35f813c4e7e04132134d2b6e90bac188ddbb9a7b..cbd61a5d3c86eaafe18b615f28c0777395c66ba0 100755 (executable)
@@ -1,4 +1,36 @@
 #!/bin/sh
+#
+# This is an absolutely hideous hack.
+#
+# We scrape a suitable launchpad advanced search to find bugs we've
+# previously submitted.
+#
+# We have to run this on chinstrap instead of
+# cadmium because cadmium (being treated as a buildd from a security
+# point of view) is not permitted to make external requests other than
+# to the archive.
+#
+#
+# For the reasons described below this should be replaced ASAP!
+#
+# BUGS
+# 
+# This will break if the list gets too long for LP to display.
+#
+# Also, there is a problem with Duplicate bugs.  See LP #147754.  A
+# tedious workaround is needed for this case.  When an autopkgtest
+# bug, which was marked a duplicate and not the master, is fixed, the
+# duplicate target will be marked fixed.  To work around the LP bug,
+# it is necessary to adjust the status of the autopkgtest-filed bug:
+#  1. unduplicate the bug; 2. set it to Fix Released;
+#  3. duplicate it again.
+#
+# Occasionally LP seems to burp and give us an empty page.
+# This means that a cronmail is generated which reports
+#   NO SUPPRESSIONS - PROBABLY WENT WRONG
+# It is not clear whether the lack of any error message or nonzero
+# exit status from curl is a bug in curl or LP.
+
 
 cd ${0%/*}
 
diff --git a/runner/adt-testreport-cronjob b/runner/adt-testreport-cronjob
new file mode 100644 (file)
index 0000000..833753a
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/bash
+#
+#  This script expects to be given at least two arguments:
+#     directory to cd to
+#     main config file for adt-testreport-runloop which sets PATH if need be
+#     remaining arguments are passed through to a-t-r unchanged
+
+set -e
+cd "$1"
+shift
+. "$1"
+exec >>var/overall.log 2>&1
+test -f go
+with-lock-ex -q cronjob-lock \
+ adt-testreport-runloop max_test_count=100 "$@"
index 2d8286f0f83b5296749100cf442c8f359ee55cf9..234b4cf05c3364b259840cf75f8bfbc0744a0deb 100644 (file)
@@ -8,13 +8,16 @@ adt\-testreport\-onepackage \- choose one package and test it with adt-run
 .SH DESCRIPTION
 .B adt\-testreport\-onepackage
 is a rather ad-hoc script which chooses a package to test, calls
-adt-run, and reports the results.  a-t-o has the following
-functionality:
+adt-run, and reports the results.  In a service installation
+a-t-o is usually called from
+.BR adt\-testreport\-runloop .
 
-a-t-o downloads the Sources file, chooses a package to test (see
-below), downloads its source, invokes adt-run, writes a report
-describing the outcome, and emails the report to some appropriate
-address.
+a-t-o has the following functionality:
+
+a-t-o downloads the Sources or Packages file, chooses a package to
+test (see below), downloads its source, invokes \fBadt\-run\fR, writes a
+report describing the outcome, and emails the report to some
+appropriate address.
 
 \fBWARNING\fR - it is essential to reconfigure this program before
 use, as the supplied examples will \fBsend emails\fR to people who
@@ -29,7 +32,11 @@ Various variables can be set for useful effect.  A selection of the
 most usual ones, with default values, can be seen at the top of the
 a-t-o script itself.  Certain others are mentioned in this manpage.
 There is no exhaustive list and no documentation of the semantics.
-.SH PACKAGE SELECTION
+.SH PACKAGE AND TEST SELECTION
+The configuration variable \fBtarget\fR specifies whether a source
+package, or a binary package, is to be tested.  It should be set to
+\fBsource\fR or \fBbinary\-\fR\fIarch\fR.
+
 a-t-o maintains a record of when each package was last tested, what
 version was tested, and whether the package had any tests.
 
@@ -37,8 +44,8 @@ This record is used to choose which package should be tested next:
 packages which have changed since the last test are preferred, as are
 packages which didn't lack tests last time they were examined.
 
-If the configuration sets \fBpkg\fR to a package name (for example by
-passing \fBpkg=\fR\fIpackage-name\fR), this overrides
+If the configuration sets \fBpkg\fR to a package name (for example if
+\fBpkg=\fR\fIpackage\fR is passed as an argument), this overrides
 a-t-o's package selection algorithm.
 .SH REPORTING
 If \fBinteractive\fR is set to \fBtrue\fR (the default), a-t-o will
@@ -59,6 +66,43 @@ specified with the \fBdest\fR* options (see the
 \fBonepackage-config\fR example configuration file).
 
 Some vague progress information is printed to a-t-o's stdout.
+.SH AUTOMATIC BUG REPORTING
+With suitable configuration, a-t-o can be made to automatically file
+bugs when it detects a problem with a package.
+
+It is necessary to avoid the submission of multiple reports for the
+same problem.  This is done by fetching somehow a list of the open bug
+reports from the relevant bug system and extracting a list of the
+source package names.  These are to be listed in the file named by the
+.B suppresspackages
+configuration variable.  Testing frequency of these source packages is
+reduced, and when a problem is found the email is not sent.
+
+When the system does decide to send an email about a package it will
+normally email the maintainer as determined from the package's control
+file.  To submit bugs instead, set
+.B maintainer_email_override
+to the submission email address for the bug system.  You must also set
+.BR email_sourcepackage_header and email_binarypackage_header
+to appropriate templates.  These templates specify what information
+should be prepended at the top of the body (not the RFC822 header) of
+the mail to be sent.  In these templates
+.B @p
+stands for the package name being tested (the source package name for
+source packages or the binary package name for binary package tests),
+.B @v
+stands for the version being tested,
+.B @s
+stands for the source package name (even if a binary package generated
+by that source is being tested) and
+.B @a
+stands for a single at sign \fB@\fR.
+
+If you an appropriately useable GPG signing key is available, you may
+specify
+.B email_signing_key
+which is passed to gpg's \fB-u\fR option.  Otherwise the email is not
+signed.
 .SH FILES
 The \fBtmp=\fR\fItmp\fR and \fBvar=\fR\fIvar\fR configuration
 variables name two directories which must belong solely to this
@@ -66,7 +110,9 @@ instance of a-t-o.
 
 \fItmp\fR will be erased by a-t-o at startup and then used for
 temporary files.  It is not cleaned up afterwards; it is assumed that
-the next run of a-t-o will do that.
+the next run of a-t-o will do that.  \fItmp\fR should not be made to
+refer to a symlink or mountpoint as a-t-o would break the link or
+attempt to remove the mountpoint; specify a subdirectory instead.
 
 \fIvar\fR is used to record the state, including the information about
 each package used for package selection.  \fIvar\fR\fB/log\fR contains
@@ -83,6 +129,41 @@ other       other unexpected failures including bad usage, disk full, etc.
 
 When a-t-o is run in a loop, the loop should stop pending
 administrator intervention if a-t-o exits nonzero.
+.SH FILES
+.TP
+.IR tmp " (default: \fB./tmp\fR)"
+Temporary directory for working files.  Do not specify /tmp.
+.TP
+.IR var " (default: \fB./var\fR)"
+Storage directory for package testing history, score reports,
+logfiles, etc.
+.TP
+.IB var /lastinfo- target
+Information about the last test and outcome for each package.  This is
+used for package scoring and selection.
+.TP
+.IB var /scores- target
+Report giving the score for each package, and the factors which
+influenced that score.
+.TP
+.IB var /emailed/last- pkg , emailaddress
+The summary of the last message sent to emailaddress about pkg.
+If the configuration variable \fBsuppressrepeatedemails\fR is
+\fBtrue\fR then this is used to ensure that a maintainer (or the
+test installation operator) is only emailed when the situation for a
+particular package changes.
+.TP
+.IB var /emailed/diff- pkg
+Changes to the summary for the last email sent regarding pkg.
+This can be used to find out why an email was sent.
+.TP
+.IB var /log
+Logfile from a-t-o.  If a-t-runloop is being used its stdout output
+often makes a better logfile.
+.TP
+.IB destrsynchead / destdirfin / pkg
+Full logfile and other information is rsync'd here.  It is assumed
+that this area will be published via a webserver.
 .SH SEE ALSO
 \fBadt-run\fR(1).
 .SH BUGS
@@ -97,13 +178,31 @@ adjusted.  This algorithm is not hugely sophisticated.  There should
 be a facility for explicitly requesting retests (other than setting
 \fBpkg\fR); there should be some kind of manual prioritisation queue.
 
-a-t-o cannot choose a distrorelease (eg, dapper, feisty, etch, sid) or
-suite (eg main, non-free, universe); the caller must do that.
+Distributions whose management systems permit archive skew (that is,
+distributions whose contents sometimes contains unsatisfiable
+dependencies) cause pathological behaviour.  a-t-o will prefer to test
+the newly-changed packages and immediately detect and report the
+archive skew as test failures.  It would be better if it would detect
+this situation and not report a failure unless the problem persisted.
+And there ought to be an option to have it not try to test a package
+until its version has been stable for a nominated period.
 
-Configuration by the use of bash fragments is rather unsophisticated.
+If multiple distributions (multiple values of \fBdistro\fR) are used,
+a-t-o will conflate their last-tested versions.  It should use
+separate files.
+
+Cross-architecture testing (where host and target have differing
+Debian architectures) has not been tested and is likely to have
+bugs both in interfaces and implementation.
+
+a-t-o should be capable of automatically closing bug reports if it
+retests a package and finds that the bug is fixed.
 
 The script lacks flexibility in many respects; many additional
 configuration settings and hooks are needed.
+
+There is no facility for sharing test queues across multiple
+machines.  This means that it is difficult to share the testing load.
 .SH AUTHORS AND COPYRIGHT
 This manpage is part of autopkgtest, a tool for testing Debian binary
 packages.  autopkgtest is Copyright (C) 2006-2007 Canonical Ltd and
diff --git a/runner/adt-testreport-runloop b/runner/adt-testreport-runloop
new file mode 100755 (executable)
index 0000000..bda8da4
--- /dev/null
@@ -0,0 +1,101 @@
+#!/bin/bash
+# This file is part of autopkgtest
+# autopkgtest is a tool for testing Debian packages
+#
+# autopkgtest is Copyright (C) 2006 Canonical Ltd.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+# See the file CREDITS for a full list of credits information (often
+# installed as /usr/share/doc/autopkgtest/CREDITS).
+
+set -e
+
+max_test_count=10
+go_anyway=false
+
+for arg in "$@"; do
+       case "$arg" in
+       !*)     arg="${arg#!}" ;;
+       *)      onepackage_args[${#onepackage_args[*]}]="${arg#@}" ;;
+       esac
+
+       case "$arg" in
+       @*)                     ;;
+       *=*)    eval "$arg"     ;;
+       *)      . "$arg"        ;;
+       esac
+done
+
+if [ "x$distro" = x ]; then
+       : ${testbed_check_path:=/var/lib/autopkgtest/xenlvm/adt_${distro}/good}
+else
+       : ${testbed_check_path:=/dev/null}
+fi
+
+if [ "x$test_classes" = x ]; then
+       : ${architecture:=`dpkg --print-architecture`}
+       test_classes="source $distro, target=source : binary $distro, target=binary-$architecture"
+fi
+
+fail () { printf >&2 "%s\n" "$*"; exit 127; }
+progress () { printf "========== %s ==========\n" "$1"; }
+x () { printf "+ %s\n" "$*"; "$@"; }
+x2 () { printf >&2 "+ %s\n" "$*"; "$@"; }
+
+progress testing
+
+test_count=0
+
+while ($go_anyway || test -f go) && test $test_count -lt $max_test_count; do
+       now=`date`
+       printf "%s" "$now: "
+
+       if ! test -e $testbed_check_path; then
+               printf " testbed broken, bailing\n"
+               break
+       fi
+
+       xopts="${test_classes%%:*}"
+       xopts_opts="${xopts#*,}"
+       printf "considering (%s) " "$xopts_opts"
+
+       case "$test_classes" in
+       *:*)    test_classes="${test_classes#*:}:$xopts" ;;
+       esac
+
+       anybroken=false
+       for x in ${xopts%%,*}; do
+               if test -f "stop-$x"; then
+                       printf "   skipping because of %s" "$x"
+                       anybroken=true
+                       break
+               fi
+       done
+       if $anybroken; then
+               printf "\n"
+               continue
+       fi
+
+       adt-testreport-onepackage                               \
+               adtrun_extra_opts=--built-binaries-filter=__    \
+               interactive=false                               \
+               "${onepackage_args[@]}"                         \
+               $xopts_opts
+
+       test_count=$(( $test_count + 1 ))
+done
+
+progress 'stopping'
diff --git a/runner/adt-testreport-runloop.1 b/runner/adt-testreport-runloop.1
new file mode 100644 (file)
index 0000000..d3a64b0
--- /dev/null
@@ -0,0 +1,150 @@
+.TH adt\-testreport\-runloop 1 2007 autopkgtest "Linux Programmer's Manual"
+.SH NAME
+adt\-testreport\-runloop \- repeatedly choose and test packages
+.SH SYNOPSYS
+.B adt\-testreport\-runloop
+.RI [[\fB!@\fR] variable \fB=\fR value |[\fB!@\fR] settings\-file ]...
+.br
+.SH DESCRIPTION
+.B adt\-testreport\-runloop
+is a rather ad-hoc script which repeatedly invokes
+.BR adt\-testreport\-onepackage ;
+it is designed to be invoked from cron.
+
+\fBWARNING\fR - it is essential to reconfigure this program before
+use, as the supplied examples will \fBsend emails\fR to people who
+will become \fBvery upset\fR with you!
+.SH CONFIGURATION
+Command-line arguments containing \fB=\fR are interpreted
+with \fBeval\fR; other arguments are sourced using \fB.\fR,
+in each case interpreted as bash script.
+
+Supplied arguments are both executed by a-t-r and passed through to
+the invocation of a-t-o.  You may prefix an argument with \fB@\fR to
+indicate that it is for a-t-onepackage only, or with \fB!\fR to
+indicate that it is for a-t-runloop only.
+
+Thus the set of variables which can be set is the union of those for
+a-t-runloop itself and those for a-t-onepackage.  See the a-t-o
+manpage for such information about its configuration as is available.
+Configuration fragment authors should bear in mind that both programs
+use \fBset -e\fR.
+
+It is quite permissible to set PATH and other needed environmnet
+variables in the configuration file.
+
+The following variables may be set:
+.TP
+.B distro
+distribution (`suite') to be tested.  There is no default.  This
+variable is used only for the default values of
+.B testbed_check_path
+and
+.BR test_classes .
+However, it is probably a convenient way of specifying the intended
+effect particularly as attempting to do cross-distribution testing in a
+single installation does not work properly right now (see a-t-o's BUGS).
+.TP
+.B max_test_count
+the maximum number of times to invoke a-t-o.  This counts both passed
+and failed tests, but it doesn't count possible runs which were
+suppressed.  Default: 10.
+.TP
+.B go_anway
+Run even though the file \fBgo\fR does not exist.  See SUPPRESSION,
+below.  Default: \fBfalse\fR.
+.TP
+.B architecture
+Used in combination with \fBdistro\fR when calculating the right
+default for test_classes.  The default is the result from
+.BR "dpkg --print-architecture" .
+.TP
+.B testbed_check_path
+If the file named by this variable doesn't exist, a-t-r will exit.
+This avoids it spinning and reporting many immediate failures due to a
+broken testbed.  The default is
+.BI /var/lib/autopkgtest/xenlvm/adt_ distro /good
+if distro is set, which assumes that the Xen-based virtualisation
+system is being used; if distro is not set then default is /dev/null
+which nullifies this feature.
+.TP
+.B test_classes
+Specifies the set of test classes to try, with the details of each
+test class separated by a colon \fB:\fR from the next.  a-t-r will run
+a-t-o once for each listed test class and then return to the beginning
+of the list.
+
+Tests in each class are thus selected approximately equally often.
+(If max_test_count is not a multiple of the number of actual test
+classes then early classes are used slightly more.)
+
+Each test class consists of a set of suppression checks, a comma
+\fB,\fR, and some configuration arguments for a-t-o.  The suppression
+checks are whitespace-separated words; see SUPPRESSION.  The
+configuration arguments are likewise whitespace-separated.  There is
+no provision for passing configuration arguments containing spaces to
+a-t-o.  a-t-o arguments in test classes override other configuration
+settings.
+
+The default is
+.BI "source " distro ", target=source : binary " distro ,
+.BI target=binary- architecture
+which tests binary packages and source packages from the same
+distribution in alternation
+.SH SUPPRESSION
+a-t-r is designed to be enabled and disabled by sentinel files.
+
+Firstly, if the file \fBgo\fR does not exist in its working directory,
+it will stop at the first sensible opportunity.  (See also the
+go_anyway configuration variable.)
+
+Secondly, test classes may specify suppression checks.  For each such
+check \fIclasscheck\fR, a-t-r will test for the existence of
+.BI stop- classcheck
+in its current directory.  If that file exists, it will suppress that
+class of test.  Do not suppress all of the tests without removing
+\fBgo\fR.
+.SH FILES
+.TP
+.BI /var/lib/autopkgtest/xenlvm/adt_ distro /good
+default sentinel file for testbed_check_path.
+.TP
+.B ./go
+Sentinel file indicating that operation should be enabled.
+.TP
+.BI ./stop- classcheck
+Sentinel file indicating that test classes mentioning \fIclasscheck\fR
+should be suppressed.
+.LP
+adt-testreport-runloop does not use any other files directly, but it
+will probably need a configuration file as an argument, and it will
+invoke adt-testreport-onepackage which uses many files in the current
+directory and which invokes an autopkgtest virtualisation server.
+.SH BUGS AND WARNINGS
+\fBIt is essential not to use the example configuration!\fR
+This configuration is likely to send inappropriate emails!
+
+There is no locking.  Whatever invokes a-t-r should take out a lock of
+some kind.  See the example cronjobs provided in
+.B hosts/*/cronjob
+in the source package.
+
+If all of the test classes are suppressed, a-t-r will spin in a tight
+loop looking for something to do.
+
+The
+.B testbed_check_path
+feature is rather ad-hoc.  It would be better to query the
+virtualisation server to be used directly and then suppress the test
+class if relevant.  (But the infinite loop bug would need to be fixed
+too.)
+
+The design precludes detecting attempts to set incorrectly
+named configuration options.
+.SH AUTHORS AND COPYRIGHT
+This manpage is part of autopkgtest, a tool for testing Debian binary
+packages.  autopkgtest is Copyright (C) 2006-2007 Canonical Ltd and
+others.
+
+See \fB/usr/share/doc/autopkgtest/CREDITS\fR for the list of
+contributors and full copying conditions.