the database, just marked as cancelled, because otherwise the scheduler would just add them again.
ZILILXXKP4Z64UGIXIPTQ3KXPV76LFGSXVFLMLCO2HJBCQ5GP6AQC FEMR2C5W2FSKICFY2C25NBHJH7EJBCBX75GETTKM3AKO5KM3273AC A52HEFHQNVNF2OUSWDSUYVVXLYR2UFCGOORPCN27CJJYA4UDJA3AC OD5FSS5AJ3XRTV5Q4UQQF6JMBT6UUL7UUOMPPUBNOM6ZMVIHW35QC LBNVQXUBEZ45SOTGVXK5UEZXIAIZTJLWZNUYFI4JZ6J65N3KPDVQC BD3GRK4BQUGRQGTAILUITIH3RRSVUH6AKINVMMKYLBAAHAAUSB4AC WHAFVCEIHCWHKY2UVRGRQORERUAK6SZJI7ZENA367ZX4EXDIQMDQC J5UVLXOK6EDIL5I7VKWH4V2QDS4DPD7FHRK6XBWSXFRQS4JKXFZQC L2E6EVE2RVFVDCUNRJ4CZYSQNS2DZUA5DTBETHBDUQUV2KQQRAOQC WYN733STK5DUQSWHSS6EYZK32KPZII64HLX4NS7TYUSFZ6AAFLGAC IMY5UQE3I2UJRKEFJSW5OM4IY5QGQICDSAKCP7MGWGS7FO4ELXTQC H7CNGK4OJNRYZQGPLBGR72DULLEPFQ5UISF5J24D7IMA7SYW5LGQC 67P45PY4GTWQXZRCMR734D5YYN2OERZM57NBB2CZXEULQT2GRFNAC CMU3YKOUUB6VNP54NVYUKFHI3A46YAAANNYOZSHCUJIQOQEZ3GCAC KOTB7BKVML6T6S5ZNTQ6456FMGCRZCP3E3KVWCOW7T6SPRHC53LAC N22GPKYTOLZLBGTGDATQDVZ4R5APZEAOIA7L32X4UXBH4XNI7MWAC $c->flash->{afterRestart} = "Build has been restarted.";
$c->flash->{buildMsg} = "Build has been restarted.";$c->res->redirect($c->uri_for($self->action_for("view_build"), $c->req->captures));}sub cancel : Chained('build') PathPart Args(0) {my ($self, $c) = @_;my $build = $c->stash->{build};requireProjectOwner($c, $build->project);$c->model('DB')->schema->txn_do(sub {error($c, "This build cannot be cancelled.")if $build->finished || $build->schedulingInfo->busy;# !!! Actually, it would be nice to be able to cancel busy# builds as well, but we would have to send a signal or# something to the build process.$build->finished(1);$build->timestamp(time());$build->update;$c->model('DB::BuildResultInfo')->create({ id => $build->id, iscachedbuild => 0, buildstatus => 4 # = cancelled});$build->schedulingInfo->delete;});$c->flash->{buildMsg} = "Build has been cancelled.";
</tr>[% IF build.finished %]<tr><th>Build started:</th><td>[% IF build.resultInfo.starttime %][% PROCESS renderDateTime timestamp = build.resultInfo.starttime %][% ELSE %]<em>(cached build)</em>[% END %]</td></tr><tr><th>Build finished:</th><td>[% IF build.resultInfo.stoptime %][% PROCESS renderDateTime timestamp = build.resultInfo.stoptime %][% ELSE %]<em>(cached build)</em>[% END %]</td></tr><tr><th>Duration (seconds):</th><td>[% IF build.resultInfo.iscachedbuild %]<em>(cached build)</em>[% ELSE %][% build.resultInfo.stoptime - build.resultInfo.starttime %][% END %]</td>
[% IF build.resultInfo.logfile %]
[% IF build.finished && build.resultInfo.buildstatus != 4 %]<tr><th>Build started:</th><td>[% IF build.resultInfo.starttime %][% PROCESS renderDateTime timestamp = build.resultInfo.starttime %][% ELSE %]<em>(cached build)</em>[% END %]</td></tr><tr><th>Build finished:</th><td>[% IF build.resultInfo.stoptime %][% PROCESS renderDateTime timestamp = build.resultInfo.stoptime %][% ELSE %]<em>(cached build)</em>[% END %]</td></tr>
[% ELSE %]<tr><th>Priority:</th><td>[% build.schedulingInfo.priority %]</td></tr>[% IF build.schedulingInfo.busy %]<tr><th>Logfile:</th><td><tt>[% build.schedulingInfo.logfile %]</tt></td></tr>
[% IF !build.finished %]<tr><th>Priority:</th><td>[% build.schedulingInfo.priority %]</td></tr>[% IF build.schedulingInfo.busy %]<tr><th>Logfile:</th><td><tt>[% build.schedulingInfo.logfile %]</tt></td></tr>[% END %]