diff --git a/hub/kojihub.py b/hub/kojihub.py index 45e6973e..10c6d9ff 100644 --- a/hub/kojihub.py +++ b/hub/kojihub.py @@ -2948,7 +2948,7 @@ def get_channel(channelInfo, strict=False): return _singleRow(query, locals(), fields, strict) -def query_buildroots(hostID=None, tagID=None, state=None, rpmID=None, taskID=None, buildrootID=None): +def query_buildroots(hostID=None, tagID=None, state=None, rpmID=None, taskID=None, buildrootID=None, queryOpts=None): """Return a list of matching buildroots Optional args: @@ -2969,14 +2969,13 @@ def query_buildroots(hostID=None, tagID=None, state=None, rpmID=None, taskID=Non ('EXTRACT(EPOCH FROM retire_events.time)','retire_ts'), ('repo_create.id', 'repo_create_event_id'), ('repo_create.time', 'repo_create_event_time')] - query = """SELECT %s FROM buildroot - JOIN host ON host.id = buildroot.host_id - JOIN repo ON repo.id = buildroot.repo_id - JOIN tag ON tag.id = repo.tag_id - JOIN events AS create_events ON create_events.id = buildroot.create_event - LEFT OUTER JOIN events AS retire_events ON buildroot.retire_event = retire_events.id - JOIN events AS repo_create ON repo_create.id = repo.create_event - """ + tables = ['buildroot'] + joins=['host ON host.id = buildroot.host_id', + 'repo ON repo.id = buildroot.repo_id', + 'tag ON tag.id = repo.tag_id', + 'events AS create_events ON create_events.id = buildroot.create_event', + 'LEFT OUTER JOIN events AS retire_events ON buildroot.retire_event = retire_events.id', + 'events AS repo_create ON repo_create.id = repo.create_event'] clauses = [] if buildrootID != None: @@ -2994,20 +2993,16 @@ def query_buildroots(hostID=None, tagID=None, state=None, rpmID=None, taskID=Non else: clauses.append('buildroot.state = %(state)i') if rpmID != None: - query += """JOIN buildroot_listing ON buildroot.id = buildroot_listing.buildroot_id - """ + joins.append('buildroot_listing ON buildroot.id = buildroot_listing.buildroot_id') fields.append(('buildroot_listing.is_update', 'is_update')) clauses.append('buildroot_listing.rpm_id = %(rpmID)i') if taskID != None: clauses.append('buildroot.task_id = %(taskID)i') - query = query % ', '.join([pair[0] for pair in fields]) - - if len(clauses) > 0: - query += 'WHERE ' + ' AND '.join(clauses) - - return _multiRow(query, locals(), [pair[1] for pair in fields]) - + query = QueryProcessor(columns=[f[0] for f in fields], aliases=[f[1] for f in fields], + tables=tables, joins=joins, clauses=clauses, values=locals(), + opts=queryOpts) + return query.execute() def get_buildroot(buildrootID, strict=False): """Return information about a buildroot. buildrootID must be an int ID.""" diff --git a/www/kojiweb/index.py b/www/kojiweb/index.py index b050481d..ff9ca3cb 100644 --- a/www/kojiweb/index.py +++ b/www/kojiweb/index.py @@ -1159,7 +1159,7 @@ def userinfo(req, userID, packageOrder='package_name', packageStart=None, buildO return _genHTML(req, 'userinfo.chtml') -def rpminfo(req, rpmID, fileOrder='name', fileStart=None): +def rpminfo(req, rpmID, fileOrder='name', fileStart=None, buildrootOrder='-id', buildrootStart=None): values = _initValues(req, 'RPM Info', 'builds') server = _getServer(req) @@ -1190,8 +1190,9 @@ def rpminfo(req, rpmID, fileOrder='name', fileStart=None): headers = server.getRPMHeaders(rpm['id'], headers=['summary', 'description']) values['summary'] = koji.fixEncoding(headers.get('summary')) values['description'] = koji.fixEncoding(headers.get('description')) - buildroots = server.listBuildroots(rpmID=rpm['id']) - buildroots.sort(kojiweb.util.sortByKeyFunc('-create_event_time')) + buildroots = kojiweb.util.paginateMethod(server, values, 'listBuildroots', kw={'rpmID': rpm['id']}, + start=buildrootStart, dataName='buildroots', prefix='buildroot', + order=buildrootOrder) values['rpmID'] = rpmID values['rpm'] = rpm diff --git a/www/kojiweb/rpminfo.chtml b/www/kojiweb/rpminfo.chtml index 9f474622..83e4e4d9 100644 --- a/www/kojiweb/rpminfo.chtml +++ b/www/kojiweb/rpminfo.chtml @@ -3,6 +3,8 @@ #import time #import urllib +#attr _PASSTHROUGH = ['rpmID', 'fileOrder', 'fileStart', 'buildrootOrder', 'buildrootStart'] + #include "includes/header.chtml" #set $epoch = ($rpm.epoch != None and $str($rpm.epoch) + ':' or '')
| + #if $len($buildrootPages) > 1 + + #end if + #if $buildrootStart > 0 + <<< + #end if + #echo $buildrootStart + 1 # through #echo $buildrootStart + $buildrootCount # of $totalBuildroots + #if $buildrootStart + $buildrootCount < $totalBuildroots + >>> + #end if + | +|||||
| Buildroot | State | Update? | +Buildroot $util.sortImage($self, 'id', 'buildrootOrder') | +Created $util.sortImage($self, 'create_event_time', 'buildrootOrder') | +State $util.sortImage($self, 'state', 'buildrootOrder') |
|---|---|---|---|---|---|
| $buildroot.tag_name-$buildroot.id-$buildroot.repo_id | +$util.formatTime($buildroot.create_event_time) | $util.imageTag($util.brStateName($buildroot.state)) | - #set $update = $buildroot.is_update and 'yes' or 'no' -$util.imageTag($update) | ||