From c7054885052b31de0a83a9d795a6e121c76a378e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= Date: Mon, 9 Apr 2018 09:43:31 +0200 Subject: [PATCH] Add all packages to whitelist for hybrid variant MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If a variant contains both modules and comps groups, we need to include builds from the compose tag in the package whitelist. However only packages that are not already provided by any module should be added. JIRA: COMPOSE-2435 Signed-off-by: Lubomír Sedlář --- pungi/phases/gather/methods/method_deps.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/pungi/phases/gather/methods/method_deps.py b/pungi/phases/gather/methods/method_deps.py index b125fe1e..f6784f12 100644 --- a/pungi/phases/gather/methods/method_deps.py +++ b/pungi/phases/gather/methods/method_deps.py @@ -42,7 +42,7 @@ class GatherMethodDeps(pungi.phases.gather.method.GatherMethodBase): write_pungi_config(self.compose, arch, variant, packages, groups, filter_packages, multilib_whitelist, multilib_blacklist, fulltree_excludes=fulltree_excludes, prepopulate=prepopulate, - source_name=self.source_name) + source_name=self.source_name, package_sets=package_sets) result, missing_deps = resolve_deps(self.compose, arch, variant, source_name=self.source_name) raise_on_invalid_sigkeys(arch, variant, package_sets, result) check_deps(self.compose, arch, variant, missing_deps) @@ -81,7 +81,7 @@ def _format_packages(pkgs): def write_pungi_config(compose, arch, variant, packages, groups, filter_packages, multilib_whitelist, multilib_blacklist, fulltree_excludes=None, - prepopulate=None, source_name=None): + prepopulate=None, source_name=None, package_sets=None): """write pungi config (kickstart) for arch/variant""" pungi_wrapper = PungiWrapper() pungi_cfg = compose.paths.work.pungi_conf(variant=variant, arch=arch, source_name=source_name) @@ -115,6 +115,22 @@ def write_pungi_config(compose, arch, variant, packages, groups, filter_packages package_whitelist.add( '{0.name}-{1}:{0.version}-{0.release}'.format(rpm_obj, rpm_obj.epoch or 0)) + # If the variant contains just modules or just comps groups, the pkgset + # is sufficient and contains all necessary packages. + + if variant.groups and variant.modules is not None and package_sets: + # The variant is hybrid. The modular builds are already available. + # We need to add packages from base tag, but only if they are not + # already on the whitelist. + package_names = set(p.rsplit('-', 2)[0] for p in package_whitelist) + for i in get_valid_arches(arch, multilib=multilib, add_noarch=True, add_src=True): + for rpm_obj in package_sets[arch].rpms_by_arch.get(i, []): + if rpm_obj.name in package_names: + # We already have a package with this name in the whitelist, skip it. + continue + package_whitelist.add( + '{0.name}-{1}:{0.version}-{0.release}'.format(rpm_obj, rpm_obj.epoch or 0)) + pungi_wrapper.write_kickstart( ks_path=pungi_cfg, repos=repos, groups=groups, packages=packages_str, exclude_packages=filter_packages_str,