chiark / gitweb /
adt-run: Make --quiet really work (Closes: #637350)
[autopkgtest.git] / runner / adt-run
index 4b64ce87f23b1ee194bcf4004a1b7f4a585e6ebd..626e5ad08ff0a38fb80542cef906540e6ad1a583 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/python2.4
+#!/usr/bin/python2.6
 #
 # adt-run is part of autopkgtest
 # autopkgtest is a tool for testing Debian binary packages
@@ -40,6 +40,12 @@ import copy
 from optparse import OptionParser
 signal.signal(signal.SIGINT, signal.SIG_DFL) # undo stupid Python SIGINT thing
 
+try: our_base = os.environ['AUTOPKGTEST_BASE']+'/lib'
+except KeyError: our_base = '/usr/share/autopkgtest/python';
+sys.path.insert(1, our_base)
+
+from Autopkgtest import *
+
 #---------- global variables
 
 tmpdir = None          # pathstring on host
@@ -255,7 +261,7 @@ class AutoFile:
        xtra = ''
        if p.spec is not None:
                xtra = ' spec[%s]=%s' % (p.spec, getattr(p,'spec_tb',None))
-       raise ("internal error: %s (%s)" % (how, str(p)))
+       raise Exception("internal error: %s (%s)" % (how, str(p)))
 
  def _ensure_path(p, tbp):
        if p.path[tbp] is None:
@@ -589,7 +595,7 @@ def parse_args():
                help='run tests as USER (needs root on testbed)')
        pa('','--gain-root',            type='string', dest='gainroot',
                help='prefix debian/rules binary with GAINROOT')
-       pa('-q', '--quiet', action='store_false', dest='quiet', default=False);
+       pa('-q', '--quiet', action='store_true', dest='quiet', default=False);
        pa('-d', '--debug', action='count', dest='debuglevel', default=0);
        pa('','--gnupg-home',           type='string', dest='gnupghome',
                default='~/.autopkgtest/gpg',
@@ -638,7 +644,7 @@ def parse_args():
                elif type(act) == str:
                        act = (act,act)
                else:
-                       raise ("unknown action in list `%s' having"
+                       raise Exception("unknown action in list `%s' having"
                              " type `%s'" % (act, type(act)))
                (pathstr, kindpath) = act
 
@@ -782,17 +788,12 @@ class Testbed:
        if len(pec) < 1: tb.bomb('too few results from print-execute-command')
        cmdl = map(urllib.unquote, pec[0].split(','))
 
-       shellquote_re = regexp.compile('"')
-       def shellquote_arg(s): return "'" + shellquote_re.sub(r"'\''", s) + "'"
-       def shellquote_cmdl(l): return ' '.join(map(shellquote_arg,l))
-
        tb._debug('cmdl = %s' % (`cmdl`))
 
        tb.ec_auxverbscript = TemporaryFile('satdep-auxverb')
        print >>open(tb.ec_auxverbscript.write(),'w'), (
 '''#!/bin/sh
-set -ex
-echo >&2 ": $*"
+set -e
 if [ $# = 2 ] && [ "x$1" = xdpkg-architecture ] && [ "x$2" = x-qDEB_HOST_ARCH ]; then
        # This is a pretty nasty hack.  Hopefully it can go away
        #  eventually.  See #635763.
@@ -1012,11 +1013,12 @@ class Restriction:
  def __init__(r,rname,base): pass
 
 class Restriction_rw_build_tree(Restriction): pass
+class Restriction_build_neeeded(Restriction): pass
 class Restriction_breaks_testbed(Restriction):
  def __init__(r, rname, base):
-       if 'revert' not in testbed.caps:
+       if 'revert-full-system' not in testbed.caps:
                raise Unsupported(f.lno,
-                       'Test breaks testbed but testbed cannot revert')
+       'Test breaks testbed but testbed does not advertise revert-full-system')
 class Restriction_needs_root(Restriction):
  def __init__(r, rname, base):
        if 'root-on-testbed' not in testbed.caps:
@@ -1202,19 +1204,22 @@ def read_control(act, tree, control_override):
                return []
 
        lno = 0
-       def badctrl(m): act.bomb('tests/control line %d: %s' % (lno, m))
-       stz = None      # stz[field_name][index] = (lno, value)
+       def badctrl(m): testbed.bomb('tests/control line %d: %s' % (lno, m))
+       stz = { }       # stz[field_name][index] = (lno, value)
                        # special field names:
                        # stz[' lno'] = number
                        # stz[' tests'] = list of Test objects
+                       # empty dictionary means we're between stanzas
+       def in_stanza(stz):
+               return stz.has_key(' lno')
        def end_stanza(stz):
-               if stz is None: return
+               if not in_stanza(stz): return
                stz[' errs'] = 0
-               stanzas.append(stz)
-               stz = None
+               stanzas.append(stz.copy())
+               stz.clear()
                hcurrent = None
 
-       initre = regexp.compile('([A-Z][-0-9a-z]*)\s*\:\s*(.*)$')
+       initre = regexp.compile('([A-Z][-0-9a-zA-Z]*)\s*\:\s*(.*)$')
        while 1:
                l = control.readline()
                if not l: break
@@ -1226,7 +1231,7 @@ def read_control(act, tree, control_override):
                if initmat:
                        (fname, l) = initmat.groups()
                        fname = string.capwords(fname)
-                       if stz is None:
+                       if not in_stanza(stz):
                                stz = { ' lno': lno, ' tests': [] }
                        if not stz.has_key(fname): stz[fname] = [ ]
                        hcurrent = stz[fname]
@@ -1663,12 +1668,8 @@ def build_source(act, control_override):
                stanzas = read_control(act, result_pwd_af, control_override)
                for stanza in stanzas:
                        for t in stanza[' tests']:
-                               if 'no-build-needed' not in t.feature_names:
+                               if 'build-needed' in t.restriction_names:
                                        build_needed('test %s' % t.tname)
-                               for d in t.depends:
-                                       if '@' in d:
-                                               build_needed('test %s '
-                                                'dependency %s' % (t.tname,d))
 
                debug_b('build not needed')
                built = False