YPDYBK5GXGNHZMJWC2EHO3T4BIMYK5LMP2G3ABGHOKGIWV4ONIYAC PMNWRTGJ4GVSMSSAWSUD57B26PCRAHMZIQ5SIWJIK7A74ENKEQLAC OD5FSS5AJ3XRTV5Q4UQQF6JMBT6UUL7UUOMPPUBNOM6ZMVIHW35QC LBNVQXUBEZ45SOTGVXK5UEZXIAIZTJLWZNUYFI4JZ6J65N3KPDVQC XDDCO6CHPWGXFV3RSMMUYY45DTXJXQNYYHUT2PCYAGRODK43MD6AC GJFYEU3SVP7TDSYXVZEYGKN4NVWSZX4754PPPTOYPRHUO5RMDWPQC CQTN62OHT4DY35E2MJEG7GFTVNEE5KRDMV6ASBQLBHN7BUDK7WHAC J5UVLXOK6EDIL5I7VKWH4V2QDS4DPD7FHRK6XBWSXFRQS4JKXFZQC Q4VDOA762MDHLJKNJMPLHFYRRACCT3DQXF66ZTVMETZCR52B72OQC IK53RV4VGOHLCZGQCCIKPB45M3C7M7YMNBOJFBGZJ4LWIZNU4QNQC 3PNG7NIBQQURUUPRVQXYL342OT7JUUYOMY2JJNP6YDX7SYJDZMYAC if (!defined $node) {$path =~ /\/[a-z0-9]+-(.*)$/;my $name = $1 // $path;$name =~ s/\.drv$//;$node ={ path => $path, name => $name, buildStep => $runtime? findBuildStepByOutPath($self, $c, $path, 0): findBuildStepByDrvPath($self, $c, $path, 0)};$$done{$path} = $node;my @refs;foreach my $ref (queryReferences($path)) {next if $ref eq $path;next unless $runtime || $ref =~ /\.drv$/;getDependencyGraph($self, $c, $runtime, $done, $ref);push @refs, $ref;}# Show in reverse topological order to flatten the graph.# Should probably do a proper BFS.my @sorted = reverse topoSortPaths(@refs);$node->{refs} = [map { $$done{$_} } @sorted];}return $node;}
my @buildtimepaths = $c->stash->{drvAvailable} ? computeFSClosure(0, 0, $drvPath) : ();my @buildtimedeps = ();my @runtimepaths = $c->stash->{available} ? computeFSClosure(0, 0, @outPaths) : ();my @runtimedeps = ();
foreach my $p (@buildtimepaths) {next unless $p =~ /\.drv$/;my ($buildStep) = findBuildStepByDrvPath($self, $c, $p, 0);my %dep = ( buildstep => $buildStep, path => $p );push(@buildtimedeps, \%dep);
if ($c->stash->{available}) {my $done = {};$c->stash->{runtimeGraph} = [ map { getDependencyGraph($self, $c, 1, $done, $_) } @outPaths ];
foreach my $p (@runtimepaths) {my ($buildStep) = findBuildStepByOutPath($self, $c, $p, 0);my %dep = ( buildstep => $buildStep, path => $p );push(@runtimedeps, \%dep);
if ($c->stash->{drvAvailable}) {my $done = {};$c->stash->{buildTimeGraph} = getDependencyGraph($self, $c, 0, $done, $drvPath);
[% BLOCK renderLogLinks %](<a href="[% url %]">log</a>, <a href="[% "$url/raw" %]">raw</a>, <a href="[% "$url/tail-reload" %]">tail</a>)[% END %]
[% IF dep.buildstep %]<a href="[% c.uri_for('/build' dep.buildstep.get_column('build') 'nixlog' dep.buildstep.stepnr) %]">[% dep.path %]</a>
[% IF done.${node.path} %]<p><tt>[% node.name %]</tt> (<em>repeated</em>)</p>
[% dep.path %]
[% done.${node.path} = 1 %]<p>[% IF node.buildStep %]<a href="[% c.uri_for('/build' node.buildStep.get_column('build')) %]"><tt>[% node.name %]</tt></a> [%IF log_exists(node.buildStep.drvpath);INCLUDE renderLogLinks url=c.uri_for('/build' node.buildStep.get_column('build') 'nixlog' node.buildStep.stepnr);END %][% ELSE %]<tt>[% node.name %]</tt>[% END %]</p>[% IF node.refs.size > 0 %]<ul>[% FOREACH ref IN node.refs; INCLUDE renderNode node=ref; END %]</ul>[% END %]
[% FOREACH dep IN buildtimedeps -%]<li>[% IF dep.buildstep %]<a href="[% c.uri_for('/build' dep.buildstep.get_column('build') 'nixlog' dep.buildstep.stepnr) %]">[% dep.path %]</a>[% ELSE %][% dep.path %][% END %]</li>[% END %]
[% INCLUDE renderNode node=buildTimeGraph %]