VHV6GI4L2GEV2PV3AEV4C22O3JB4XUS6WPEBFINYD5CJOBMAESAAC ZH6B56XRZON7AGKUPGKABU2SWOIQSYBTXVOMR66X6P6MG25Y4WZAC AWMM5OGV5EM4ZA3T3SCCU6LMKVJHKI2JANCNA236MD3O7AELE5XAC UOINKJ2JBCRTZPFTAXDPRJOEUWWPJ43IGVWLRIRLIGHLBMWDOGDQC A52HEFHQNVNF2OUSWDSUYVVXLYR2UFCGOORPCN27CJJYA4UDJA3AC LBNVQXUBEZ45SOTGVXK5UEZXIAIZTJLWZNUYFI4JZ6J65N3KPDVQC GJFYEU3SVP7TDSYXVZEYGKN4NVWSZX4754PPPTOYPRHUO5RMDWPQC 2UZJG6XTOBHA3UMWJ7DXNSWX5WKQK7ULCSFSIPSKNZHZ3WLSFUAQC OSVLMLCQQ52E47CX7TZAIFZSO4VVGRHWJTZY2G23YUPMDCKURTYAC JIJDYWPYMZZNFBCWYSYR72RNEW5MSI26MJ5UXXIU7DDX25IBR3CQC SKQXOQ7TGZDS7LR4WMFG6MNK7WW4WN4GXG4YCFFI77MU6ARVYUCQC ZILILXXKP4Z64UGIXIPTQ3KXPV76LFGSXVFLMLCO2HJBCQ5GP6AQC U4TD3AIQXBJFFUORTMIC4IHZTVBORRKL2TZ2FSP4G665ECZOEMNAC 3XTHEUMP2ZOMPQWE3S5QWHIHCEJNEXGDPQB3JUVZFPS3RFMY455QC OOQ2D3KCLFPYNAN253PHWLBQMB6OMO2KYQWQXLTP65SQAYZWQ5LAC PMNWRTGJ4GVSMSSAWSUD57B26PCRAHMZIQ5SIWJIK7A74ENKEQLAC MOX7XJ2E3XISXA7V7T4W6GEAGECGWBZ4PYSLTYBVVR4VAKOI33CQC CQTN62OHT4DY35E2MJEG7GFTVNEE5KRDMV6ASBQLBHN7BUDK7WHAC YDVFPMKPTZAZTF37O3V3CCMRIZHUMD6QNB6A775ZCKFTCHWRHVZQC TJK27WSBFOM6LKVCSA7LTTCWUGB4O2AL22PNIDQXS4BFOFCISH2QC AFTXA575C6JTVLVXTYJUKQGPLBO3NFORLO5XDSPHNL44HXLRH4TAC 2GK5DOU7ODF4WBSN3QTD3WIO52VTL2LOAXKGCDEMMAQPTEO4A4HAC BDSD2JLV4V4I52SE7MCZLYNDC4XU27ZNH7TYKLT7CA7YR5WRMQBAC 6HWHYPSW4Y2QBY3OWAJYEOOVICFFIWSL5OEAU2ZMLD3H4NXXKBOAC error($c, "This build cannot be restarted.")unless $build->finished && -f $build->drvpath;restartBuild($c->model('DB')->schema, $build);
my $n = restartBuilds($c->model('DB')->schema, $c->model('DB::Builds')->search({ id => $build->id }));error($c, "This build cannot be restarted.") if $n != 1;
$c->res->redirect($c->uri_for($c->controller('JobsetEval')->action_for('view'), $c->req->captures));}sub restart_aborted : Chained('eval') PathPart('restart-aborted') Args(0) {my ($self, $c) = @_;requireProjectOwner($c, $c->stash->{eval}->project);my $builds = $c->stash->{eval}->builds->search({ finished => 1, buildstatus => { -in => [3, 4] } });my $n = restartBuilds($c->model('DB')->schema, $builds);$c->flash->{successMsg} = "$n builds have been restarted.";
$build->update({ finished => 0, busy => 0, locker => "", iscachedbuild => 0});$build->buildproducts->delete;# Reset the stats for the evals to which this build belongs.# !!! Should do this in a trigger.foreach my $m ($build->jobsetevalmembers->all) {$m->eval->update({nrsucceeded => undef});}});}
1;
});}sub restartBuilds($$) {my ($db, $builds) = @_;my $n = 0;txn_do($db, sub {my @paths;$builds = $builds->search({ finished => 1 });foreach my $build ($builds->all) {next if !isValidPath($build->drvpath);push @paths, $build->drvpath;push @paths, $_->drvpath foreach $build->buildsteps;$build->update({ finished => 0, busy => 0, locker => "", iscachedbuild => 0});$n++;# Reset the stats for the evals to which this build belongs.# !!! Should do this in a trigger.$build->jobsetevals->update({nrsucceeded => undef});}# Clear Nix's negative failure cache.# FIXME: Add this to the API.system("nix-store", "--clear-failed-paths", @paths);