init: Filter comps for modular variants with tags
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ář <lsedlar@redhat.com>
This commit is contained in:
parent
8cd19605bd
commit
479849042f
@ -165,12 +165,18 @@ def write_variant_comps(compose, arch, variant):
|
|||||||
run(cmd)
|
run(cmd)
|
||||||
|
|
||||||
comps = CompsWrapper(comps_file)
|
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
|
# Filter groups if the variant has some, or it's a modular variant, or
|
||||||
# is not a base variant.
|
# 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)
|
unmatched = comps.filter_groups(variant.groups)
|
||||||
for grp in unmatched:
|
for grp in unmatched:
|
||||||
compose.log_warning(UNMATCHED_GROUP_MSG % (variant.uid, arch, grp))
|
compose.log_warning(UNMATCHED_GROUP_MSG % (variant.uid, arch, grp))
|
||||||
|
|
||||||
contains_all = not variant.groups and not variant.environments
|
contains_all = not variant.groups and not variant.environments
|
||||||
if compose.conf["comps_filter_environments"] and not contains_all:
|
if compose.conf["comps_filter_environments"] and not contains_all:
|
||||||
# We only want to filter environments if it's enabled by configuration
|
# We only want to filter environments if it's enabled by configuration
|
||||||
|
@ -79,6 +79,7 @@ class MockVariant(mock.Mock):
|
|||||||
self.variants = {}
|
self.variants = {}
|
||||||
self.pkgsets = set()
|
self.pkgsets = set()
|
||||||
self.modules = None
|
self.modules = None
|
||||||
|
self.modular_koji_tags = None
|
||||||
self.name = name
|
self.name = name
|
||||||
self.nsvc_to_pkgset = defaultdict(lambda: mock.Mock(rpms_by_arch={}))
|
self.nsvc_to_pkgset = defaultdict(lambda: mock.Mock(rpms_by_arch={}))
|
||||||
|
|
||||||
|
@ -497,6 +497,45 @@ class TestWriteVariantComps(PungiTestCase):
|
|||||||
)
|
)
|
||||||
self.assertEqual(comps.write_comps.mock_calls, [mock.call()])
|
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.run")
|
||||||
@mock.patch("pungi.phases.init.CompsWrapper")
|
@mock.patch("pungi.phases.init.CompsWrapper")
|
||||||
def test_run_report_unmatched(self, CompsWrapper, run):
|
def test_run_report_unmatched(self, CompsWrapper, run):
|
||||||
|
Loading…
Reference in New Issue
Block a user