chiark / gitweb /
rename "reset" testbed command to "revert"
[autopkgtest.git] / runner / adt-run
index c203ec4edf5030072b5813c59e32b5d93a29fbc9..0200d34b50e9f68c1e3940b18af542d4707020b0 100755 (executable)
@@ -551,6 +551,7 @@ class Testbed:
        tb.scratch = None
        tb.modified = False
        tb.blamed = []
+       tb._ephemeral = []
        tb._debug('init')
  def _debug(tb, m):
        debug('** '+m)
@@ -605,11 +606,14 @@ class Testbed:
        if 'revert' in tb.caps and (tb.modified or
            [d for d in tb.deps_processed if d not in deps_new]):
                tb._debug('reset **')
-               tb.command('reset')
+               tb.command('revert')
                tb.blamed = []
+               for af in tb._ephemeral: af.invalidate(True)
        binaries.publish()
        tb.modified = False
        tb._install_deps(deps_new)
+ def register_ephemeral(tb, af):
+       tb._ephemeral.append(af)
  def _install_deps(tb, deps_new):
        tb._debug(' installing dependencies '+`deps_new`)
        tb.deps_processed = deps_new
@@ -744,7 +748,7 @@ class Restriction_breaks_testbed(Restriction):
  def __init__(r, rname, base):
        if 'revert' not in testbed.caps:
                raise Unsupported(f.lno,
-                       'Test breaks testbed but testbed cannot reset')
+                       'Test breaks testbed but testbed cannot revert')
 
 class Field_Restrictions(FieldBase):
  def parse(f):
@@ -971,17 +975,17 @@ def cleanup():
 
 def determine_package(act):
        cmd = 'dpkg-deb --info --'.split(' ')+[act.af.read(),'control']
-       running = Popen(cmd, stdout=PIPE)
+       running = subprocess.Popen(cmd, stdout=subprocess.PIPE)
        output = running.communicate()[0]
        rc = running.wait()
        if rc: badpkg('failed to parse binary package, code %d' % rc)
        re = regexp.compile('^\s*Package\s*:\s*([0-9a-z][-+.0-9a-z]*)\s*$')
        act.pkg = None
-       for l in '\n'.split(output):
-               m = re.match(output)
+       for l in output.split('\n'):
+               m = re.match(l)
                if not m: continue
                if act.pkg: badpkg('two Package: lines in control file')
-               act.pkg = m.groups
+               act.pkg = m.groups()[0]
        if not act.pkg: badpkg('no good Package: line in control file')
 
 class Binaries:
@@ -1115,6 +1119,7 @@ END
   apt-ftparchive packages . >Packages
   gzip <Packages >Packages.gz
   apt-ftparchive release . >Release
+  rm -f Release.gpg
   gpg --homedir="$2" --batch --detach-sign --armour -o Release.gpg Release
   gpg --homedir="$2" --batch --export >archive-key.pgp
                '''
@@ -1287,8 +1292,8 @@ def build_source(act):
                                True)
        if act.ah['dsc_tests']:
                act.tests_tree.read()
-               act.tests_tree.invalidate(True)
-               act.work.invalidate(True)
+               testbed.register_ephemeral(act.work)
+               testbed.register_ephemeral(act.tests_tree)
 
        act.blamed = copy.copy(testbed.blamed)
 
@@ -1351,9 +1356,9 @@ def process_actions():
 
                testbed.prepare([])
                if act.kind == 'deb':
-                       blame('arg:'+act.af.spec)
+                       testbed.blame('arg:'+act.af.spec)
                        determine_package(act)
-                       blame('deb:'+act.pkg)
+                       testbed.blame('deb:'+act.pkg)
                        binaries.register(act,act.pkg,act.af,
                                'forbuilds',testbed.blamed)
                if act.kind == 'dsc':