mirror of
https://pagure.io/fm-orchestrator.git
synced 2026-04-02 10:20:31 +08:00
Add conflicts in module-build-macros for NEVRAs found in handle_collisions_with_base_module_rpms
PR #1331 made the assumption that the Ursa Major ursine RPMs were at xmd["mbs"]["ursine_rpms"], but they are actually at xmd["mbs"]["buildrequires"]["platform"]["ursine_rpms"]. This commit handles the ursine RPMs generated by handle_collisions_with_base_module_rpms separately since the base module the RPMs came from are not tracked in that function.
This commit is contained in:
@@ -359,6 +359,18 @@ class KojiModuleBuilder(GenericBuilder):
|
||||
)
|
||||
)
|
||||
|
||||
# These are generated from handle_collisions_with_base_module_rpms and are different than
|
||||
# the stream collision modules
|
||||
ursine_rpms = mmd.get_xmd()["mbs"].get("ursine_rpms")
|
||||
if ursine_rpms:
|
||||
log.debug("Adding %d ursine RPM(s) to the conflicts", len(ursine_rpms))
|
||||
filter_conflicts.append(
|
||||
"\n# Filter out base module RPMs that overlap with the RPMs in the buildrequired "
|
||||
"modules"
|
||||
)
|
||||
for ursine_rpm in ursine_rpms:
|
||||
filter_conflicts.append(KojiModuleBuilder.format_conflicts_line(ursine_rpm))
|
||||
|
||||
spec_content = textwrap.dedent("""
|
||||
%global dist {disttag}
|
||||
%global modularitylabel {module_name}:{module_stream}:{module_version}:{module_context}
|
||||
|
||||
@@ -264,14 +264,9 @@ def handle_collisions_with_base_module_rpms(mmd, arches):
|
||||
if rpm_name in name_to_nevras:
|
||||
conflicts = conflicts | name_to_nevras[rpm_name]
|
||||
|
||||
if not conflicts:
|
||||
return
|
||||
|
||||
# Append the conflicting NEVRAs to `ursine_rpms`, so the Conflicts are later generated for them
|
||||
# Add the conflicting NEVRAs to `ursine_rpms` so the Conflicts are later generated for them
|
||||
# in the KojiModuleBuilder.
|
||||
if not xmd["mbs"].get("ursine_rpms"):
|
||||
xmd["mbs"]["ursine_rpms"] = []
|
||||
xmd["mbs"]["ursine_rpms"] = list(set(xmd["mbs"]["ursine_rpms"]).union(conflicts))
|
||||
xmd["mbs"]["ursine_rpms"] = list(conflicts)
|
||||
mmd.set_xmd(xmd)
|
||||
|
||||
|
||||
|
||||
@@ -187,9 +187,9 @@ def init(config, db_session, msg):
|
||||
if conf.system in ["koji", "test"] and not defaults_added:
|
||||
handle_stream_collision_modules(db_session, mmd)
|
||||
|
||||
# Extends the xmd["mbs"]["ursine_rpms"] with RPMs from base module which conflict
|
||||
# with the RPMs from module. We need to prefer modular RPMs over base module RPMs
|
||||
# even if their NVR is lower.
|
||||
# Sets xmd["mbs"]["ursine_rpms"] with RPMs from the buildrequired base modules which
|
||||
# conflict with the RPMs from other buildrequired modules. This is done to prefer modular
|
||||
# RPMs over base module RPMs even if their NVR is lower.
|
||||
handle_collisions_with_base_module_rpms(mmd, arches)
|
||||
|
||||
mmd = record_filtered_rpms(db_session, mmd)
|
||||
|
||||
@@ -969,6 +969,7 @@ class TestGetDistTagSRPM:
|
||||
"ursine_rpms": ["foo-0:1.0-1.fc28", "bar-0:2.0-1.fc28"],
|
||||
},
|
||||
},
|
||||
"ursine_rpms": ["pizza-0:4.0-1.fc32", "spaghetti-0:3.0-1.fc32"],
|
||||
"koji_tag": "module-{name}-{stream}-{version}-{context}".format(**self.module_nsvc),
|
||||
}
|
||||
}
|
||||
@@ -1006,6 +1007,11 @@ class TestGetDistTagSRPM:
|
||||
with open(self.spec_file, "r") as f:
|
||||
content = f.read()
|
||||
|
||||
# Stream collision ursine RPMs
|
||||
assert "# modulefoo-s-v-c\n" in content
|
||||
for nevr in ["foo-0:1.0-1.fc28", "bar-0:2.0-1.fc28"]:
|
||||
assert KojiModuleBuilder.format_conflicts_line(nevr) + "\n" in content
|
||||
|
||||
# Conflicting ursine RPMs
|
||||
for nevr in ["pizza-0:4.0-1.fc32", "spaghetti-0:3.0-1.fc32"]:
|
||||
assert KojiModuleBuilder.format_conflicts_line(nevr) + "\n" in content
|
||||
|
||||
@@ -222,11 +222,9 @@ def test_get_rawhide_version(mock_koji_builder):
|
||||
assert default_modules._get_rawhide_version() == "f32"
|
||||
|
||||
|
||||
@pytest.mark.parametrize("ursine_rpms", ([], ["httpd-0:2.4-5.el8.x86_64"]))
|
||||
@patch("module_build_service.scheduler.default_modules.KojiModuleBuilder.get_session")
|
||||
@patch("module_build_service.scheduler.default_modules._get_rpms_from_tags")
|
||||
def test_handle_collisions_with_base_module_rpms(
|
||||
mock_grft, mock_get_session, ursine_rpms):
|
||||
def test_handle_collisions_with_base_module_rpms(mock_grft, mock_get_session):
|
||||
"""
|
||||
Test that handle_collisions_with_base_module_rpms will add conflicts for NEVRAs in the
|
||||
modulemd.
|
||||
@@ -236,10 +234,6 @@ def test_handle_collisions_with_base_module_rpms(
|
||||
xmd["mbs"]["buildrequires"]["platform"]["koji_tag"] = "module-el-build"
|
||||
xmd["mbs"]["buildrequires"]["python"] = {"koji_tag": "module-python27"}
|
||||
xmd["mbs"]["buildrequires"]["bash"] = {"koji_tag": "module-bash"}
|
||||
if ursine_rpms:
|
||||
# There might already be some ursine RPMs set from another methods.
|
||||
# We must check they are not overwritten.
|
||||
xmd["mbs"]["ursine_rpms"] = ursine_rpms
|
||||
mmd.set_xmd(xmd)
|
||||
|
||||
bm_rpms = {
|
||||
@@ -261,11 +255,11 @@ def test_handle_collisions_with_base_module_rpms(
|
||||
|
||||
mock_get_session.assert_called_once()
|
||||
xmd_mbs = mmd.get_xmd()["mbs"]
|
||||
assert set(xmd_mbs["ursine_rpms"]) == set(ursine_rpms).union({
|
||||
assert set(xmd_mbs["ursine_rpms"]) == {
|
||||
"bash-0:4.4.19-7.el8.aarch64",
|
||||
"python2-tools-0:2.7.16-11.el8.aarch64",
|
||||
"python2-tools-0:2.7.16-11.el8.x86_64",
|
||||
})
|
||||
}
|
||||
assert mock_grft.call_count == 2
|
||||
# We can't check the calls directly because the second argument is a set converted to a list,
|
||||
# so the order can't be determined ahead of time.
|
||||
|
||||
Reference in New Issue
Block a user