From 479849042f118508a7d4ee27a7444c002ac9e119 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= Date: Thu, 3 Nov 2022 11:05:53 +0100 Subject: [PATCH] init: Filter comps for modular variants with tags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modular variants can either be specified by a list of modules, or by a list of Koji tags. In terms of comps preprocessing there should not be any difference between the two. Resolves: https://pagure.io/pungi/issue/1640 Signed-off-by: Lubomír Sedlář --- pungi/phases/init.py | 12 +++++++++--- tests/helpers.py | 1 + tests/test_initphase.py | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/pungi/phases/init.py b/pungi/phases/init.py index a78c0dc7..a99bc595 100644 --- a/pungi/phases/init.py +++ b/pungi/phases/init.py @@ -165,12 +165,18 @@ def write_variant_comps(compose, arch, variant): run(cmd) comps = CompsWrapper(comps_file) - if variant.groups or variant.modules is not None or variant.type != "variant": - # Filter groups if the variant has some, or it's a modular variant, or - # is not a base variant. + # Filter groups if the variant has some, or it's a modular variant, or + # is not a base variant. + if ( + variant.groups + or variant.modules is not None + or variant.modular_koji_tags is not None + or variant.type != "variant" + ): unmatched = comps.filter_groups(variant.groups) for grp in unmatched: compose.log_warning(UNMATCHED_GROUP_MSG % (variant.uid, arch, grp)) + contains_all = not variant.groups and not variant.environments if compose.conf["comps_filter_environments"] and not contains_all: # We only want to filter environments if it's enabled by configuration diff --git a/tests/helpers.py b/tests/helpers.py index 7aa7452d..e221b839 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -79,6 +79,7 @@ class MockVariant(mock.Mock): self.variants = {} self.pkgsets = set() self.modules = None + self.modular_koji_tags = None self.name = name self.nsvc_to_pkgset = defaultdict(lambda: mock.Mock(rpms_by_arch={})) diff --git a/tests/test_initphase.py b/tests/test_initphase.py index 1fb80c48..2ddb82ca 100644 --- a/tests/test_initphase.py +++ b/tests/test_initphase.py @@ -497,6 +497,45 @@ class TestWriteVariantComps(PungiTestCase): ) self.assertEqual(comps.write_comps.mock_calls, [mock.call()]) + @mock.patch("pungi.phases.init.run") + @mock.patch("pungi.phases.init.CompsWrapper") + def test_run_filter_for_modular_koji_tags(self, CompsWrapper, run): + compose = DummyCompose(self.topdir, {}) + variant = compose.variants["Server"] + variant.groups = [] + variant.modular_koji_tags = ["f38-modular"] + comps = CompsWrapper.return_value + comps.filter_groups.return_value = [] + + init.write_variant_comps(compose, "x86_64", variant) + + self.assertEqual( + run.mock_calls, + [ + mock.call( + [ + "comps_filter", + "--arch=x86_64", + "--keep-empty-group=conflicts", + "--keep-empty-group=conflicts-server", + "--variant=Server", + "--output=%s/work/x86_64/comps/comps-Server.x86_64.xml" + % self.topdir, + self.topdir + "/work/global/comps/comps-global.xml", + ] + ) + ], + ) + self.assertEqual( + CompsWrapper.call_args_list, + [mock.call(self.topdir + "/work/x86_64/comps/comps-Server.x86_64.xml")], + ) + self.assertEqual(comps.filter_groups.call_args_list, [mock.call([])]) + self.assertEqual( + comps.filter_environments.mock_calls, [mock.call(variant.environments)] + ) + self.assertEqual(comps.write_comps.mock_calls, [mock.call()]) + @mock.patch("pungi.phases.init.run") @mock.patch("pungi.phases.init.CompsWrapper") def test_run_report_unmatched(self, CompsWrapper, run):