util: Move get_buildroot_rpms to koji wrapper
This way the util module does not import the particular wrapper. Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
This commit is contained in:
parent
bab2a125d4
commit
7028399403
@ -26,10 +26,10 @@ from kobo.shortcuts import run
|
|||||||
from productmd.images import Image
|
from productmd.images import Image
|
||||||
|
|
||||||
from pungi.arch import get_valid_arches
|
from pungi.arch import get_valid_arches
|
||||||
from pungi.util import get_buildroot_rpms, get_volid, get_arch_variant_data
|
from pungi.util import get_volid, get_arch_variant_data
|
||||||
from pungi.util import get_file_size, get_mtime, failable, makedirs
|
from pungi.util import get_file_size, get_mtime, failable, makedirs
|
||||||
from pungi.wrappers.lorax import LoraxWrapper
|
from pungi.wrappers.lorax import LoraxWrapper
|
||||||
from pungi.wrappers.kojiwrapper import KojiWrapper
|
from pungi.wrappers.kojiwrapper import get_buildroot_rpms, KojiWrapper
|
||||||
from pungi.wrappers import iso
|
from pungi.wrappers import iso
|
||||||
from pungi.wrappers.scm import get_file_from_scm
|
from pungi.wrappers.scm import get_file_from_scm
|
||||||
from pungi.phases.base import PhaseBase
|
from pungi.phases.base import PhaseBase
|
||||||
|
@ -32,8 +32,6 @@ import time
|
|||||||
from kobo.shortcuts import run, force_list
|
from kobo.shortcuts import run, force_list
|
||||||
from productmd.common import get_major_version
|
from productmd.common import get_major_version
|
||||||
|
|
||||||
from .wrappers import kojiwrapper
|
|
||||||
|
|
||||||
|
|
||||||
def _doRunCommand(command, logger, rundir='/tmp', output=subprocess.PIPE, error=subprocess.PIPE, env=None):
|
def _doRunCommand(command, logger, rundir='/tmp', output=subprocess.PIPE, error=subprocess.PIPE, env=None):
|
||||||
"""Run a command and log the output. Error out if we get something on stderr"""
|
"""Run a command and log the output. Error out if we get something on stderr"""
|
||||||
@ -311,29 +309,6 @@ def get_variant_data(conf, var_name, variant):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
def get_buildroot_rpms(compose, task_id):
|
|
||||||
"""Get build root RPMs - either from runroot or local"""
|
|
||||||
result = []
|
|
||||||
if task_id:
|
|
||||||
# runroot
|
|
||||||
koji = kojiwrapper.KojiWrapper(compose.conf['koji_profile'])
|
|
||||||
buildroot_infos = koji.koji_proxy.listBuildroots(taskID=task_id)
|
|
||||||
buildroot_info = buildroot_infos[-1]
|
|
||||||
data = koji.koji_proxy.listRPMs(componentBuildrootID=buildroot_info["id"])
|
|
||||||
for rpm_info in data:
|
|
||||||
fmt = "%(nvr)s.%(arch)s"
|
|
||||||
result.append(fmt % rpm_info)
|
|
||||||
else:
|
|
||||||
# local
|
|
||||||
retcode, output = run("rpm -qa --qf='%{name}-%{version}-%{release}.%{arch}\n'")
|
|
||||||
for i in output.splitlines():
|
|
||||||
if not i:
|
|
||||||
continue
|
|
||||||
result.append(i)
|
|
||||||
result.sort()
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def _apply_substitutions(compose, volid):
|
def _apply_substitutions(compose, volid):
|
||||||
for k, v in compose.conf['volume_id_substitutions'].iteritems():
|
for k, v in compose.conf['volume_id_substitutions'].iteritems():
|
||||||
volid = volid.replace(k, v)
|
volid = volid.replace(k, v)
|
||||||
|
@ -466,3 +466,25 @@ class KojiWrapper(object):
|
|||||||
def get_build_nvrs(self, task_id):
|
def get_build_nvrs(self, task_id):
|
||||||
builds = self.koji_proxy.listBuilds(taskID=task_id)
|
builds = self.koji_proxy.listBuilds(taskID=task_id)
|
||||||
return [build.get("nvr") for build in builds if build.get("nvr")]
|
return [build.get("nvr") for build in builds if build.get("nvr")]
|
||||||
|
|
||||||
|
|
||||||
|
def get_buildroot_rpms(compose, task_id):
|
||||||
|
"""Get build root RPMs - either from runroot or local"""
|
||||||
|
result = []
|
||||||
|
if task_id:
|
||||||
|
# runroot
|
||||||
|
koji = KojiWrapper(compose.conf['koji_profile'])
|
||||||
|
buildroot_infos = koji.koji_proxy.listBuildroots(taskID=task_id)
|
||||||
|
buildroot_info = buildroot_infos[-1]
|
||||||
|
data = koji.koji_proxy.listRPMs(componentBuildrootID=buildroot_info["id"])
|
||||||
|
for rpm_info in data:
|
||||||
|
fmt = "%(nvr)s.%(arch)s"
|
||||||
|
result.append(fmt % rpm_info)
|
||||||
|
else:
|
||||||
|
# local
|
||||||
|
retcode, output = run("rpm -qa --qf='%{name}-%{version}-%{release}.%{arch}\n'")
|
||||||
|
for i in output.splitlines():
|
||||||
|
if not i:
|
||||||
|
continue
|
||||||
|
result.append(i)
|
||||||
|
return sorted(result)
|
||||||
|
@ -13,7 +13,7 @@ import sys
|
|||||||
|
|
||||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
|
||||||
|
|
||||||
from pungi.wrappers.kojiwrapper import KojiWrapper
|
from pungi.wrappers.kojiwrapper import KojiWrapper, get_buildroot_rpms
|
||||||
|
|
||||||
|
|
||||||
class KojiWrapperBaseTestCase(unittest.TestCase):
|
class KojiWrapperBaseTestCase(unittest.TestCase):
|
||||||
@ -525,5 +525,143 @@ class RunBlockingCmdTest(KojiWrapperBaseTestCase):
|
|||||||
self.assertEqual(sleep.mock_calls, [mock.call(i * 10) for i in range(1, 2)])
|
self.assertEqual(sleep.mock_calls, [mock.call(i * 10) for i in range(1, 2)])
|
||||||
|
|
||||||
|
|
||||||
|
RPM_QA_QF_OUTPUT = """
|
||||||
|
cjkuni-uming-fonts-0.2.20080216.1-56.fc23.noarch
|
||||||
|
libmount-2.28-1.fc23.x86_64
|
||||||
|
ed-1.10-5.fc23.x86_64
|
||||||
|
kbd-2.0.2-8.fc23.x86_64
|
||||||
|
coreutils-8.24-6.fc23.x86_64
|
||||||
|
"""
|
||||||
|
|
||||||
|
BUILDROOT_LIST = [
|
||||||
|
{'arch': 'x86_64',
|
||||||
|
'br_type': 0,
|
||||||
|
'cg_id': None,
|
||||||
|
'cg_name': None,
|
||||||
|
'cg_version': None,
|
||||||
|
'container_arch': 'x86_64',
|
||||||
|
'container_type': 'chroot',
|
||||||
|
'create_event_id': 15862222,
|
||||||
|
'create_event_time': '2016-04-28 02:37:00.949772',
|
||||||
|
'create_ts': 1461811020.94977,
|
||||||
|
'extra': None,
|
||||||
|
'host_arch': None,
|
||||||
|
'host_id': 99,
|
||||||
|
'host_name': 'buildhw-01.phx2.fedoraproject.org',
|
||||||
|
'host_os': None,
|
||||||
|
'id': 5458481,
|
||||||
|
'repo_create_event_id': 15861452,
|
||||||
|
'repo_create_event_time': '2016-04-28 00:02:40.639317',
|
||||||
|
'repo_id': 599173,
|
||||||
|
'repo_state': 1,
|
||||||
|
'retire_event_id': 15862276,
|
||||||
|
'retire_event_time': '2016-04-28 02:58:07.109387',
|
||||||
|
'retire_ts': 1461812287.10939,
|
||||||
|
'state': 3,
|
||||||
|
'tag_id': 315,
|
||||||
|
'tag_name': 'f24-build',
|
||||||
|
'task_id': 13831904}
|
||||||
|
]
|
||||||
|
|
||||||
|
RPM_LIST = [
|
||||||
|
{'arch': 'noarch',
|
||||||
|
'build_id': 756072,
|
||||||
|
'buildroot_id': 5398084,
|
||||||
|
'buildtime': 1461100903,
|
||||||
|
'component_buildroot_id': 5458481,
|
||||||
|
'epoch': None,
|
||||||
|
'external_repo_id': 0,
|
||||||
|
'external_repo_name': 'INTERNAL',
|
||||||
|
'extra': None,
|
||||||
|
'id': 7614370,
|
||||||
|
'is_update': True,
|
||||||
|
'metadata_only': False,
|
||||||
|
'name': 'python3-kickstart',
|
||||||
|
'nvr': 'python3-kickstart-2.25-2.fc24',
|
||||||
|
'payloadhash': '403723502d27e43955036d2dcd1b09e0',
|
||||||
|
'release': '2.fc24',
|
||||||
|
'size': 366038,
|
||||||
|
'version': '2.25'},
|
||||||
|
{'arch': 'x86_64',
|
||||||
|
'build_id': 756276,
|
||||||
|
'buildroot_id': 5405310,
|
||||||
|
'buildtime': 1461165155,
|
||||||
|
'component_buildroot_id': 5458481,
|
||||||
|
'epoch': None,
|
||||||
|
'external_repo_id': 0,
|
||||||
|
'external_repo_name': 'INTERNAL',
|
||||||
|
'extra': None,
|
||||||
|
'id': 7615629,
|
||||||
|
'is_update': False,
|
||||||
|
'metadata_only': False,
|
||||||
|
'name': 'binutils',
|
||||||
|
'nvr': 'binutils-2.26-18.fc24',
|
||||||
|
'payloadhash': '8ef08c8a64c52787d3559424e5f51d9d',
|
||||||
|
'release': '18.fc24',
|
||||||
|
'size': 6172094,
|
||||||
|
'version': '2.26'},
|
||||||
|
{'arch': 'x86_64',
|
||||||
|
'build_id': 756616,
|
||||||
|
'buildroot_id': 5412029,
|
||||||
|
'buildtime': 1461252071,
|
||||||
|
'component_buildroot_id': 5458481,
|
||||||
|
'epoch': None,
|
||||||
|
'external_repo_id': 0,
|
||||||
|
'external_repo_name': 'INTERNAL',
|
||||||
|
'extra': None,
|
||||||
|
'id': 7619636,
|
||||||
|
'is_update': False,
|
||||||
|
'metadata_only': False,
|
||||||
|
'name': 'kernel-headers',
|
||||||
|
'nvr': 'kernel-headers-4.5.2-301.fc24',
|
||||||
|
'payloadhash': '11c6d70580c8f0c202c28bc6b0fa98cc',
|
||||||
|
'release': '301.fc24',
|
||||||
|
'size': 1060138,
|
||||||
|
'version': '4.5.2'}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class TestGetBuildrootRPMs(unittest.TestCase):
|
||||||
|
|
||||||
|
@mock.patch('pungi.wrappers.kojiwrapper.KojiWrapper')
|
||||||
|
def test_get_from_koji(self, KojiWrapper):
|
||||||
|
compose = mock.Mock(conf={
|
||||||
|
'koji_profile': 'koji',
|
||||||
|
})
|
||||||
|
|
||||||
|
KojiWrapper.return_value.koji_proxy.listBuildroots.return_value = BUILDROOT_LIST
|
||||||
|
KojiWrapper.return_value.koji_proxy.listRPMs.return_value = RPM_LIST
|
||||||
|
|
||||||
|
rpms = get_buildroot_rpms(compose, 1234)
|
||||||
|
|
||||||
|
self.assertEqual(KojiWrapper.call_args_list,
|
||||||
|
[mock.call('koji')])
|
||||||
|
self.assertEqual(KojiWrapper.return_value.mock_calls,
|
||||||
|
[mock.call.koji_proxy.listBuildroots(taskID=1234),
|
||||||
|
mock.call.koji_proxy.listRPMs(componentBuildrootID=5458481)])
|
||||||
|
|
||||||
|
self.assertItemsEqual(rpms, [
|
||||||
|
'python3-kickstart-2.25-2.fc24.noarch',
|
||||||
|
'binutils-2.26-18.fc24.x86_64',
|
||||||
|
'kernel-headers-4.5.2-301.fc24.x86_64'
|
||||||
|
])
|
||||||
|
|
||||||
|
@mock.patch('pungi.wrappers.kojiwrapper.run')
|
||||||
|
def test_get_local(self, mock_run):
|
||||||
|
compose = mock.Mock()
|
||||||
|
|
||||||
|
mock_run.return_value = (0, RPM_QA_QF_OUTPUT)
|
||||||
|
|
||||||
|
rpms = get_buildroot_rpms(compose, None)
|
||||||
|
|
||||||
|
self.assertItemsEqual(rpms, [
|
||||||
|
'cjkuni-uming-fonts-0.2.20080216.1-56.fc23.noarch',
|
||||||
|
'libmount-2.28-1.fc23.x86_64',
|
||||||
|
'ed-1.10-5.fc23.x86_64',
|
||||||
|
'kbd-2.0.2-8.fc23.x86_64',
|
||||||
|
'coreutils-8.24-6.fc23.x86_64',
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
@ -261,144 +261,6 @@ class TestHelpers(PungiTestCase):
|
|||||||
self.fail('makedirs raised exception on existing directory')
|
self.fail('makedirs raised exception on existing directory')
|
||||||
|
|
||||||
|
|
||||||
RPM_QA_QF_OUTPUT = """
|
|
||||||
cjkuni-uming-fonts-0.2.20080216.1-56.fc23.noarch
|
|
||||||
libmount-2.28-1.fc23.x86_64
|
|
||||||
ed-1.10-5.fc23.x86_64
|
|
||||||
kbd-2.0.2-8.fc23.x86_64
|
|
||||||
coreutils-8.24-6.fc23.x86_64
|
|
||||||
"""
|
|
||||||
|
|
||||||
BUILDROOT_LIST = [
|
|
||||||
{'arch': 'x86_64',
|
|
||||||
'br_type': 0,
|
|
||||||
'cg_id': None,
|
|
||||||
'cg_name': None,
|
|
||||||
'cg_version': None,
|
|
||||||
'container_arch': 'x86_64',
|
|
||||||
'container_type': 'chroot',
|
|
||||||
'create_event_id': 15862222,
|
|
||||||
'create_event_time': '2016-04-28 02:37:00.949772',
|
|
||||||
'create_ts': 1461811020.94977,
|
|
||||||
'extra': None,
|
|
||||||
'host_arch': None,
|
|
||||||
'host_id': 99,
|
|
||||||
'host_name': 'buildhw-01.phx2.fedoraproject.org',
|
|
||||||
'host_os': None,
|
|
||||||
'id': 5458481,
|
|
||||||
'repo_create_event_id': 15861452,
|
|
||||||
'repo_create_event_time': '2016-04-28 00:02:40.639317',
|
|
||||||
'repo_id': 599173,
|
|
||||||
'repo_state': 1,
|
|
||||||
'retire_event_id': 15862276,
|
|
||||||
'retire_event_time': '2016-04-28 02:58:07.109387',
|
|
||||||
'retire_ts': 1461812287.10939,
|
|
||||||
'state': 3,
|
|
||||||
'tag_id': 315,
|
|
||||||
'tag_name': 'f24-build',
|
|
||||||
'task_id': 13831904}
|
|
||||||
]
|
|
||||||
|
|
||||||
RPM_LIST = [
|
|
||||||
{'arch': 'noarch',
|
|
||||||
'build_id': 756072,
|
|
||||||
'buildroot_id': 5398084,
|
|
||||||
'buildtime': 1461100903,
|
|
||||||
'component_buildroot_id': 5458481,
|
|
||||||
'epoch': None,
|
|
||||||
'external_repo_id': 0,
|
|
||||||
'external_repo_name': 'INTERNAL',
|
|
||||||
'extra': None,
|
|
||||||
'id': 7614370,
|
|
||||||
'is_update': True,
|
|
||||||
'metadata_only': False,
|
|
||||||
'name': 'python3-kickstart',
|
|
||||||
'nvr': 'python3-kickstart-2.25-2.fc24',
|
|
||||||
'payloadhash': '403723502d27e43955036d2dcd1b09e0',
|
|
||||||
'release': '2.fc24',
|
|
||||||
'size': 366038,
|
|
||||||
'version': '2.25'},
|
|
||||||
{'arch': 'x86_64',
|
|
||||||
'build_id': 756276,
|
|
||||||
'buildroot_id': 5405310,
|
|
||||||
'buildtime': 1461165155,
|
|
||||||
'component_buildroot_id': 5458481,
|
|
||||||
'epoch': None,
|
|
||||||
'external_repo_id': 0,
|
|
||||||
'external_repo_name': 'INTERNAL',
|
|
||||||
'extra': None,
|
|
||||||
'id': 7615629,
|
|
||||||
'is_update': False,
|
|
||||||
'metadata_only': False,
|
|
||||||
'name': 'binutils',
|
|
||||||
'nvr': 'binutils-2.26-18.fc24',
|
|
||||||
'payloadhash': '8ef08c8a64c52787d3559424e5f51d9d',
|
|
||||||
'release': '18.fc24',
|
|
||||||
'size': 6172094,
|
|
||||||
'version': '2.26'},
|
|
||||||
{'arch': 'x86_64',
|
|
||||||
'build_id': 756616,
|
|
||||||
'buildroot_id': 5412029,
|
|
||||||
'buildtime': 1461252071,
|
|
||||||
'component_buildroot_id': 5458481,
|
|
||||||
'epoch': None,
|
|
||||||
'external_repo_id': 0,
|
|
||||||
'external_repo_name': 'INTERNAL',
|
|
||||||
'extra': None,
|
|
||||||
'id': 7619636,
|
|
||||||
'is_update': False,
|
|
||||||
'metadata_only': False,
|
|
||||||
'name': 'kernel-headers',
|
|
||||||
'nvr': 'kernel-headers-4.5.2-301.fc24',
|
|
||||||
'payloadhash': '11c6d70580c8f0c202c28bc6b0fa98cc',
|
|
||||||
'release': '301.fc24',
|
|
||||||
'size': 1060138,
|
|
||||||
'version': '4.5.2'}
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
class TestGetBuildrootRPMs(unittest.TestCase):
|
|
||||||
|
|
||||||
@mock.patch('pungi.wrappers.kojiwrapper.KojiWrapper')
|
|
||||||
def test_get_from_koji(self, KojiWrapper):
|
|
||||||
compose = mock.Mock(conf={
|
|
||||||
'koji_profile': 'koji',
|
|
||||||
})
|
|
||||||
|
|
||||||
KojiWrapper.return_value.koji_proxy.listBuildroots.return_value = BUILDROOT_LIST
|
|
||||||
KojiWrapper.return_value.koji_proxy.listRPMs.return_value = RPM_LIST
|
|
||||||
|
|
||||||
rpms = util.get_buildroot_rpms(compose, 1234)
|
|
||||||
|
|
||||||
self.assertEqual(KojiWrapper.call_args_list,
|
|
||||||
[mock.call('koji')])
|
|
||||||
self.assertEqual(KojiWrapper.return_value.mock_calls,
|
|
||||||
[mock.call.koji_proxy.listBuildroots(taskID=1234),
|
|
||||||
mock.call.koji_proxy.listRPMs(componentBuildrootID=5458481)])
|
|
||||||
|
|
||||||
self.assertItemsEqual(rpms, [
|
|
||||||
'python3-kickstart-2.25-2.fc24.noarch',
|
|
||||||
'binutils-2.26-18.fc24.x86_64',
|
|
||||||
'kernel-headers-4.5.2-301.fc24.x86_64'
|
|
||||||
])
|
|
||||||
|
|
||||||
@mock.patch('pungi.util.run')
|
|
||||||
def test_get_local(self, mock_run):
|
|
||||||
compose = mock.Mock()
|
|
||||||
|
|
||||||
mock_run.return_value = (0, RPM_QA_QF_OUTPUT)
|
|
||||||
|
|
||||||
rpms = util.get_buildroot_rpms(compose, None)
|
|
||||||
|
|
||||||
self.assertItemsEqual(rpms, [
|
|
||||||
'cjkuni-uming-fonts-0.2.20080216.1-56.fc23.noarch',
|
|
||||||
'libmount-2.28-1.fc23.x86_64',
|
|
||||||
'ed-1.10-5.fc23.x86_64',
|
|
||||||
'kbd-2.0.2-8.fc23.x86_64',
|
|
||||||
'coreutils-8.24-6.fc23.x86_64',
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
class TestLevenshtein(unittest.TestCase):
|
class TestLevenshtein(unittest.TestCase):
|
||||||
def test_edit_dist_empty_str(self):
|
def test_edit_dist_empty_str(self):
|
||||||
self.assertEqual(util.levenshtein('', ''), 0)
|
self.assertEqual(util.levenshtein('', ''), 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user