From 1160d47e7a965c962dda278a4de81f5ec8026c6d Mon Sep 17 00:00:00 2001 From: mprahl Date: Thu, 7 Nov 2019 11:14:44 -0500 Subject: [PATCH] Stop adding repo entries for empty tags for local builds DNF fails on Fedora 31 when there is a repo entry to an empty directory. --- module_build_service/builder/MockModuleBuilder.py | 12 ++++++++---- module_build_service/builder/utils.py | 8 ++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/module_build_service/builder/MockModuleBuilder.py b/module_build_service/builder/MockModuleBuilder.py index 6e645253..cba96844 100644 --- a/module_build_service/builder/MockModuleBuilder.py +++ b/module_build_service/builder/MockModuleBuilder.py @@ -373,18 +373,22 @@ class MockModuleBuilder(GenericBuilder): repo_name = tag = source koji_config = get_koji_config(self.config) koji_session = koji.ClientSession(koji_config.server, opts=koji_config) + # Check to see if there are any external repos tied to the tag + for ext_repo in koji_session.getTagExternalRepos(tag): + self._add_repo(ext_repo["external_repo_name"], ext_repo["url"]) + repo = koji_session.getRepo(repo_name) if repo: baseurl = koji.PathInfo(topdir=koji_config.topurl).repo(repo["id"], repo_name) baseurl = "{0}/{1}/".format(baseurl, self.arch) else: repo_dir = os.path.join(self.config.cache_dir, "koji_tags", tag) - create_local_repo_from_koji_tag( + should_add_repo = create_local_repo_from_koji_tag( self.config, tag, repo_dir, [self.arch, "noarch"]) + if not should_add_repo: + continue baseurl = "file://" + repo_dir - # Check to see if there are any external repos tied to the tag - for ext_repo in koji_session.getTagExternalRepos(repo_name): - self._add_repo(ext_repo["external_repo_name"], ext_repo["url"]) + self._add_repo(repo_name, baseurl) self._write_mock_config() diff --git a/module_build_service/builder/utils.py b/module_build_service/builder/utils.py index 5309b5e7..e922915c 100644 --- a/module_build_service/builder/utils.py +++ b/module_build_service/builder/utils.py @@ -72,6 +72,8 @@ def create_local_repo_from_koji_tag(config, tag, repo_dir, archs=None): Downloads the packages build for one of `archs` (defaults to ['x86_64', 'noarch']) in Koji tag `tag` to `repo_dir` and creates repository in that directory. Needs config.koji_profile and config.koji_config to be set. + + If the there are no builds associated with the tag, False is returned. """ # Placed here to avoid py2/py3 conflicts... @@ -92,6 +94,10 @@ def create_local_repo_from_koji_tag(config, tag, repo_dir, archs=None): except koji.GenericError: log.exception("Failed to list rpms in tag %r" % tag) + if not builds: + log.debug("No builds are associated with the tag %r", tag) + return False + # Reformat builds so they are dict with build_id as a key. builds = {build["build_id"]: build for build in builds} @@ -162,3 +168,5 @@ def create_local_repo_from_koji_tag(config, tag, repo_dir, archs=None): log.info("Creating local repository in %s" % repo_dir) execute_cmd(["/usr/bin/createrepo_c", repo_dir]) + + return True