From 35086174ba629a73f9c0401dedee1642143c98f1 Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Mon, 7 Dec 2020 11:56:27 -0500 Subject: [PATCH] Pass koji_tag to get_built_rpms_in_module_build() For local builds, required modules are not necessarily in the local database, so the method of looking up the build to find the koji tag doesn't work reliably. However, the caller has the koji_tag - so just pass it in. --- module_build_service/builder/KojiModuleBuilder.py | 13 +++---------- module_build_service/builder/MockModuleBuilder.py | 13 +++---------- module_build_service/builder/base.py | 3 ++- module_build_service/scheduler/submit.py | 2 +- tests/staged_data/testmodule_init.yaml | 1 + tests/test_builder/test_content_generator.py | 2 +- tests/test_builder/test_koji.py | 7 ++++++- 7 files changed, 17 insertions(+), 24 deletions(-) diff --git a/module_build_service/builder/KojiModuleBuilder.py b/module_build_service/builder/KojiModuleBuilder.py index 2db0fe5a..b8044519 100644 --- a/module_build_service/builder/KojiModuleBuilder.py +++ b/module_build_service/builder/KojiModuleBuilder.py @@ -31,7 +31,6 @@ from module_build_service.common.koji import ( ) from module_build_service.common.retry import retry from module_build_service.scheduler import events -from module_build_service.scheduler.db_session import db_session from module_build_service.scheduler.reuse import get_reusable_components, get_reusable_module logging.basicConfig(level=logging.DEBUG) @@ -1167,20 +1166,14 @@ class KojiModuleBuilder(GenericBuilder): return weights @classmethod - def get_built_rpms_in_module_build(cls, mmd): + def get_built_rpms_in_module_build(cls, mmd, koji_tag): """ :param Modulemd mmd: Modulemd to get the built RPMs from. + :koji_tag str: koji_tag corresponding to the module :return: list of NVRs """ - build = models.ModuleBuild.get_build_from_nsvc( - db_session, - mmd.get_module_name(), - mmd.get_stream_name(), - mmd.get_version(), - mmd.get_context() - ) koji_session = get_session(conf, login=False) - rpms = koji_session.listTaggedRPMS(build.koji_tag, latest=True)[0] + rpms = koji_session.listTaggedRPMS(koji_tag, latest=True)[0] nvrs = set(kobo.rpmlib.make_nvr(rpm, force_epoch=True) for rpm in rpms) return list(nvrs) diff --git a/module_build_service/builder/MockModuleBuilder.py b/module_build_service/builder/MockModuleBuilder.py index 0cf5a1db..6d1d468c 100644 --- a/module_build_service/builder/MockModuleBuilder.py +++ b/module_build_service/builder/MockModuleBuilder.py @@ -753,24 +753,17 @@ class MockModuleBuilder(GenericBuilder): self._createrepo(include_module_yaml=True) @classmethod - def get_built_rpms_in_module_build(cls, mmd): + def get_built_rpms_in_module_build(cls, mmd, koji_tag): """ :param Modulemd mmd: Modulemd to get the built RPMs from. :return: list of NVRs """ - build = models.ModuleBuild.get_build_from_nsvc( - db_session, - mmd.get_module_name(), - mmd.get_stream_name(), - mmd.get_version(), - mmd.get_context() - ) - if build.koji_tag.startswith("repofile://"): + if koji_tag.startswith("repofile://"): # Modules from local repository have already the RPMs filled in mmd. return mmd.get_rpm_artifacts() else: koji_session = get_session(conf, login=False) - rpms = koji_session.listTaggedRPMS(build.koji_tag, latest=True)[0] + rpms = koji_session.listTaggedRPMS(koji_tag, latest=True)[0] nvrs = set(kobo.rpmlib.make_nvr(rpm, force_epoch=True) for rpm in rpms) return list(nvrs) diff --git a/module_build_service/builder/base.py b/module_build_service/builder/base.py index d122823b..2800b0f2 100644 --- a/module_build_service/builder/base.py +++ b/module_build_service/builder/base.py @@ -346,9 +346,10 @@ class GenericBuilder(six.with_metaclass(ABCMeta)): raise NotImplementedError() @classmethod - def get_built_rpms_in_module_build(cls, mmd): + def get_built_rpms_in_module_build(cls, mmd, koji_tag): """ :param Modulemd mmd: Modulemd to get the built RPMs from. + :koji_tag str: koji_tag corresponding to the module :return: list of NVRs """ raise NotImplementedError() diff --git a/module_build_service/scheduler/submit.py b/module_build_service/scheduler/submit.py index 06f4f2aa..f7af1f14 100644 --- a/module_build_service/scheduler/submit.py +++ b/module_build_service/scheduler/submit.py @@ -200,7 +200,7 @@ def record_filtered_rpms(mmd): filtered_rpms = [] rpm_filter = req_mmd.get_rpm_filters() if rpm_filter: - built_nvrs = builder.get_built_rpms_in_module_build(req_mmd) + built_nvrs = builder.get_built_rpms_in_module_build(req_mmd, req_data["koji_tag"]) for nvr in built_nvrs: parsed_nvr = kobo.rpmlib.parse_nvr(nvr) if parsed_nvr["name"] in rpm_filter: diff --git a/tests/staged_data/testmodule_init.yaml b/tests/staged_data/testmodule_init.yaml index 37195d0f..0a41c408 100644 --- a/tests/staged_data/testmodule_init.yaml +++ b/tests/staged_data/testmodule_init.yaml @@ -27,6 +27,7 @@ data: stream: f28 version: '3' context: '00000000' + koji_tag: module-f28-build api: rpms: - perl-Tangerine diff --git a/tests/test_builder/test_content_generator.py b/tests/test_builder/test_content_generator.py index 6eb4e39f..591d8fe4 100644 --- a/tests/test_builder/test_content_generator.py +++ b/tests/test_builder/test_content_generator.py @@ -947,7 +947,7 @@ class TestBuild: self.cg.module.modulemd = mmd_to_str(mmd) file_dir = self.cg._prepare_file_directory() with io.open(path.join(file_dir, "modulemd.src.txt"), encoding="utf-8") as mmd: - assert len(mmd.read()) == 1339 + assert len(mmd.read()) == 1385 def test_finalize_mmd_devel(self): self.cg.devel = True diff --git a/tests/test_builder/test_koji.py b/tests/test_builder/test_koji.py index 7f49c932..89cf6db2 100644 --- a/tests/test_builder/test_koji.py +++ b/tests/test_builder/test_koji.py @@ -776,9 +776,14 @@ class TestKojiBuilder: module_build.context = mmd.get_context() db_session.commit() - ret = KojiModuleBuilder.get_built_rpms_in_module_build(mmd) + ret = KojiModuleBuilder.get_built_rpms_in_module_build( + mmd, "module-testmodule-master-20170816080815-37c6c57" + ) assert set(ret) == {"bar-2:1.30-4.el8+1308+551bfa71", "tar-2:1.30-4.el8+1308+551bfa71"} session.assert_not_called() + assert session.listTaggedRPMS.mock_calls == [ + mock.call("module-testmodule-master-20170816080815-37c6c57", latest=True) + ] @pytest.mark.parametrize( "cg_enabled,cg_devel_enabled", [(False, False), (True, False), (True, True)]