From bb63c26b2a1ecbc11742dd83c3e30f522676a30b Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Nov 19 2024 20:55:33 +0000 Subject: fix repo handing for bare wrapperRPM task Fixes: https://pagure.io/koji/issue/4266 --- diff --git a/builder/kojid b/builder/kojid index f369f50..889f589 100755 --- a/builder/kojid +++ b/builder/kojid @@ -2245,13 +2245,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 e36d918..223886d 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 318ac5b..d3e2937 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