hydra: factored out build restart and
This commit is contained in:
		| @@ -357,26 +357,12 @@ sub restart : Chained('build') PathPart Args(0) { | |||||||
|     my $build = $c->stash->{build}; |     my $build = $c->stash->{build}; | ||||||
|  |  | ||||||
|     requireProjectOwner($c, $build->project); |     requireProjectOwner($c, $build->project); | ||||||
|  |      | ||||||
|  |     my $drvpath = $build->drvpath ; | ||||||
|  |     error($c, "This build cannot be restarted.") | ||||||
|  |         unless $build->finished && -f $drvpath ; | ||||||
|  |  | ||||||
|     txn_do($c->model('DB')->schema, sub { |     restartBuild($build); | ||||||
|         my $drvpath = $build->drvpath ; |  | ||||||
|         error($c, "This build cannot be restarted.") |  | ||||||
|             unless $build->finished && -f $drvpath ; |  | ||||||
|  |  | ||||||
|         my $cmd = "`nix-store -qR $drvpath`"; |  | ||||||
|         my $r = `nix-store --clear-failed-paths $cmd`; |  | ||||||
|    |  | ||||||
|         $build->update({finished => 0, timestamp => time}); |  | ||||||
|  |  | ||||||
|         $build->resultInfo->delete; |  | ||||||
|  |  | ||||||
|         $c->model('DB::BuildSchedulingInfo')->create( |  | ||||||
|             { id => $build->id |  | ||||||
|             , priority => 0 # don't know the original priority anymore... |  | ||||||
|             , busy => 0 |  | ||||||
|             , locker => "" |  | ||||||
|             }); |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     $c->flash->{buildMsg} = "Build has been restarted."; |     $c->flash->{buildMsg} = "Build has been restarted."; | ||||||
|      |      | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ use File::stat; | |||||||
| use File::Path; | use File::Path; | ||||||
|  |  | ||||||
| our @ISA = qw(Exporter); | our @ISA = qw(Exporter); | ||||||
| our @EXPORT = qw(fetchInput evalJobs checkBuild inputsToArgs captureStdoutStderr getReleaseName getBuildLog addBuildProducts); | our @EXPORT = qw(fetchInput evalJobs checkBuild inputsToArgs captureStdoutStderr getReleaseName getBuildLog addBuildProducts restartBuild); | ||||||
|  |  | ||||||
| sub scmPath { | sub scmPath { | ||||||
|     return getHydraPath . "/scm" ; |     return getHydraPath . "/scm" ; | ||||||
| @@ -764,3 +764,30 @@ sub checkBuild { | |||||||
|  |  | ||||||
|     return $build; |     return $build; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | sub restartBuild { | ||||||
|  |     my ($db, $build) = @_; | ||||||
|  |  | ||||||
|  |     txn_do($db, sub { | ||||||
|  |         my $drvpath = $build->drvpath ; | ||||||
|  |         my $outpath = $build->outpath ; | ||||||
|  |  | ||||||
|  |         my $paths = ""; | ||||||
|  |         foreach my $bs ($build->buildsteps) { | ||||||
|  |           $paths = $paths . " " . $bs->outpath; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         my $r = `nix-store --clear-failed-paths $paths $outpath`; | ||||||
|  |         $build->update({finished => 0, timestamp => time}); | ||||||
|  |  | ||||||
|  |         $build->resultInfo->delete; | ||||||
|  |  | ||||||
|  |         $db->resultset('BuildSchedulingInfo')->create( | ||||||
|  |             { id => $build->id | ||||||
|  |             , priority => 0 # don't know the original priority anymore... | ||||||
|  |             , busy => 0 | ||||||
|  |             , locker => "" | ||||||
|  |             }); | ||||||
|  |     }); | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user