handle external rpms gracefully in cli and webui

This commit is contained in:
Mike McLean 2009-01-26 15:53:06 -05:00
parent 4881571e11
commit c8808cfa22
3 changed files with 53 additions and 26 deletions

View file

@ -1018,7 +1018,7 @@ def handle_import(options, session, args):
def do_import(path, data):
rinfo = dict([(k,data[k]) for k in ('name','version','release','arch')])
prev = session.getRPM(rinfo)
if prev:
if prev and not prev.get('external_repo_id', 0):
if prev['payloadhash'] == koji.hex_string(data['sigmd5']):
print _("RPM already imported: %s") % path
else:
@ -1165,6 +1165,9 @@ def handle_import_sig(options, session, args):
if not rinfo:
print "No such rpm in system: %(name)s-%(version)s-%(release)s.%(arch)s" % data
continue
if rinfo.get('external_repo_id'):
print "Skipping external rpm: %(name)s-%(version)s-%(release)s.%(arch)s@%(external_repo_name)s" %rpminfo
continue
sighdr = koji.rip_rpm_sighdr(path)
previous = session.queryRPMSigs(rpm_id=rinfo['id'], sigkey=sigkey)
assert len(previous) <= 1
@ -1639,6 +1642,9 @@ def handle_list_signed(options, session, args):
rpm_idx[rinfo['id']] = rinfo
if rinfo is None:
parser.error(_("No such RPM: %s") % options.rpm)
if rinfo.get('external_repo_id'):
print "External rpm: %(name)s-%(version)s-%(release)s.%(arch)s@%(external_repo_name)s" %rpminfo
sys.exit(1)
qopts['rpm_id'] = rinfo['id']
if options.build:
binfo = session.getBuild(options.build)
@ -2297,21 +2303,28 @@ def anon_handle_rpminfo(options, session, args):
info['epoch'] = ""
else:
info['epoch'] = str(info['epoch']) + ":"
buildinfo = session.getBuild(info['build_id'])
buildinfo['name'] = buildinfo['package_name']
buildinfo['arch'] = 'src'
if buildinfo['epoch'] is None:
buildinfo['epoch'] = ""
else:
buildinfo['epoch'] = str(buildinfo['epoch']) + ":"
if not info.get('external_repo_id', 0):
buildinfo = session.getBuild(info['build_id'])
buildinfo['name'] = buildinfo['package_name']
buildinfo['arch'] = 'src'
if buildinfo['epoch'] is None:
buildinfo['epoch'] = ""
else:
buildinfo['epoch'] = str(buildinfo['epoch']) + ":"
print "RPM: %(epoch)s%(name)s-%(version)s-%(release)s.%(arch)s [%(id)d]" %info
print "RPM Path: %s" % os.path.join(koji.pathinfo.build(buildinfo), koji.pathinfo.rpm(info))
print "SRPM: %(epoch)s%(name)s-%(version)s-%(release)s [%(id)d]" % buildinfo
print "SRPM Path: %s" % os.path.join(koji.pathinfo.build(buildinfo), koji.pathinfo.rpm(buildinfo))
print "Built: %s" % time.strftime('%a, %d %b %Y %H:%M:%S %Z', time.localtime(info['buildtime']))
if info.get('external_repo_id'):
repo = session.getExternalRepo(info['external_repo_id'])
print "External Repository: %(name)s [%(id)i]" % repo
print "External Repository url: %(url)s" % repo
else:
print "RPM Path: %s" % os.path.join(koji.pathinfo.build(buildinfo), koji.pathinfo.rpm(info))
print "SRPM: %(epoch)s%(name)s-%(version)s-%(release)s [%(id)d]" % buildinfo
print "SRPM Path: %s" % os.path.join(koji.pathinfo.build(buildinfo), koji.pathinfo.rpm(buildinfo))
print "Built: %s" % time.strftime('%a, %d %b %Y %H:%M:%S %Z', time.localtime(info['buildtime']))
print "Payload: %(payloadhash)s" %info
print "Size: %(size)s" %info
print "Build ID: %(build_id)s" %info
if not info.get('external_repo_id', 0):
print "Build ID: %(build_id)s" %info
if info['buildroot_id'] is None:
print "No buildroot data available"
else:

