Allow hub policy to match version and release
Fixes https://pagure.io/koji/issue/1134 Based on work from https://pagure.io/koji/pull-request/1135
This commit is contained in:
parent
4ef89a4ae2
commit
de161628b0
3 changed files with 72 additions and 0 deletions
|
|
@ -179,6 +179,12 @@ Available tests
|
|||
``package``
|
||||
* Matches its arguments against the package name. Accepts glob patterns.
|
||||
|
||||
``version``
|
||||
* Matches its arguments against the build version. Accepts glob patterns.
|
||||
|
||||
``release``
|
||||
* Matches its arguments against the build release. Accepts glob patterns.
|
||||
|
||||
``tag``
|
||||
* matches its arguments against the tag name. Accepts glob patterns.
|
||||
* for move operations, the tag name tested is the destination tag (see
|
||||
|
|
|
|||
|
|
@ -5388,6 +5388,8 @@ def import_build(srpm, rpms, brmap=None, task_id=None, build_id=None, logs=None)
|
|||
|
||||
policy_data = {
|
||||
'package': build['name'],
|
||||
'version': build['version'],
|
||||
'release': build['release'],
|
||||
'buildroots': to_list(brmap.values()),
|
||||
'import': True,
|
||||
'import_type': 'rpm',
|
||||
|
|
@ -5651,6 +5653,8 @@ class CG_Importer(object):
|
|||
# we have to be careful and provide sufficient data
|
||||
policy_data = {
|
||||
'package': self.buildinfo['name'],
|
||||
'version': self.buildinfo['version'],
|
||||
'release': self.buildinfo['release'],
|
||||
'source': self.buildinfo['source'],
|
||||
'cg_list': list(self.cgs),
|
||||
'import': True,
|
||||
|
|
@ -8301,6 +8305,32 @@ def policy_get_pkg(data):
|
|||
raise koji.GenericError("policy requires package data")
|
||||
|
||||
|
||||
def policy_get_version(data):
|
||||
"""Determine version from policy data
|
||||
|
||||
returns version as string
|
||||
"""
|
||||
if 'version' in data:
|
||||
return data['version']
|
||||
if 'build' in data:
|
||||
return get_build(data['build'], strict=True)['version']
|
||||
#else
|
||||
raise koji.GenericError("policy requires version data")
|
||||
|
||||
|
||||
def policy_get_release(data):
|
||||
"""Determine release from policy data
|
||||
|
||||
returns release as string
|
||||
"""
|
||||
if 'release' in data:
|
||||
return data['release']
|
||||
if 'build' in data:
|
||||
return get_build(data['build'], strict=True)['release']
|
||||
#else
|
||||
raise koji.GenericError("policy requires release data")
|
||||
|
||||
|
||||
def policy_get_brs(data):
|
||||
"""Determine content generators from policy data"""
|
||||
|
||||
|
|
@ -8373,6 +8403,26 @@ class PackageTest(koji.policy.MatchTest):
|
|||
data[self.field] = policy_get_pkg(data)['name']
|
||||
return super(PackageTest, self).run(data)
|
||||
|
||||
|
||||
class VersionTest(koji.policy.MatchTest):
|
||||
"""Checks version against glob patterns"""
|
||||
name = 'version'
|
||||
field = '_version'
|
||||
def run(self, data):
|
||||
data[self.field] = policy_get_version(data)
|
||||
return super(VersionTest, self).run(data)
|
||||
|
||||
|
||||
class ReleaseTest(koji.policy.MatchTest):
|
||||
"""Checks release against glob patterns"""
|
||||
name = 'release'
|
||||
field = '_release'
|
||||
def run(self, data):
|
||||
#we need to find the build NVR from the base data
|
||||
data[self.field] = policy_get_release(data)
|
||||
return super(ReleaseTest, self).run(data)
|
||||
|
||||
|
||||
class VolumeTest(koji.policy.MatchTest):
|
||||
"""Checks storage volume against glob patterns"""
|
||||
name = 'volume'
|
||||
|
|
|
|||
|
|
@ -24,6 +24,22 @@ class TestBasicTests(unittest.TestCase):
|
|||
policy_get_pkg.return_value = {'name': 'foobar'}
|
||||
self.assertTrue(obj.run({}))
|
||||
|
||||
@mock.patch('kojihub.policy_get_version')
|
||||
def test_version_test(self, policy_get_version):
|
||||
obj = kojihub.VersionTest('version 1.2.*')
|
||||
policy_get_version.return_value = '0.0.1'
|
||||
self.assertFalse(obj.run({}))
|
||||
policy_get_version.return_value = '1.2.1'
|
||||
self.assertTrue(obj.run({}))
|
||||
|
||||
@mock.patch('kojihub.policy_get_release')
|
||||
def test_release_test(self, policy_get_release):
|
||||
obj = kojihub.ReleaseTest('release 1.2.*')
|
||||
policy_get_release.return_value = '0.0.1'
|
||||
self.assertFalse(obj.run({}))
|
||||
policy_get_release.return_value = '1.2.1'
|
||||
self.assertTrue(obj.run({}))
|
||||
|
||||
@mock.patch('kojihub.policy_get_pkg')
|
||||
def test_new_package_test(self, policy_get_pkg):
|
||||
obj = kojihub.NewPackageTest('is_new_package')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue