PR#3828: better handling of deleted tags in kojiweb

Merges #3828
https://pagure.io/koji/pull-request/3828

Fixes: #3827
https://pagure.io/koji/issue/3827
taskinfo page fails on some deleted tags
This commit is contained in:
Tomas Kopecek 2023-07-04 08:54:39 +02:00
commit bc597c256f
2 changed files with 45 additions and 15 deletions

View file

@ -363,15 +363,21 @@ def index(environ, packageOrder='package_name', packageStart=None):
notifs = server.getBuildNotifications(user['id'])
notifs.sort(key=lambda x: x['id'])
# XXX Make this a multicall
for notif in notifs:
notif['package'] = None
if notif['package_id']:
notif['package'] = server.getPackage(notif['package_id'])
with server.multicall() as m:
for notif in notifs:
notif['package'] = None
if notif['package_id']:
notif['package'] = m.getPackage(notif['package_id'])
notif['tag'] = None
if notif['tag_id']:
notif['tag'] = server.getTag(notif['tag_id'])
notif['tag'] = None
if notif['tag_id']:
# it's possible a notification could reference a deleted tag
notif['tag'] = m.getTag(notif['tag_id'], event='auto')
for notif in notifs:
if notif['package']:
notif['package'] = notif['package'].result
if notif['tag']:
notif['tag'] = notif['tag'].result
values['notifs'] = notifs
values['user'] = user
@ -701,10 +707,10 @@ def taskinfo(environ, taskID):
elif isinstance(tag_id, dict):
return tag_id
else:
try:
return server.getTag(tag_id, strict=True)
except koji.GenericError:
return {'name': "%d (deleted)" % tag_id, 'id': None}
info = server.getTag(tag_id, event='auto')
if info and 'revoke_event' in info:
info['name'] = "%(name)s (deleted)" % info
return info
if 'root' in params:
params['build_tag'] = _get_tag(params.pop('root'))
@ -998,9 +1004,14 @@ def taginfo(environ, tagID, all='0', packageOrder='package_name', packageStart=N
server = _getServer(environ)
tagID = _convert_if_int(tagID)
tag = server.getTag(tagID, strict=True)
tag = server.getTag(tagID, strict=True, event='auto')
values['title'] = tag['name'] + ' | Tag Info'
values['tag'] = tag
values['tagID'] = tag['id']
if 'revoke_event' in tag:
values['delete_ts'] = server.getEvent(tag['revoke_event'])['ts']
return _genHTML(environ, 'taginfo_deleted.chtml')
all = int(all)
@ -1026,8 +1037,6 @@ def taginfo(environ, tagID, all='0', packageOrder='package_name', packageStart=N
destTargets = server.getBuildTargets(destTagID=tag['id'])
destTargets.sort(key=_sortbyname)
values['tag'] = tag
values['tagID'] = tag['id']
values['inheritance'] = inheritance
values['tagsByChild'] = tagsByChild
values['srcTargets'] = srcTargets

View file

@ -0,0 +1,21 @@
#from kojiweb import util
#from urllib.parse import quote
#import pprint
#include "includes/header.chtml"
<h4>Information for deleted tag <a href="taginfo?tagID=$tag.id">$util.escapeHTML($tag.name)</a></h4>
<table>
<tr>
<th>Name</th><td>$util.escapeHTML($tag.name)</td>
</tr>
<tr>
<th>ID</th><td>$tag.id</td>
</tr>
<tr>
<th>Deleted</th><td>$util.formatTimeLong($delete_ts)</td>
</tr>
</table>
#include "includes/footer.chtml"