mirror of
https://pagure.io/fm-orchestrator.git
synced 2026-04-02 02:11:19 +08:00
Don't check for compatibile modules during component reuse if allow_only_compatible_base_modules is false
Addresses #1409
This commit is contained in:
@@ -93,11 +93,20 @@ def get_reusable_module(db_session, module):
|
||||
mmd = module.mmd()
|
||||
previous_module_build = None
|
||||
|
||||
base_mmds = get_base_module_mmds(db_session, mmd)["ready"]
|
||||
# Sort the base_mmds based on the stream version, higher version first.
|
||||
base_mmds.sort(
|
||||
key=lambda mmd: models.ModuleBuild.get_stream_version(mmd.get_stream_name(), False),
|
||||
reverse=True)
|
||||
if conf.allow_only_compatible_base_modules:
|
||||
log.debug("Checking for compatible base modules")
|
||||
base_mmds = get_base_module_mmds(db_session, mmd)["ready"]
|
||||
# Sort the base_mmds based on the stream version, higher version first.
|
||||
base_mmds.sort(
|
||||
key=lambda mmd: models.ModuleBuild.get_stream_version(mmd.get_stream_name(), False),
|
||||
reverse=True)
|
||||
else:
|
||||
log.debug("Skipping the check for compatible base modules")
|
||||
base_mmds = []
|
||||
for br in module.buildrequires:
|
||||
if br.name in conf.base_module_names:
|
||||
base_mmds.append(br.mmd())
|
||||
|
||||
for base_mmd in base_mmds:
|
||||
mbs_xmd = mmd.get_xmd()["mbs"]
|
||||
if base_mmd.get_module_name() not in mbs_xmd["buildrequires"]:
|
||||
|
||||
@@ -1616,15 +1616,17 @@ class TestUtilsModuleReuse:
|
||||
assert reusable_module.id == build_module.reused_module_id
|
||||
assert reusable_module.id == reused_module.id
|
||||
|
||||
@pytest.mark.parametrize('allow_ocbm', (True, False))
|
||||
@patch(
|
||||
"module_build_service.config.Config.allow_only_compatible_base_modules",
|
||||
new_callable=mock.PropertyMock, return_value=False
|
||||
new_callable=mock.PropertyMock,
|
||||
)
|
||||
def test_get_reusable_module_use_latest_build(self, cfg, db_session):
|
||||
def test_get_reusable_module_use_latest_build(self, cfg, db_session, allow_ocbm):
|
||||
"""
|
||||
Test that the `get_reusable_module` tries to reuse the latest module in case when
|
||||
multiple modules can be reused.
|
||||
multiple modules can be reused allow_only_compatible_base_modules is True.
|
||||
"""
|
||||
cfg.return_value = allow_ocbm
|
||||
# Set "fedora" virtual stream to platform:f28.
|
||||
platform_f28 = db_session.query(models.ModuleBuild).filter_by(name="platform").one()
|
||||
mmd = platform_f28.mmd()
|
||||
@@ -1646,7 +1648,7 @@ class TestUtilsModuleReuse:
|
||||
# stream version will be higher than the previous one. Also set its buildrequires
|
||||
# to platform:f29.
|
||||
latest_module = db_session.query(models.ModuleBuild).filter_by(
|
||||
name="testmodule").filter_by(state=models.BUILD_STATES["ready"]).one()
|
||||
name="testmodule", state=models.BUILD_STATES["ready"]).one()
|
||||
# This is used to clone the ModuleBuild SQLAlchemy object without recreating it from
|
||||
# scratch.
|
||||
db_session.expunge(latest_module)
|
||||
@@ -1677,4 +1679,9 @@ class TestUtilsModuleReuse:
|
||||
reusable_module = module_build_service.utils.get_reusable_module(
|
||||
db_session, module)
|
||||
|
||||
assert reusable_module.id == latest_module.id
|
||||
if allow_ocbm:
|
||||
assert reusable_module.id == latest_module.id
|
||||
else:
|
||||
first_module = db_session.query(models.ModuleBuild).filter_by(
|
||||
name="testmodule", state=models.BUILD_STATES["ready"]).first()
|
||||
assert reusable_module.id == first_module.id
|
||||
|
||||
Reference in New Issue
Block a user