* paging for releases page
[?]
Oct 15, 2009, 11:13 AM
PPJN6SDP3BIWOB5LB3B2F3HEWM4IG7WZMG7JICERVBR7CDMBOPOQCDependencies
- [2]
A63IHCMX* Register GC roots properly. - [3]
T2232OBS* Add some DB indices to make the /releases page much faster. - [4]
G6HJY2V4 - [5]
NI5BVF2V* In job inputs of type "build", allow the project and jobset names of - [6]
LQ5QEDVV - [7]
JFZNAYJX* Showing releases. - [8]
FHF6IZJQ* Basic release management: releases are now dynamically computed as - [9]
DR4F6YUT - [10]
3E6IP3R3* Add the name of the jobset to ReleaseSetJobs, otherwise we can't - [11]
LZO3C2KI* Hack around those SQLite timeouts: just retry the transaction. - [12]
OIUIYIV2* Give releases a timestamp. - [13]
IN272KZW* Automatically keep all builds in the latest successful release in - [14]
BDSD2JLV* Speed up manifest generation. - [15]
E6IC7YIK* Release sets: need to include the jobset name to disambiguate - [16]
ZNFDFJHG* Provide a redirect to the latest successful release in a release set - [17]
S5PV6IIM* Represent jobs explicitly in the DB. - [18]
A52HEFHQ* Allow builds to be restarted (if they failed with a transient error, - [19]
2GK5DOU7* Downloading closures. - [20]
2T42QGZD* Register builds as GC roots so they don't get deleted. - [*]
J5UVLXOK* Start of a basic Catalyst web interface.
Change contents
- replacement in src/lib/Hydra/Controller/Root.pm at line 140
if (defined $subcommand && $subcommand ne "") {my $resultsPerPage = 10;my $page = 1;if (defined $subcommand && $subcommand =~ /^\d+$/ ) {$page = int($subcommand)}elsif (defined $subcommand && $subcommand ne "") { - replacement in src/lib/Hydra/Controller/Root.pm at line 175
push @releases, getRelease($_, $jobs) foreach getPrimaryBuildsForReleaseSet($project, $primaryJob);push @releases, getRelease($_, $jobs) foreach getPrimaryBuildsForReleaseSet($project, $primaryJob, $page, $resultsPerPage);$c->stash->{baseUri} = $c->uri_for($self->action_for("releases"), $projectName, $releaseSetName); - edit in src/lib/Hydra/Controller/Root.pm at line 179
$c->stash->{page} = $page;$c->stash->{totalReleases} = getPrimaryBuildTotal($project, $primaryJob);$c->stash->{resultsPerPage} = $resultsPerPage; - replacement in src/lib/Hydra/Helper/Nix.pm at line 13
getPrimaryBuildsForReleaseSet getRelease getLatestSuccessfulRelease );getPrimaryBuildsForReleaseSetgetPrimaryBuildTotalgetRelease getLatestSuccessfulRelease ); - edit in src/lib/Hydra/Helper/Nix.pm at line 151
sub allPrimaryBuilds {my ($project, $primaryJob) = @_;my $allPrimaryBuilds = $project->builds->search({ jobset => $primaryJob->get_column('jobset'), job => $primaryJob->get_column('job'), finished => 1 },{ join => 'resultInfo', order_by => "timestamp DESC", '+select' => ["resultInfo.releasename", "resultInfo.buildstatus"], '+as' => ["releasename", "buildstatus"], where => \ attrsToSQL($primaryJob->attrs, "me.id")});return $allPrimaryBuilds;} - replacement in src/lib/Hydra/Helper/Nix.pm at line 163
sub getPrimaryBuildsForReleaseSet {sub getPrimaryBuildTotal { - replacement in src/lib/Hydra/Helper/Nix.pm at line 165[4.1480]→[4.1480:1530](∅→∅),[4.1530]→[4.495:606](∅→∅),[4.114]→[4.1587:1648](∅→∅),[4.358]→[4.1587:1648](∅→∅),[4.606]→[4.1587:1648](∅→∅),[4.1587]→[4.1587:1648](∅→∅),[4.1648]→[3.1418:1544](∅→∅),[3.1544]→[4.1724:1785](∅→∅),[4.1724]→[4.1724:1785](∅→∅)
my @primaryBuilds = $project->builds->search({ jobset => $primaryJob->get_column('jobset'), job => $primaryJob->get_column('job'), finished => 1 },{ join => 'resultInfo', order_by => "timestamp DESC", '+select' => ["resultInfo.releasename", "resultInfo.buildstatus"], '+as' => ["releasename", "buildstatus"], where => \ attrsToSQL($primaryJob->attrs, "me.id")return scalar(allPrimaryBuilds($project, $primaryJob)) ;}sub getPrimaryBuildsForReleaseSet {my ($project, $primaryJob, $page, $resultsPerPage) = @_;$page = (defined $page ? int($page) : 1) || 1;$resultsPerPage = (defined $resultsPerPage ? int($resultsPerPage) : 20) || 20;my @primaryBuilds = allPrimaryBuilds($project, $primaryJob)->search( {},{ rows => $resultsPerPage, page => $page - edit in src/lib/Hydra/Helper/Nix.pm at line 177
- edit in src/lib/Hydra/Helper/Nix.pm at line 181
sub findLastJobForBuilds {my ($builds, $job) = @_;my $thisBuild; - edit in src/lib/Hydra/Helper/Nix.pm at line 185
# Find a build of this job that had the primary build# as input. If there are multiple, prefer successful# ones, and then oldest. !!! order_by buildstatus is hacky($thisBuild) = $builds->search({ project => $job->get_column('project'), jobset => $job->get_column('jobset'), job => $job->get_column('job'), finished => 1}, { join => 'resultInfo', rows => 1, order_by => ["buildstatus", "timestamp"], where => \ attrsToSQL($job->attrs, "build.id"), '+select' => ["resultInfo.buildstatus"], '+as' => ["buildstatus"]});return $thisBuild ;}sub findLastJobForPrimaryBuild {my ($primaryBuild, $job) = @_;my $thisBuild;my $depBuilds;$depBuilds = $primaryBuild->dependentBuilds;$thisBuild = findLastJobForBuilds($depBuilds, $job) ;# don't do recursive yet# if (!defined $thisBuild) {## foreach my $build ($depBuilds->all) {# $thisBuild = findLastJobForPrimaryBuild($build, $job) ;# if (defined $thisBuild) {# last ;# }# }# }return $thisBuild;} - replacement in src/lib/Hydra/Helper/Nix.pm at line 239[4.2207]→[4.2207:2478](∅→∅),[4.2478]→[3.1545:1707](∅→∅),[4.182]→[4.2536:2710](∅→∅),[4.412]→[4.2536:2710](∅→∅),[4.712]→[4.2536:2710](∅→∅),[3.1707]→[4.2536:2710](∅→∅),[4.2536]→[4.2536:2710](∅→∅),[4.2710]→[3.1708:1792](∅→∅),[3.1792]→[4.2710:2730](∅→∅),[4.2710]→[4.2710:2730](∅→∅)
# Find a build of this job that had the primary build# as input. If there are multiple, prefer successful# ones, and then oldest. !!! order_by buildstatus is hacky($thisBuild) = $primaryBuild->dependentBuilds->search({ project => $job->get_column('project'), jobset => $job->get_column('jobset'), job => $job->get_column('job'), finished => 1 },{ join => 'resultInfo', rows => 1, order_by => ["buildstatus", "timestamp"], where => \ attrsToSQL($job->attrs, "build.id"), '+select' => ["resultInfo.buildstatus"], '+as' => ["buildstatus"]});$thisBuild = findLastJobForPrimaryBuild($primaryBuild, $job) ; - edit in src/root/releases.tt at line 11
<p>Showing releases [% (page - 1) * resultsPerPage + 1 %] - [% (page - 1) * resultsPerPage + releases.size %] out of [% totalReleases %].</p> - edit in src/root/releases.tt at line 66
[% IF page > 1 %][<a href="[% "$baseUri/"; (page - 1) %]">Prev</a>][% END %][% IF page * resultsPerPage < totalReleases %][<a href="[% "$baseUri/"; (page + 1) %]">Next</a>][% END %][<a href="[% "$baseUri/"; (totalReleases - 1) div resultsPerPage + 1 %]">Last</a>]