From 77aeee7e6bee6f3c62eb3593301659de100f282a Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Fri, 19 May 2023 22:28:06 -0400 Subject: [PATCH 1/2] better handling of deleted tags in kojiweb 1. notifications might reference deleted tags 2. tasks might reference deleted tags 3. handle deleted tags in taskinfo page --- www/kojiweb/index.py | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/www/kojiweb/index.py b/www/kojiweb/index.py index ffdc4899..35ed162f 100644 --- a/www/kojiweb/index.py +++ b/www/kojiweb/index.py @@ -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 From 4e5841bbf51ec7aecb449cf6d9cbb327845c7f61 Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Fri, 19 May 2023 22:35:29 -0400 Subject: [PATCH 2/2] include new template --- www/kojiweb/taginfo_deleted.chtml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 www/kojiweb/taginfo_deleted.chtml diff --git a/www/kojiweb/taginfo_deleted.chtml b/www/kojiweb/taginfo_deleted.chtml new file mode 100644 index 00000000..be4302c7 --- /dev/null +++ b/www/kojiweb/taginfo_deleted.chtml @@ -0,0 +1,21 @@ +#from kojiweb import util +#from urllib.parse import quote +#import pprint + +#include "includes/header.chtml" + +

Information for deleted tag $util.escapeHTML($tag.name)

+ + + + + + + + + + + +
Name$util.escapeHTML($tag.name)
ID$tag.id
Deleted$util.formatTimeLong($delete_ts)
+ +#include "includes/footer.chtml"