TH674WKJECNZ4K22DZ2N4SF53UGKG2BQRGBSNESRPDRSRND6TZHAC BIZEPF2TVVOBPLUDU7BOUYRUXVQDGWI3IBAQKXRLNXPSCSK47BUQC ZEEZRG2ELCFZRPLUGSFZEMT43MEMWIM7TTC7PMMGTMKQ4F2OGSFAC HSVVEKTY2U5XJ4ZDHF43YEQXRPRWNZLZDDD4W7JFJ55UWD7CEFBQC QUTWJR7PQZ3DBPC4G2AFXOKPPGFZQLE5RLXHAOFTLMXIT2QPF4TQC CXRCPDSQEWHSZNCJIORUAINH5I2FFFQ7AVUQOB62REGROLROPE7QC SAFVRDTKKD25U6VW5IVNUILLLXNQXFU72XARYC6NRVXU6MJEW2WAC SHYRGAWZFYGRWCRB54TYL2GTU3B4WMQ3J5H4ZHGV27W7PUQN3EWQC BKOIYITRBRVU4D7XFAZPV5QHAPCBMIO3SBNHYJ6TVT43WR32CTHQC MBNX3V52ALVUJLB6RS4N4UGK7USIOEYI4NSYVNCIHXETVLS4LG5AC J5UVLXOK6EDIL5I7VKWH4V2QDS4DPD7FHRK6XBWSXFRQS4JKXFZQC XHK7IGYISKWLHOOM3ZQAVLSRUNS2SV43TTKRX4XLPZZJ4DP3RWYAC 22JB5HNESA5OX5ABFISGCJCO6R7GF3AUTXDHGAT3PM7IDVIBKWWAC 2B63JW6FYYHPV4JKU7K6RDTFH76JYUCFO23GAFZXAUHFGQTODOZQC $res =~ s/\/nix\/store\/[a-z0-9]*-/\/nix\/store\/...-/g;$res =~ s/nix-build-[a-z0-9]*-/nix-build-...-/g;$res =~ s/[0-9]{2}:[0-9]{2}:[0-9]{2}/00:00:00/g;return $res;}sub logdiff : Chained('api') PathPart('logdiff') Args(2) {my ($self, $c, $buildid1, $buildid2) = @_;my $diff = "";my $build1 = getBuild($c, $buildid1);notFound($c, "Build with ID $buildid1 doesn't exist.")if !defined $build1;my $build2 = getBuild($c, $buildid2);notFound($c, "Build with ID $buildid2 doesn't exist.")if !defined $build2;if (-f $build1->resultInfo->logfile && -f $build2->resultInfo->logfile) {my $logtext1 = readNormalizedLog($build1->resultInfo->logfile);my $logtext2 = readNormalizedLog($build2->resultInfo->logfile);$diff = diff \$logtext1, \$logtext2;} else {$c->response->status(404);}$c->stash->{'plain'} = { data => (scalar $diff) || " " };$c->forward('Hydra::View::Plain');}
[% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<th>First broken build <tt>[% INCLUDE renderDateTime timestamp = firstBrokenBuild.timestamp %]</tt></th>[% END %]<th>This build <tt>[% INCLUDE renderDateTime timestamp = build.timestamp %]</tt></th>
[% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<th>First broken build <tt>[% INCLUDE renderDateTime timestamp = firstBrokenBuild.timestamp %]</tt><br/><tt>[ <a href="[% c.uri_for(c.controller('API').action_for('logdiff') prevSuccessfulBuild.id firstBrokenBuild.id ) %]">log diff</a> ]</tt></th>[% END %]<th>This build <tt>[% INCLUDE renderDateTime timestamp = build.timestamp %]</tt> <br/><tt>[ <a href="[% c.uri_for(c.controller('API').action_for('logdiff') prevSuccessfulBuild.id build.id) %]">log diff</a> ]</tt></th>