BuildDependsPolicy: Make linux* wait on corresponding -meta package

We want to treat linux-$flavor and linux-meta-$flavor as one set in
britney which goes in together or not at all. We never want to promote
linux-$flavor without the accompanying linux-meta-$flavor.

Introduce a synthetic linux* → linux-meta* build-dependency to enforce
this grouping.
ubuntu/rebased
Iain Lane 5 years ago committed by Iain Lane
parent 25ec509bb4
commit c604cd9974
No known key found for this signature in database
GPG Key ID: E352D5C51C5041D4

@ -959,7 +959,7 @@ class BuildDependsPolicy(BasePolicy):
# analyze the dependency fields (if present)
deps = source_data_srcdist.build_deps_arch
if deps:
if deps or item.package.startswith('linux'):
v = self._check_build_deps(deps, DependencyType.BUILD_DEPENDS, build_deps_info, item,
source_data_tdist, source_data_srcdist, excuse,
get_dependency_solvers=get_dependency_solvers)
@ -1056,6 +1056,34 @@ class BuildDependsPolicy(BasePolicy):
binaries_t_a = binaries_t[arch]
provides_t_a = provides_t[arch]
arch_results[arch] = BuildDepResult.OK
# make linux* wait on corresponding -meta package
if source_name.startswith('linux'):
meta = source_name.replace('linux', 'linux-meta', 1)
try:
meta_src = source_suite.sources[meta]
meta_binaries = meta_src.binaries
# Find a binary to build-depend on
for binary in meta_binaries:
dep_pkg_name = binary.package_name
dep_pkg_version = binary.version
break
new_dep = '%s (>= %s)' % (dep_pkg_name, dep_pkg_version)
if not deps:
deps = new_dep
elif new_dep not in deps:
deps += ', %s' % new_dep
self.logger.info('Synthesizing Build-Depends from %s to %s' % (source_name, new_dep))
except KeyError:
pass
if not deps:
return verdict
# for every dependency block (formed as conjunction of disjunction)
for block_txt in deps.split(','):
block = parse_src_depends(block_txt, False, arch)

@ -2072,6 +2072,59 @@ class AT(TestAutopkgtestBase):
# everything from -meta
self.assertEqual(exc['linux']['policy_info']['autopkgtest'], {'verdict': 'PASS'})
def test_kernel_waits_on_meta(self):
'''linux waits on linux-meta'''
self.data.add('dkms', False, {})
self.data.add('dkms', True, {})
self.data.add('fancy-dkms', False, {'Source': 'fancy', 'Depends': 'dkms (>= 1)'}, testsuite='autopkgtest-pkg-dkms')
self.data.add('fancy-dkms', True, {'Source': 'fancy', 'Depends': 'dkms (>= 1)'}, testsuite='autopkgtest-pkg-dkms')
self.data.add('linux-image-generic', False, {'Version': '0.1', 'Source': 'linux-meta', 'Depends': 'linux-image-1'})
self.data.add('linux-image-1', False, {'Source': 'linux'}, testsuite='autopkgtest')
self.data.add('linux-firmware', False, {'Source': 'linux-firmware'}, testsuite='autopkgtest')
self.swift.set_results({'autopkgtest-testing': {
'testing/i386/f/fancy/20150101_090000@': (0, 'fancy 0.5', tr('passedbefore/1')),
'testing/i386/l/linux/20150101_100000@': (0, 'linux 2', tr('linux-meta/0.2')),
'testing/amd64/l/linux/20150101_100000@': (0, 'linux 2', tr('linux-meta/0.2')),
'testing/i386/l/linux-firmware/20150101_100000@': (0, 'linux-firmware 2', tr('linux-firmware/2')),
'testing/amd64/l/linux-firmware/20150101_100000@': (0, 'linux-firmware 2', tr('linux-firmware/2')),
}})
self.run_it(
[('linux-image-generic', {'Version': '0.2', 'Source': 'linux-meta', 'Depends': 'linux-image-2'}, None),
('linux-image-2', {'Version': '2', 'Source': 'linux'}, 'autopkgtest'),
('linux-firmware', {'Version': '2', 'Source': 'linux-firmware'}, 'autopkgtest'),
],
{'linux-meta': (False, {'fancy': {'amd64': 'RUNNING-ALWAYSFAIL', 'i386': 'RUNNING'},
'linux/2': {'amd64': 'PASS', 'i386': 'PASS'}
}),
# no tests, but should wait on linux-meta
'linux': (False, {}),
# this one does not have a -meta, so don't wait
'linux-firmware': (True, {'linux-firmware/2': {'amd64': 'PASS', 'i386': 'PASS'}}),
},
{'linux': [('excuses', 'Build-Depends(-Arch): linux <a href="#linux-meta">linux-meta</a> (not considered)'),
('dependencies', {'blocked-by': ['linux-meta']})]
}
)
# now linux-meta is ready to go
self.swift.set_results({'autopkgtest-testing': {
'testing/i386/f/fancy/20150101_100000@': (0, 'fancy 1', tr('linux-meta/0.2')),
'testing/amd64/f/fancy/20150101_100000@': (0, 'fancy 1', tr('linux-meta/0.2')),
}})
self.run_it(
[],
{'linux-meta': (True, {'fancy/1': {'amd64': 'PASS', 'i386': 'PASS'},
'linux/2': {'amd64': 'PASS', 'i386': 'PASS'}}),
'linux': (True, {}),
'linux-firmware': (True, {'linux-firmware/2': {'amd64': 'PASS', 'i386': 'PASS'}}),
},
{'linux': [('dependencies', {'migrate-after': ['linux-meta']})]
}
)
################################################################
# Tests for special-cased packages
################################################################

Loading…
Cancel
Save