cg_export
This commit is contained in:
parent
29f1c568b3
commit
019786d969
1 changed files with 88 additions and 0 deletions
|
|
@ -4614,6 +4614,92 @@ def cg_import(metadata, files):
|
|||
# TODO: post import callback
|
||||
|
||||
|
||||
|
||||
def cg_export(build):
|
||||
"""Return CG metadata and file refs for a given build"""
|
||||
|
||||
binfo = get_build(build, strict=True)
|
||||
# TODO: handle multiple build types
|
||||
metadata = {
|
||||
'metadata_version' : 0,
|
||||
'build' : {},
|
||||
'buildroots' : {},
|
||||
'output' : {},
|
||||
}
|
||||
metadata['build'] = dslice(binfo, ['name', 'version', 'release'])
|
||||
# TODO: get source from task if possible
|
||||
# TODO: get start_time and end_time from task and or build
|
||||
|
||||
metadata['output'] = []
|
||||
brmap = {}
|
||||
|
||||
# gather rpms
|
||||
for rpminfo in list_rpms(buildID=binfo['id']):
|
||||
data = {}
|
||||
data['filename'] = koji.pathinfo.rpm(rpminfo) # XXX [?]
|
||||
data['filesize'] = rpminfo['size']
|
||||
data['arch'] = rpminfo['arch']
|
||||
data['checksum'] = rpminfo['payloadhash']
|
||||
data['checksum_type'] = 'sigmd5'
|
||||
data['type'] = 'rpm'
|
||||
br_id = rpminfo['buildroot_id']
|
||||
if br_id is None:
|
||||
data['buildroot_id'] = None
|
||||
else:
|
||||
brmap.setdefault(br_id, len(brmap))
|
||||
data['buildroot_id'] = brmap[br_id]
|
||||
metadata['output'].append(data)
|
||||
|
||||
# archives too
|
||||
for archiveinfo in list_archives(buildID=binfo['id']):
|
||||
data = {}
|
||||
data['filename'] = archiveinfo['filename']
|
||||
data['filesize'] = archiveinfo['size']
|
||||
data['arch'] = None #XXX
|
||||
data['checksum'] = archiveinfo['checksum']
|
||||
data['checksum_type'] = koji.CHECKSUM_TYPES(archiveinfo['checksum_type'])
|
||||
data['type'] = archiveinfo['type_name']
|
||||
br_id = archiveinfo['buildroot_id']
|
||||
if br_id is None:
|
||||
data['buildroot_id'] = None
|
||||
else:
|
||||
brmap.setdefault(br_id, len(brmap))
|
||||
data['buildroot_id'] = brmap[br_id]
|
||||
metadata['output'].append(data)
|
||||
|
||||
# gather buildroot info
|
||||
metadata['buildroots'] = []
|
||||
for br_id in brmap:
|
||||
# host(os, arch), cg(name, version), container(type, arch), tools([name, version])
|
||||
# rpms([n,v,r,e,a,md5,sig]), archives([fn, sz, csum, sumtype])
|
||||
# extra
|
||||
brinfo = get_buildroot(br_id)
|
||||
data = {}
|
||||
data['id'] = brmap[br_id]
|
||||
data['container'] = {'type': 'mock', 'arch': brinfo['arch']}
|
||||
data['host'] = {'os': 'unknown', 'arch': brinfo['arch']} #XXX
|
||||
data['tools'] = []
|
||||
data['component_rpms'] = []
|
||||
for rpminfo in list_rpms(buildrootID=br_id):
|
||||
info = dslice(rpminfo, ['name', 'version', 'release', 'epoch', 'arch'])
|
||||
info['sigmd5'] = rpminfo['payloadhash']
|
||||
info['sig'] = None
|
||||
data['component_rpms'].append(info)
|
||||
data['component_archives'] = []
|
||||
for archiveinfo in list_archives(buildrootID=br_id):
|
||||
info = dslice(archiveinfo, ['filename', 'checksum'])
|
||||
info['filesize'] = info['size']
|
||||
info['checksum_type'] = koji.CHECKSUM_TYPES(archiveinfo['checksum_type'])
|
||||
data['component_archives'].append(info)
|
||||
data['extra'] = dslice(brinfo, ['host_id', 'host_name', 'repo_id', 'task_id'])
|
||||
data['extra']['orig_id'] = brinfo['id']
|
||||
|
||||
#TODO also return paths to all output files relative to topdir
|
||||
|
||||
#TODO logs
|
||||
return metadata
|
||||
|
||||
|
||||
def add_external_rpm(rpminfo, external_repo, strict=True):
|
||||
"""Add an external rpm entry to the rpminfo table
|
||||
|
||||
|
|
@ -7780,6 +7866,8 @@ class RootExports(object):
|
|||
context.session.assertPerm('admin') # TODO: fix access check
|
||||
return cg_import(metadata, files)
|
||||
|
||||
CGExport = staticmethod(cg_export)
|
||||
|
||||
untaggedBuilds = staticmethod(untagged_builds)
|
||||
tagHistory = staticmethod(tag_history)
|
||||
queryHistory = staticmethod(query_history)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue