* Controller for jobs which inherits all actions in ListBuilds. So
[?]
Mar 4, 2009, 5:24 PM
DEMSSSB22UI2ZN26C56UYO4NZWMDCRYKLAQARGOTSORSDXX3ZNNQCDependencies
- [2]
7UJ5YV4V* Provide a channel for each project containing all the latest - [3]
5NO7NCKT* Refactoring. - [4]
FPK5LF53* Put the project-related actions in a separate controller. Put the - [5]
RU7AQO7U* Role-based access control. Only admins can create projects. Only - [6]
JFZNAYJX* Showing releases. - [7]
J5UVLXOK* Start of a basic Catalyst web interface. - [8]
7LKUAIGC - [9]
K5BEBWKM - [10]
7YBYT2LQ - [11]
LQNBKF3D - [12]
YTSIRIMK* Separate job status and all builds pages. - [13]
HK32XC42 - [14]
AKAZKCR6* At top-level and for each project, provide two channels: "latest" - [15]
US27ZTX5* HydraFrontend -> Hydra. - [16]
E2ZY5TE5 - [17]
WYN733ST* Store build duration, handle cached builds. - [18]
TP3PFR5K - [19]
UVMFS73T* Some jQuery / CSS hackery. - [20]
G6HJY2V4 - [21]
CS7T2XFI - [22]
2JQ7WEFM - [23]
K2NXFFKH - [24]
BA46C5LN* Pretty-print the logs. - [25]
BHZXGT2H* Channels: provide an index page that lists all the packages in the - [26]
JLDUSNUO* Unify rendering of finished and scheduled builds. - [27]
GCHNNFZP - [28]
A52HEFHQ* Allow builds to be restarted (if they failed with a transient error, - [29]
KOTB7BKV - [30]
2AIIYGI5* Show job status and all builds for a project. - [31]
2AUODJBT - [32]
L2E6EVE2* Merged the Build and Job tables. - [33]
FEMR2C5W - [34]
IK53RV4V - [35]
W6DC6K4I* Happy Javascript hacking. - [36]
BVOPAMLS - [37]
FHF6IZJQ* Basic release management: releases are now dynamically computed as - [38]
LBNVQXUB* Build the /build stuff in a separate controller. - [*]
PKPWUHUX* Idem.
Change contents
- edit in src/Hydra/lib/Hydra/Base/Controller/ListBuilds.pm at line 12
$c->stash->{template} = 'jobstatus.tt'; - file addition: Job.pm[40.54]
package Hydra::Controller::Job;use strict;use warnings;use base 'Hydra::Base::Controller::ListBuilds';use Hydra::Helper::Nix;use Hydra::Helper::CatalystUtils;sub job : Chained('/project/project') PathPart('job') CaptureArgs(1) {my ($self, $c, $jobName) = @_;$c->stash->{jobName} = $jobName;# !!! nothing to do here yet, since we don't have a jobs table.}sub index : Chained('job') PathPart('') Args(0) {my ($self, $c) = @_;$c->go($self->action_for("all"));}# Hydra::Base::Controller::ListBuilds needs this.sub get_builds : Chained('job') PathPart('') CaptureArgs(0) {my ($self, $c) = @_;$c->stash->{allBuilds} =$c->stash->{curProject}->builds->search({attrName => $c->stash->{jobName}});$c->stash->{channelBaseName} =$c->stash->{curProject}->name . "-" . $c->stash->{jobName};}1; - edit in src/Hydra/lib/Hydra/Controller/Root.pm at line 220[3.91]→[3.570:571](∅→∅),[3.323]→[3.570:571](∅→∅),[3.3467]→[3.570:571](∅→∅),[3.570]→[3.570:571](∅→∅),[3.750]→[3.750:751](∅→∅),[3.2106]→[3.4:21](∅→∅),[3.4]→[3.4:21](∅→∅),[3.21]→[3.392:441](∅→∅),[3.274]→[3.58:96](∅→∅),[3.441]→[3.58:96](∅→∅),[3.2158]→[3.58:96](∅→∅),[3.58]→[3.58:96](∅→∅)
sub job :Local {my ($self, $c, $projectName, $jobName) = @_;$c->stash->{template} = 'job.tt'; - edit in src/Hydra/lib/Hydra/Controller/Root.pm at line 221[3.2160]→[3.2985:3050](∅→∅),[3.3050]→[3.3763:3841](∅→∅),[3.1405]→[3.2332:2372](∅→∅),[3.3841]→[3.2332:2372](∅→∅),[3.2332]→[3.2332:2372](∅→∅)
my $project = $c->model('DB::Projects')->find($projectName);notFound($c, "Project $projectName doesn't exist.") if !defined $project;$c->stash->{curProject} = $project; - edit in src/Hydra/lib/Hydra/Controller/Root.pm at line 222[3.517]→[3.96:133](∅→∅),[3.2373]→[3.96:133](∅→∅),[3.96]→[3.96:133](∅→∅),[3.133]→[3.605:665](∅→∅),[3.665]→[3.2374:2446](∅→∅),[3.2446]→[3.733:775](∅→∅),[3.733]→[3.733:775](∅→∅),[2.536]→[3.708:712](∅→∅),[3.708]→[3.708:712](∅→∅)
$c->stash->{jobName} = $jobName;$c->stash->{builds} = [$c->model('DB::Builds')->search({finished => 1, project => $projectName, attrName => $jobName},{order_by => "timestamp DESC"})];} - file deletion: job.tt job.tt[3.857]→[3.1003:1033](∅→∅),[3.1033]→[3.1384:1384](∅→∅),[3.7332]→[3.1682:1712](∅→∅),[3.1712]→[3.1384:1384](∅→∅)
[% PROCESS common.tt %][% END %][% PROCESS renderBuildList builds=builds %]<h1>All builds for job <tt>[% curProject.name %]:[% jobName %]</tt></h1>[% WRAPPER layout.tt title="Job ‘$curProject.name:$jobName’" %] - replacement in src/Hydra/root/all.tt at line 4
<h1>All Builds[% IF curProject %] in Project <tt>[% curProject.name %]</tt>[% END %]</h1><h1>All Builds[% IF jobName %]for Job [% curProject.name %]:[% jobName %][% ELSE %][% IF curProject %] for Project <tt>[% curProject.name %]</tt>[% END %][% END %]</h1> - replacement in src/Hydra/root/build.tt at line 69
<td><a href="[% c.uri_for('/job' build.project.name build.attrname) %]"><tt>[% build.attrname %]</tt></a></td><td><a href="[% c.uri_for('/project' build.project.name 'job' build.attrname) %]"><tt>[% build.attrname %]</tt></a></td> - replacement in src/Hydra/root/common.tt at line 64
<td><a href="[% c.uri_for('/job' build.get_column("project") build.attrname) %]"><tt>[% build.attrname %]</tt></a></td><td><a href="[% c.uri_for('/project' build.get_column("project") 'job' build.attrname) %]"><tt>[% build.attrname %]</tt></a></td>