It didn't work anymore due to the removal of nix-log2xml. And in any case XSL is the work of the devil.
UKFZFDJOMUNXOF2QTVEA6VQG64DSGQCLJVEMH5OSBOSCZWUMKELQC 37FRLTBXRG7SHLEUOIDXAUN55TZ2SAWYAFEOYAQS7PSDWUZXWITQC HKQWF5RQCYE2DBNV3MKOYEH33XB7D2UPEM3ERTY7DOQYE3QLPQBQC QWVUIGFYW7SJZ4377CNSHJ24NWIGLKJYGERGCDVVHWUQ6XXBO6BQC 4EZ4PNOWM7EAXZB5NO3FFLS2S6YU3TGVLDRFWGNAYRGE7L6MO4AAC NEBFAIKACLDBJKG25HLWS3VAB5MVWXER3XVNPNEO7TL4W7IZVXXAC KZ55DLPHCMOBWZRUMNGPNG3N2XK65K7VKFKVZH27W3KVUEQWGCTQC FNHGYTB4SAL2PHL24ADQAHIQNJCVLC4KCULHGTP2XVI3RLJ6XDYAC PPAE3Z3DP2IB4S5JXMC2FAHPDYEMUUNACP5HXGJ3QK3E5PKJTX3QC TUMFOKWNUIPBUIO6OHOO2BUKIUFDZVG635VU6HUUXBRUQO4E5X6AC 7I2VJDS6UO3W36E64RNRJTJ6ZEB5Y6EP3ZWUGZY4TQW25HJORBHAC 4YCF3KBGI4VYKHJXAREJLCJLY3UWB2FX447CJ4XQWFRKRFKG5WCQC FV2M6MOTAP4BJMEKU5XUDVEACWEJGEIRCCE2MRY3F6SF2SFOE3MQC K4DKM74W2QSV3ZMVV2YZ2MDQZHB6ZVQFBZV5FE5EBCELV7ZHUFSAC T4LLYESZ2HUXSLKZ6GNBLVWUVG7R5IDFHYHYO773QIZ6QTOOXR2AC M4JUF5V6Y5ING6VEJZ44SVBNH7DFFE6R6QURSWFQS5FBUADB7Z6QC CLXEECMFKLUIN5QBV3BPPPSU6G5UF6MXRSNWA6LXUBNQGSJY4U5QC D5QIOJGPKQJIYBUCSC3MFJ3TXLPNZ2XMI37GXMFRVRFWWR2VMTFAC US27ZTX5HCH53SQN2KFSCV2GL2625XL5J3WCDR7D5HLPA7ZSPX5AC BA46C5LNEQ57N52IJTCEXW4J74F33KKNYHYXE6ZJLQ5ARMCJPUHAC 4TNF7TWX36TFPNRKG4U2OWOU5SOFR7VNRZFKM7JPOEZVQ2AIRWWQC DOQSWDUGHT5BDBBCYCH442UC3VZIIZ7K3FWWCEPBTF3NNQF27ZNQC 3JCIP7EZEYCLFC3KGMZDE3DTVX4H4AMLXXBEKSX33BFFZASMYGZQC O3CGTZFGRKSPLHSOIVYZOWWKF3YTAMIOMDZAMUTQL5R2JQXCK5BQC 4JPNFWRBFCFER74NDL3XZXNQ25YQCPD7E4XKYKF7VCWIESE56G4AC ZHHFJ4K5TNNOUVAFCCNLXMU5SQ2SBJA5OFT53RIBW7IJEARFI7XAC YNHNVV3HFWQV53NOYXGVT3SNXDL5I7BMFGQRZ2ATUGUXPXXS74ZQC BD3GRK4BQUGRQGTAILUITIH3RRSVUH6AKINVMMKYLBAAHAAUSB4AC QU5QJUKCGDWQFDJ3QPGICY4NISXOCUNDXG62IQJNKEW64YCG3HMAC 6JGCGK5XMN63OPPDAJOOUNDNMMKNOWKJRDSPF3KBR6J3JEHQTCMAC 6L3ZM55SJNE7HNUZ46SFEXV6MGDZNI26XJTEDTGTP5ZPACNF43AAC QE253KG464JLXJHTILULXUIK527FGXT42IHHDE3BR6ASIYC44MWAC 6F4UNDTCAW7LYSKTUUUCX32BLAAGYPUPK2LXMMZ32Y6H3CBWP6TQC LBNVQXUBEZ45SOTGVXK5UEZXIAIZTJLWZNUYFI4JZ6J65N3KPDVQC ZH6B56XRZON7AGKUPGKABU2SWOIQSYBTXVOMR66X6P6MG25Y4WZAC SAIUFDP3EFXENSB3XS4OKXNOTGLCYGPW3QNHCXASXBDEEDGYRWUAC Y6AHH4THYQA43V77L43YM42DYRPCMDSWLUV4NKWAQYMPL4NTUIPQC KI423DCQYAHL7IRSLKYU6BR5VMEGETWSKUANU4EKZEDWC2S2XSHAC GAIBDEZZPZ52ASD3GK3WUYG3NOB27MLQ5GGIGKLAD6JQ4UATTT3AC J5UVLXOK6EDIL5I7VKWH4V2QDS4DPD7FHRK6XBWSXFRQS4JKXFZQC 6KIJX24R5RRDR2UQMUAWHF3N6V6DKKL5URYSLB7IT4J5C3RO4G2AC 3JBUMW3ECBQ5OARJEWPD7U5LIAIVGVMZUB7VG3ZLEWA3AV5EXDKQC RP6WDKE2VGNWZU3XBJSESTJWVV5BKZZ5SXPKT5N6XZIJ6XRTNWZQC X7YLJT7WSU26JC7ROFHPRTRYXSL75IGO43SM5G6RJL33SP7EC3QQC <?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="@*|node()"><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template><xsl:template match="line"><line><xsl:if test="contains(text(), ' *** ') orcontains(text(), 'LaTeX Error') orcontains(text(), 'BUILD FAILED') orstarts-with(text(), 'FAIL:') orcontains(text(), 'FAILURE') orcontains(text(), '[ERROR]') orcontains(text(), ' error: ') ortrue"><xsl:attribute name="error"></xsl:attribute></xsl:if><xsl:apply-templates select="@*|node()"/></line></xsl:template></xsl:stylesheet><xsl:output method='xml' encoding="UTF-8" />
<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method='html' encoding="UTF-8" omit-xml-declaration="yes" /><xsl:template match="logfile"><p><a href="javascript:" class="btn btn-info tree-expand-all"><i class="icon-plus icon-white"></i> Expand all</a><xsl:text> </xsl:text><a href="javascript:" class="btn btn-info tree-collapse-all"><i class="icon-minus icon-white"></i> Collapse all</a></p><ul class='tree'><xsl:for-each select='line|nest'><li><xsl:apply-templates select='.'/></li></xsl:for-each></ul></xsl:template><xsl:template match="nest"><!-- The tree should be collapsed by default if all children areunimportant or if the header is unimportant. --><!-- <xsl:variable name="collapsed"select="count(.//line[not(@priority = 3)]) = 0 or ./head[@priority = 3]" /> --><xsl:variable name="collapsed" select="count(.//*[@error]) = 0"/><xsl:variable name="style"><xsl:if test="$collapsed">display: none;</xsl:if></xsl:variable><xsl:variable name="arg"><xsl:choose><xsl:when test="$collapsed">true</xsl:when><xsl:otherwise>false</xsl:otherwise></xsl:choose></xsl:variable><xsl:if test="line|nest"><a href="javascript:" class="tree-toggle"></a><xsl:text> </xsl:text></xsl:if><xsl:apply-templates select='head'/><!-- Be careful to only generate <ul>s if there are <li>s, otherwise it’s malformed. --><xsl:if test="line|nest"><ul class='subtree' style="{$style}"><xsl:for-each select='line|nest'><li><xsl:apply-templates select='.'/></li></xsl:for-each></ul></xsl:if></xsl:template><xsl:template match="head|line"><span class="code"><xsl:if test="@error"><xsl:attribute name="class">code errorLine</xsl:attribute></xsl:if><xsl:if test="@priority = 3"><xsl:attribute name="class">code prio3</xsl:attribute></xsl:if><xsl:apply-templates/><br/></span></xsl:template><xsl:template match="storeref"><em class='storeref'><span class='popup'><xsl:apply-templates/></span><span class='elided'>/...</span><xsl:apply-templates select='name'/><xsl:apply-templates select='path'/></em></xsl:template></xsl:stylesheet><xsl:if test="@warning"><xsl:attribute name="class">code warningLine</xsl:attribute></xsl:if><xsl:variable name="lineno"><xsl:number count="head|line" level="any" /></xsl:variable><a class="lineno" href="#line-{$lineno}" id="line-{$lineno}"><xsl:value-of select="$lineno" /> </a>
# !!! quick hackmy $pipeline = ($logPath =~ /.bz2$/ ? "bzip2 -d < $logPath" : "cat $logPath"). " | nix-log2xml | xsltproc " . $c->path_to("xsl/mark-errors.xsl") . " -". " | xsltproc " . $c->path_to("xsl/log2html.xsl") . " -";
<h2>Last 50 log lines of [% INCLUDE renderFullJobNameOfBuild %] build <a href="[% c.uri_for('/build' build.id) %]">[% build.id %]</a>[%IF step %] step [% step.stepnr %][% END %]</h2>
<p>Below are the last 50 log lines. The <a href="[% c.uri_for('/build' build.id 'log') %]">full log</a> is also available.</p>
em.storeref {color: #500000;position: relative;width: 100%;}em.storeref:hover {background-color: #eeeeee;}*.popup {display: none;background: #ffffcd;border: solid #555555 1px;position: absolute;top: 0em;left: 0em;margin: 0;padding: 0;z-index: 100;}em.storeref:hover span.popup {display: inline;}span.code {white-space: pre-wrap;font-family: monospace;}.errorLine {color: #ff0000;font-weight: bold;}a.lineno {color: #909090;float: right;}}.prio3 {font-style: italic;.warningLine {color: darkorange;font-weight: bold;}width: 40em;