Fix indentation of build.tt
[?]
Feb 20, 2013, 4:02 PM
2GUAKGTBTNFFER343SQWSLFYIXXHJLDSGH5JHF7QMC3AVZB7Q3TQCDependencies
- [2]
2VBQRQ2QFix some XML well-formedness problems - [3]
PZL3SZM3Give every page a consistent title - [4]
NW3ZYPCMadded store path size graph - [5]
KJOGCBGZhydra: current build -> this build - [6]
WWZWUPFIif no previous successful build, do not show changes section - [7]
TW5ZQX5Z* Move up the build products in the builds page, since they're more - [8]
RYLUY5ZUDo not load charts lazily for now. - [9]
L2E6EVE2* Merged the Build and Job tables. - [10]
TCXFZZFN* hydra: make chart zoomable and clickable - [11]
4C7LKWH4Consistent capitalisation - [12]
ELABMHJI* hydra: layout changes - [13]
3PNG7NIBRemove trailing whitespace - [14]
JLICHVE6* hydra: do not show build history if there are no previous builds - [15]
Y6AHH4THRemove the logfile and logSize columns from the database - [16]
CLJQCY2X* Store info about all the build actions and allow them to be - [17]
6KIJX24RGet rid of unnecessary [%- and -%] tags - [18]
LKPVSUCIBuilds page: Remove redundant tab titles - [19]
LUPEGYR7Hydra: In case of failure, also show changes between last succesful build and the first failed build after this - [20]
A52HEFHQ* Allow builds to be restarted (if they failed with a transient error, - [21]
J5UVLXOK* Start of a basic Catalyst web interface. - [22]
6UESWI2QEnsure that the first tab is selected - [23]
XHK7IGYI* hdyra: show last succeeded build and changes since on build status summary if build has failed - [24]
ADP54EI4Fix the spacing around some <h3> headers - [25]
PHX2HIVG* Store info about the build inputs in the build record. - [26]
LQNG45RThydra: description at changes section - [27]
YPDYBK5GShow dependencies as a tree rather than a list - [28]
BD3GRK4B* Get rid of "positive failures" and separate log phases. - [29]
MOX7XJ2EMerge the BuildSchedulingInfo table into the Builds table - [30]
OEPUOUNBUsing twitter bootstrap for more consistent looks for Hydra - [31]
PMNWRTGJAdd multiple output support - [32]
HPEG2RHVMerge the BuildResultInfo table into the Builds table - [33]
AS5PAYLI - [34]
JBUTIGW7hydra: description at changes section - [35]
ZEEZRG2Eclean up build page for build that failed with result - [36]
G5YSUSNZIn build tables, hide the project, jobset and/or job name if they're constant - [37]
Z6MDQIGO* A quick (non-Web 2.0) interface to manually add builds to a release. - [38]
JARRBLZDBootstrapify the Hydra forms (except the project and jobset edit pages) - [39]
67P45PY4 - [40]
WHAFVCEI - [41]
VCOSLZRP - [42]
22JB5HNEmake changes section more compact/readable - [43]
WRIU3S5E* UI for cloning builds (not functional yet). - [44]
CEARA7OH* hydra: show running buildsteps on build page - [45]
BIZEPF2Tignore this - [46]
TH674WKJadd log diff to compare logs to previous builds - [47]
YFYRNNQUUse <h3> for running/failed build steps - [48]
ZLQL62FKOnly show "Running build steps" if there are running build steps - [49]
2R7GHSA4* hydra: added initial version of build graph - [50]
KAZWI5G4* hydra: buildpage, show changes since last build/successful build - [51]
IVEDB2LGOmit the small build status icon on the build page - [52]
3SQCOHZN* minor performance tweaks - [53]
E3X3C5LKReplace ugly link with nice small buttons - [54]
ZI535LI6* hydra: 'new' UI for project/jobset/job/build - [55]
EX4FXA5THandle active build steps of aborted builds properly - [56]
LQNBKF3D - [57]
BEKA3TMMHydra/25: At job pages, show the hash of the output
Change contents
- replacement in src/root/build.tt at line 26[4.11990]→[4.11990:13401](∅→∅),[4.13589]→[4.13589:13615](∅→∅),[4.13615]→[4.1329:1405](∅→∅),[4.1405]→[4.13615:13673](∅→∅),[4.13615]→[4.13615:13673](∅→∅)
log = c.uri_for('/build' build.id 'nixlog' step.stepnr); %]<tr [% IF has_log %] class="clickable" onclick="window.location = '[% log %]'" [% END %]><td>[% step.stepnr %]</td><td>[% IF step.type == 0 %]Build of <tt>[% INCLUDE renderOutputs outputs=step.buildstepoutputs %]</tt>[% ELSE %]Substitution of <tt>[% INCLUDE renderOutputs outputs=step.buildstepoutputs %]</tt>[% END %]</td><td>[% IF step.busy == 0;INCLUDE renderDuration duration = step.stoptime - step.starttime;ELSIF build.finished;INCLUDE renderDuration duration = build.stoptime - step.starttime;ELSE;INCLUDE renderDuration duration = curTime - step.starttime;END %]</td><td>[% step.machine.split('@').1 %]</td><td>[% IF step.busy == 1 %]<strong>Building</strong>[% ELSIF step.status == 0 %]Succeeded[% ELSIF step.status == 4 %]<span class="error">Aborted</span>[% ELSE %]<span class="error">Failed: [% HTML.escape(step.errormsg) %]</span>[% END %][%%] [%+ IF has_log; INCLUDE renderLogLinks url=log; END %]</td></tr>[% END %]log = c.uri_for('/build' build.id 'nixlog' step.stepnr); %]<tr [% IF has_log %] class="clickable" onclick="window.location = '[% log %]'" [% END %]><td>[% step.stepnr %]</td><td>[% IF step.type == 0 %]Build of <tt>[% INCLUDE renderOutputs outputs=step.buildstepoutputs %]</tt>[% ELSE %]Substitution of <tt>[% INCLUDE renderOutputs outputs=step.buildstepoutputs %]</tt>[% END %]</td><td>[% IF step.busy == 0;INCLUDE renderDuration duration = step.stoptime - step.starttime;ELSIF build.finished;INCLUDE renderDuration duration = build.stoptime - step.starttime;ELSE;INCLUDE renderDuration duration = curTime - step.starttime;END %]</td><td>[% step.machine.split('@').1 %]</td><td>[% IF step.busy == 1 %]<strong>Building</strong>[% ELSIF step.status == 0 %]Succeeded[% ELSIF step.status == 4 %]<span class="error">Aborted</span>[% ELSE %]<span class="error">Failed: [% HTML.escape(step.errormsg) %]</span>[% END %][%%] [%+ IF has_log; INCLUDE renderLogLinks url=log; END %]</td></tr> - edit in src/root/build.tt at line 60
[% END %] - edit in src/root/build.tt at line 65
<ul class="nav nav-tabs"><li class="active"><a href="#tabs-summary" data-toggle="tab">Summary</a></li><li><a href="#tabs-information" data-toggle="tab">Details</a></li><li><a href="#tabs-buildinputs" data-toggle="tab">Build inputs</a></li>[% IF relatedbuilds %]<li><a href="#tabs-relatedbuilds" data-toggle="tab">Related builds</a></li>[% END %][% IF build.buildsteps %]<li><a href="#tabs-buildsteps" data-toggle="tab">Build steps</a></li>[% END %][% IF build.dependents %]<li><a href="#tabs-usedby" data-toggle="tab">Used by</a></li>[% END%][% IF prevBuilds %]<li><a href="#tabs-history" data-toggle="tab">History chart</a></li>[% END %]</ul> - replacement in src/root/build.tt at line 75[4.7439]→[4.0:128](∅→∅),[4.128]→[4.161:244](∅→∅),[4.5848]→[4.161:244](∅→∅),[4.244]→[4.5935:6266](∅→∅),[4.5935]→[4.5935:6266](∅→∅),[4.181]→[4.762:873](∅→∅),[4.6266]→[4.762:873](∅→∅),[4.762]→[4.762:873](∅→∅),[4.873]→[4.6267:6394](∅→∅),[4.6394]→[4.973:1021](∅→∅),[4.4260]→[4.973:1021](∅→∅),[4.1021]→[4.6395:6451](∅→∅)
<ul class="nav nav-tabs"><li class="active"><a href="#tabs-summary" data-toggle="tab">Summary</a></li><li><a href="#tabs-information" data-toggle="tab">Details</a></li><li><a href="#tabs-buildinputs" data-toggle="tab">Build inputs</a></li>[% IF relatedbuilds %]<li><a href="#tabs-relatedbuilds" data-toggle="tab">Related builds</a></li>[% END %][% IF build.buildsteps %]<li><a href="#tabs-buildsteps" data-toggle="tab">Build steps</a></li>[% END %][% IF build.dependents %]<li><a href="#tabs-usedby" data-toggle="tab">Used by</a></li>[% END%][% IF prevBuilds %]<li><a href="#tabs-history" data-toggle="tab">History chart</a></li>[% END %]</ul><div id="generic-tabs" class="tab-content"><div id="tabs-summary" class="tab-pane active"><div id="generic-tabs" class="tab-content"><div id="tabs-summary" class="tab-pane active"> - replacement in src/root/build.tt at line 79
<table class="layoutTable"><table class="layoutTable"><tr><td>[% INCLUDE renderBuildStatusIcon size=128, build=build %]</td><td><table class="layoutTable"><tr><th>Build ID:</th><td>[% build.id %]</td></tr><tr><th>Status:</th><td>[% INCLUDE renderStatus build=build icon=0 %]</td></tr><tr><th>System:</th><td><tt>[% build.system %]</tt></td></tr>[% IF build.releasename %]<tr><th>Release name:</th><td><tt>[% HTML.escape(build.releasename) %]</tt></td></tr>[% ELSE %]<tr><th>Nix name:</th><td><tt>[% build.nixname %]</tt></td></tr>[% END %][% IF build.iscachedbuild %]<tr><th>Cached from:</th><td>[% INCLUDE renderFullBuildLink build=cachedBuild %]</td></tr>[% ELSE %]<tr><th>Duration:</th><td>[% INCLUDE renderDuration duration = build.stoptime - build.starttime %]; finished at [% INCLUDE renderDateTime timestamp = build.stoptime %]</td></tr>[% END %][% IF log_exists(build.drvpath) %] - edit in src/root/build.tt at line 122
<th>Logfile:</th> - replacement in src/root/build.tt at line 124
[% INCLUDE renderBuildStatusIcon size=128, build=build %]<a class="btn btn-mini" href="[% c.uri_for('/build' build.id 'log') %]">pretty</a><a class="btn btn-mini" href="[% c.uri_for('/build' build.id 'log' 'raw') %]">raw</a><a class="btn btn-mini" href="[% c.uri_for('/build' build.id 'log' 'tail-reload') %]">tail</a> - edit in src/root/build.tt at line 128[4.6644]→[4.6644:6879](∅→∅),[4.6879]→[4.0:301](∅→∅),[4.301]→[4.6879:6919](∅→∅),[4.6879]→[4.6879:6919](∅→∅),[4.6919]→[3.349:554](∅→∅),[3.554]→[4.6919:7546](∅→∅),[4.6919]→[4.6919:7546](∅→∅),[4.8045]→[4.13716:14146](∅→∅),[4.14146]→[4.8103:8244](∅→∅),[4.8103]→[4.8103:8244](∅→∅),[4.8244]→[4.14147:14329](∅→∅),[4.14329]→[4.8740:8870](∅→∅),[4.8740]→[4.8740:8870](∅→∅),[4.8870]→[4.10181:10250](∅→∅),[4.10250]→[4.8927:9073](∅→∅),[4.8927]→[4.8927:9073](∅→∅),[4.9073]→[4.10251:10376](∅→∅),[4.10376]→[4.9210:9680](∅→∅),[4.9210]→[4.9210:9680](∅→∅)
<td><table class="layoutTable"><tr><th>Build ID:</th><td>[% build.id %]</td></tr><tr><th>Status:</th><td>[% INCLUDE renderStatus build=build icon=0 %]</td></tr><tr><th>System:</th><td><tt>[% build.system %]</tt></td></tr>[% IF build.releasename %]<tr><th>Release name:</th><td><tt>[% HTML.escape(build.releasename) %]</tt></td></tr>[% ELSE %]<tr><th>Nix name:</th><td><tt>[% build.nixname %]</tt></td></tr>[% END %][% IF build.iscachedbuild %]<tr><th>Cached from:</th><td>[% INCLUDE renderFullBuildLink build=cachedBuild %]</td></tr>[% ELSE %]<tr><th>Duration:</th><td>[% INCLUDE renderDuration duration = build.stoptime - build.starttime %]; finished at [% INCLUDE renderDateTime timestamp = build.stoptime %]</td></tr>[% END %][% IF log_exists(build.drvpath) %]<tr><th>Logfile:</th><td><a class="btn btn-mini" href="[% c.uri_for('/build' build.id 'log') %]">pretty</a><a class="btn btn-mini" href="[% c.uri_for('/build' build.id 'log' 'raw') %]">raw</a><a class="btn btn-mini" href="[% c.uri_for('/build' build.id 'log' 'tail-reload') %]">tail</a></td></tr>[% END %]</table></td> - replacement in src/root/build.tt at line 129
</table>[% END %]</table></td></tr></table> - replacement in src/root/build.tt at line 135[4.843]→[4.9722:9774](∅→∅),[4.9774]→[3.555:577](∅→∅),[3.577]→[4.9774:9896](∅→∅),[4.9774]→[4.9774:9896](∅→∅),[4.9896]→[4.1776:2148](∅→∅),[4.1776]→[4.1776:2148](∅→∅),[4.2148]→[4.9897:9947](∅→∅)
[% IF c.user_exists && available %]<br/><form class="form-horizontal" action="[% c.uri_for('/build' build.id 'add-to-release') %]" method="post"><div class="control-group"><label class="control-label">Add to release</label><div class="controls"><input type="text" class="input" name="name"></input><button type="submit" class="btn btn-success">Apply</button></div></div></form>[% END %][% IF c.user_exists && available %]<br/><form class="form-horizontal" action="[% c.uri_for('/build' build.id 'add-to-release') %]" method="post"><div class="control-group"><label class="control-label">Add to release</label><div class="controls"><input type="text" class="input" name="name"></input><button type="submit" class="btn btn-success">Apply</button></div></div></form>[% END %] - replacement in src/root/build.tt at line 148
[% IF build.buildproducts %][% IF build.buildproducts %] - replacement in src/root/build.tt at line 150
<h3>Build products</h3><h3>Build products</h3> - replacement in src/root/build.tt at line 152
[% IF !available %]<p class="error">Note: this build is no longer available.</p>[% END %][% IF !available %]<p class="error">Note: this build is no longer available.</p>[% END %] - replacement in src/root/build.tt at line 156
[% INCLUDE renderProductList latestRoot=['/job' build.project.name build.jobset.name build.job.name 'latest'] %][% INCLUDE renderProductList latestRoot=['/job' build.project.name build.jobset.name build.job.name 'latest'] %] - replacement in src/root/build.tt at line 158
[% END %][% END %] - replacement in src/root/build.tt at line 160[4.1107]→[4.174:202](∅→∅),[4.202]→[4.83:124](∅→∅),[4.83]→[4.83:124](∅→∅),[4.62]→[4.0:58](∅→∅),[4.124]→[4.0:58](∅→∅),[4.1146]→[4.0:58](∅→∅),[4.58]→[4.10375:10393](∅→∅)
[% IF build.busy %]<h3>Running build steps</h3>[% INCLUDE renderBuildSteps type="Running" %][% END %][% IF build.busy %]<h3>Running build steps</h3>[% INCLUDE renderBuildSteps type="Running" %][% END %] - replacement in src/root/build.tt at line 165[4.32]→[4.10394:10536](∅→∅),[4.10536]→[4.125:185](∅→∅),[4.7982]→[4.125:185](∅→∅),[4.185]→[4.10537:10648](∅→∅)
[% IF build.finished %][% IF build.buildsteps && build.buildstatus != 0 && build.buildstatus != 6 %]<h3>Failed build steps</h3>[% INCLUDE renderBuildSteps type="Failed" %][% END %][% IF build.finished %][% IF build.buildsteps && build.buildstatus != 0 && build.buildstatus != 6 %]<h3>Failed build steps</h3>[% INCLUDE renderBuildSteps type="Failed" %][% END %] - replacement in src/root/build.tt at line 171[4.127]→[4.0:41](∅→∅),[4.41]→[4.28:57](∅→∅),[4.57]→[4.1071:1135](∅→∅),[4.79]→[4.1071:1135](∅→∅),[4.1135]→[4.49:73](∅→∅),[4.49]→[4.49:73](∅→∅),[4.73]→[4.273:404](∅→∅),[4.404]→[4.1282:1386](∅→∅),[4.1386]→[4.339:638](∅→∅),[4.638]→[4.1682:1742](∅→∅),[4.1682]→[4.1682:1742](∅→∅),[4.1742]→[4.639:899](∅→∅),[4.899]→[4.2000:2026](∅→∅),[4.2000]→[4.2000:2026](∅→∅),[4.40]→[4.307:353](∅→∅),[4.727]→[4.307:353](∅→∅),[4.2026]→[4.307:353](∅→∅),[4.307]→[4.307:353](∅→∅),[4.353]→[4.1136:1817](∅→∅),[4.1817]→[4.10649:10671](∅→∅),[4.10671]→[4.957:1356](∅→∅),[4.957]→[4.957:1356](∅→∅)
[% IF prevSuccessfulBuild %]<h3>Changes</h3><table class="table table-striped table-condensed"><thead><th>Last successful build <tt>[% INCLUDE renderDateTime timestamp = prevSuccessfulBuild.timestamp %]</tt></th>[% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<th>First broken build <tt>[% INCLUDE renderDateTime timestamp = firstBrokenBuild.timestamp %]</tt><a class="btn btn-mini" href="[% c.uri_for(c.controller('API').action_for('logdiff') prevSuccessfulBuild.id firstBrokenBuild.id ) %]">log diff</a></th>[% END %]<th>This build <tt>[% INCLUDE renderDateTime timestamp = build.timestamp %]</tt><a class="btn btn-mini" href="[% c.uri_for(c.controller('API').action_for('logdiff') prevSuccessfulBuild.id build.id) %]">log diff</a></th></thead><tr><td valign="center">[% INCLUDE renderBuildStatusIcon build=prevSuccessfulBuild size=32 %] [% INCLUDE renderFullBuildLink build=prevSuccessfulBuild, hideProjectName=1, hideJobsetName=1 %]</td>[% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<td valign="center">[% INCLUDE renderBuildStatusIcon build=firstBrokenBuild size=32 %] [% INCLUDE renderFullBuildLink build=firstBrokenBuild, hideProjectName=1, hideJobsetName=1 %]</td>[% END %]<td>[% INCLUDE renderBuildStatusIcon build=build size=32 %] [% INCLUDE renderFullBuildLink build=build, hideProjectName=1, hideJobsetName=1 %]</td></tr><tr><td></td>[% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<td>[% INCLUDE renderInputDiff build1=prevSuccessfulBuild , build2=firstBrokenBuild %]</td>[% END %]<td>[% INCLUDE renderInputDiff build1=prevSuccessfulBuild , build2=build %]</td></tr></table>[% IF prevSuccessfulBuild %]<h3>Changes</h3><table class="table table-striped table-condensed"><thead><th>Last successful build <tt>[% INCLUDE renderDateTime timestamp = prevSuccessfulBuild.timestamp %]</tt></th>[% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<th>First broken build <tt>[% INCLUDE renderDateTime timestamp = firstBrokenBuild.timestamp %]</tt><a class="btn btn-mini" href="[% c.uri_for(c.controller('API').action_for('logdiff') prevSuccessfulBuild.id firstBrokenBuild.id ) %]">log diff</a></th> - edit in src/root/build.tt at line 181
<th>This build <tt>[% INCLUDE renderDateTime timestamp = build.timestamp %]</tt><a class="btn btn-mini" href="[% c.uri_for(c.controller('API').action_for('logdiff') prevSuccessfulBuild.id build.id) %]">log diff</a></th></thead><tr><td valign="center">[% INCLUDE renderBuildStatusIcon build=prevSuccessfulBuild size=32 %] [% INCLUDE renderFullBuildLink build=prevSuccessfulBuild, hideProjectName=1, hideJobsetName=1 %]</td>[% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<td valign="center">[% INCLUDE renderBuildStatusIcon build=firstBrokenBuild size=32 %] [% INCLUDE renderFullBuildLink build=firstBrokenBuild, hideProjectName=1, hideJobsetName=1 %]</td>[% END %]<td>[% INCLUDE renderBuildStatusIcon build=build size=32 %] [% INCLUDE renderFullBuildLink build=build, hideProjectName=1, hideJobsetName=1 %]</td></tr><tr><td></td>[% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<td>[% INCLUDE renderInputDiff build1=prevSuccessfulBuild , build2=firstBrokenBuild %]</td>[% END %]<td>[% INCLUDE renderInputDiff build1=prevSuccessfulBuild , build2=build %]</td></tr></table>[% END %] - replacement in src/root/build.tt at line 198
[% IF build.errormsg && build.buildstatus != 5 %][% IF build.errormsg && build.buildstatus != 5 %]<h2 id="nix-error">Nix error output</h2><pre class="buildlog">[% HTML.escape(build.errormsg) %]</pre>[% END %] - replacement in src/root/build.tt at line 203
<h2 id="nix-error">Nix error output</h2>[% END %] - replacement in src/root/build.tt at line 205
<pre class="buildlog">[% HTML.escape(build.errormsg) %]</pre>[% END %][% END %][% IF logtext %]<h2>Log</h2><pre class="buildlog">[% HTML.escape(logtext) %]</pre>[% END %] - replacement in src/root/build.tt at line 210[4.10378]→[4.10976:11046](∅→∅),[4.10976]→[4.10976:11046](∅→∅),[4.11046]→[4.95:174](∅→∅),[4.174]→[4.11127:11221](∅→∅),[4.11127]→[4.11127:11221](∅→∅)
[% IF logtext %]<h2>Log</h2><pre class="buildlog">[% HTML.escape(logtext) %]</pre>[% END %]</div><div id="tabs-information" class="tab-pane"></div> - replacement in src/root/build.tt at line 212[4.11260]→[4.11260:11304](∅→∅),[4.12179]→[4.12179:12625](∅→∅),[4.12871]→[4.12871:13869](∅→∅),[4.13869]→[4.10379:10510](∅→∅),[4.10510]→[4.14009:14197](∅→∅),[4.14009]→[4.14009:14197](∅→∅),[4.14370]→[4.14370:14763](∅→∅),[4.14763]→[4.14330:14379](∅→∅),[4.14379]→[4.14811:14836](∅→∅),[4.14811]→[4.14811:14836](∅→∅),[4.14836]→[4.14380:14466](∅→∅),[4.14466]→[4.14887:15121](∅→∅),[4.14887]→[4.14887:15121](∅→∅),[4.5872]→[4.15122:15145](∅→∅),[4.15370]→[4.15370:15589](∅→∅),[4.15871]→[4.15871:16372](∅→∅),[4.17322]→[4.17322:18176](∅→∅),[4.18176]→[4.5873:5901](∅→∅),[4.10056]→[4.5873:5901](∅→∅),[4.5901]→[4.18177:18270](∅→∅)
<table class="layoutTable">[% IF build.nixexprinput %]<tr><th>Nix expression:</th><td>file <tt>[% HTML.escape(build.nixexprpath) %]</tt> in input <tt>[% HTML.escape(build.nixexprinput) %]</tt></td></tr>[% END %]<tr><th>Nix name:</th><td><tt>[% build.nixname %]</tt></td></tr><tr><th>Short description:</th><td>[% IF build.description %][% HTML.escape(build.description) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>Long description:</th><td>[% IF build.longdescription %][% HTML.escape(build.longdescription) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>License:</th><td>[% IF build.license %][% HTML.escape(build.license) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>Homepage:</th><td>[% IF build.homepage %]<a [% HTML.attributes(href => build.homepage) %]>[% HTML.escape(build.homepage) %]</a>[% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>Maintainer(s):</th><td>[% IF build.maintainers %][% HTML.escape(build.maintainers) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>System:</th><td><tt>[% build.system %]</tt></td></tr><tr><th>Derivation store path:</th><td><tt>[% build.drvpath %]</tt>[% IF drvAvailable %](<a href="[% c.uri_for('/build' build.id 'deps') %]#buildtime">build-time dependencies</a>)[% END %]</td></tr><tr><th>Output store paths:</th><td><tt>[% INCLUDE renderOutputs outputs=build.buildoutputs %]</tt>[% IF available %](<a href="[% c.uri_for('/build' build.id 'deps') %]#runtime">runtime dependencies</a>)[% END %]</td></tr><tr><th>Time added:</th><td>[% INCLUDE renderDateTime timestamp = build.timestamp %]</td></tr>[% IF build.finished && build.buildstatus != 4 %]<tr><th>Build started:</th><td>[% IF build.starttime %][% INCLUDE renderDateTime timestamp = build.starttime %][% ELSE %]<em>(cached build)</em>[% END %]</td></tr><tr><th>Build finished:</th><td>[% IF build.stoptime %][% INCLUDE renderDateTime timestamp = build.stoptime %][% ELSE %]<em>(cached build)</em>[% END %]</td></tr>[% END %][% IF !build.finished %]<tr><th>Priority:</th><td>[% build.priority %]</td></tr>[% END %][% IF build.finished && build.buildproducts %]<tr><th>Availability:</th><td>[% IF !available %]<em>Build output is no longer available</em>[% ELSIF build.keep %]<em>Build output will be kept permanently</em>[% ELSE %]<em>Build output is available, but may be garbage-collected</em>[% END %]</td></tr>[% END %]</table></div><div id="tabs-buildinputs" class="tab-pane"><div id="tabs-information" class="tab-pane"> - replacement in src/root/build.tt at line 214[4.18310]→[4.18310:18575](∅→∅),[4.18575]→[4.175:231](∅→∅),[4.231]→[4.18632:18916](∅→∅),[4.18632]→[4.18632:18916](∅→∅),[4.18916]→[2.0:85](∅→∅),[2.85]→[4.19005:19479](∅→∅),[4.19005]→[4.19005:19479](∅→∅),[4.19479]→[4.232:262](∅→∅),[4.262]→[4.19510:19562](∅→∅),[4.19510]→[4.19510:19562](∅→∅)
<table class="tablesorter table table-striped table-condensed"><thead><tr><th>Name</th><th>Type</th><th>Value</th><th>Revision</th><th>Store path</th></tr></thead><tbody>[% FOREACH input IN build.inputs %]<tr><td><tt>[% input.name %]</tt></td><td><tt>[% type = input.type; inputTypes.$type %]</tt></td><td>[% IF input.type == "build" || input.type == "sysbuild" %][% INCLUDE renderFullBuildLink build=input.dependency %][% ELSIF input.type == "string" || input.type == "boolean" %]<tt>"[% input.value %]"</tt>[% ELSE %]<tt>[% input.uri %]</tt>[% END %]</td><td>[% IF input.revision %][% input.revision %][% END %]</td><td><tt>[% input.path %]</tt></td></tr>[% END %]</tbody></table><table class="layoutTable">[% IF build.nixexprinput %]<tr><th>Nix expression:</th><td>file <tt>[% HTML.escape(build.nixexprpath) %]</tt> in input <tt>[% HTML.escape(build.nixexprinput) %]</tt></td></tr>[% END %]<tr><th>Nix name:</th><td><tt>[% build.nixname %]</tt></td></tr><tr><th>Short description:</th><td>[% IF build.description %][% HTML.escape(build.description) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>Long description:</th><td>[% IF build.longdescription %][% HTML.escape(build.longdescription) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>License:</th><td>[% IF build.license %][% HTML.escape(build.license) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>Homepage:</th><td>[% IF build.homepage %]<a [% HTML.attributes(href => build.homepage) %]>[% HTML.escape(build.homepage) %]</a>[% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>Maintainer(s):</th><td>[% IF build.maintainers %][% HTML.escape(build.maintainers) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>System:</th><td><tt>[% build.system %]</tt></td></tr><tr><th>Derivation store path:</th><td><tt>[% build.drvpath %]</tt>[% IF drvAvailable %] (<a href="[% c.uri_for('/build' build.id 'deps') %]#buildtime">build-time dependencies</a>)[% END %]</td></tr><tr><th>Output store paths:</th><td><tt>[% INCLUDE renderOutputs outputs=build.buildoutputs %]</tt> [% IF available %](<a href="[% c.uri_for('/build' build.id 'deps') %]#runtime">runtime dependencies</a>)[% END %]</td></tr><tr><th>Time added:</th><td>[% INCLUDE renderDateTime timestamp = build.timestamp %]</td></tr>[% IF build.finished && build.buildstatus != 4 %]<tr><th>Build started:</th><td>[% IF build.starttime %][% INCLUDE renderDateTime timestamp = build.starttime %][% ELSE %]<em>(cached build)</em>[% END %]</td></tr><tr><th>Build finished:</th><td>[% IF build.stoptime %][% INCLUDE renderDateTime timestamp = build.stoptime %][% ELSE %]<em>(cached build)</em>[% END %]</td></tr>[% END %][% IF !build.finished %]<tr><th>Priority:</th><td>[% build.priority %]</td></tr>[% END %][% IF build.finished && build.buildproducts %]<tr><th>Availability:</th><td>[% IF !available %]<em>Build output is no longer available</em>[% ELSIF build.keep %]<em>Build output will be kept permanently</em>[% ELSE %]<em>Build output is available, but may be garbage-collected</em>[% END %]</td></tr>[% END %]</table></div> - replacement in src/root/build.tt at line 294
<p/><div id="tabs-buildinputs" class="tab-pane"> - replacement in src/root/build.tt at line 296[4.1148]→[4.1148:1175](∅→∅),[4.1175]→[4.10511:10649](∅→∅),[4.694]→[4.1277:1351](∅→∅),[4.2118]→[4.1277:1351](∅→∅),[4.10649]→[4.1277:1351](∅→∅),[4.1277]→[4.1277:1351](∅→∅)
[% IF prevBuild %]<h3>Changes since previous build: [% INCLUDE renderFullBuildLink build=prevBuild, hideProjectName=1, hideJobsetName=1 %]</h3>[% INCLUDE renderInputDiff build2=build , build1=prevBuild %]<table class="tablesorter table table-striped table-condensed"><thead><tr><th>Name</th><th>Type</th><th>Value</th><th>Revision</th><th>Store path</th></tr></thead><tbody>[% FOREACH input IN build.inputs %]<tr><td><tt>[% input.name %]</tt></td><td><tt>[% type = input.type; inputTypes.$type %]</tt></td><td>[% IF input.type == "build" || input.type == "sysbuild" %][% INCLUDE renderFullBuildLink build=input.dependency %][% ELSIF input.type == "string" || input.type == "boolean" %]<tt>"[% input.value %]"</tt>[% ELSE %]<tt>[% input.uri %]</tt>[% END %]</td><td>[% IF input.revision %][% input.revision %][% END %]</td><td><tt>[% input.path %]</tt></td></tr> - edit in src/root/build.tt at line 318
</tbody></table> - replacement in src/root/build.tt at line 321
</div><br /> - replacement in src/root/build.tt at line 323[4.266]→[4.1943:1974](∅→∅),[4.1974]→[4.19580:19635](∅→∅),[4.19675]→[4.19675:19901](∅→∅),[4.19901]→[4.2094:2112](∅→∅),[4.2094]→[4.2094:2112](∅→∅)
[% IF relatedbuilds %]<div id="tabs-relatedbuilds" class="tab-pane"><p>The following builds are part of the same jobset evaluation that produced this build.</p>[% INCLUDE renderBuildList builds=relatedbuilds hideProjectName=1 hideJobsetName=1 %]</div>[% END %][% IF prevBuild %]<h3>Changes since previous build: [% INCLUDE renderFullBuildLink build=prevBuild, hideProjectName=1, hideJobsetName=1 %]</h3>[% INCLUDE renderInputDiff build2=build , build1=prevBuild %][% END %] - edit in src/root/build.tt at line 328
[% IF build.buildsteps %]<div id="tabs-buildsteps" class="tab-pane">[% INCLUDE renderBuildSteps type="All" %] - edit in src/root/build.tt at line 329
[% END %] - edit in src/root/build.tt at line 330
[% IF relatedbuilds %]<div id="tabs-relatedbuilds" class="tab-pane"><p>The following builds are part of the same jobset evaluation that produced this build.</p>[% INCLUDE renderBuildList builds=relatedbuilds hideProjectName=1 hideJobsetName=1 %]</div>[% END %] - replacement in src/root/build.tt at line 337
[% IF build.dependents %][% IF build.buildsteps %]<div id="tabs-buildsteps" class="tab-pane">[% INCLUDE renderBuildSteps type="All" %]</div>[% END %][% IF build.dependents %] - replacement in src/root/build.tt at line 346
<h2>Used by</h2><h2>Used by</h2> - replacement in src/root/build.tt at line 348
<p>The following builds have used this build as an input:</p><p>The following builds have used this build as an input:</p> - replacement in src/root/build.tt at line 350[4.20017]→[4.20017:20272](∅→∅),[4.20272]→[4.263:323](∅→∅),[4.323]→[4.20333:20695](∅→∅),[4.20333]→[4.20333:20695](∅→∅),[4.20695]→[4.324:354](∅→∅),[4.354]→[4.20726:20778](∅→∅),[4.20726]→[4.20726:20778](∅→∅)
<table class="tablesorter table table-condensed table-striped"><thead><tr><th>Build</th><th>Input name</th><th>System</th><th>Timestamp</th></tr></thead><tbody>[% FOREACH input IN build.dependents %]<tr><td>[% INCLUDE renderFullBuildLink build=input.build %]</td><td><tt>[% input.name %]</tt></td><td><tt>[% input.build.system %]</tt></td><td>[% INCLUDE renderDateTime timestamp = input.build.timestamp %]</td></tr>[% END %]</tbody></table><table class="tablesorter table table-condensed table-striped"><thead><tr><th>Build</th><th>Input name</th><th>System</th><th>Timestamp</th></tr></thead><tbody>[% FOREACH input IN build.dependents %]<tr><td>[% INCLUDE renderFullBuildLink build=input.build %]</td><td><tt>[% input.name %]</tt></td><td><tt>[% input.build.system %]</tt></td><td>[% INCLUDE renderDateTime timestamp = input.build.timestamp %]</td></tr>[% END %]</tbody></table> - replacement in src/root/build.tt at line 366[4.14396]→[4.753:763](∅→∅),[4.8443]→[4.753:763](∅→∅),[4.763]→[4.82:102](∅→∅),[4.102]→[4.2326:2371](∅→∅),[4.2371]→[4.54:103](∅→∅),[4.873]→[4.54:103](∅→∅),[4.103]→[4.20779:20949](∅→∅),[4.275]→[4.8443:8444](∅→∅),[4.763]→[4.8443:8444](∅→∅),[4.873]→[4.8443:8444](∅→∅),[4.1192]→[4.8443:8444](∅→∅),[4.20949]→[4.8443:8444](∅→∅),[4.8443]→[4.8443:8444](∅→∅),[4.938]→[4.938:1016](∅→∅),[4.1016]→[4.276:364](∅→∅),[4.364]→[4.1016:1065](∅→∅),[4.1016]→[4.1016:1065](∅→∅),[4.1065]→[4.365:399](∅→∅),[4.399]→[4.8776:9020](∅→∅),[4.9020]→[4.20950:20973](∅→∅),[4.717]→[4.1378:1379](∅→∅),[4.20973]→[4.1378:1379](∅→∅),[4.1378]→[4.1378:1379](∅→∅),[4.2290]→[4.2290:2310](∅→∅),[4.2310]→[4.718:785](∅→∅),[4.785]→[4.2377:2440](∅→∅),[4.2377]→[4.2377:2440](∅→∅),[4.2440]→[4.786:922](∅→∅),[4.922]→[4.2515:2522](∅→∅),[4.2515]→[4.2515:2522](∅→∅)
[% END %][% IF prevBuilds %]<div id="tabs-history" class="tab-pane"><h2>Build time history (in seconds)</h2><div id="placeholder" style="width:800px;height:400px;"></div><div id="overview" style="margin-left:50px;margin-top:20px;width:600px;height:50px"></div><script src="/static/js/flot/jquery.flot.js" type="text/javascript"></script><script src="/static/js/flot/jquery.flot.selection.js" type="text/javascript"></script><script type="text/javascript">$(function() {var d = [];var ids = [];[% FOREACH prevbuild IN prevBuilds %][% IF prevbuild.build.starttime != 0 %]d.push([[% prevbuild.starttime * 1000 %],[% prevbuild.get_column('actualBuildTime') %]]);ids[[% prevbuild.starttime * 1000 %]] = [% prevbuild.id %] ;[% END %][% END %]var options = {xaxis: { mode: "time" },selection: { mode: "x" },points: { show: true },lines: { show: true },grid: {clickable: true,hoverable: true,hoverFill: '#444',hoverRadius: 4,},};[% END %] - edit in src/root/build.tt at line 368
[% IF prevBuilds %]<div id="tabs-history" class="tab-pane"><h2>Build time history (in seconds)</h2><div id="placeholder" style="width:800px;height:400px;"></div><div id="overview" style="margin-left:50px;margin-top:20px;width:600px;height:50px"></div> - replacement in src/root/build.tt at line 374
var plot = $.plot($("#placeholder"), [d], options);<script src="/static/js/flot/jquery.flot.js" type="text/javascript"></script><script src="/static/js/flot/jquery.flot.selection.js" type="text/javascript"></script><script type="text/javascript">$(function() {var d = [];var ids = [];[% FOREACH prevbuild IN prevBuilds; IF prevbuild.build.starttime != 0 %]d.push([[% prevbuild.starttime * 1000 %],[% prevbuild.get_column('actualBuildTime') %]]);ids[[% prevbuild.starttime * 1000 %]] = [% prevbuild.id %] ;[% END; END %] - replacement in src/root/build.tt at line 385[4.20977]→[4.1044:1414](∅→∅),[4.1044]→[4.1044:1414](∅→∅),[4.1414]→[4.20978:20979](∅→∅),[4.20979]→[4.1416:1451](∅→∅),[4.1416]→[4.1416:1451](∅→∅)
var overview = $.plot($("#overview"), [d], {series: {lines: { show: true, lineWidth: 1 },shadowSize: 0},xaxis: { ticks: [], mode: "time" },yaxis: { ticks: [], min: 0, autoscaleMargin: 0.1 },selection: { mode: "x" }});// now connect the twovar options = {xaxis: { mode: "time" },selection: { mode: "x" },points: { show: true },lines: { show: true },grid: {clickable: true,hoverable: true,hoverFill: '#444',hoverRadius: 4,},}; - edit in src/root/build.tt at line 398
$("#placeholder").bind("plotselected", function (event, ranges) {// do the zoomingplot = $.plot($("#placeholder"), [d],$.extend(true, {}, options, {xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }})); - replacement in src/root/build.tt at line 399
// don't fire event on the overview to prevent eternal loopoverview.setSelection(ranges, true);});var plot = $.plot($("#placeholder"), [d], options); - replacement in src/root/build.tt at line 401
$("#overview").bind("plotselected", function (event, ranges) {plot.setSelection(ranges);});var overview = $.plot($("#overview"), [d], {series: {lines: { show: true, lineWidth: 1 },shadowSize: 0},xaxis: { ticks: [], mode: "time" },yaxis: { ticks: [], min: 0, autoscaleMargin: 0.1 },selection: { mode: "x" }}); - replacement in src/root/build.tt at line 411[4.2094]→[4.2094:2168](∅→∅),[4.2168]→[4.0:204](∅→∅),[4.204]→[4.20986:21020](∅→∅),[4.21020]→[4.264:270](∅→∅),[4.264]→[4.264:270](∅→∅)
$("#placeholder").bind("plotclick", function (e, pos, item) {if (item) {plot.highlight(item.series, item.datapoint);buildid = ids[item.datapoint[0]];window.location = "/build/"+buildid;}});});// now connect the two - replacement in src/root/build.tt at line 413
</script>$("#placeholder").bind("plotselected", function (event, ranges) {// do the zoomingplot = $.plot($("#placeholder"), [d],$.extend(true, {}, options, {xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }})); - replacement in src/root/build.tt at line 420[4.282]→[4.282:331](∅→∅),[4.331]→[4.21021:21201](∅→∅),[4.21201]→[4.513:596](∅→∅),[4.513]→[4.513:596](∅→∅),[4.596]→[4.9021:9245](∅→∅),[4.9245]→[4.21202:21225](∅→∅)
<h2>Store path size history (in MB)</h2><div id="placeholder-size" style="width:800px;height:400px;"></div><div id="overview-size" style="margin-left:50px;margin-top:20px;width:600px;height:50px"></div><script type="text/javascript">$(function() {var d = [];var ids = [];[% FOREACH prevbuild IN prevBuilds %][% IF prevbuild.size != 0 %]d.push([[% prevbuild.starttime * 1000 %],[% prevbuild.size / (1024*1024.0) %]]);ids[[% prevbuild.starttime * 1000 %]] = [% prevbuild.id %] ;[% END %][% END %]// don't fire event on the overview to prevent eternal loopoverview.setSelection(ranges, true);}); - replacement in src/root/build.tt at line 424
var options = {xaxis: { mode: "time" },selection: { mode: "x" },points: { show: true },lines: { show: true },grid: {clickable: true,hoverable: true,hoverFill: '#444',hoverRadius: 4,},};$("#overview").bind("plotselected", function (event, ranges) {plot.setSelection(ranges);}); - edit in src/root/build.tt at line 428
$("#placeholder").bind("plotclick", function (e, pos, item) {if (item) {plot.highlight(item.series, item.datapoint);buildid = ids[item.datapoint[0]];window.location = "/build/"+buildid;}});});</script> - replacement in src/root/build.tt at line 438
var plot = $.plot($("#placeholder-size"), [d], options);<h2>Store path size history (in MB)</h2><div id="placeholder-size" style="width:800px;height:400px;"></div><div id="overview-size" style="margin-left:50px;margin-top:20px;width:600px;height:50px"></div><script type="text/javascript">$(function() {var d = [];var ids = [];[% FOREACH prevbuild IN prevBuilds; IF prevbuild.size != 0 %]d.push([[% prevbuild.starttime * 1000 %],[% prevbuild.size / (1024*1024.0) %]]);ids[[% prevbuild.starttime * 1000 %]] = [% prevbuild.id %] ;[% END; END %] - replacement in src/root/build.tt at line 450
var overview = $.plot($("#overview-size"), [d], {series: {lines: { show: true, lineWidth: 1 },shadowSize: 0},xaxis: { ticks: [], mode: "time" },yaxis: { ticks: [], min: 0, autoscaleMargin: 0.1 },selection: { mode: "x" }});var options = {xaxis: { mode: "time" },selection: { mode: "x" },points: { show: true },lines: { show: true },grid: {clickable: true,hoverable: true,hoverFill: '#444',hoverRadius: 4,},}; - replacement in src/root/build.tt at line 463
// now connect the twovar plot = $.plot($("#placeholder-size"), [d], options); - replacement in src/root/build.tt at line 465
$("#placeholder-size").bind("plotselected", function (event, ranges) {// do the zoomingplot = $.plot($("#placeholder-size"), [d],$.extend(true, {}, options, {xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }}));var overview = $.plot($("#overview-size"), [d], {series: {lines: { show: true, lineWidth: 1 },shadowSize: 0},xaxis: { ticks: [], mode: "time" },yaxis: { ticks: [], min: 0, autoscaleMargin: 0.1 },selection: { mode: "x" }}); - replacement in src/root/build.tt at line 475
// don't fire event on the overview to prevent eternal loopoverview.setSelection(ranges, true);});// now connect the two - replacement in src/root/build.tt at line 477
$("#overview-size").bind("plotselected", function (event, ranges) {plot.setSelection(ranges);});$("#placeholder-size").bind("plotselected", function (event, ranges) {// do the zoomingplot = $.plot($("#placeholder-size"), [d],$.extend(true, {}, options, {xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }})); - replacement in src/root/build.tt at line 484[4.2440]→[4.2440:2519](∅→∅),[4.2519]→[4.2168:2372](∅→∅),[4.2168]→[4.2168:2372](∅→∅),[4.2372]→[4.21238:21272](∅→∅),[4.21272]→[4.2802:2808](∅→∅),[4.2802]→[4.2802:2808](∅→∅)
$("#placeholder-size").bind("plotclick", function (e, pos, item) {if (item) {plot.highlight(item.series, item.datapoint);buildid = ids[item.datapoint[0]];window.location = "/build/"+buildid;}});});// don't fire event on the overview to prevent eternal loopoverview.setSelection(ranges, true);}); - replacement in src/root/build.tt at line 488
</script>$("#overview-size").bind("plotselected", function (event, ranges) {plot.setSelection(ranges);}); - edit in src/root/build.tt at line 492
$("#placeholder-size").bind("plotclick", function (e, pos, item) {if (item) {plot.highlight(item.series, item.datapoint);buildid = ids[item.datapoint[0]];window.location = "/build/"+buildid;}});});</script> - replacement in src/root/build.tt at line 503
[% END %][% END %] - edit in src/root/build.tt at line 511