From d18aacfc5a691c992dbea71814b4a31a25cc36e1 Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Tue, 19 Nov 2024 15:07:54 -0500 Subject: [PATCH] fix repo handing for bare wrapperRPM task Fixes: https://pagure.io/koji/issue/4266 --- builder/kojid | 12 +++++++---- kojihub/kojihub.py | 9 ++++----- tests/test_hub/test_wrapper_rpm.py | 32 +++++++++++++++++++----------- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/builder/kojid b/builder/kojid index 8f8bf39c..9b4f46fa 100755 --- a/builder/kojid +++ b/builder/kojid @@ -2248,13 +2248,17 @@ class WrapperRPMTask(BaseBuildTask): error_msg = 'custom_user_metadata is not JSON serializable' raise koji.BuildError(error_msg) + # sort out remaining buildroot params + build_tag = self.session.getTag(build_target['build_tag'], strict=True) repo_id = opts.get('repo_id') if not repo_id: - raise koji.BuildError("A repo id must be provided") - - repo_info = self.session.repoInfo(repo_id, strict=True) + # a parent task will generally pass in the repo it used, but if + # we are top level, we'll need to find our own + repo_info = self.getRepo(build_tag['id']) + else: + repo_info = self.session.repoInfo(repo_id, strict=True) + repo_id = repo_info['id'] event_id = repo_info['create_event'] - build_tag = self.session.getTag(build_target['build_tag'], strict=True) br_arch = self.find_arch('noarch', self.session.host.getHost( ), self.session.getBuildConfig(build_tag['id'], event=event_id)) diff --git a/kojihub/kojihub.py b/kojihub/kojihub.py index e36d918f..223886d4 100644 --- a/kojihub/kojihub.py +++ b/kojihub/kojihub.py @@ -10828,11 +10828,10 @@ class RootExports(object): raise koji.PreBuildError('wrapper rpms for %s have already been built' % koji.buildLabel(build)) build_target = self.getBuildTarget(target, strict=True) - build_tag = self.getTag(build_target['build_tag'], strict=True) - repo_info = self.getRepo(build_tag['id']) - if not repo_info: - raise koji.PreBuildError('no repo for tag: %s' % build_tag['name']) - opts['repo_id'] = repo_info['id'] + if 'repo_id' in opts: + # we ignore this opt for backwards compatibility + logger.warning('The wrapperRPM call ignores repo_id options') + del opts['repo_id'] taskOpts = {} if priority: diff --git a/tests/test_hub/test_wrapper_rpm.py b/tests/test_hub/test_wrapper_rpm.py index 318ac5b9..d3e29378 100644 --- a/tests/test_hub/test_wrapper_rpm.py +++ b/tests/test_hub/test_wrapper_rpm.py @@ -76,18 +76,6 @@ class TestWrapperRPM(unittest.TestCase): self.assertEqual("wrapper rpms for %s have already been built" % self.build, str(cm.exception)) - def test_no_repo_for_tag(self): - self.context.opts.get.return_value = True - self.exports.getBuild.return_value = self.buildinfo - self.list_rpms.return_value = [] - self.exports.getBuildTarget.return_value = self.targetinfo - self.exports.getTag.return_value = self.taginfo - self.exports.getRepo.return_value = None - - with self.assertRaises(koji.PreBuildError) as cm: - self.exports.wrapperRPM(self.build, self.url, self.target) - self.assertEqual("no repo for tag: %s" % self.taginfo['name'], str(cm.exception)) - def test_priority_without_admin(self): priority = -10 self.context.opts.get.return_value = True @@ -100,3 +88,23 @@ class TestWrapperRPM(unittest.TestCase): with self.assertRaises(koji.GenericError) as cm: self.exports.wrapperRPM(self.build, self.url, self.target, priority=priority) self.assertEqual("only admins may create high-priority tasks", str(cm.exception)) + + def test_repo_id_ignored(self): + self.context.opts.get.return_value = True + self.exports.getBuild.return_value = self.buildinfo + self.exports.getBuildTarget.return_value = self.targetinfo + self.list_rpms.return_value = [] + self.exports.getTag.return_value = self.taginfo + self.exports.getRepo.return_value = self.repoinfo + self.context.session.hasPerm.return_value = False + + opts = {'repo_id': 'REPO', 'scratch': True} + self.exports.wrapperRPM(self.build, self.url, self.target, opts=opts) + + self.make_task.assert_called_once() + taskargs = self.make_task.call_args.args[1] + expect_opts = {'scratch': True} # repo_id filtered out + self.assertEqual(taskargs[4], expect_opts) + + +# the end