From dc2d59fe4ff6b46e7b5cb54334c34d71f0f1d044 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: May 11 2017 16:29:25 +0000 Subject: [copr] Fix SRPM URL construction wrt volumes Koji volumes need to be taken into account when constructing URLs to SRPMs on Koji. Fixes #156 --- diff --git a/koschei/backend/__init__.py b/koschei/backend/__init__.py index 374a73a..8471fda 100644 --- a/koschei/backend/__init__.py +++ b/koschei/backend/__init__.py @@ -113,7 +113,8 @@ def submit_build(session, package): srpm_res = koji_util.get_last_srpm( session.secondary_koji_for(package.collection), package.collection.dest_tag, - name + name, + relative=True ) if srpm_res: srpm, srpm_url = srpm_res diff --git a/koschei/backend/koji_util.py b/koschei/backend/koji_util.py index 2fd104f..bac47d8 100644 --- a/koschei/backend/koji_util.py +++ b/koschei/backend/koji_util.py @@ -82,8 +82,9 @@ def prepare_build_opts(opts=None): return build_opts -def get_last_srpm(koji_session, tag, name): - rel_pathinfo = koji.PathInfo(topdir=koji_session.config['srpm_relative_path_root']) +def get_last_srpm(koji_session, tag, name, relative=False): + rel_pathinfo = koji.PathInfo(topdir=koji_session.config[ + 'srpm_relative_path_root' if relative else 'topurl']) info = koji_session.listTagged(tag, latest=True, package=name, inherit=True) if info: diff --git a/koschei/plugins/copr_plugin/backend/services/copr_scheduler.py b/koschei/plugins/copr_plugin/backend/services/copr_scheduler.py index 2715da9..9e37f68 100644 --- a/koschei/plugins/copr_plugin/backend/services/copr_scheduler.py +++ b/koschei/plugins/copr_plugin/backend/services/copr_scheduler.py @@ -26,6 +26,7 @@ from copr.exceptions import CoprRequestException from koschei.models import Build, CoprRebuildRequest, CoprRebuild from koschei.config import get_config, get_koji_config +from koschei.backend import koji_util from koschei.backend.service import Service from koschei.backend.repo_util import KojiRepoDescriptor @@ -43,23 +44,6 @@ class CoprScheduler(Service): def get_koji_id(self, collection): return 'secondary' if collection.secondary_mode else 'primary' - def get_topurl(self, collection): - return get_koji_config(self.get_koji_id(collection), 'topurl') - - def get_rpm_path(self, nvra): - path = '{name}/{version}/{release}/{arch}/{name}-{version}-{release}.{arch}.rpm' - return path.format(**nvra) - - def get_srpm_url(self, package): - """ - Returns last SRPM on Koji for given package, - or None if last complete build is unknown. - """ - srpm_nvra = package.srpm_nvra - srpm_url = '{topurl}/packages/{path}' - return srpm_url.format(topurl=self.get_topurl(package.collection), - path=self.get_rpm_path(srpm_nvra)) - def create_copr_project(self, request, copr_name): koji_repo = KojiRepoDescriptor(self.get_koji_id(request.collection), request.collection.build_tag, @@ -102,8 +86,12 @@ class CoprScheduler(Service): ) self.log.debug("Created copr project " + copr_name) + def schedule_rebuild(self, rebuild): - srpm_url = self.get_srpm_url(rebuild.package) + koji_session = self.session.koji(self.get_koji_id(rebuild.package.collection)) + srpm_url = koji_util.get_last_srpm(koji_session, + rebuild.package.collection.dest_tag, + rebuild.package.name)[1] self.create_copr_project(rebuild.request, rebuild.copr_name) copr_build = copr_client.create_new_build( projectname=rebuild.copr_name, diff --git a/test/backend_test.py b/test/backend_test.py index a9580bf..1351219 100644 --- a/test/backend_test.py +++ b/test/backend_test.py @@ -283,7 +283,7 @@ class BackendTest(DBTest): 'release': '333'}, 'the_url')) as get_last_srpm: with patch('koschei.backend.koji_util.koji_scratch_build', return_value=7541) as koji_scratch_build: backend.submit_build(self.session, package) - get_last_srpm.assert_called_once_with(self.session.sec_koji_mock, 'f25', 'rnv') + get_last_srpm.assert_called_once_with(self.session.sec_koji_mock, 'f25', 'rnv', relative=True) koji_scratch_build.assert_called_once_with(self.session.koji_mock, 'f25', 'rnv', 'the_url', {}) self.db.commit() self.assertEqual(7541, package.last_build.task_id) @@ -298,7 +298,7 @@ class BackendTest(DBTest): 'release': '333'}, 'the_url')) as get_last_srpm: with patch('koschei.backend.koji_util.koji_scratch_build', return_value=7541) as koji_scratch_build: backend.submit_build(self.session, package) - get_last_srpm.assert_called_once_with(self.session.sec_koji_mock, 'f25', 'rnv') + get_last_srpm.assert_called_once_with(self.session.sec_koji_mock, 'f25', 'rnv', relative=True) koji_scratch_build.assert_called_once_with(self.session.koji_mock, 'f25', 'rnv', 'the_url', {'arch_override': 'x86_64 alpha'}) self.db.commit() self.assertEqual(7541, package.last_build.task_id) @@ -312,7 +312,7 @@ class BackendTest(DBTest): 'release': '333'}, 'the_url')) as get_last_srpm: with patch('koschei.backend.koji_util.koji_scratch_build', return_value=7541) as koji_scratch_build: backend.submit_build(self.session, package) - get_last_srpm.assert_called_once_with(self.session.sec_koji_mock, 'f25', 'rnv') + get_last_srpm.assert_called_once_with(self.session.sec_koji_mock, 'f25', 'rnv', relative=True) koji_scratch_build.assert_called_once_with(self.session.koji_mock, 'f25', 'rnv', 'the_url', {'arch_override': 'armhfp i386'}) self.db.commit() self.assertEqual(7541, package.last_build.task_id) @@ -326,7 +326,7 @@ class BackendTest(DBTest): 'release': '333'}, 'the_url')) as get_last_srpm: with patch('koschei.backend.koji_util.koji_scratch_build', return_value=7541) as koji_scratch_build: backend.submit_build(self.session, package) - get_last_srpm.assert_called_once_with(self.session.sec_koji_mock, 'f25', 'rnv') + get_last_srpm.assert_called_once_with(self.session.sec_koji_mock, 'f25', 'rnv', relative=True) koji_scratch_build.assert_called_once_with(self.session.koji_mock, 'f25', 'rnv', 'the_url', {'arch_override': 'armhfp i386 x86_64'}) self.db.commit() self.assertEqual(7541, package.last_build.task_id) @@ -339,7 +339,7 @@ class BackendTest(DBTest): 'release': '333'}, 'the_url')) as get_last_srpm: with patch('koschei.backend.koji_util.koji_scratch_build', return_value=7541) as koji_scratch_build: backend.submit_build(self.session, package) - get_last_srpm.assert_called_once_with(self.session.sec_koji_mock, 'f25', 'rnv') + get_last_srpm.assert_called_once_with(self.session.sec_koji_mock, 'f25', 'rnv', relative=True) koji_scratch_build.assert_called_once_with(self.session.koji_mock, None, 'rnv', 'the_url', {'repo_id': 123}) self.db.commit() self.assertEqual(7541, package.last_build.task_id)