View file

@ -1138,18 +1138,21 @@ def rpminfo(req, rpmID, fileOrder='name', fileStart=None):
epochStr = '%s:' % rpm['epoch']
values['title'] = values['title'] % epochStr
build = server.getBuild(rpm['build_id'])
build = None
if rpm['build_id'] != None:
build = server.getBuild(rpm['build_id'])
builtInRoot = None
if rpm['buildroot_id'] != None:
builtInRoot = server.getBuildroot(rpm['buildroot_id'])
requires = server.getRPMDeps(rpm['id'], koji.DEP_REQUIRE)
requires.sort(_sortbyname)
provides = server.getRPMDeps(rpm['id'], koji.DEP_PROVIDE)
provides.sort(_sortbyname)
obsoletes = server.getRPMDeps(rpm['id'], koji.DEP_OBSOLETE)
obsoletes.sort(_sortbyname)
conflicts = server.getRPMDeps(rpm['id'], koji.DEP_CONFLICT)
conflicts.sort(_sortbyname)
if rpm['external_repo_id'] == 0:
values['requires'] = server.getRPMDeps(rpm['id'], koji.DEP_REQUIRE)
values['requires'].sort(_sortbyname)
values['provides'] = server.getRPMDeps(rpm['id'], koji.DEP_PROVIDE)
values['provides'].sort(_sortbyname)
values['obsoletes'] = server.getRPMDeps(rpm['id'], koji.DEP_OBSOLETE)
values['obsoletes'].sort(_sortbyname)
values['conflicts'] = server.getRPMDeps(rpm['id'], koji.DEP_CONFLICT)
values['conflicts'].sort(_sortbyname)
buildroots = server.listBuildroots(rpmID=rpm['id'])
buildroots.sort(kojiweb.util.sortByKeyFunc('-create_event_time'))
@ -1157,10 +1160,6 @@ def rpminfo(req, rpmID, fileOrder='name', fileStart=None):
values['rpm'] = rpm
values['build'] = build
values['builtInRoot'] = builtInRoot
values['requires'] = requires
values['provides'] = provides
values['obsoletes'] = obsoletes
values['conflicts'] = conflicts
values['buildroots'] = buildroots
files = kojiweb.util.paginateMethod(server, values, 'listRPMFiles', args=[rpm['id']],

View file

@ -11,10 +11,18 @@
<th>ID</th><td>$rpm.id</td>
</tr>
<tr>
#if $build
<th>Name</th><td><a href="packageinfo?packageID=$build.package_id">$rpm.name</a></td>
#else
<th>Name</th><td>$rpm.name</td>
#end if
</tr>
<tr>
#if $build
<th>Version</th><td><a href="buildinfo?buildID=$build.id">$rpm.version</a></td>
#else
<th>Version</th><td>$rpm.version</td>
#end if
</tr>
<tr>
<th>Release</th><td>$rpm.release</td>
@ -25,6 +33,11 @@
<tr>
<th>Arch</th><td>$rpm.arch</td>
</tr>
#if $rpm.external_repo_id
<tr>
<th>External Repository</th><td>$rpm.external_repo_name</td>
</tr>
#end if
<tr>
<th>Size</th><td>$rpm.size</td>
</tr>
@ -39,6 +52,7 @@
<th>Buildroot</th><td><a href="buildrootinfo?buildrootID=$builtInRoot.id">$builtInRoot.tag_name-$builtInRoot.id-$builtInRoot.repo_id</a></td>
</tr>
#end if
#if $rpm.external_repo_id == 0
<tr>
<th>Provides</th>
<td class="container">
@ -144,6 +158,7 @@
#end if
</td>
</tr>
#end if
<tr>
<th>Component&nbsp;of</th>
<td class="container">