Process force-skiptest hint before requesting tests

If a package has a force-skiptest hint, don't request autopkgtests for it.
This commit is contained in:
Martin Pitt 2015-12-04 17:45:06 +01:00
parent ea1c335992
commit fc4ea9d159
2 changed files with 35 additions and 24 deletions

View File

@ -1929,10 +1929,33 @@ class Britney(object):
if e.ver[1] == "-":
continue
autopkgtest_excuses.append(e)
autopkgtest_packages.append((e.name, e.ver[1]))
# don't request tests if we have a force-skiptest hint
hints = self.hints.search('force-skiptest', package=e.name)
hints.extend(self.hints.search('force', package=e.name))
forces = [
x for x in hints
if same_source(e.ver[1], x.version) ]
if not forces:
autopkgtest_packages.append((e.name, e.ver[1]))
autopkgtest.request(autopkgtest_packages, autopkgtest_excludes)
cloud_url = "http://autopkgtest.ubuntu.com/packages/%(h)s/%(s)s/%(r)s/%(a)s"
for e in autopkgtest_excuses:
# do we skip autopkgtests altogether?
hints = self.hints.search('force-skiptest', package=e.name)
hints.extend(self.hints.search('force', package=e.name))
forces = [
x for x in hints
if same_source(e.ver[1], x.version) ]
if forces:
e.force()
e.addreason('skiptest')
e.addhtml(
"Should wait for tests relating to %s %s, but "
"forced by %s" %
(e.name, e.ver[1], forces[0].user))
continue
adtpass = True
for passed, adtsrc, adtver, arch_status in autopkgtest.results(
e.name, e.ver[1]):
@ -1962,25 +1985,12 @@ class Britney(object):
if not passed:
adtpass = False
if not adtpass and e.is_valid:
hints = self.hints.search('force-skiptest', package=e.name)
hints.extend(self.hints.search('force', package=e.name))
forces = [
x for x in hints
if same_source(e.ver[1], x.version) ]
if forces:
e.force()
e.addreason('skiptest')
e.addhtml(
"Should wait for tests relating to %s %s, but "
"forced by %s" %
(e.name, e.ver[1], forces[0].user))
else:
upgrade_me.remove(e.name)
unconsidered.append(e.name)
e.addhtml("Not considered")
e.addreason("autopkgtest")
e.is_valid = False
if not adtpass:
upgrade_me.remove(e.name)
unconsidered.append(e.name)
e.addhtml("Not considered")
e.addreason("autopkgtest")
e.is_valid = False
if (getattr(self.options, "boottest_enable", "no") == "yes" and
self.options.series):

View File

@ -1255,16 +1255,17 @@ class TestAutoPkgTest(TestBase):
self.do_test(
[('libgreen1', {'Version': '2', 'Source': 'green', 'Depends': 'libc6'}, 'autopkgtest')],
{'green': (True, {'green 2': {'amd64': 'RUNNING-ALWAYSFAIL', 'i386': 'RUNNING'},
'lightgreen 1': {'amd64': 'RUNNING-ALWAYSFAIL', 'i386': 'RUNNING-ALWAYSFAIL'},
'darkgreen 1': {'amd64': 'RUNNING-ALWAYSFAIL', 'i386': 'RUNNING-ALWAYSFAIL'},
}),
{'green': (True, {}),
},
{'green': [('old-version', '1'), ('new-version', '2'),
('forced-reason', 'skiptest'),
('excuses', 'Should wait for tests relating to green 2, but forced by pitti')]
})
# should not issue test requests as it's hinted anyway
self.assertEqual(self.amqp_requests, set())
self.assertEqual(self.pending_requests, {})
def test_hint_force_skiptest_different_version(self):
'''force-skiptest hint with non-matching version'''