From f3c86541b6dcee54f62785abe8394120b06e366b Mon Sep 17 00:00:00 2001 From: Valerij Maljulin Date: Nov 20 2018 09:45:17 +0000 Subject: Do not retreive rpm info if there is an empty rpm list. Fixes #1078 Signed-off-by: Valerij Maljulin --- diff --git a/module_build_service/builder/MockModuleBuilder.py b/module_build_service/builder/MockModuleBuilder.py index 355b937..2f912c1 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") - - 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 - - pkglist_f.write(rpm_file + '\n') - artifacts.add('{}-{}:{}-{}.{}'.format(name, epoch, version, release, arch)) + 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() + + 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.close() m1_mmd.set_rpm_artifacts(artifacts) diff --git a/tests/test_builder/test_mock.py b/tests/test_builder/test_mock.py index 5ca883e..2c620f9 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