Add multiple output support
[?]
Feb 13, 2013, 4:49 PM
PMNWRTGJ4GVSMSSAWSUD57B26PCRAHMZIQ5SIWJIK7A74ENKEQLACDependencies
- [2]
5YKSN2MJ* Doh. - [3]
36TOESVE* When marking a build as "keep", register it as a root right away - [4]
DGZE7ZRA* Don't log redundant build steps in case of cached failures. - [5]
32LK6HFV* Escape the outPath in the generated nixexpr.tar.bz2 in channels, because - [6]
SKQXOQ7Thydra: fixed missing argument to restartbuild function - [7]
ZXJSQF6Bpoint log link for running build step to the automatically reloading log page in stead of the 'useless' pretty log page - [8]
FP72ASZXNo wonder our disk was filling up - [9]
YISCM3G3Fix query for certain postgresql versions. - [10]
E2X5OTFSKeep builds of disabled jobsets that are not hidden. Fixes #18. - [11]
WQXF2T3Dhydra-evaluator: Don't require $HYDRA_CONFIG - [12]
EX4FXA5THandle active build steps of aborted builds properly - [13]
2QA4Y4G3* hydra: added index, actual build time (buildstep with same outpath, so without deps) of the build - [14]
GWCV3TQV* BuildInputs table: link to dependencies, include store paths. - [15]
5NO7NCKT* Refactoring. - [16]
SJN2QPWH* Big speed-up of the job status page and the channel generation (such - [17]
ZDNXMJ3J* Typo. - [18]
6BLUKEQ2* Caching of "path" inputs, and fake a revision number for those. - [19]
KJQWSRCCSpeed up hydra-update-gc-roots - [20]
BPVJBR2P* Only put Nix builds in the global channel. - [21]
2IEFMER5* Add --fallback to prevent problems with obsolete substitutes. - [22]
KRVD4EW7* Only non-garbage collected builds can be added to a release. - [23]
A63IHCMX* Register GC roots properly. - [24]
BDSD2JLV* Speed up manifest generation. - [25]
TPDJL4TY* Add derivations and all build-time dependencies of a build to the - [26]
CMU3YKOU* Store the release name. - [27]
HLYVEJX7* Keep the 3 most recent builds for every platform for every job. - [28]
6US6LEC7* Add a NarSize field to Hydra manifests. This allows nix-env - [29]
DDGBLKENUpdate isCurrent properly - [30]
KQZQI2WNAllow creating a release from an evaluation - [31]
2R7GHSA4* hydra: added initial version of build graph - [32]
TVMJTXMBremove header on build page - [33]
JM3DPYOMgenerated schema with new dbix class schema loader, grrrrrr - [34]
VVDQKVNL - [35]
WYN733ST* Store build duration, handle cached builds. - [36]
2GK5DOU7* Downloading closures. - [37]
AHTEIK7G* Added a maintainers field to the Builds table. - [38]
J5UVLXOK* Start of a basic Catalyst web interface. - [39]
EYNG4EL4* Regenerate the bindings from a clean sqlite database. - [40]
BOFOHCPKremoved debug print, added last 50 lines in failure emails - [41]
H47WLVAT* Handle the case where there is no cached build step that produced - [42]
A22P7HCOhydra: at evaluation, check if path is already built, and mark as built in stead of adding to the queue. - [43]
5O6E5SU5hydra: store logfile/output path/closure size - [44]
ONAQU4BRhydra: handle case where build to keep set to 0 - [45]
YFYRNNQUUse <h3> for running/failed build steps - [46]
5EIPRLDDexport logContents - [47]
3ZCEPLNO - [48]
G3IUM7VLhydra: add support for succeedOnFailure feature in stdenv - [49]
DEMSSSB2* Controller for jobs which inherits all actions in ListBuilds. So - [50]
QUTWJR7P* Include more info in notification emails. - [51]
TQKGQ5R3 - [52]
ZTQEU5QSHydra: Add support for maxSilent meta attribute (also already added timeout, but not implemented the actual timeout for the build yet) - [53]
YTSIRIMK* Separate job status and all builds pages. - [54]
LZO3C2KI* Hack around those SQLite timeouts: just retry the transaction. - [55]
FM4O2L4Mhydra: if evaluator sees cached build, also add the buildproducts - [56]
WAZFSDSLusing backquote as argument resulted in only first line as first argument to removeAsciiEscapes - [57]
5DSF5KWY* Perl sucks. "getBuildLog $drvPath" doesn't mean the same as - [58]
L2E6EVE2* Merged the Build and Job tables. - [59]
3HCBU2FA - [60]
NZI7E2E3* hydra: handle case where logfile is empty - [61]
VJP6O6WA* Doh. Remove debug statement. - [62]
TWVSALRL* Allow the maximum number of concurrent builds per platform to be - [63]
RXVJFQ5AEvaluator cleanups - [64]
3BKF6P72* Use Nix's negative caching. - [65]
KQS7DSKJ* Clean up indentation. - [66]
XDDCO6CH* hydra: add dependency list with links to logfiles - [67]
2M7J26V4inital version of links to diff in scm - [68]
A43SLRSHFix handling of IPC::Run::run exit status - [69]
IN272KZW* Automatically keep all builds in the latest successful release in - [70]
NLJJZVHO* Use ->update({...}) properly. - [71]
S66BOMVU* Added authentication. - [72]
ODNCGFQ5* Improved the navigation bar: don't include all projects (since that - [73]
MMDLWWZ2automatic reload of tail log when build is running - [74]
LCKWLQW3* In Sqlite "release" is now a keyword, so use "release_" instead. - [75]
PY4WQF5Gremove ascii escapes from log in tail page and emails - [76]
RU7AQO7U* Role-based access control. Only admins can create projects. Only - [77]
AFGT66EIhydra: if a project or jobset is hidden (and thus disabled) do not keep builds - [78]
HB3OHPJLhydra: in case of cached build, add link to build that built the storepath - [79]
3HZY24CX* Make jobsets viewable under - [80]
B72GLND4 - [81]
CLJQCY2X* Store info about all the build actions and allow them to be - [82]
RAKTHYAI* In the job status and error pages, show when the status of a job - [83]
RFE6T5LG* Store jobset evaluations in the database explicitly. This includes - [84]
MOX7XJ2EMerge the BuildSchedulingInfo table into the Builds table - [85]
E2TOU3L6* More indices. - [86]
U4TD3AIQAdd support for viewing jobset evaluations - [87]
BVOPAMLS - [88]
BD3GRK4B* Get rid of "positive failures" and separate log phases. - [89]
D7NXMCON* Doh. - [90]
OOQ2D3KC* Refactoring: move fetchInput out of hydra_scheduler into a separate - [91]
22JB5HNEmake changes section more compact/readable - [92]
SB2V735VKeep track of the database schema version - [93]
INNOEHO6* Fix getBuildLog for bzip2'd files. - [94]
RBHHV7P7* Read logs using logContents function in stead of handling it everywhere separately. - [95]
5Y3XOQBRInclude the URL of the binary cache in .nixpkg files - [96]
3PNG7NIBRemove trailing whitespace - [97]
PP4LPADGhydra: buildmachine disabled by default, add some default constraints - [98]
TLZ2SPBR - [99]
YAPITGB3* Boolean inputs. - [100]
37R34XJO* Negative caching: don't perform a build if a dependency already - [101]
YFPZ46YK* hydra: added variant of build input type, 'build output (same system)' to allow better continous integration in one jobset for multiple system. it makes sure that the system of the build that is passed as input for a job has the same system as the job. - [102]
GTGPPGJCPrevent an unnecessary SQL query for every package in the NixExprs view - [103]
KNAVU6BH* Do not garbage collect releases. - [104]
EDRUQ4UKDie TABs die - [105]
QS4OX6Z7Huuuge speedup in the Hydra evaluator - [106]
2T42QGZD* Register builds as GC roots so they don't get deleted. - [107]
AKAZKCR6* At top-level and for each project, provide two channels: "latest" - [108]
4D4U5IPY* Allow jobsets to be disabled. - [109]
2AIIYGI5* Show job status and all builds for a project. - [110]
OD5FSS5A* Quick hack to allow viewing of dependency graphs (via nix-store -q - [111]
S3ZLZP3N* Cut off builds after half an hour of apparent inactivity. This - [112]
RBNQKATL* Adding persistant releases. A release is a named set of builds. - [113]
GAIBDEZZ* Store the name of the machine that performed a build step in the - [114]
UVNQPK3THydra/56: handle failed builds with result only at build level, not buildsteps - [115]
JTRG7RDQadd support for git as jobinput - [116]
X5OIC5FF* hydra: ui bug - [117]
AX5EQJO3hydra: show machine in buildsteps - [118]
BMSQD2ZHIndentation - [119]
JFZNAYJX* Showing releases. - [120]
HGVQUIUX* hydra: download closure now makes closure of outpath in stead of useless drvpath - [121]
H7CNGK4O* Log evaluation errors etc. in the DB. - [122]
R5D7DZPE - [123]
FHF6IZJQ* Basic release management: releases are now dynamically computed as - [124]
XHVZXX6N - [125]
LBNVQXUB* Build the /build stuff in a separate controller. - [126]
UXVDOUBJ - [127]
SMCOU72Fhydra: add some admin for adding/enabling/etc build machines - [128]
CHQEG6WYHydra/29: Added timeout to svn/git checkouts, job evaluation - [129]
SHBLLAVH* More global substitution. - [130]
HSVVEKTY* Start of a JSON API to get information about a specific build. - [131]
7YBYT2LQ - [132]
ECBA3GQO* Make the schema class names match the case of the SQL table names. - [133]
PPJN6SDP* paging for releases page - [134]
64K7R4Y6Forgot to change Nix to Nix::Store in one place - [135]
HXBXDEFKSpeed up channel processing - [136]
T273UOB7Support obtaining the contents of an evaluation as a channel - [137]
Y6AHH4THRemove the logfile and logSize columns from the database - [138]
KN3VYE5P* Cleaned up the foreign key constraints. - [139]
4MBKR4XMGratuitous whitespace. - [140]
7DWCXNC7Use the new Nix Perl bindings - [141]
LGNML7VJDon't use a prepared statement for the active build steps query - [142]
2WRTOU2ZCleanup - [143]
E3LZ5H7Qhydra: only use keepnr to determine if builds should be kept - [144]
GJFYEU3S* Nix now stores logs by default as bzip2, make sure the build page uncompresses before showing. - [145]
S5PV6IIM* Represent jobs explicitly in the DB. - [146]
FYO6NECEhydra - [147]
3XTHEUMP* Implemented the clone feature. - [148]
G5A7TZVI* Don't discard old build steps when restarting a build. - [149]
ZVTSOVHN* Support Subversion checkouts. - [150]
LVJKRTIK* Generate a Nix expression for the channel. - [151]
KOTB7BKV - [152]
4X6NS66Q* Keep the most recent builds for each job. - [153]
TW5ZQX5Z* Move up the build products in the builds page, since they're more - [154]
HVXL2XUZ - [155]
WZ3AEJ67* hydra_update_gc_roots.pl registers build outputs that should be kept - [156]
I42G2Z7P* Escape string literals.[ - [157]
UMOJJ6DVtime out to 3600 for now - [158]
VJHIHMEH* Store the meta.longDescription and meta.license attributes in the - [159]
AS5PAYLI - [160]
U7G4EEQC - [161]
D3DIBMOK* For products that are directories (like manuals), allow a default - [162]
6QRHXIM3* Speed up the jobset index page. Especially the query to get the - [163]
2JQ7WEFM - [164]
ZI535LI6* hydra: 'new' UI for project/jobset/job/build - [165]
KAZWI5G4* hydra: buildpage, show changes since last build/successful build - [166]
VVOAXWH4fix wrong dbix:class:loader generation - [167]
AEFNBIIW* Merge the GC branch. - [168]
OSVLMLCQhydra: factored out build restart and - [169]
BEKA3TMMHydra/25: At job pages, show the hash of the output - [170]
A32UT34Uhydra_build.pl: Honor `$build->timeout'. - [171]
JZE7DC2FWhitespace - [172]
3SQCOHZN* minor performance tweaks - [173]
LQNBKF3D - [174]
A52HEFHQ* Allow builds to be restarted (if they failed with a transient error, - [175]
FFEH62DEMachine status page now looks much better and more consistent with rest of Hydra - [176]
HPEG2RHVMerge the BuildResultInfo table into the Builds table - [177]
JOYONH2KPrevent multiple builds with the same (job, outPath) tuple from being added - [178]
SZPBGW2NFix a race condition in hydra-update-gc-roots - [179]
NEWDDAOF* Allow users to change the value of a build's "keep" flag, which - [180]
V4RNHJNR* Add a link to each project's homepage. Suggested by karltk. - [181]
G2T4WAHIStore the inputs of each evaluation in the database - [182]
EFWN7JBV* Added a status page that shows all the currently executing build steps. - [183]
TJK27WSBOpen the DB using Hydra::Model::DB->new - [184]
SJLEZFC4check getHydraPath in stead of Envvar HYDRA_DBI directly - [185]
N22GPKYT* Put info about logs / build products in the DB. - [186]
GNIEG2GC* Disambiguate jobs by jobset name. I.e. jobs with the same name in - [187]
S6OISBQ3* Mark the "current" builds in a jobset, i.e. those corresponding to - [188]
P5X4P6VK* Renaming "release sets" to "views" (not finished yet). Having - [189]
2B63JW6F* hydra: changes in list in stead of table, also showing changes of changed 'build output' inputs - [190]
3E6IP3R3* Add the name of the jobset to ReleaseSetJobs, otherwise we can't - [191]
UWVMQIAC* Refactoring. - [192]
YGRLM2SK* Export all relevant info about the derivation. - [193]
RNLGIF4Jhydra: remove debug statement - [194]
BHZXGT2H* Channels: provide an index page that lists all the packages in the - [195]
6F4UNDTC* Provide access to the raw, non-pretty-printed logfiles. - [196]
ON4DDIBZ* Forgot to commit. - [197]
IK53RV4V - [198]
TOTSL2RBWhen checking if build is already built, check for potential 'failed with result'. Fixes issue #7. - [199]
ZILILXXK* Allow scheduled builds to be cancelled. They're not removed from - [200]
LL36GPHAadded help, removed nix closure from 'failed build with output' productlist - [201]
YTZOC7C5* Editing of jobset inputs. - [202]
Z6MDQIGO* A quick (non-Web 2.0) interface to manually add builds to a release. - [203]
GPRYAAFPhydra: change icon for positive failures - [204]
JARRBLZDBootstrapify the Hydra forms (except the project and jobset edit pages) - [205]
57Y7RG2AUpdate queryPathInfo calls - [206]
CQTN62OHDie tabs die - [207]
6KJXJB7Nqualify ordery_by clauses when necessary, remove unnecessary order_by's, reported by Ludo, resulted in errors in sqlite - [*]
4N5APGRG* Start of a helper tool to evaluate job expressions efficiently. - [*]
4LWGZL33 - [*]
7YCFGMZB* Report evaluation errors per job, and don't bail out if a job fails - [*]
FPK5LF53* Put the project-related actions in a separate controller. Put the - [*]
ARD6Z67TDo incremental SVN checkouts - [*]
QMW24O5SAdd support for Guile & Guix. - [*]
AFTXA575* $HYDRA_DATA environment variable. - [*]
ZWCTAZGLadded newsitems, added some admin options to clear various caches. - [*]
CXRCPDSQ* added support for twitter notification - [*]
FHAVPTZ6Hydra/23: added some X-headers with meta info in email notifications, added more descriptive status - [*]
OG7BEM57 - [*]
PHX2HIVG* Store info about the build inputs in the build record.
Change contents
- edit in src/c/hydra-eval-jobs.cc at line 125
DrvInfo::Outputs outputs = drv.queryOutputs(state); - edit in src/c/hydra-eval-jobs.cc at line 132
xmlAttrs["outPath"] = drv.queryOutPath(state); - edit in src/c/hydra-eval-jobs.cc at line 168
foreach (DrvInfo::Outputs::iterator, j, outputs) {XMLAttrs attrs2;attrs2["name"] = j->first;attrs2["path"] = j->second;doc.writeEmptyElement("output", attrs2);} - replacement in src/lib/Hydra/Base/Controller/ListBuilds.pm at line 81
->search({}, { columns => [@buildListColumns, 'drvpath', 'outpath', 'description', 'homepage'] });->search({}, { join => ["buildoutputs"], columns => [@buildListColumns, 'drvpath', 'description', 'homepage'], '+select' => ['buildoutputs.path', 'buildoutputs.name'], '+as' => ['outpath', 'outname'] }); - edit in src/lib/Hydra/Base/Controller/NixChannel.pm at line 6
use List::MoreUtils qw(all); - edit in src/lib/Hydra/Base/Controller/NixChannel.pm at line 16
$c->stash->{nixPkgs} = []; - replacement in src/lib/Hydra/Base/Controller/NixChannel.pm at line 18
next if $checkValidity && !isValidPath($build->outpath);#if (isValidPath($build->drvpath)) {# # Adding `drvpath' implies adding `outpath' because of the# # `--include-outputs' flag passed to `nix-store'.# push @storePaths, $build->drvpath;#} else {# push @storePaths, $build->outpath;#}push @storePaths, $build->outpath;my $pkgName = $build->nixname . "-" . $build->system . "-" . $build->id;$c->stash->{nixPkgs}->{"${pkgName}.nixpkg"} = {build => $build, name => $pkgName};my $outPath = $build->get_column("outpath");my $outName = $build->get_column("outname");next if $checkValidity && !isValidPath($outPath);push @storePaths, $outPath;my $pkgName = $build->nixname . "-" . $build->system . "-" . $build->id . ($outName ne "out" ? "-" . $outName : "");push @{$c->stash->{nixPkgs}}, { build => $build, name => $pkgName, outPath => $outPath, outName => $outName }; - replacement in src/lib/Hydra/Base/Controller/NixChannel.pm at line 29
$c->stash->{systemForPath}->{$build->outpath} = $build->system;$c->stash->{systemForPath}->{$outPath} = $build->system; - edit in src/lib/Hydra/Base/Controller/NixChannel.pm at line 32
print STDERR @storePaths, "\n"; - edit in src/lib/Hydra/Base/Controller/NixChannel.pm at line 42
# FIXME: get the closure of the selected path only. - edit in src/lib/Hydra/Base/Controller/NixChannel.pm at line 65
# FIXME: need to handle multiple outputs: channelBuilds is# joined with the build outputs, so find() can return multiple# results. - replacement in src/lib/Hydra/Base/Controller/NixChannel.pm at line 72
if (!isValidPath($c->stash->{build}->outpath)) {unless (all { isValidPath($_->path) } $c->stash->{build}->buildoutputs->all) { - replacement in src/lib/Hydra/Base/Controller/NixChannel.pm at line 121
$c->stash->{nixPkgs} = [sortPkgs (values %{$c->stash->{nixPkgs}})];$c->stash->{nixPkgs} = [sortPkgs @{$c->stash->{nixPkgs}}]; - edit in src/lib/Hydra/Controller/Build.pm at line 13
use List::MoreUtils qw(all); - edit in src/lib/Hydra/Controller/Build.pm at line 33
}sub findBuildStepByOutPath {my ($self, $c, $path, $status) = @_;return $c->model('DB::BuildSteps')->search({ path => $path, busy => 0, status => $status },{ join => ["buildstepoutputs"], order_by => ["stopTime"], limit => 1 })->single; - edit in src/lib/Hydra/Controller/Build.pm at line 44
sub findBuildStepByDrvPath {my ($self, $c, $drvPath, $status) = @_;return $c->model('DB::BuildSteps')->search({ drvpath => $drvPath, busy => 0, status => $status },{ order_by => ["stopTime"], limit => 1 })->single;} - replacement in src/lib/Hydra/Controller/Build.pm at line 58
$c->stash->{available} = isValidPath $build->outpath;$c->stash->{available} = all { isValidPath($_->path) } $build->buildoutputs->all; - edit in src/lib/Hydra/Controller/Build.pm at line 62[13.11]→[13.895:988](∅→∅),[13.51]→[13.941:942](∅→∅),[13.55]→[13.941:942](∅→∅),[13.61]→[13.941:942](∅→∅),[13.149]→[13.941:942](∅→∅),[13.988]→[13.941:942](∅→∅),[13.941]→[13.941:942](∅→∅)
$c->stash->{pathHash} = $c->stash->{available} ? queryPathHash($build->outpath) : undef; - replacement in src/lib/Hydra/Controller/Build.pm at line 67
(my $cachedBuildStep) = $c->model('DB::BuildSteps')->search({ outpath => $build->outpath }, {});my $path = ($build->buildoutputs)[0]->path or die;my $cachedBuildStep = findBuildStepByOutPath($self, $c, $path,$build->buildstatus == 0 || $build->buildstatus == 6 ? 0 : 1); - replacement in src/lib/Hydra/Controller/Build.pm at line 73
if ($build->finished) {if ($build->finished && 0) { - replacement in src/lib/Hydra/Controller/Build.pm at line 299
$c->stash->{available} = isValidPath $build->outpath;$c->stash->{drvAvailable} = isValidPath $build->drvpath;my $drvPath = $build->drvpath;my @outPaths = map { $_->path } $build->buildoutputs->all; - replacement in src/lib/Hydra/Controller/Build.pm at line 302
my $drvpath = $build->drvpath;my $outpath = $build->outpath;$c->stash->{available} = all { isValidPath($_) } @outPaths;$c->stash->{drvAvailable} = isValidPath $drvPath; - replacement in src/lib/Hydra/Controller/Build.pm at line 305
my @buildtimepaths = ();my @buildtimepaths = $c->stash->{drvAvailable} ? computeFSClosure(0, 0, $drvPath) : (); - edit in src/lib/Hydra/Controller/Build.pm at line 307
@buildtimepaths = split '\n', `nix-store --query --requisites --include-outputs $drvpath` if isValidPath($build->drvpath); - replacement in src/lib/Hydra/Controller/Build.pm at line 308
my @runtimepaths = ();my @runtimepaths = $c->stash->{available} ? computeFSClosure(0, 0, @outPaths) : (); - edit in src/lib/Hydra/Controller/Build.pm at line 310
@runtimepaths = split '\n', `nix-store --query --requisites --include-outputs $outpath` if isValidPath($build->outpath); - replacement in src/lib/Hydra/Controller/Build.pm at line 312
my $buildStep;($buildStep) = $c->model('DB::BuildSteps')->search({ outpath => $p }, {}) ;my %dep = ( buildstep => $buildStep, path => $p ) ;next unless $p =~ /\.drv$/;my ($buildStep) = findBuildStepByDrvPath($self, $c, $p, 0);my %dep = ( buildstep => $buildStep, path => $p ); - replacement in src/lib/Hydra/Controller/Build.pm at line 319
my $buildStep;($buildStep) = $c->model('DB::BuildSteps')->search({ outpath => $p }, {}) ;my %dep = ( buildstep => $buildStep, path => $p ) ;my ($buildStep) = findBuildStepByOutPath($self, $c, $p, 0);my %dep = ( buildstep => $buildStep, path => $p ); - edit in src/lib/Hydra/Controller/Build.pm at line 324
- replacement in src/lib/Hydra/Controller/Build.pm at line 337
if !$build->buildproducts->find({type => "nix-build"});if $build->buildproducts->search({type => "nix-build"})->count == 0; - replacement in src/lib/Hydra/Controller/Build.pm at line 339
notFound($c, "Path " . $build->outpath . " is no longer available.")unless isValidPath($build->outpath);foreach my $out ($build->buildoutputs) {notFound($c, "Path " . $out->path . " is no longer available.")unless isValidPath($out->path);} - replacement in src/lib/Hydra/Controller/Build.pm at line 344
$c->stash->{channelBuilds} = $c->model('DB::Builds')->search({id => $build->id});$c->stash->{channelBuilds} = $c->model('DB::Builds')->search({ id => $build->id },{ join => ["buildoutputs"], '+select' => ['buildoutputs.path', 'buildoutputs.name'], '+as' => ['outpath', 'outname'] }); - replacement in src/lib/Hydra/Controller/Build.pm at line 398
my ($self, $c, $newStatus) = @_;my ($self, $c, $x) = @_;my $keep = $x eq "1" ? 1 : 0; - replacement in src/lib/Hydra/Controller/Build.pm at line 405
die unless $newStatus == 0 || $newStatus == 1;if ($keep) {registerRoot $_->path foreach $build->buildoutputs;} - edit in src/lib/Hydra/Controller/Build.pm at line 409
registerRoot $build->outpath if $newStatus == 1; - replacement in src/lib/Hydra/Controller/Build.pm at line 410
$build->update({keep => int $newStatus});$build->update({keep => $keep}); - replacement in src/lib/Hydra/Controller/Build.pm at line 414
$newStatus == 0 ? "Build will not be kept." : "Build will be kept.";$keep ? "Build will be kept." : "Build will not be kept."; - replacement in src/lib/Hydra/Controller/Build.pm at line 436
registerRoot $build->outpath;foreach my $output ($build->buildoutputs) {error($c, "This build is no longer available.") unless isValidPath $output->path;registerRoot $output->path;} - edit in src/lib/Hydra/Controller/Build.pm at line 441[13.636]→[13.41:129](∅→∅),[13.41]→[13.41:129](∅→∅),[13.129]→[13.647:648](∅→∅),[13.647]→[13.647:648](∅→∅)
error($c, "This build is no longer available.") unless isValidPath $build->outpath; - replacement in src/lib/Hydra/Controller/Build.pm at line 532
$c->stash->{jsonOutPath} = $build->outpath;my $out = $build->buildoutputs->find({name => "out"});$c->stash->{jsonOutPath} = $out->path if defined $out; - replacement in src/lib/Hydra/Controller/JobsetEval.pm at line 144
->search({ finished => 1, buildstatus => 0 }, { columns => [@buildListColumns, 'drvpath', 'outpath', 'description', 'homepage'] });->search({ finished => 1, buildstatus => 0 },{ columns => [@buildListColumns, 'drvpath', 'description', 'homepage'], join => ["buildoutputs"], '+select' => ['buildoutputs.path', 'buildoutputs.name'], '+as' => ['outpath', 'outname'] }); - edit in src/lib/Hydra/Helper/AddBuilds.pm at line 16
use File::Slurp; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 47
my $releaseName;if (-e "$outPath/nix-support/hydra-release-name") {open FILE, "$outPath/nix-support/hydra-release-name" or die;$releaseName = <FILE>;chomp $releaseName;close FILE;}return undef unless -f "$outPath/nix-support/hydra-release-name";my $releaseName = read_file("$outPath/nix-support/hydra-release-name");chomp $releaseName; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 241
if (!defined $prevBuild || !isValidPath($prevBuild->outpath)) {if (!defined $prevBuild || !isValidPath(getMainOutput($prevBuild)->path)) { - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 255
{ storePath => $prevBuild->outpath{ storePath => getMainOutput($prevBuild)->path - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 274
push(@validBuilds, $build) if isValidPath($build->outpath);push(@validBuilds, $build) if !isValidPath(getMainOutput($build)->path); - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 292
{ storePath => $prevBuild->outpath{ storePath => getMainOutput($prevBuild)->path - edit in src/lib/Hydra/Helper/AddBuilds.pm at line 664
- replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 742
ForceArray => ['error', 'job', 'arg'],KeyAttr => [],ForceArray => ['error', 'job', 'arg', 'output'],KeyAttr => { output => "+name" }, - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 751
my $input = $inputInfo->{$arg->{name}}->[$arg->{altnr}] ;my $input = $inputInfo->{$arg->{name}}->[$arg->{altnr}]; - edit in src/lib/Hydra/Helper/AddBuilds.pm at line 769
my $outPath = $build->outpath; - edit in src/lib/Hydra/Helper/AddBuilds.pm at line 770
my $explicitProducts = 0; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 772
if (-e "$outPath/nix-support/hydra-build-products") {open LIST, "$outPath/nix-support/hydra-build-products" or die;while (<LIST>) {/^([\w\-]+)\s+([\w\-]+)\s+(\S+)(\s+(\S+))?$/ or next;my $type = $1;my $subtype = $2 eq "none" ? "" : $2;my $path = $3;my $defaultPath = $5;next unless -e $path;foreach my $output ($build->buildoutputs->all) {my $outPath = $output->path;if (-e "$outPath/nix-support/hydra-build-products") {$explicitProducts = 1;open LIST, "$outPath/nix-support/hydra-build-products" or die;while (<LIST>) {/^([\w\-]+)\s+([\w\-]+)\s+(\S+)(\s+(\S+))?$/ or next;my $type = $1;my $subtype = $2 eq "none" ? "" : $2;my $path = $3;my $defaultPath = $5;next unless -e $path; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 786
my $fileSize, my $sha1, my $sha256;my $fileSize, my $sha1, my $sha256; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 788
# !!! validate $path, $defaultPath# !!! validate $path, $defaultPath - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 790
if (-f $path) {my $st = stat($path) or die "cannot stat $path: $!";$fileSize = $st->size;if (-f $path) {my $st = stat($path) or die "cannot stat $path: $!";$fileSize = $st->size; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 794
$sha1 = `nix-hash --flat --type sha1 $path`or die "cannot hash $path: $?";;chomp $sha1;$sha1 = `nix-hash --flat --type sha1 $path`or die "cannot hash $path: $?";;chomp $sha1; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 798
$sha256 = `nix-hash --flat --type sha256 $path`or die "cannot hash $path: $?";;chomp $sha256;}$sha256 = `nix-hash --flat --type sha256 $path`or die "cannot hash $path: $?";;chomp $sha256;} - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 803
my $name = $path eq $outPath ? "" : basename $path;my $name = $path eq $outPath ? "" : basename $path; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 805
$db->resultset('BuildProducts')->create({ build => $build->id, productnr => $productnr++, type => $type, subtype => $subtype, path => $path, filesize => $fileSize, sha1hash => $sha1, sha256hash => $sha256, name => $name, defaultpath => $defaultPath});$db->resultset('BuildProducts')->create({ build => $build->id, productnr => $productnr++, type => $type, subtype => $subtype, path => $path, filesize => $fileSize, sha1hash => $sha1, sha256hash => $sha256, name => $name, defaultpath => $defaultPath});}close LIST; - edit in src/lib/Hydra/Helper/AddBuilds.pm at line 820
close LIST; - edit in src/lib/Hydra/Helper/AddBuilds.pm at line 821
return if $explicitProducts; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 824
else {foreach my $output ($build->buildoutputs->all) {my $outPath = $output->path; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 830
, subtype => "", subtype => $output->name eq "out" ? "" : $output->name - edit in src/lib/Hydra/Helper/AddBuilds.pm at line 853
my @outputNames = sort keys %{$buildInfo->{output}};die unless scalar @outputNames; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 857
my $jobName = $buildInfo->{jobName};my $drvPath = $buildInfo->{drvPath};my $outPath = $buildInfo->{outPath};# In various checks we can use an arbitrary output (the first)# rather than all outputs, since if one output is the same, the# others will be as well.my $firstOutputName = $outputNames[0];my $firstOutputPath = $buildInfo->{output}->{$firstOutputName}->{path};my $jobName = $buildInfo->{jobName} or die;my $drvPath = $buildInfo->{drvPath} or die; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 889
# the channels.# !!! Checking $outPath doesn't take meta-attributes into# account. For instance, do we want a new build to be# scheduled if the meta.maintainers field is changed?# the channels. FIXME: Checking the output paths doesn't take# meta-attributes into account. For instance, do we want a# new build to be scheduled if the meta.maintainers field is# changed? - edit in src/lib/Hydra/Helper/AddBuilds.pm at line 894
# Only check one output: if it's the same, the other will be as well.my $firstOutput = $outputNames[0]; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 901
{ project => $project->name, jobset => $jobset->name, job => $job->name, outPath => $outPath },{ rows => 1, columns => ['id'] });{ project => $project->name, jobset => $jobset->name, job => $job->name,name => $firstOutputName, path => $firstOutputPath },{ rows => 1, columns => ['id'], join => ['buildoutputs'] }); - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 913
my $prev = $$jobOutPathMap{$job->name . "\t" . $outPath};my $prev = $$jobOutPathMap{$job->name . "\t" . $firstOutputPath}; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 921
# Nope, so add it.# Are the outputs already in the Nix store? Then add a cached# build. - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 924
if (isValidPath($outPath)) {my $allValid = 1;my $buildStatus;my $releaseName;foreach my $name (@outputNames) {my $path = $buildInfo->{output}->{$name}->{path};if (isValidPath($path)) {if (-f "$path/nix-support/failed") {$buildStatus = 6;} else {$buildStatus //= 0;}$releaseName //= getReleaseName($path);} else {$allValid = 0;last;}}if ($allValid) { - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 946
, buildstatus => -f "$outPath/nix-support/failed" ? 6 : 0, buildstatus => $buildStatus - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 949
, errormsg => "", releasename => getReleaseName($outPath), releasename => $releaseName - edit in src/lib/Hydra/Helper/AddBuilds.pm at line 955
# Add the build to the database. - edit in src/lib/Hydra/Helper/AddBuilds.pm at line 967
, outpath => $outPath - edit in src/lib/Hydra/Helper/AddBuilds.pm at line 975
$build->buildoutputs->create({ name => $_, path => $buildInfo->{output}->{$_}->{path} })foreach @outputNames; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 980
$$jobOutPathMap{$job->name . "\t" . $outPath} = $build->id;$$jobOutPathMap{$job->name . "\t" . $firstOutputPath} = $build->id; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 1028
my $drvpath = $build->drvpath;my $outpath = $build->outpath;my @paths;push @paths, $build->drvpath;push @paths, $_->drvpath foreach $build->buildsteps; - replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 1032[13.460]→[13.460:530](∅→∅),[13.530]→[13.4665:4715](∅→∅),[6.90]→[13.578:588](∅→∅),[13.3112]→[13.578:588](∅→∅),[13.4715]→[13.578:588](∅→∅),[13.578]→[13.578:588](∅→∅)
my $paths = "";foreach my $bs ($build->buildsteps) {$paths = $paths . " " . $bs->outpath;}my $r = `nix-store --clear-failed-paths @paths`; - edit in src/lib/Hydra/Helper/AddBuilds.pm at line 1034
my $r = `nix-store --clear-failed-paths $paths $outpath`; - replacement in src/lib/Hydra/Helper/Nix.pm at line 17
jobsetOverview removeAsciiEscapes getDrvLogPath logContents);jobsetOverview removeAsciiEscapes getDrvLogPath logContentsgetMainOutput); - edit in src/lib/Hydra/Helper/Nix.pm at line 282
sub getMainOutput {my ($build) = @_;return$build->buildoutputs->find({name => "out"}) //$build->buildoutputs->find({}, {limit => 1, order_by => ["name"]});} - edit in src/lib/Hydra/Schema/BuildSteps.pm at line 46
=head2 outpath - edit in src/lib/Hydra/Schema/BuildSteps.pm at line 47[13.6041]→[13.6394:6414](∅→∅),[13.6414]→[13.6082:6099](∅→∅),[13.6082]→[13.6082:6099](∅→∅),[13.6129]→[13.6129:6130](∅→∅)
data_type: 'text'is_nullable: 1 - edit in src/lib/Hydra/Schema/BuildSteps.pm at line 94[13.6258]→[13.2162:2175](∅→∅),[13.6840]→[13.2162:2175](∅→∅),[13.2162]→[13.2162:2175](∅→∅),[13.2175]→[13.6841:6886](∅→∅)
"outpath",{ data_type => "text", is_nullable => 1 }, - edit in src/lib/Hydra/Schema/BuildSteps.pm at line 141
=head2 buildstepoutputs - replacement in src/lib/Hydra/Schema/BuildSteps.pm at line 143
# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:29:36# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ItI1OvxHfLTzLVEqfPRjHgType: has_manyRelated object: L<Hydra::Schema::BuildStepOutputs>=cut - edit in src/lib/Hydra/Schema/BuildSteps.pm at line 149
__PACKAGE__->has_many("buildstepoutputs","Hydra::Schema::BuildStepOutputs",{ "foreign.build" => "self.build", "foreign.stepnr" => "self.stepnr" },undef,);# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-30 16:36:03# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ZiA1nv73Fpp0/DTi4sLfEQ - edit in src/lib/Hydra/Schema/Builds.pm at line 74
=head2 outpath - edit in src/lib/Hydra/Schema/Builds.pm at line 75[13.7993]→[13.7791:7811](∅→∅),[13.7811]→[13.8034:8051](∅→∅),[13.8034]→[13.8034:8051](∅→∅),[13.8065]→[13.8065:8066](∅→∅)
data_type: 'text'is_nullable: 0 - edit in src/lib/Hydra/Schema/Builds.pm at line 222[13.5698]→[13.8495:8540](∅→∅),[13.8164]→[13.5758:5771](∅→∅),[13.8540]→[13.5758:5771](∅→∅),[13.5758]→[13.5758:5771](∅→∅)
{ data_type => "text", is_nullable => 0 },"outpath", - edit in src/lib/Hydra/Schema/Builds.pm at line 314
undef,);=head2 buildoutputsType: has_manyRelated object: L<Hydra::Schema::BuildOutputs>=cut__PACKAGE__->has_many("buildoutputs","Hydra::Schema::BuildOutputs",{ "foreign.build" => "self.id" }, - edit in src/lib/Hydra/Schema/Builds.pm at line 346
=head2 buildstepoutputs - edit in src/lib/Hydra/Schema/Builds.pm at line 349
Type: has_manyRelated object: L<Hydra::Schema::BuildStepOutputs>=cut__PACKAGE__->has_many("buildstepoutputs","Hydra::Schema::BuildStepOutputs",{ "foreign.build" => "self.id" },undef,); - replacement in src/lib/Hydra/Schema/Builds.pm at line 468
# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-22 13:34:39# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:wPBFqpUWncuD9xki8Pbnvg# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-30 16:22:11# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:YBdqPWScG4dtGx+U3dJcwA - replacement in src/lib/Hydra/Schema/Builds.pm at line 485[13.147]→[13.147:221](∅→∅),[13.221]→[13.2576:2616](∅→∅),[13.2616]→[13.262:300](∅→∅),[13.262]→[13.262:300](∅→∅),[13.300]→[13.293:296](∅→∅),[13.3767]→[13.293:296](∅→∅)
__PACKAGE__->has_one("actualBuildStep","Hydra::Schema::BuildSteps",{ 'foreign.outpath' => 'self.outpath', 'foreign.build' => 'self.id'},);#__PACKAGE__->has_one(# "actualBuildStep",# "Hydra::Schema::BuildSteps",# { 'foreign.outpath' => 'self.outpath'# , 'foreign.build' => 'self.id'# },#); - replacement in src/lib/Hydra/View/NixExprs.pm at line 24[13.543]→[13.543:597](∅→∅),[13.597]→[2.0:60](∅→∅),[2.60]→[13.648:679](∅→∅),[13.648]→[13.648:679](∅→∅)
foreach my $name (keys %{$c->stash->{nixPkgs}}) {my $build = $c->stash->{nixPkgs}->{$name}->{build};$res .= " # $name\n";foreach my $pkg (@{$c->stash->{nixPkgs}}) {my $build = $pkg->{build};$res .= " # $pkg->{name}\n"; - replacement in src/lib/Hydra/View/NixExprs.pm at line 30
$res .= " outPath = " . (escape $build->outpath) . ";\n";$res .= " outPath = " . (escape $pkg->{outPath}) . ";\n"; - edit in src/lib/Hydra/View/NixPkg.pm at line 13
# FIXME: add multiple output support - replacement in src/lib/Hydra/View/NixPkg.pm at line 16
. " " . $build->drvpath . " " . $build->outpath. " " . $build->drvpath . " " . $build->buildoutputs->find({name => "out"})->path - replacement in src/root/admin.tt at line 29
<td><tt>[% step.outpath.match('-(.*)').0 %]</tt></td><td><tt>[% step.drvpath.match('-(.*)').0 %]</tt></td> - replacement in src/root/all.tt at line 9
<p>Showing builds [% (page - 1) * resultsPerPage + 1 %] - [% (page - 1) * resultsPerPage + builds.size %]out of [% total %] in order of descending timestamp.</p><p>Showing builds [% (page - 1) * resultsPerPage + 1 %] - [% (page - 1) * resultsPerPage + builds.size %] out of [% total %] in order of descending timestamp.</p> - edit in src/root/build.tt at line 10
[% BLOCK renderOutputs %][% start=1; FOREACH output IN outputs %][% IF !start %],<br/>[% END; start=0; output.path %][% END %][% END %] - replacement in src/root/build.tt at line 18[13.1990]→[13.3118:3530](∅→∅),[13.3530]→[13.9877:10136](∅→∅),[13.10136]→[13.3787:4764](∅→∅),[13.3787]→[13.3787:4764](∅→∅),[13.4764]→[13.88:145](∅→∅),[13.3198]→[13.88:145](∅→∅),[13.145]→[13.4765:4844](∅→∅),[13.4844]→[12.0:54](∅→∅),[12.54]→[13.5094:5187](∅→∅),[13.5094]→[13.5094:5187](∅→∅),[13.5187]→[12.55:173](∅→∅),[12.173]→[13.5187:5356](∅→∅),[13.5187]→[13.5187:5356](∅→∅),[13.5356]→[13.10137:10180](∅→∅),[13.10180]→[13.5404:5725](∅→∅),[13.5404]→[13.5404:5725](∅→∅),[13.2447]→[13.7413:7414](∅→∅),[13.3588]→[13.7413:7414](∅→∅),[13.3878]→[13.7413:7414](∅→∅),[13.5725]→[13.7413:7414](∅→∅),[13.6589]→[13.7413:7414](∅→∅),[13.7413]→[13.7413:7414](∅→∅)
<table class="tablesorter table table-striped table-condensed"><thead><tr><th>Nr</th><th>What</th><th>Duration</th><th>Machine</th><th>Status</th></tr></thead><tbody>[% FOREACH step IN build.buildsteps -%][% IF ( type == "All" ) || ( type == "Failed" && step.status != 0 ) || ( type == "Running" && step.busy == 1 ) -%][% has_log = log_exists(step.drvpath);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>[% step.outpath %]</tt>[% ELSE %]Substitution of <tt>[% step.outpath %]</tt>[% END %]</td><td>[% IF step.busy == 0 %][% INCLUDE renderDuration duration = step.stoptime - step.starttime %][% ELSE %][% IF build.finished %][% INCLUDE renderDuration duration = build.stoptime - step.starttime %][% ELSE %][% INCLUDE renderDuration duration = curTime - step.starttime %][% END %][% 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 %](<a href="[% log %]">log</a>, <a href="[% "$log/raw" %]">raw</a>, <a href="[% "$log/tail-reload" %]">tail</a>)[% END %]</td></tr>[% END %][% END %]</tbody></table><table class="tablesorter table table-striped table-condensed"><thead><tr><th>Nr</th><th>What</th><th>Duration</th><th>Machine</th><th>Status</th></tr></thead><tbody>[% FOREACH step IN build.buildsteps %][% IF ( type == "All" ) || ( type == "Failed" && step.status != 0 ) || ( type == "Running" && step.busy == 1 ) %][% has_log = log_exists(step.drvpath);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 %](<a href="[% log %]">log</a>, <a href="[% "$log/raw" %]">raw</a>, <a href="[% "$log/tail-reload" %]">tail</a>)[% END %]</td></tr>[% END %][% END %]</tbody></table> - replacement in src/root/build.tt at line 116
[% IF build.finished %][% IF build.iscachedbuild %]<tr><th>Cached from:</th><td>[% INCLUDE renderFullBuildLink build=cachedBuild %]</td></tr>[% ELSE %] - replacement in src/root/build.tt at line 127
[% IF build.iscachedbuild %](cached[% IF cachedBuild %] from [% INCLUDE renderFullBuildLink build=cachedBuild %][% END %])[% ELSE %][% INCLUDE renderDuration duration = build.stoptime - build.starttime %] finished at [% INCLUDE renderDateTime timestamp = build.stoptime %][% END %][% INCLUDE renderDuration duration = build.stoptime - build.starttime %]; finished at [% INCLUDE renderDateTime timestamp = build.stoptime %] - edit in src/root/build.tt at line 226
<tr><th>Build ID:</th><td>[% build.id %]</td></tr><tr><th>Status:</th><td>[% INCLUDE renderStatus build=build %]</td></tr><tr><th>Project:</th><td>[% INCLUDE renderProjectName project=project.name %]</td></tr><tr><th>Jobset:</th><td>[% INCLUDE renderJobsetName project=project.name jobset=jobset.name %]</td></tr><tr><th>Job name:</th><td>[% INCLUDE renderJobName project=project.name jobset=jobset.name job=job.name %]</td></tr> - edit in src/root/build.tt at line 236
[% IF build.releasename %]<tr><th>Release name:</th><td><tt>[% HTML.escape(build.releasename) %]</tt></td></tr>[% END %] - replacement in src/root/build.tt at line 270
<th>Output store path:</th><th>Output store paths:</th> - replacement in src/root/build.tt at line 272
<tt>[% build.outpath %]</tt><tt>[% INCLUDE renderOutputs outputs=build.buildoutputs %]</tt> - edit in src/root/build.tt at line 278
[% IF pathHash %] - edit in src/root/build.tt at line 279
<th>Output store path hash:</th><td><tt>[% pathHash %]</tt></td></tr>[% END %]<tr> - edit in src/root/channel-contents.tt at line 67
[% IF pkg.outName != 'out' %] [[% pkg.outName %]][% END %] - replacement in src/root/common.tt at line 350
<tr><td><b>[% bi1.name %]</b></td><td><tt>[% INCLUDE renderShortInputValue input=bi1 %] to [% INCLUDE renderShortInputValue input=bi2 %]</tt></td></tr><tr><td><b>[% bi1.name %]</b></td><td><tt>[% INCLUDE renderShortInputValue input=bi1 %]</tt> to <tt>[% INCLUDE renderShortInputValue input=bi2 %]</tt></td></tr> - replacement in src/root/common.tt at line 363
<b>[% bi1.name %]</b></td><td><tt>[% INCLUDE renderShortInputValue input=bi1 %] to [% INCLUDE renderShortInputValue input=bi2 %]</tt><b>[% bi1.name %]</b></td><td><tt>[% INCLUDE renderShortInputValue input=bi1 %]</tt> to <tt>[% INCLUDE renderShortInputValue input=bi2 %]</tt> - replacement in src/root/common.tt at line 398
<td><tt>[% step.outpath.match('-(.*)').0 %]</tt></td><td><tt>[% step.drvpath.match('-(.*)').0 %]</tt></td> - replacement in src/root/deps.tt at line 11
<h1>Runtime dependencies for [% build.outpath %]</h1><h1>Runtime dependencies</h1> - replacement in src/root/deps.tt at line 29
<h1>Build time dependencies for [% build.drvpath %]</h1><h1>Build time dependencies</h1> - replacement in src/root/jobset.tt at line 207
[% FOREACH j IN activeJobs %] [% INCLUDE renderJobName project=project.name jobset=jobset.name job=j %] [% END %][% FOREACH j IN activeJobs %][% INCLUDE renderJobName project=project.name jobset=jobset.name job=j %]<br/>[% END %] - replacement in src/root/jobset.tt at line 215
[% FOREACH j IN inactiveJobs %] [% INCLUDE renderJobName project=project.name jobset=jobset.name job=j %] [% END %][% FOREACH j IN inactiveJobs %][% INCLUDE renderJobName project=project.name jobset=jobset.name job=j %]<br/>[% END %] - replacement in src/root/log.tt at line 7
This is the build log of path <tt>[% IF step; step.outpath; ELSE; build.outpath; END %]</tt>.This is the build log of derivation <tt>[% IF step; step.drvpath; ELSE; build.drvpath; END %]</tt>. - replacement in src/root/product-list.tt at line 19
[% filename = "${build.nixname}.closure.gz" %][% filename = build.nixname _ (product.subtype ? "-" _ product.subtype : "") _ ".closure.gz" %] - replacement in src/root/product-list.tt at line 73
[% filename = "${build.nixname}.closure.gz" %][% filename = build.nixname _ (product.subtype ? "-" _ product.subtype : "") _ ".closure.gz" %] - edit in src/script/hydra-build at line 4
use List::MoreUtils qw(all); - edit in src/script/hydra-build at line 62
- edit in src/script/hydra-build at line 76
- replacement in src/script/hydra-build at line 133
[ "Output store path:", $build->outpath ],[ "Output store path:", join(", ", map { $_->path } $build->buildoutputs) ], - edit in src/script/hydra-build at line 210
- edit in src/script/hydra-build at line 212
sub addBuildStepOutputs {my ($step) = @_;my $drv = derivationFromPath($step->drvpath);$step->buildstepoutputs->create({ name => $_, path => $drv->{outputs}->{$_} })foreach keys %{$drv->{outputs}};} - edit in src/script/hydra-build at line 219
- edit in src/script/hydra-build at line 222
my %outputs;$outputs{$_->name} = $_->path foreach $build->buildoutputs->all; - edit in src/script/hydra-build at line 227
my $outPath = $build->outpath; - replacement in src/script/hydra-build at line 239
if (!isValidPath($outPath)) {unless (all { isValidPath($_) } values(%outputs)) { - edit in src/script/hydra-build at line 251
# Note: `--timeout' was added in Nix 1.0pre27564, June 2011. - replacement in src/script/hydra-build at line 255
"--add-root " . gcRootFor $outPath . " 2>&1";"--add-root " . gcRootFor($outputs{out} // $outputs{(sort keys %outputs)[0]}) . " 2>&1";print STDERR "$cmd\n"; - replacement in src/script/hydra-build at line 277
$build->buildsteps->create(my $step = $build->buildsteps->create( - edit in src/script/hydra-build at line 281
, outpath => $2 - edit in src/script/hydra-build at line 285
addBuildStepOutputs($step); - replacement in src/script/hydra-build at line 321
$build->buildsteps->create(my $step = $build->buildsteps->create( - edit in src/script/hydra-build at line 325
, outpath => $2 - edit in src/script/hydra-build at line 331
addBuildStepOutputs($step); - replacement in src/script/hydra-build at line 337
my $outPath = $1;my $path = $1; - replacement in src/script/hydra-build at line 339
$build->buildsteps->create({ stepnr => ($buildSteps{$outPath} = $buildStepNr++)my $step = $build->buildsteps->create({ stepnr => ($buildSteps{$path} = $buildStepNr++) - edit in src/script/hydra-build at line 342
, outpath => $1 - edit in src/script/hydra-build at line 345
# "out" is kinda fake (substitutions don't have named outputs).$step->buildstepoutputs->create({ name => "out", path => $path }); - replacement in src/script/hydra-build at line 351
my $outPath = $1;my $path = $1; - replacement in src/script/hydra-build at line 353
my $step = $build->buildsteps->find({stepnr => $buildSteps{$outPath}}) or die;my $step = $build->buildsteps->find({stepnr => $buildSteps{$path}}) or die; - replacement in src/script/hydra-build at line 359
my $outPath = $1;my $path = $1; - replacement in src/script/hydra-build at line 361
my $step = $build->buildsteps->find({stepnr => $buildSteps{$outPath}}) or die;my $step = $build->buildsteps->find({stepnr => $buildSteps{$path}}) or die; - edit in src/script/hydra-build at line 388
my $size = 0;my $closuresize = 0; - replacement in src/script/hydra-build at line 389[13.409]→[13.1558:1591](∅→∅),[13.1558]→[13.1558:1591](∅→∅),[13.1591]→[13.166:249](∅→∅),[13.97]→[13.495:521](∅→∅),[13.249]→[13.495:521](∅→∅),[13.495]→[13.495:521](∅→∅)
if (isValidPath($outPath)) {my ($deriver, $hash, $time, $narSize, $refs) = queryPathInfo($outPath, 0);$size = $narSize;txn_do($db, sub {if ($buildStatus == 0) { - replacement in src/script/hydra-build at line 392[13.522]→[13.98:154](∅→∅),[13.154]→[13.583:621](∅→∅),[13.583]→[13.583:621](∅→∅),[13.621]→[11.712:834](∅→∅),[11.834]→[13.736:746](∅→∅),[13.1175]→[13.736:746](∅→∅),[13.736]→[13.736:746](∅→∅),[13.746]→[13.1703:1709](∅→∅),[13.1703]→[13.1703:1709](∅→∅)
my @closure = computeFSClosure(0, 0, $outPath);foreach my $path (@closure) {my ($deriver, $hash, $time, $narSize, $refs) = queryPathInfo($path, 0);$closuresize += $narSize;}}my $size = 0;my $closureSize = 0;my $releaseName; - replacement in src/script/hydra-build at line 396
txn_do($db, sub {my $releaseName = getReleaseName($outPath);my @closure = computeFSClosure(0, 0, values %outputs);foreach my $path (@closure) {my ($deriver, $hash, $time, $narSize, $refs) = queryPathInfo($path, 0);$closureSize += $narSize;$size += $narSize if grep { $path eq $_ } values(%outputs);}foreach my $path (values %outputs) {$buildStatus = 6 if $buildStatus == 0 && -f "$path/nix-support/failed";$releaseName //= getReleaseName($path);} - replacement in src/script/hydra-build at line 408
$buildStatus = 6 if $buildStatus == 0 && -f "$outPath/nix-support/failed";$build->update({ releasename => $releaseName, size => $size, closuresize => $closureSize});addBuildProducts($db, $build);} - edit in src/script/hydra-build at line 427
, size => $size, closuresize => $closuresize - edit in src/script/hydra-build at line 428
, releasename => $releaseName - edit in src/script/hydra-build at line 430[13.4797]→[13.912:966](∅→∅),[13.966]→[13.2494:2537](∅→∅),[13.4577]→[13.2494:2537](∅→∅),[13.2537]→[13.6606:6616](∅→∅),[13.6606]→[13.6606:6616](∅→∅)
if ($buildStatus == 0 || $buildStatus == 6) {addBuildProducts($db, $build);} - replacement in src/script/hydra-update-gc-roots at line 24
my @columns = ( "id", "project", "jobset", "job", "system", "finished", "outpath", "drvpath", "timestamp" );my @columns = ( "id", "project", "jobset", "job", "system", "finished", "drvpath", "timestamp" ); - replacement in src/script/hydra-update-gc-roots at line 30
$build->system, "; ",$build->system, "; ", - replacement in src/script/hydra-update-gc-roots at line 32[13.106]→[13.303:343](∅→∅),[13.303]→[13.303:343](∅→∅),[13.343]→[13.388:414](∅→∅),[13.414]→[13.381:394](∅→∅),[13.381]→[13.381:394](∅→∅),[13.394]→[13.415:519](∅→∅)
if (isValidPath($build->outpath)) {addRoot $build->outpath;} else {print STDERR " warning: output ", $build->outpath, " has disappeared\n" if $build->finished;foreach my $out ($build->buildoutputs->all) {if (isValidPath($out->path)) {addRoot $out->path;} else {print STDERR " warning: output ", $out->path, " has disappeared\n" if $build->finished;} - replacement in src/script/hydra-update-gc-roots at line 40
if (isValidPath($build->drvpath)) {addRoot $build->drvpath;} else {print STDERR " warning: derivation ", $build->drvpath, " has disappeared\n";}if (isValidPath($build->drvpath)) {addRoot $build->drvpath;} else {print STDERR " warning: derivation ", $build->drvpath, " has disappeared\n";} - replacement in src/script/hydra-update-gc-roots at line 62
"exists (select 1 from releasemembers where build = me.id)", { order_by => ["project", "jobset", "job", "id"] });"exists (select 1 from releasemembers where build = me.id)",{ order_by => ["project", "jobset", "job", "id"], columns => [ @columns ] }); - replacement in src/script/hydra-update-gc-roots at line 80
# If the jobset has been hidden and disabled for more than one week, than# don't keep its builds anymore.# If the jobset has been hidden and disabled for more than one# week, then don't keep its builds anymore. - replacement in src/script/hydra-update-gc-roots at line 92
print STDERR "*** looking for the $keepnr most recent successful builds of each job in jobset ",$project->name, ":", $jobset->name, "\n";# FIXME: base this on jobset evals?print STDERR "*** looking for the $keepnr most recent successful builds of each job in jobset ",$project->name, ":", $jobset->name, "\n"; - replacement in src/script/hydra-update-gc-roots at line 96[13.798]→[13.1651:1698](∅→∅),[13.1698]→[13.37580:37610](∅→∅),[13.37610]→[13.1729:1829](∅→∅),[13.1729]→[13.1729:1829](∅→∅)
keepBuild $_ foreach $jobset->builds->search({ 'me.id' => { 'in' => \[ "select b2.id from Builds b2 join " ." (select distinct job, system, coalesce( " .keepBuild $_ foreach $jobset->builds->search({ 'me.id' => { 'in' => \[ "select b2.id from Builds b2 join " ." (select distinct job, system, coalesce( " . - replacement in src/script/hydra-update-gc-roots at line 102
" on b2.project = ? and b2.jobset = ? and b2.job = x.job and b2.system = x.system and (id >= x.nth) where finished = 1 and buildStatus = 0", [ '', $keepnr - 1 ], [ '', $project->name ], [ '', $jobset->name ], [ '', $project->name ], [ '', $jobset->name ] ] }},{ order_by => ["job", "system", "id"], columns => [ @columns ] });" on b2.project = ? and b2.jobset = ? and b2.job = x.job and b2.system = x.system and (id >= x.nth) where finished = 1 and buildStatus = 0", [ '', $keepnr - 1 ], [ '', $project->name ], [ '', $jobset->name ], [ '', $project->name ], [ '', $jobset->name ] ] }},{ order_by => ["job", "system", "id"], columns => [ @columns ] }); - replacement in src/script/hydra-update-gc-roots at line 142
$rootsDeleted++;$rootsDeleted++; - replacement in src/script/hydra-update-gc-roots at line 145
$rootsKept++;$rootsKept++; - edit in src/sql/hydra.sql at line 136
outPath text not null, - edit in src/sql/hydra.sql at line 176
-- 6 = failure with output - edit in src/sql/hydra.sql at line 194[220.2530][13.7124]
create table BuildOutputs (build integer not null,name text not null,path text not null,primary key (build, name),foreign key (build) references Builds(id) on delete cascade); - edit in src/sql/hydra.sql at line 210
outPath text, - edit in src/sql/hydra.sql at line 228
create table BuildStepOutputs (build integer not null,stepnr integer not null,name text not null,path text not null,primary key (build, stepnr, name),foreign key (build) references Builds(id) on delete cascade,foreign key (build, stepnr) references BuildSteps(build, stepnr) on delete cascade); - replacement in src/sql/hydra.sql at line 516[13.12428]→[13.12428:12468](∅→∅),[13.12468]→[13.124:239](∅→∅),[13.239]→[13.12550:12640](∅→∅),[13.12550]→[13.12550:12640](∅→∅),[13.12640]→[13.240:279](∅→∅)
hostname text primary key NOT NULL,username text DEFAULT '' NOT NULL,ssh_key text DEFAULT '' NOT NULL,options text DEFAULT '' NOT NULL,maxconcurrent integer DEFAULT 2 NOT NULL,speedfactor integer DEFAULT 1 NOT NULL,enabled integer DEFAULT 0 NOT NULLhostname text primary key not null,username text default '' not null,ssh_key text default '' not null,options text default '' not null,maxconcurrent integer default 2 not null,speedfactor integer default 1 not null,enabled integer default 0 not null - edit in src/sql/hydra.sql at line 540
create index IndexBuildStepsOnBuild on BuildSteps(build); - replacement in src/sql/hydra.sql at line 542
create index IndexBuildStepsOnOutpath on BuildSteps(outpath);create index IndexBuildStepsOnOutpathBuild on BuildSteps (outpath, build);create index IndexBuildStepOutputsOnPath on BuildStepOutputs(path);