fix repo handing for bare wrapperRPM task

Fixes: https://pagure.io/koji/issue/4266
This commit is contained in:
Mike McLean 2024-11-19 15:07:54 -05:00 committed by Tomas Kopecek
parent fccf4fa3f9
commit d18aacfc5a
3 changed files with 32 additions and 21 deletions

View file

@ -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))

View file

@ -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:

View file

@ -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