From f3c86541b6dcee54f62785abe8394120b06e366b Mon Sep 17 00:00:00 2001 From: Valerij Maljulin Date: Mon, 19 Nov 2018 16:22:50 +0100 Subject: [PATCH] Do not retreive rpm info if there is an empty rpm list. Fixes #1078 Signed-off-by: Valerij Maljulin --- .../builder/MockModuleBuilder.py | 35 ++++++++++--------- tests/test_builder/test_mock.py | 16 +++++++++ 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/module_build_service/builder/MockModuleBuilder.py b/module_build_service/builder/MockModuleBuilder.py index 355b9377..2f912c1d 100644 --- a/module_build_service/builder/MockModuleBuilder.py +++ b/module_build_service/builder/MockModuleBuilder.py @@ -178,26 +178,27 @@ class MockModuleBuilder(GenericBuilder): for f in os.listdir(self.resultsdir) if f.endswith(".rpm")] - output = subprocess.check_output(['rpm', - '--queryformat', - '%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n', - '-qp'] + rpm_files, - cwd=self.resultsdir, - universal_newlines=True) - nevras = output.strip().split('\n') - if len(nevras) != len(rpm_files): - raise RuntimeError("rpm -qp returned an unexpected number of lines") + if rpm_files: + output = subprocess.check_output(['rpm', + '--queryformat', + '%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n', + '-qp'] + rpm_files, + cwd=self.resultsdir, + universal_newlines=True) + nevras = output.strip().split('\n') + if len(nevras) != len(rpm_files): + raise RuntimeError("rpm -qp returned an unexpected number of lines") - for rpm_file, nevra in zip(rpm_files, nevras): - name, epoch, version, release, arch = nevra.split() + for rpm_file, nevra in zip(rpm_files, nevras): + name, epoch, version, release, arch = nevra.split() - if m1.last_batch_id() == m1.batch: - # If RPM is filtered-out, do not add it to artifacts list. - if name in m1_mmd.get_rpm_filter().get(): - continue + if m1.last_batch_id() == m1.batch: + # If RPM is filtered-out, do not add it to artifacts list. + if name in m1_mmd.get_rpm_filter().get(): + continue - pkglist_f.write(rpm_file + '\n') - artifacts.add('{}-{}:{}-{}.{}'.format(name, epoch, version, release, arch)) + pkglist_f.write(rpm_file + '\n') + artifacts.add('{}-{}:{}-{}.{}'.format(name, epoch, version, release, arch)) pkglist_f.close() m1_mmd.set_rpm_artifacts(artifacts) diff --git a/tests/test_builder/test_mock.py b/tests/test_builder/test_mock.py index 5ca883e1..2c620f92 100644 --- a/tests/test_builder/test_mock.py +++ b/tests/test_builder/test_mock.py @@ -159,3 +159,19 @@ class TestMockModuleBuilder: pkglist = fd.read().strip() rpm_names = [kobo.rpmlib.parse_nvr(rpm)["name"] for rpm in pkglist.split('\n')] assert "ed" in rpm_names + + @mock.patch("module_build_service.conf.system", new="mock") + def test_createrepo_empty_rmp_list(self, *args): + with make_session(conf) as session: + module = self._create_module_with_filters(session, 3, koji.BUILD_STATES['COMPLETE']) + + builder = MockModuleBuilder("mcurlej", module, conf, module.koji_tag, + module.component_builds) + builder.resultsdir = self.resultdir + rpms = [] + with mock.patch("os.listdir", return_value=rpms): + builder._createrepo() + + with open(os.path.join(self.resultdir, "pkglist"), "r") as fd: + pkglist = fd.read().strip() + assert not pkglist