From 30e5185acf6c1763d65630e70a72f2bb40273d77 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 22 Jan 2013 22:48:02 +0100 Subject: [PATCH] Remove the logfile and logSize columns from the database It's pointless to store these, since Nix knows where the logs are. Also handle (in fact require) Nix's new log storage scheme. Also some cleanups in the build page. --- src/lib/Hydra/Controller/Build.pm | 41 ++++++------------ src/lib/Hydra/Helper/AddBuilds.pm | 13 +----- src/lib/Hydra/Helper/Nix.pm | 34 ++++++++++++--- src/lib/Hydra/Schema/BuildInputs.pm | 18 ++++++-- .../Hydra/Schema/BuildMachineSystemTypes.pm | 6 +-- src/lib/Hydra/Schema/BuildMachines.pm | 6 +-- src/lib/Hydra/Schema/BuildProducts.pm | 11 +++-- src/lib/Hydra/Schema/BuildSteps.pm | 18 ++++---- src/lib/Hydra/Schema/Builds.pm | 36 ++++++++-------- src/lib/Hydra/Schema/Jobs.pm | 15 ++++--- src/lib/Hydra/Schema/JobsetEvalInputs.pm | 18 ++++++-- src/lib/Hydra/Schema/JobsetEvalMembers.pm | 18 ++++++-- src/lib/Hydra/Schema/JobsetEvals.pm | 17 +++++--- src/lib/Hydra/Schema/JobsetInputAlts.pm | 6 +-- src/lib/Hydra/Schema/JobsetInputs.pm | 10 ++--- src/lib/Hydra/Schema/Jobsets.pm | 21 +++++---- src/lib/Hydra/Schema/NewsItems.pm | 11 +++-- src/lib/Hydra/Schema/ProjectMembers.pm | 13 ++++-- src/lib/Hydra/Schema/Projects.pm | 39 +++++++++++------ src/lib/Hydra/Schema/ReleaseMembers.pm | 20 ++++++--- src/lib/Hydra/Schema/Releases.pm | 13 ++++-- src/lib/Hydra/Schema/UserRoles.pm | 6 +-- src/lib/Hydra/Schema/Users.pm | 26 +++++++---- src/lib/Hydra/Schema/ViewJobs.pm | 13 ++++-- src/lib/Hydra/Schema/Views.pm | 13 ++++-- src/lib/Hydra/View/TT.pm | 11 ++++- src/root/build.tt | 43 ++++--------------- src/script/hydra-build | 10 +---- src/script/hydra-queue-runner | 19 ++++---- src/sql/hydra.sql | 3 -- 30 files changed, 299 insertions(+), 229 deletions(-) diff --git a/src/lib/Hydra/Controller/Build.pm b/src/lib/Hydra/Controller/Build.pm index ab623c9d..4786409c 100644 --- a/src/lib/Hydra/Controller/Build.pm +++ b/src/lib/Hydra/Controller/Build.pm @@ -7,6 +7,7 @@ use Hydra::Helper::Nix; use Hydra::Helper::CatalystUtils; use Hydra::Helper::AddBuilds; use File::stat; +use File::Slurp; use Data::Dump qw(dump); use Nix::Store; @@ -30,10 +31,6 @@ sub build : Chained('/') PathPart CaptureArgs(1) { $c->stash->{project} = $c->stash->{build}->project; } -sub cat_log_command { - my ($path) = @_; - return ($path =~ /.bz2$/ ? "cat $path | bzip2 -d" : "cat $path"); -} sub view_build : Chained('build') PathPart('') Args(0) { my ($self, $c) = @_; @@ -48,22 +45,14 @@ sub view_build : Chained('build') PathPart('') Args(0) { $c->stash->{pathHash} = $c->stash->{available} ? queryPathHash($build->outpath) : undef; if (!$build->finished && $build->busy) { - my $logfile = $build->logfile; - $c->stash->{logtext} = logContents($logfile); + $c->stash->{logtext} = read_file($build->logfile, err_mode => 'quiet') // ""; } if ($build->finished && $build->iscachedbuild) { - (my $cachedBuildStep) = $c->model('DB::BuildSteps')->search({ outpath => $build->outpath }, {}) ; + (my $cachedBuildStep) = $c->model('DB::BuildSteps')->search({ outpath => $build->outpath }, {}); $c->stash->{cachedBuild} = $cachedBuildStep->build if defined $cachedBuildStep; } - (my $lastBuildStep) = $build->buildsteps->search({},{order_by => "stepnr DESC", rows => 1}); - my $path = defined $lastBuildStep ? $lastBuildStep->logfile : "" ; - if ($build->finished && ($build->buildstatus == 1 || $build->buildstatus == 6) && !($path eq "") && -f $lastBuildStep->logfile) { - my $logtext = logContents($path, 50); - $c->stash->{logtext} = removeAsciiEscapes($logtext); - } - if ($build->finished) { $c->stash->{prevBuilds} = [$c->model('DB::Builds')->search( { project => $c->stash->{project}->name @@ -102,40 +91,34 @@ sub view_nixlog : Chained('build') PathPart('nixlog') { $c->stash->{step} = $step; - showLog($c, $step->logfile, $mode); + showLog($c, $step->drvpath, $mode); } sub view_log : Chained('build') PathPart('log') { my ($self, $c, $mode) = @_; - - error($c, "Build didn't produce a log.") if !defined $c->stash->{build}->logfile; - - showLog($c, $c->stash->{build}->logfile, $mode); + showLog($c, $c->stash->{build}->drvpath, $mode); } sub showLog { - my ($c, $path, $mode) = @_; + my ($c, $drvPath, $mode) = @_; - my $fallbackpath = -f $path ? $path : "$path.bz2"; + my $logPath = getDrvLogPath($drvPath); - notFound($c, "Log file $path no longer exists.") unless -f $fallbackpath; - $path = $fallbackpath; + notFound($c, "The build log of derivation ‘$drvPath’ is not available.") unless defined $logPath; if (!$mode) { # !!! quick hack - my $pipestart = ($path =~ /.bz2$/ ? "cat $path | bzip2 -d" : "cat $path") ; - my $pipeline = $pipestart + my $pipeline = "nix-store -l $drvPath" . " | nix-log2xml | xsltproc " . $c->path_to("xsl/mark-errors.xsl") . " -" . " | xsltproc " . $c->path_to("xsl/log2html.xsl") . " - | tail -n +2"; - $c->stash->{template} = 'log.tt'; $c->stash->{logtext} = `$pipeline`; } elsif ($mode eq "raw") { - $c->stash->{'plain'} = { data => (scalar logContents($path)) || " " }; + $c->stash->{'plain'} = { data => (scalar logContents($drvPath)) || " " }; $c->forward('Hydra::View::Plain'); } @@ -145,12 +128,12 @@ sub showLog { $c->stash->{url} = $url; $c->stash->{reload} = !$c->stash->{build}->finished && $c->stash->{build}->busy; $c->stash->{title} = ""; - $c->stash->{contents} = (scalar logContents($path, 50)) || " "; + $c->stash->{contents} = (scalar logContents($drvPath, 50)) || " "; $c->stash->{template} = 'plain-reload.tt'; } elsif ($mode eq "tail") { - $c->stash->{'plain'} = { data => (scalar logContents($path, 50)) || " " }; + $c->stash->{'plain'} = { data => (scalar logContents($drvPath, 50)) || " " }; $c->forward('Hydra::View::Plain'); } diff --git a/src/lib/Hydra/Helper/AddBuilds.pm b/src/lib/Hydra/Helper/AddBuilds.pm index 1253b74a..78eda650 100644 --- a/src/lib/Hydra/Helper/AddBuilds.pm +++ b/src/lib/Hydra/Helper/AddBuilds.pm @@ -17,7 +17,7 @@ use File::Temp; our @ISA = qw(Exporter); our @EXPORT = qw( fetchInput evalJobs checkBuild inputsToArgs captureStdoutStderr - getReleaseName getBuildLog addBuildProducts restartBuild scmPath + getReleaseName addBuildProducts restartBuild scmPath getPrevJobsetEval ); @@ -27,16 +27,6 @@ sub scmPath { } -sub getBuildLog { - my ($drvPath) = @_; - my $logPath = ($ENV{NIX_LOG_DIR} || "/nix/var/log/nix"). "/drvs/" . basename $drvPath; - return $logPath if -e $logPath; - $logPath = "$logPath.bz2"; - return $logPath if -e $logPath; - return undef; -} - - sub getStorePathHash { my ($storePath) = @_; my $hash = `nix-store --query --hash $storePath` @@ -930,7 +920,6 @@ sub checkBuild { , buildstatus => -f "$outPath/nix-support/failed" ? 6 : 0 , starttime => $time , stoptime => $time - , logfile => getBuildLog($drvPath) , errormsg => "" , releasename => getReleaseName($outPath) ); diff --git a/src/lib/Hydra/Helper/Nix.pm b/src/lib/Hydra/Helper/Nix.pm index b3d91948..4b608966 100644 --- a/src/lib/Hydra/Helper/Nix.pm +++ b/src/lib/Hydra/Helper/Nix.pm @@ -14,7 +14,7 @@ our @EXPORT = qw( getPrimaryBuildsForView getPrimaryBuildTotal getViewResult getLatestSuccessfulViewResult - jobsetOverview removeAsciiEscapes logContents); + jobsetOverview removeAsciiEscapes getDrvLogPath logContents); sub getHydraHome { @@ -238,19 +238,39 @@ sub getLatestSuccessfulViewResult { return undef; } + +# Return the path of the build log of the given derivation, or undef +# if the log is gone. +sub getDrvLogPath { + my ($drvPath) = @_; + my $base = basename $drvPath; + my $fn = + ($ENV{NIX_LOG_DIR} || "/nix/var/log/nix") . "/drvs/" + . substr($base, 0, 2) . "/" + . substr($base, 2); + return $fn if -f $fn; + $fn .= ".bz2"; + return $fn if -f $fn; + return undef; +} + + sub logContents { - my ($path, $tail) = @_; + my ($drvPath, $tail) = @_; + my $logPath = getDrvLogPath($drvPath); + die unless defined $logPath; my $cmd; - if ($path =~ /.bz2$/) { - $cmd = "cat $path | bzip2 -d"; - $cmd = $cmd . " | tail -$tail" if defined $tail; + if ($logPath =~ /.bz2$/) { + $cmd = "bzip2 -d < $logPath"; + $cmd = $cmd . " | tail -n $tail" if defined $tail; } else { - $cmd = defined $tail ? "tail -$tail $path" : "cat $path"; + $cmd = defined $tail ? "tail -$tail $logPath" : "cat $logPath"; } - return `$cmd` if -e $path; + return `$cmd`; } + sub removeAsciiEscapes { my ($logtext) = @_; $logtext =~ s/\e\[[0-9]*[A-Za-z]//g; diff --git a/src/lib/Hydra/Schema/BuildInputs.pm b/src/lib/Hydra/Schema/BuildInputs.pm index bb9e9ad9..1b9406ad 100644 --- a/src/lib/Hydra/Schema/BuildInputs.pm +++ b/src/lib/Hydra/Schema/BuildInputs.pm @@ -127,7 +127,12 @@ __PACKAGE__->belongs_to( "build", "Hydra::Schema::Builds", { id => "build" }, - { join_type => "LEFT" }, + { + is_deferrable => 0, + join_type => "LEFT", + on_delete => "CASCADE", + on_update => "NO ACTION", + }, ); =head2 dependency @@ -142,11 +147,16 @@ __PACKAGE__->belongs_to( "dependency", "Hydra::Schema::Builds", { id => "dependency" }, - { join_type => "LEFT" }, + { + is_deferrable => 0, + join_type => "LEFT", + on_delete => "NO ACTION", + on_update => "NO ACTION", + }, ); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2012-04-15 12:38:16 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:sav9OmLm3qA/jiK5k+KIjw +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:byU/SLN03zNJlSFbi/3Bcg 1; diff --git a/src/lib/Hydra/Schema/BuildMachineSystemTypes.pm b/src/lib/Hydra/Schema/BuildMachineSystemTypes.pm index e64363da..8675b3e6 100644 --- a/src/lib/Hydra/Schema/BuildMachineSystemTypes.pm +++ b/src/lib/Hydra/Schema/BuildMachineSystemTypes.pm @@ -71,12 +71,12 @@ __PACKAGE__->belongs_to( "hostname", "Hydra::Schema::BuildMachines", { hostname => "hostname" }, - {}, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" }, ); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:CpwMC8YMFC4B7gzGBdzh0A +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:im3sfvrv5YY3i1IAOozeiA # You can replace this text with custom content, and it will be preserved on regeneration diff --git a/src/lib/Hydra/Schema/BuildMachines.pm b/src/lib/Hydra/Schema/BuildMachines.pm index d4e28d71..a6d081ff 100644 --- a/src/lib/Hydra/Schema/BuildMachines.pm +++ b/src/lib/Hydra/Schema/BuildMachines.pm @@ -109,12 +109,12 @@ __PACKAGE__->has_many( "buildmachinesystemtypes", "Hydra::Schema::BuildMachineSystemTypes", { "foreign.hostname" => "self.hostname" }, - {}, + undef, ); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:wboDtUIBUkvEiUHpe09kkg +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:OST5IMcvHKsXlNMCRazXhg # You can replace this text with custom content, and it will be preserved on regeneration diff --git a/src/lib/Hydra/Schema/BuildProducts.pm b/src/lib/Hydra/Schema/BuildProducts.pm index e7a16c64..13050e69 100644 --- a/src/lib/Hydra/Schema/BuildProducts.pm +++ b/src/lib/Hydra/Schema/BuildProducts.pm @@ -130,11 +130,16 @@ Related object: L =cut -__PACKAGE__->belongs_to("build", "Hydra::Schema::Builds", { id => "build" }, {}); +__PACKAGE__->belongs_to( + "build", + "Hydra::Schema::Builds", + { id => "build" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" }, +); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2012-02-29 00:47:18 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:dzTKwZ7bby7kplnSgta3Gw +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:KHwh/Np40jxKXc3ijMImEQ # You can replace this text with custom content, and it will be preserved on regeneration 1; diff --git a/src/lib/Hydra/Schema/BuildSteps.pm b/src/lib/Hydra/Schema/BuildSteps.pm index 39a54222..c4ac04ef 100644 --- a/src/lib/Hydra/Schema/BuildSteps.pm +++ b/src/lib/Hydra/Schema/BuildSteps.pm @@ -49,11 +49,6 @@ __PACKAGE__->table("BuildSteps"); data_type: 'text' is_nullable: 1 -=head2 logfile - - data_type: 'text' - is_nullable: 1 - =head2 busy data_type: 'integer' @@ -103,8 +98,6 @@ __PACKAGE__->add_columns( { data_type => "text", is_nullable => 1 }, "outpath", { data_type => "text", is_nullable => 1 }, - "logfile", - { data_type => "text", is_nullable => 1 }, "busy", { data_type => "integer", is_nullable => 0 }, "status", @@ -145,10 +138,15 @@ Related object: L =cut -__PACKAGE__->belongs_to("build", "Hydra::Schema::Builds", { id => "build" }, {}); +__PACKAGE__->belongs_to( + "build", + "Hydra::Schema::Builds", + { id => "build" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" }, +); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:5H+OkGT0zQEWkAjU+OlBdg +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ItI1OvxHfLTzLVEqfPRjHg 1; diff --git a/src/lib/Hydra/Schema/Builds.pm b/src/lib/Hydra/Schema/Builds.pm index a780573c..3cd02c46 100644 --- a/src/lib/Hydra/Schema/Builds.pm +++ b/src/lib/Hydra/Schema/Builds.pm @@ -183,11 +183,6 @@ __PACKAGE__->table("Builds"); data_type: 'text' is_nullable: 1 -=head2 logsize - - data_type: 'bigint' - is_nullable: 1 - =head2 size data_type: 'bigint' @@ -272,8 +267,6 @@ __PACKAGE__->add_columns( { data_type => "integer", is_nullable => 1 }, "errormsg", { data_type => "text", is_nullable => 1 }, - "logsize", - { data_type => "bigint", is_nullable => 1 }, "size", { data_type => "bigint", is_nullable => 1 }, "closuresize", @@ -310,7 +303,7 @@ __PACKAGE__->has_many( "buildinputs_builds", "Hydra::Schema::BuildInputs", { "foreign.build" => "self.id" }, - {}, + undef, ); =head2 buildinputs_dependencies @@ -325,7 +318,7 @@ __PACKAGE__->has_many( "buildinputs_dependencies", "Hydra::Schema::BuildInputs", { "foreign.dependency" => "self.id" }, - {}, + undef, ); =head2 buildproducts @@ -340,7 +333,7 @@ __PACKAGE__->has_many( "buildproducts", "Hydra::Schema::BuildProducts", { "foreign.build" => "self.id" }, - {}, + undef, ); =head2 buildsteps @@ -355,7 +348,7 @@ __PACKAGE__->has_many( "buildsteps", "Hydra::Schema::BuildSteps", { "foreign.build" => "self.id" }, - {}, + undef, ); =head2 job @@ -370,7 +363,7 @@ __PACKAGE__->belongs_to( "job", "Hydra::Schema::Jobs", { jobset => "jobset", name => "job", project => "project" }, - {}, + { is_deferrable => 0, on_delete => "NO ACTION", on_update => "CASCADE" }, ); =head2 jobset @@ -385,7 +378,7 @@ __PACKAGE__->belongs_to( "jobset", "Hydra::Schema::Jobsets", { name => "jobset", project => "project" }, - {}, + { is_deferrable => 0, on_delete => "NO ACTION", on_update => "CASCADE" }, ); =head2 jobsetevalinputs @@ -400,7 +393,7 @@ __PACKAGE__->has_many( "jobsetevalinputs", "Hydra::Schema::JobsetEvalInputs", { "foreign.dependency" => "self.id" }, - {}, + undef, ); =head2 jobsetevalmembers @@ -415,7 +408,7 @@ __PACKAGE__->has_many( "jobsetevalmembers", "Hydra::Schema::JobsetEvalMembers", { "foreign.build" => "self.id" }, - {}, + undef, ); =head2 project @@ -426,7 +419,12 @@ Related object: L =cut -__PACKAGE__->belongs_to("project", "Hydra::Schema::Projects", { name => "project" }, {}); +__PACKAGE__->belongs_to( + "project", + "Hydra::Schema::Projects", + { name => "project" }, + { is_deferrable => 0, on_delete => "NO ACTION", on_update => "CASCADE" }, +); =head2 releasemembers @@ -440,12 +438,12 @@ __PACKAGE__->has_many( "releasemembers", "Hydra::Schema::ReleaseMembers", { "foreign.build" => "self.id" }, - {}, + undef, ); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2012-04-15 16:38:10 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:AltTdmkzfwBMYToTkj84vA +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:34:39 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:wPBFqpUWncuD9xki8Pbnvg __PACKAGE__->has_many( "dependents", diff --git a/src/lib/Hydra/Schema/Jobs.pm b/src/lib/Hydra/Schema/Jobs.pm index 5c3a94d8..d9076075 100644 --- a/src/lib/Hydra/Schema/Jobs.pm +++ b/src/lib/Hydra/Schema/Jobs.pm @@ -122,7 +122,7 @@ __PACKAGE__->has_many( "foreign.jobset" => "self.jobset", "foreign.project" => "self.project", }, - {}, + undef, ); =head2 jobset @@ -137,7 +137,7 @@ __PACKAGE__->belongs_to( "jobset", "Hydra::Schema::Jobsets", { name => "jobset", project => "project" }, - {}, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, ); =head2 project @@ -148,10 +148,15 @@ Related object: L =cut -__PACKAGE__->belongs_to("project", "Hydra::Schema::Projects", { name => "project" }, {}); +__PACKAGE__->belongs_to( + "project", + "Hydra::Schema::Projects", + { name => "project" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, +); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ZyDc4SrY9RfmsLK6VOqHhw +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Vfl4QtuyeKeEk9+Ap7FP2A 1; diff --git a/src/lib/Hydra/Schema/JobsetEvalInputs.pm b/src/lib/Hydra/Schema/JobsetEvalInputs.pm index d5465a70..bfae5450 100644 --- a/src/lib/Hydra/Schema/JobsetEvalInputs.pm +++ b/src/lib/Hydra/Schema/JobsetEvalInputs.pm @@ -130,7 +130,12 @@ __PACKAGE__->belongs_to( "dependency", "Hydra::Schema::Builds", { id => "dependency" }, - { join_type => "LEFT" }, + { + is_deferrable => 0, + join_type => "LEFT", + on_delete => "NO ACTION", + on_update => "NO ACTION", + }, ); =head2 eval @@ -141,11 +146,16 @@ Related object: L =cut -__PACKAGE__->belongs_to("eval", "Hydra::Schema::JobsetEvals", { id => "eval" }, {}); +__PACKAGE__->belongs_to( + "eval", + "Hydra::Schema::JobsetEvals", + { id => "eval" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" }, +); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2012-04-15 16:38:10 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:PNxVBdoUNeUzf5BztiIhLw +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ng+Q6tMX5EJMD7DxRWVy7Q # You can replace this text with custom code or comments, and it will be preserved on regeneration diff --git a/src/lib/Hydra/Schema/JobsetEvalMembers.pm b/src/lib/Hydra/Schema/JobsetEvalMembers.pm index 81c4b6bb..614c8382 100644 --- a/src/lib/Hydra/Schema/JobsetEvalMembers.pm +++ b/src/lib/Hydra/Schema/JobsetEvalMembers.pm @@ -75,7 +75,12 @@ Related object: L =cut -__PACKAGE__->belongs_to("build", "Hydra::Schema::Builds", { id => "build" }, {}); +__PACKAGE__->belongs_to( + "build", + "Hydra::Schema::Builds", + { id => "build" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" }, +); =head2 eval @@ -85,11 +90,16 @@ Related object: L =cut -__PACKAGE__->belongs_to("eval", "Hydra::Schema::JobsetEvals", { id => "eval" }, {}); +__PACKAGE__->belongs_to( + "eval", + "Hydra::Schema::JobsetEvals", + { id => "eval" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" }, +); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:0K4lDPUQeK04SEXS5yBbeA +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:EVwSR9WBqbBdIHq1ANQMHg # You can replace this text with custom content, and it will be preserved on regeneration diff --git a/src/lib/Hydra/Schema/JobsetEvals.pm b/src/lib/Hydra/Schema/JobsetEvals.pm index df5fa673..73723e18 100644 --- a/src/lib/Hydra/Schema/JobsetEvals.pm +++ b/src/lib/Hydra/Schema/JobsetEvals.pm @@ -127,7 +127,7 @@ __PACKAGE__->belongs_to( "jobset", "Hydra::Schema::Jobsets", { name => "jobset", project => "project" }, - {}, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, ); =head2 jobsetevalinputs @@ -142,7 +142,7 @@ __PACKAGE__->has_many( "jobsetevalinputs", "Hydra::Schema::JobsetEvalInputs", { "foreign.eval" => "self.id" }, - {}, + undef, ); =head2 jobsetevalmembers @@ -157,7 +157,7 @@ __PACKAGE__->has_many( "jobsetevalmembers", "Hydra::Schema::JobsetEvalMembers", { "foreign.eval" => "self.id" }, - {}, + undef, ); =head2 project @@ -168,11 +168,16 @@ Related object: L =cut -__PACKAGE__->belongs_to("project", "Hydra::Schema::Projects", { name => "project" }, {}); +__PACKAGE__->belongs_to( + "project", + "Hydra::Schema::Projects", + { name => "project" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, +); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2012-04-15 22:30:41 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:jn81MbsAb5KZGwRpQ7qTEQ +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:qElGj6zzuI0xo426np3r1w __PACKAGE__->has_many( "buildIds", diff --git a/src/lib/Hydra/Schema/JobsetInputAlts.pm b/src/lib/Hydra/Schema/JobsetInputAlts.pm index 61c68fe4..eed22bab 100644 --- a/src/lib/Hydra/Schema/JobsetInputAlts.pm +++ b/src/lib/Hydra/Schema/JobsetInputAlts.pm @@ -105,11 +105,11 @@ __PACKAGE__->belongs_to( "jobsetinput", "Hydra::Schema::JobsetInputs", { jobset => "jobset", name => "input", project => "project" }, - {}, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, ); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2012-04-15 12:38:16 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:M1pOjrCZ2RgULsIPZjN7sg +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:M3pNBRLfxgSScrPj1zaajA 1; diff --git a/src/lib/Hydra/Schema/JobsetInputs.pm b/src/lib/Hydra/Schema/JobsetInputs.pm index 160b4d5c..3c239523 100644 --- a/src/lib/Hydra/Schema/JobsetInputs.pm +++ b/src/lib/Hydra/Schema/JobsetInputs.pm @@ -88,7 +88,7 @@ __PACKAGE__->belongs_to( "jobset", "Hydra::Schema::Jobsets", { name => "jobset", project => "project" }, - {}, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, ); =head2 jobsetinputalts @@ -107,7 +107,7 @@ __PACKAGE__->has_many( "foreign.jobset" => "self.jobset", "foreign.project" => "self.project", }, - {}, + undef, ); =head2 jobsets @@ -126,11 +126,11 @@ __PACKAGE__->has_many( "foreign.nixexprinput" => "self.name", "foreign.project" => "self.project", }, - {}, + undef, ); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:F/eZhnWZHATn9+O6MzuPqA +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:xjioYUPo6visoLAVDkDZ0Q 1; diff --git a/src/lib/Hydra/Schema/Jobsets.pm b/src/lib/Hydra/Schema/Jobsets.pm index dc075b4e..2a399fc6 100644 --- a/src/lib/Hydra/Schema/Jobsets.pm +++ b/src/lib/Hydra/Schema/Jobsets.pm @@ -157,7 +157,7 @@ __PACKAGE__->has_many( "foreign.jobset" => "self.name", "foreign.project" => "self.project", }, - {}, + undef, ); =head2 jobs @@ -175,7 +175,7 @@ __PACKAGE__->has_many( "foreign.jobset" => "self.name", "foreign.project" => "self.project", }, - {}, + undef, ); =head2 jobsetevals @@ -193,7 +193,7 @@ __PACKAGE__->has_many( "foreign.jobset" => "self.name", "foreign.project" => "self.project", }, - {}, + undef, ); =head2 jobsetinput @@ -208,7 +208,7 @@ __PACKAGE__->belongs_to( "jobsetinput", "Hydra::Schema::JobsetInputs", { jobset => "name", name => "nixexprinput", project => "project" }, - {}, + { is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" }, ); =head2 jobsetinputs @@ -226,7 +226,7 @@ __PACKAGE__->has_many( "foreign.jobset" => "self.name", "foreign.project" => "self.project", }, - {}, + undef, ); =head2 project @@ -237,10 +237,15 @@ Related object: L =cut -__PACKAGE__->belongs_to("project", "Hydra::Schema::Projects", { name => "project" }, {}); +__PACKAGE__->belongs_to( + "project", + "Hydra::Schema::Projects", + { name => "project" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, +); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Ikvo8+cq03DzjEUvXSqYiQ +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:9smV/zbSSxQNLiBcnADFXA 1; diff --git a/src/lib/Hydra/Schema/NewsItems.pm b/src/lib/Hydra/Schema/NewsItems.pm index 6b4aa9d1..0ed5c785 100644 --- a/src/lib/Hydra/Schema/NewsItems.pm +++ b/src/lib/Hydra/Schema/NewsItems.pm @@ -80,10 +80,15 @@ Related object: L =cut -__PACKAGE__->belongs_to("author", "Hydra::Schema::Users", { username => "author" }, {}); +__PACKAGE__->belongs_to( + "author", + "Hydra::Schema::Users", + { username => "author" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, +); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:YRMh0QI4JezFLj7nywGu6Q +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:lnA5Utkwk5WTyKA/M5mlyg 1; diff --git a/src/lib/Hydra/Schema/ProjectMembers.pm b/src/lib/Hydra/Schema/ProjectMembers.pm index 7cae0206..5493e32e 100644 --- a/src/lib/Hydra/Schema/ProjectMembers.pm +++ b/src/lib/Hydra/Schema/ProjectMembers.pm @@ -68,7 +68,12 @@ Related object: L =cut -__PACKAGE__->belongs_to("project", "Hydra::Schema::Projects", { name => "project" }, {}); +__PACKAGE__->belongs_to( + "project", + "Hydra::Schema::Projects", + { name => "project" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, +); =head2 username @@ -82,12 +87,12 @@ __PACKAGE__->belongs_to( "username", "Hydra::Schema::Users", { username => "username" }, - {}, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, ); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:09p6h8c3+hRIjw3XmX15rA +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:zW87n6E7xWaShcFbgFkVuw # You can replace this text with custom content, and it will be preserved on regeneration diff --git a/src/lib/Hydra/Schema/Projects.pm b/src/lib/Hydra/Schema/Projects.pm index 1cf0de35..fcf6e8ed 100644 --- a/src/lib/Hydra/Schema/Projects.pm +++ b/src/lib/Hydra/Schema/Projects.pm @@ -106,7 +106,7 @@ __PACKAGE__->has_many( "builds", "Hydra::Schema::Builds", { "foreign.project" => "self.name" }, - {}, + undef, ); =head2 jobs @@ -121,7 +121,7 @@ __PACKAGE__->has_many( "jobs", "Hydra::Schema::Jobs", { "foreign.project" => "self.name" }, - {}, + undef, ); =head2 jobsetevals @@ -136,7 +136,7 @@ __PACKAGE__->has_many( "jobsetevals", "Hydra::Schema::JobsetEvals", { "foreign.project" => "self.name" }, - {}, + undef, ); =head2 jobsets @@ -151,7 +151,7 @@ __PACKAGE__->has_many( "jobsets", "Hydra::Schema::Jobsets", { "foreign.project" => "self.name" }, - {}, + undef, ); =head2 owner @@ -162,7 +162,12 @@ Related object: L =cut -__PACKAGE__->belongs_to("owner", "Hydra::Schema::Users", { username => "owner" }, {}); +__PACKAGE__->belongs_to( + "owner", + "Hydra::Schema::Users", + { username => "owner" }, + { is_deferrable => 0, on_delete => "NO ACTION", on_update => "CASCADE" }, +); =head2 projectmembers @@ -176,7 +181,7 @@ __PACKAGE__->has_many( "projectmembers", "Hydra::Schema::ProjectMembers", { "foreign.project" => "self.name" }, - {}, + undef, ); =head2 releasemembers @@ -191,7 +196,7 @@ __PACKAGE__->has_many( "releasemembers", "Hydra::Schema::ReleaseMembers", { "foreign.project" => "self.name" }, - {}, + undef, ); =head2 releases @@ -206,7 +211,7 @@ __PACKAGE__->has_many( "releases", "Hydra::Schema::Releases", { "foreign.project" => "self.name" }, - {}, + undef, ); =head2 viewjobs @@ -221,7 +226,7 @@ __PACKAGE__->has_many( "viewjobs", "Hydra::Schema::ViewJobs", { "foreign.project" => "self.name" }, - {}, + undef, ); =head2 views @@ -236,12 +241,22 @@ __PACKAGE__->has_many( "views", "Hydra::Schema::Views", { "foreign.project" => "self.name" }, - {}, + undef, ); +=head2 usernames -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:cnheEOmK/5fCX1ui4OWPog +Type: many_to_many + +Composing rels: L -> username + +=cut + +__PACKAGE__->many_to_many("usernames", "projectmembers", "username"); + + +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:OCuhmxs8pZxvmk81eVLLcQ # These lines were loaded from '/home/rbvermaa/src/hydra/src/lib/Hydra/Schema/Projects.pm' found in @INC. # They are now part of the custom portion of this file # for you to hand-edit. If you do not either delete diff --git a/src/lib/Hydra/Schema/ReleaseMembers.pm b/src/lib/Hydra/Schema/ReleaseMembers.pm index c4871391..516e8bed 100644 --- a/src/lib/Hydra/Schema/ReleaseMembers.pm +++ b/src/lib/Hydra/Schema/ReleaseMembers.pm @@ -85,7 +85,12 @@ Related object: L =cut -__PACKAGE__->belongs_to("build", "Hydra::Schema::Builds", { id => "build" }, {}); +__PACKAGE__->belongs_to( + "build", + "Hydra::Schema::Builds", + { id => "build" }, + { is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" }, +); =head2 project @@ -95,7 +100,12 @@ Related object: L =cut -__PACKAGE__->belongs_to("project", "Hydra::Schema::Projects", { name => "project" }, {}); +__PACKAGE__->belongs_to( + "project", + "Hydra::Schema::Projects", + { name => "project" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, +); =head2 release @@ -109,11 +119,11 @@ __PACKAGE__->belongs_to( "release", "Hydra::Schema::Releases", { name => "release_", project => "project" }, - {}, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, ); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:SBMfzENPE0BjEwc2HAK7IA +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:eP00w5UJp1uTtiB7D5IhTQ 1; diff --git a/src/lib/Hydra/Schema/Releases.pm b/src/lib/Hydra/Schema/Releases.pm index fedf17b4..7709ece5 100644 --- a/src/lib/Hydra/Schema/Releases.pm +++ b/src/lib/Hydra/Schema/Releases.pm @@ -81,7 +81,12 @@ Related object: L =cut -__PACKAGE__->belongs_to("project", "Hydra::Schema::Projects", { name => "project" }, {}); +__PACKAGE__->belongs_to( + "project", + "Hydra::Schema::Projects", + { name => "project" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" }, +); =head2 releasemembers @@ -98,11 +103,11 @@ __PACKAGE__->has_many( "foreign.project" => "self.project", "foreign.release_" => "self.name", }, - {}, + undef, ); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:W6GOMPv7hc2EAdVaBOvc3A +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:UTUE3Hb89fT7prwnwwBgvQ 1; diff --git a/src/lib/Hydra/Schema/UserRoles.pm b/src/lib/Hydra/Schema/UserRoles.pm index e00f7805..a4b5ee3c 100644 --- a/src/lib/Hydra/Schema/UserRoles.pm +++ b/src/lib/Hydra/Schema/UserRoles.pm @@ -71,11 +71,11 @@ __PACKAGE__->belongs_to( "username", "Hydra::Schema::Users", { username => "username" }, - {}, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, ); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:TySGsLoTpeSuThILIXUaVg +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:KArPHyemtnm/siwE4x5mGQ 1; diff --git a/src/lib/Hydra/Schema/Users.pm b/src/lib/Hydra/Schema/Users.pm index 4cc39455..95370a84 100644 --- a/src/lib/Hydra/Schema/Users.pm +++ b/src/lib/Hydra/Schema/Users.pm @@ -90,7 +90,7 @@ __PACKAGE__->has_many( "newsitems", "Hydra::Schema::NewsItems", { "foreign.author" => "self.username" }, - {}, + undef, ); =head2 projectmembers @@ -105,10 +105,10 @@ __PACKAGE__->has_many( "projectmembers", "Hydra::Schema::ProjectMembers", { "foreign.username" => "self.username" }, - {}, + undef, ); -=head2 projects +=head2 projects_2s Type: has_many @@ -117,10 +117,10 @@ Related object: L =cut __PACKAGE__->has_many( - "projects", + "projects_2s", "Hydra::Schema::Projects", { "foreign.owner" => "self.username" }, - {}, + undef, ); =head2 userroles @@ -135,12 +135,22 @@ __PACKAGE__->has_many( "userroles", "Hydra::Schema::UserRoles", { "foreign.username" => "self.username" }, - {}, + undef, ); +=head2 projects -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:3fmr8WMAE9Dg7TKom76YIQ +Type: many_to_many + +Composing rels: L -> project + +=cut + +__PACKAGE__->many_to_many("projects", "projectmembers", "project"); + + +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:OAUFl/teGpfeleb6D8FPlw # These lines were loaded from '/home/rbvermaa/src/hydra/src/lib/Hydra/Schema/Users.pm' found in @INC. # They are now part of the custom portion of this file # for you to hand-edit. If you do not either delete diff --git a/src/lib/Hydra/Schema/ViewJobs.pm b/src/lib/Hydra/Schema/ViewJobs.pm index 716183b3..e4992f8d 100644 --- a/src/lib/Hydra/Schema/ViewJobs.pm +++ b/src/lib/Hydra/Schema/ViewJobs.pm @@ -116,7 +116,12 @@ Related object: L =cut -__PACKAGE__->belongs_to("project", "Hydra::Schema::Projects", { name => "project" }, {}); +__PACKAGE__->belongs_to( + "project", + "Hydra::Schema::Projects", + { name => "project" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, +); =head2 view @@ -130,11 +135,11 @@ __PACKAGE__->belongs_to( "view", "Hydra::Schema::Views", { name => "view_", project => "project" }, - {}, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, ); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:U9/ovaBs9kFO3flG/MZ5uA +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:cbSUw113ENPypbd/sICfgg 1; diff --git a/src/lib/Hydra/Schema/Views.pm b/src/lib/Hydra/Schema/Views.pm index 977a421e..192d7645 100644 --- a/src/lib/Hydra/Schema/Views.pm +++ b/src/lib/Hydra/Schema/Views.pm @@ -82,7 +82,12 @@ Related object: L =cut -__PACKAGE__->belongs_to("project", "Hydra::Schema::Projects", { name => "project" }, {}); +__PACKAGE__->belongs_to( + "project", + "Hydra::Schema::Projects", + { name => "project" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" }, +); =head2 viewjobs @@ -96,11 +101,11 @@ __PACKAGE__->has_many( "viewjobs", "Hydra::Schema::ViewJobs", { "foreign.project" => "self.project", "foreign.view_" => "self.name" }, - {}, + undef, ); -# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:cP9XYKw4y9QL+PDJYy9M5w +# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Vyd2+0RAF3XGTpq3KswfAQ 1; diff --git a/src/lib/Hydra/View/TT.pm b/src/lib/Hydra/View/TT.pm index 5b0cf2cd..d6fe943f 100644 --- a/src/lib/Hydra/View/TT.pm +++ b/src/lib/Hydra/View/TT.pm @@ -2,7 +2,16 @@ package Hydra::View::TT; use strict; use base 'Catalyst::View::TT'; +use Hydra::Helper::Nix; -__PACKAGE__->config(TEMPLATE_EXTENSION => '.tt'); +__PACKAGE__->config( + TEMPLATE_EXTENSION => '.tt', + expose_methods => [qw/log_exists/]); + +sub log_exists { + my ($self, $c, $drvPath) = @_; + my $x = getDrvLogPath($drvPath); + return defined $x; +} 1; diff --git a/src/root/build.tt b/src/root/build.tt index 1176e6af..2610e939 100644 --- a/src/root/build.tt +++ b/src/root/build.tt @@ -16,9 +16,9 @@ [% FOREACH step IN build.buildsteps -%] [% IF ( type == "All" ) || ( type == "Failed" && step.status != 0 ) || ( type == "Running" && step.busy == 1 ) -%] - [% log = c.uri_for('/build' build.id 'nixlog' step.stepnr) %] - + [% has_log = log_exists(step.drvpath); + log = c.uri_for('/build' build.id 'nixlog' step.stepnr); -%] + [% step.stepnr %] [% IF step.type == 0 %] @@ -51,7 +51,7 @@ [% ELSE %] Failed: [% HTML.escape(step.errormsg) %] [% END %] - [% IF step.logfile %] + [% IF has_log %] (log, raw, tail) [% END %] @@ -124,11 +124,11 @@ [% END %] - [% IF build.logfile %] + [% IF log_exists(build.drvpath) %] Logfile: - pretty + pretty raw tail @@ -208,9 +208,9 @@
[% HTML.escape(build.errormsg) -%]
[% END %] [% END %] + [% IF logtext %]

Log

-
[% HTML.escape(logtext) -%]
[% END %] @@ -275,16 +275,12 @@ Maintainer(s): - [% IF build.maintainers %][% HTML.escape(build.maintainers) %][% ELSE %](not given)[% END %] + [% IF build.maintainers %][% HTML.escape(build.maintainers) %][% ELSE %](not given)[% END %] System: [% build.system %] - - Max silent / timeout: - [% build.maxsilent %]s / [% build.timeout %]s - Derivation store path: @@ -322,7 +318,6 @@ [% INCLUDE renderFullBuildLink build=cachedBuild %] [% END %] - Build started: [% IF build.starttime %][% INCLUDE renderDateTime timestamp = build.starttime %][% ELSE %](cached build)[% END %] @@ -331,26 +326,6 @@ Build finished: [% IF build.stoptime %][% INCLUDE renderDateTime timestamp = build.stoptime %][% ELSE %](cached build)[% END %] - - Duration: - - [% IF build.iscachedbuild %] - (cached build) - [% ELSE %] - [% INCLUDE renderDuration duration = build.stoptime - build.starttime %] - [% END %] - - - [% IF build.logfile %] - - Logfile: - - Available - (raw, - tail) - - - [% END %] [% END %] [% IF !build.finished %] @@ -406,7 +381,7 @@

[% IF prevBuild %] -

Changes since previous build : [% INCLUDE renderFullBuildLink build=prevBuild, hideProjectName=1, hideJobsetName=1 %]

+

Changes since previous build: [% INCLUDE renderFullBuildLink build=prevBuild, hideProjectName=1, hideJobsetName=1 %]

[% INCLUDE renderInputDiff build2=build , build1=prevBuild %] [% END %] diff --git a/src/script/hydra-build b/src/script/hydra-build index 32dae0fd..4e6721cc 100755 --- a/src/script/hydra-build +++ b/src/script/hydra-build @@ -156,7 +156,7 @@ sub sendEmailNotification { $inputsTable->load(@lines); my $loglines = 50; - my $logtext = logContents($build->logfile, $loglines); + my $logtext = logContents($build->drvpath, $loglines); $logtext = removeAsciiEscapes($logtext); my $body = "Hi,\n" @@ -267,7 +267,6 @@ sub doBuild { , drvpath => $drvPathStep , outpath => $2 , system => $3 - , logfile => $4 , busy => 1 , starttime => time }); @@ -314,7 +313,6 @@ sub doBuild { , type => 0 # = build , drvpath => $drvPathStep , outpath => $2 - , logfile => getBuildLog($drvPathStep) , busy => 0 , status => 1 , starttime => time @@ -376,10 +374,6 @@ sub doBuild { } done: - my $logfile = getBuildLog($drvPath); - - my $logsize = defined $logfile ? stat($logfile)->size : 0; - my $size = 0; my $closuresize = 0; @@ -409,8 +403,6 @@ sub doBuild { , buildstatus => $buildStatus , starttime => $startTime , stoptime => $stopTime - , logfile => $logfile - , logsize => $logsize , size => $size , closuresize => $closuresize , errormsg => $errormsg diff --git a/src/script/hydra-queue-runner b/src/script/hydra-queue-runner index e1935357..06f02536 100755 --- a/src/script/hydra-queue-runner +++ b/src/script/hydra-queue-runner @@ -40,9 +40,7 @@ sub unlockDeadBuilds { } if ($unlock) { print "build ", $build->id, " pid $pid died, unlocking\n"; - $build->busy(0); - $build->locker(""); - $build->update; + $build->update({ busy => 0, locker => ""}); } } }); @@ -63,8 +61,8 @@ sub findBuildDependencyInQueue { return unless scalar @drvs > 0; ($depBuild) = $db->resultset('Builds')->search( - { drvpath => [ @drvs ], finished => 0, busy => 0, enabled => 1, disabled => 0 }, - { join => ['project'], rows => 1 } ) ; + { drvpath => [ @drvs ], finished => 0, busy => 0, enabled => 1, disabled => 0 }, + { join => ['project'], rows => 1 } ) ; return $depBuild; } @@ -113,11 +111,12 @@ sub checkBuilds { my $logfile = getcwd . "/logs/" . $build->id; mkdir(dirname $logfile); unlink($logfile); - $build->busy(1); - $build->locker($$); - $build->logfile($logfile); - $build->starttime(time); - $build->update; + $build->update( + { busy => 1 + , locker => $$ + , logfile => $logfile + , starttime => time() + }); push @buildsStarted, $build; } } diff --git a/src/sql/hydra.sql b/src/sql/hydra.sql index adf3ccbd..aa5a3d13 100644 --- a/src/sql/hydra.sql +++ b/src/sql/hydra.sql @@ -178,7 +178,6 @@ create table Builds ( errorMsg text, -- error message in case of a Nix failure - logSize bigint, size bigint, closureSize bigint, @@ -201,8 +200,6 @@ create table BuildSteps ( drvPath text, outPath text, - logfile text, - busy integer not null, status integer, -- 0 = success, 1 = failed