This commit is contained in:
Eelco Dolstra 2009-02-25 16:29:54 +00:00
parent f89757fbd4
commit cf37152849
4 changed files with 38 additions and 21 deletions

View file

@ -122,8 +122,8 @@ sub nix : Chained('build') PathPart('nix') CaptureArgs(0) {
error($c, "Path " . $build->outpath . " is no longer available.")
unless isValidPath($build->outpath);
$c->stash->{name} = $build->nixname;
$c->stash->{storePaths} = [$build->outpath];
my $pkgName = $build->nixname . "-" . $build->system . ".nixpkg";
$c->stash->{nixPkgs} = {$pkgName => $build};
}

View file

@ -2,7 +2,7 @@ package Hydra::Controller::Root;
use strict;
use warnings;
use base 'Catalyst::Controller';
use base 'Hydra::Base::Controller::Nix';
use Hydra::Helper::Nix;
use Hydra::Helper::CatalystUtils;
@ -97,12 +97,10 @@ sub queue :Local {
}
sub showJobStatus {
# Return the latest build for each job.
sub getLatestBuilds {
my ($c, $builds) = @_;
$c->stash->{template} = 'jobstatus.tt';
# Get the latest finished build for each unique job.
$c->stash->{latestBuilds} = [$builds->search({},
return $builds->search({},
{ join => 'resultInfo'
, where => {
finished => { "!=", 0 },
@ -111,7 +109,16 @@ sub showJobStatus {
"where project == me.project and attrName == me.attrName and finished != 0 and system == me.system)"),
}
, order_by => "project, attrname, system"
})];
});
}
sub showJobStatus {
my ($c, $builds) = @_;
$c->stash->{template} = 'jobstatus.tt';
# Get the latest finished build for each unique job.
$c->stash->{latestBuilds} = [getLatestBuilds($c, $builds)];
}
@ -538,6 +545,20 @@ sub job :Local {
}
sub nix : Chained('/') PathPart('nix') CaptureArgs(0) {
my ($self, $c) = @_;
my @builds = getLatestBuilds($c, $c->model('DB::Builds'));
my @storePaths = ();
foreach my $build (@builds) {
push @storePaths, $build->outpath if isValidPath($build->outpath);
};
$c->stash->{storePaths} = [@storePaths];
}
sub default :Path {
my ($self, $c) = @_;
notFound($c, "Page not found.");
@ -550,6 +571,10 @@ sub end : ActionClass('RenderView') {
if (scalar @{$c->error}) {
$c->stash->{template} = 'error.tt';
$c->stash->{errors} = $c->error;
if ($c->response->status >= 300) {
$c->stash->{httpStatus} =
$c->response->status . " " . HTTP::Status::status_message($c->response->status);
}
$c->clear_errors;
}
}

View file

@ -3,15 +3,8 @@ package Hydra::View::NixManifest;
use strict;
use base qw/Catalyst::View/;
use IO::Pipe;
use IPC::Run;
use POSIX qw(dup2);
sub captureStdoutStderr {
my $stdin = ""; my $stdout; my $stderr;
my $res = IPC::Run::run(\@_, \$stdin, \$stdout, \$stderr);
return ($res, $stdout, $stderr);
}
sub process {
my ($self, $c) = @_;
@ -20,8 +13,8 @@ sub process {
$c->response->content_type('text/x-nix-manifest');
my @paths = split '\n', `nix-store --query --requisites @storePaths`
or die "cannot query dependencies of path(s) @storePaths: $?";
my @paths = split '\n', `nix-store --query --requisites @storePaths`;
die "cannot query dependencies of path(s) @storePaths: $?" if $? != 0;
my $manifest =
"version {\n" .
@ -29,9 +22,8 @@ sub process {
"}\n";
foreach my $path (@paths) {
my ($res, $out, $err) = captureStdoutStderr(qw(nix-store --query --references), $path);
die "cannot query references of `$path':\n$err" unless $res;
my @refs = split '\n', $out;
my @refs = split '\n', `nix-store --query --references $path`;
die "cannot query references of `$path': $?" if $? != 0;
my $hash = `nix-store --query --hash $path`
or die "cannot query hash of `$path': $?";

View file

@ -1,7 +1,7 @@
[% WRAPPER layout.tt title="Error" %]
[% USE HTML %]
<h1>Error</h1>
<h1>[% IF httpStatus %][% httpStatus %][% ELSE %]Error[% END %]</h1>
<p>I'm very sorry, but an error occurred: <span class="error-msg">[% FOREACH error IN errors %] [% HTML.escape(error) %] [% END %]</span></p>