2 - Copyright (c) 2017 Vojtech Horky
5 - Redistribution and use in source and binary forms, with or without
6 - modification, are permitted provided that the following conditions
9 - - Redistributions of source code must retain the above copyright
10 - notice, this list of conditions and the following disclaimer.
11 - - Redistributions in binary form must reproduce the above copyright
12 - notice, this list of conditions and the following disclaimer in the
13 - documentation and/or other materials provided with the distribution.
14 - - The name of the author may not be used to endorse or promote products
15 - derived from this software without specific prior written permission.
17 - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 - NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 <xsl:stylesheet version=
"1.0"
29 xmlns:
xsl=
"http://www.w3.org/1999/XSL/Transform"
30 xmlns=
"http://www.w3.org/1999/xhtml">
32 <xsl:import href=
"common.xsl" />
37 omit-xml-declaration=
"yes"
38 doctype-system=
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
39 doctype-public=
"-//W3C//DTD XHTML 1.0 Transitional//EN"
42 <xsl:key name=
"by-arch" match=
"/build/*" use=
"@arch" />
43 <xsl:key name=
"by-harbour" match=
"/build/*" use=
"@package" />
44 <xsl:key name=
"by-scenario" match=
"/build/*" use=
"@scenario" />
46 <xsl:variable name=
"LINK_TO_TOP">
47 <span class=
"back-to-top"><a href=
"#top-of-page">(back to top)
</a></span>
51 <xsl:template match=
"build">
52 <xsl:variable name=
"BUILD" select=
"." />
53 <xsl:call-template name=
"HTML_PAGE">
54 <xsl:with-param name=
"TITLE">
55 <xsl:text>HelenOS CI (build
</xsl:text>
56 <xsl:value-of select=
"@number" />
57 <xsl:text>)
</xsl:text>
59 <xsl:with-param name=
"EXTRA_HEAD">
60 <script type=
"text/javascript" language=
"JavaScript">
61 $( document ).ready(function() {
64 function showHideLog(link, target) {
65 target = $(link).parents(
"table").find(
"." + target)
66 if (target.is(
":hidden")) {
77 <xsl:with-param name=
"BODY">
80 <h1 id=
"top-of-page">HelenOS continuous integration testing
</h1>
82 Build
<xsl:value-of select=
"@number" /> from
<xsl:value-of select=
"buildinfo/@started" />
83 (
<xsl:apply-templates select=
"buildinfo" mode=
"duration" />)
86 <h2>Summary results
</h2>
87 <xsl:apply-templates select=
"." mode=
"html-summary-table" />
90 <div id=
"quick-links" class=
"buttonset">
93 <div class=
"quick-link-group">
94 <h3>Miscellaneous
</h3>
96 <li><a href=
"#buildinfo">Build details
</a></li>
97 <li><a href=
"#matrix">Summary matrix
</a></li>
98 <li><a href=
"#failures">List of failed tasks
</a></li>
99 <xsl:if test=
"helenos-build">
100 <li><a href=
"#helenos">HelenOS
</a></li>
105 <xsl:if test=
"count(*[@arch]) > 0">
106 <div class=
"quick-link-group">
107 <h3>Architectures
</h3>
109 <xsl:for-each select=
"*[@arch and count(. | key('by-arch', @arch)[parent::build = $BUILD][1]) = 1]">
110 <xsl:sort select=
"@arch" />
111 <xsl:variable name=
"ARCH" select=
"@arch" />
112 <li><a href=
"#arch-{$ARCH}"><xsl:value-of select=
"$ARCH" /></a></li>
118 <xsl:if test=
"count(*[@package]) > 0">
119 <div class=
"quick-link-group">
122 <xsl:for-each select=
"*[@package and count(. | key('by-harbour', @package)[parent::build = $BUILD][1]) = 1]">
123 <xsl:sort select=
"@package" />
124 <xsl:variable name=
"PKG" select=
"@package" />
125 <li><a href=
"#harbour-{$PKG}"><xsl:value-of select=
"$PKG" /></a></li>
131 <xsl:if test=
"count(*[@scenario]) > 0">
132 <div class=
"quick-link-group">
133 <h3>Testing scenarios
</h3>
135 <xsl:for-each select=
"*[@scenario and count(. | key('by-scenario', @scenario)[parent::build = $BUILD][1]) = 1]">
136 <xsl:sort select=
"@description" />
137 <xsl:variable name=
"SCENARIO" select=
"@scenario" />
138 <li><a href=
"#scenario-{$SCENARIO}"><xsl:value-of select=
"@description" /></a></li>
146 <h2 id=
"buildinfo">Build details
<xsl:copy-of select=
"$LINK_TO_TOP" /></h2>
147 <table style=
"width: 60%">
150 <th width=
"50%">Key
</th>
151 <th width=
"50%">Value
</th>
155 <tr class=
"result-ok">
156 <td>Build number
</td>
157 <td><xsl:value-of select=
"/build/@number" /></td>
159 <tr class=
"result-ok">
160 <td>Build start time
</td>
161 <td><xsl:value-of select=
"buildinfo/@started" /></td>
163 <tr class=
"result-ok">
164 <td>Build duration
</td>
165 <td><xsl:apply-templates select=
"buildinfo" mode=
"duration" /></td>
167 <tr class=
"result-ok">
168 <td>Build parallelism level
</td>
169 <td><xsl:value-of select=
"buildinfo/@parallelism" /></td>
171 <xsl:for-each select=
"checkout[@alias!='']">
172 <xsl:sort select=
"alias" />
173 <tr class=
"result-ok">
174 <td>Repository
<i><xsl:value-of select=
"@alias" /></i> version
</td>
175 <td><xsl:value-of select=
"@revision" /></td>
181 <h2 id=
"matrix">Summary matrix
<xsl:copy-of select=
"$LINK_TO_TOP" /></h2>
182 <table class=
"matrix">
186 <xsl:for-each select=
"*[@arch and count(. | key('by-arch', @arch)[parent::build = $BUILD][1]) = 1]">
187 <xsl:sort select=
"@arch" />
189 <a href=
"#arch-{@arch}">
190 <xsl:apply-templates select=
"@arch" mode=
"architecture-with-hyphens" />
199 <a href=
"#helenos">HelenOS
</a>
201 <xsl:for-each select=
"*[@arch and count(. | key('by-arch', @arch)[parent::build = $BUILD][1]) = 1]">
202 <xsl:sort select=
"@arch" />
203 <xsl:variable name=
"ARCH" select=
"@arch" />
204 <xsl:variable name=
"RESULT" select=
"//helenos-build[@arch=$ARCH]" />
205 <td class=
"result-{$RESULT/@result}"><xsl:apply-templates select=
"$RESULT" mode=
"log-link-matrix" /></td>
208 <xsl:for-each select=
"*[@package and count(. | key('by-harbour', @package)[parent::build = $BUILD][1]) = 1]">
209 <xsl:sort select=
"@package" />
210 <xsl:variable name=
"PKG" select=
"@package" />
213 <a href=
"#harbour-{$PKG}">
214 <xsl:value-of select=
"$PKG" />
217 <xsl:for-each select=
"//*[@arch and count(. | key('by-arch', @arch)[parent::build = $BUILD][1]) = 1]">
218 <xsl:sort select=
"@arch" />
219 <xsl:variable name=
"ARCH" select=
"@arch" />
220 <xsl:variable name=
"RESULT" select=
"//harbour-build[@arch=$ARCH and @package=$PKG]" />
222 <xsl:when test=
"$RESULT">
223 <td class=
"result-{$RESULT/@result}"><xsl:apply-templates select=
"$RESULT" mode=
"log-link-matrix" /></td>
226 <td class=
"result-na">N/A
</td>
232 <xsl:for-each select=
"*[@scenario and count(. | key('by-scenario', @scenario)[parent::build = $BUILD][1]) = 1]">
233 <xsl:sort select=
"@description" />
234 <xsl:variable name=
"SCENARIO" select=
"@scenario" />
236 <th style=
"white-space: nowrap;">
237 <a title=
"{$SCENARIO}" href=
"#scenario-{$SCENARIO}">
238 <xsl:value-of select=
"@description" />
241 <xsl:for-each select=
"//*[@arch and count(. | key('by-arch', @arch)[parent::build = $BUILD][1]) = 1]">
242 <xsl:sort select=
"@arch" />
243 <xsl:variable name=
"ARCH" select=
"@arch" />
244 <xsl:variable name=
"RESULT" select=
"//test[@arch=$ARCH and @scenario=$SCENARIO]" />
246 <xsl:when test=
"$RESULT">
247 <td class=
"result-{$RESULT/@result}"><xsl:apply-templates select=
"$RESULT" mode=
"log-link-matrix" /></td>
250 <td class=
"result-na">N/A
</td>
259 <h2>Miscellaneous
</h2>
260 <h3 id=
"failures">List of failed tasks
<xsl:copy-of select=
"$LINK_TO_TOP" /></h3>
262 <xsl:when test=
"count(*[@result='fail']) = 0">
263 <p>There were no failures.
</p>
269 <th width=
"25%">Task
</th>
270 <th width=
"25%">Component
</th>
271 <th width=
"20%">Architecture
</th>
272 <th width=
"20%">Log
</th>
273 <th width=
"10%">Duration
</th>
277 <xsl:for-each select=
"checkout[@result='fail']">
278 <xsl:sort select=
"@repository" />
279 <xsl:apply-templates select=
"." mode=
"html-failed-task-table-row" />
281 <xsl:apply-templates select=
"harbour-check[@result='fail']" mode=
"html-failed-task-table-row" />
282 <xsl:for-each select=
"helenos-build[@result='fail']">
283 <xsl:sort select=
"@arch" />
284 <xsl:apply-templates select=
"." mode=
"html-failed-task-table-row" />
286 <xsl:for-each select=
"harbour-fetch[@result='fail']">
287 <xsl:sort select=
"@package" />
288 <xsl:apply-templates select=
"." mode=
"html-failed-task-table-row" />
290 <xsl:for-each select=
"harbour-build[@result='fail']">
291 <xsl:sort select=
"@package" />
292 <xsl:sort select=
"@arch" />
293 <xsl:apply-templates select=
"." mode=
"html-failed-task-table-row" />
295 <xsl:for-each select=
"helenos-extra-build[@result='fail']">
296 <xsl:sort select=
"@arch" />
297 <xsl:sort select=
"@packages" />
298 <xsl:apply-templates select=
"." mode=
"html-failed-task-table-row" />
300 <xsl:for-each select=
"test[@result='fail']">
301 <xsl:sort select=
"@description" />
302 <xsl:sort select=
"@arch" />
303 <xsl:apply-templates select=
"." mode=
"html-failed-task-table-row" />
305 <!-- xsl:apply-templates select="*[@result='fail']" mode="html-failed-task-table-row" /-->
311 <xsl:if test=
"helenos-build or browsable-sources-global or doxygen or style-check">
312 <h3 id=
"helenos">HelenOS
<xsl:copy-of select=
"$LINK_TO_TOP" /></h3>
316 <th width=
"25%">Architecture
</th>
317 <th width=
"10%">Result
</th>
318 <th width=
"35%">Download
</th>
319 <th width=
"20%">Log
</th>
320 <th width=
"10%">Duration
</th>
324 <xsl:if test=
"doxygen">
325 <tr class=
"result-{doxygen/@result}">
327 <i>Doxygen documentation
</i>
330 <xsl:apply-templates select=
"doxygen" mode=
"yes-no" />
333 <xsl:apply-templates select=
"doxygen" mode=
"download" />
336 <xsl:apply-templates select=
"doxygen" mode=
"log-link" />
339 <xsl:apply-templates select=
"doxygen" mode=
"duration" />
342 <xsl:apply-templates select=
"doxygen" mode=
"log-dump" />
344 <xsl:if test=
"browsable-sources-global">
345 <tr class=
"result-{browsable-sources-global/@result}">
347 <i>Source code browser
</i>
350 <xsl:apply-templates select=
"browsable-sources-global" mode=
"yes-no" />
353 <xsl:apply-templates select=
"browsable-sources-global" mode=
"download" />
356 <xsl:apply-templates select=
"browsable-sources-global" mode=
"log-link" />
359 <xsl:apply-templates select=
"browsable-sources-global" mode=
"duration" />
362 <xsl:apply-templates select=
"browsable-sources-global" mode=
"log-dump" />
364 <xsl:if test=
"sycek-style-check">
365 <tr class=
"result-{sycek-style-check/@result}">
367 <i>Sycek C style check
</i>
370 <xsl:apply-templates select=
"sycek-style-check" mode=
"yes-no" />
373 <xsl:apply-templates select=
"sycek-style-check" mode=
"download" />
376 <xsl:apply-templates select=
"sycek-style-check" mode=
"log-link" />
379 <xsl:apply-templates select=
"sycek-style-check" mode=
"duration" />
382 <xsl:apply-templates select=
"sycek-style-check" mode=
"log-dump" />
384 <xsl:for-each select=
"helenos-build">
385 <xsl:sort select=
"@arch" />
386 <tr class=
"result-{@result}">
388 <xsl:value-of select=
"@arch" />
391 <xsl:apply-templates select=
"." mode=
"yes-no" />
394 <xsl:apply-templates select=
"." mode=
"download" />
397 <xsl:apply-templates select=
"." mode=
"log-link" />
400 <xsl:apply-templates select=
"." mode=
"duration" />
403 <xsl:apply-templates select=
"." mode=
"log-dump" />
410 <xsl:if test=
"count(*[@arch]) > 0">
411 <h2>Per-architecture details
<xsl:copy-of select=
"$LINK_TO_TOP" /></h2>
412 <xsl:for-each select=
"$BUILD/*[@arch and count(. | key('by-arch', @arch)[parent::build = $BUILD][1]) = 1]">
413 <xsl:sort select=
"@arch" />
414 <xsl:variable name=
"ARCH" select=
"@arch" />
415 <h3 id=
"arch-{$ARCH}"><xsl:value-of select=
"$ARCH" /><xsl:copy-of select=
"$LINK_TO_TOP" /></h3>
419 <th width=
"25%">Task
</th>
420 <th width=
"10%">Result
</th>
421 <th width=
"35%">Download
</th>
422 <th width=
"20%">Log
</th>
423 <th width=
"10%">Duration
</th>
427 <tr class=
"result-{$BUILD/helenos-build[@arch=$ARCH]/@result}">
430 <xsl:apply-templates select=
"$BUILD/helenos-build[@arch=$ARCH]" mode=
"yes-no" />
433 <xsl:apply-templates select=
"." mode=
"download" />
436 <xsl:apply-templates select=
"$BUILD/helenos-build[@arch=$ARCH]" mode=
"log-link" />
439 <xsl:apply-templates select=
"." mode=
"duration" />
442 <xsl:apply-templates select=
"$BUILD/helenos-build[@arch=$ARCH]" mode=
"log-dump" />
443 <xsl:for-each select=
"$BUILD/harbour-build[@arch=$ARCH]">
444 <tr class=
"result-{@result}">
445 <td><xsl:value-of select=
"@package" /></td>
447 <xsl:apply-templates select=
"." mode=
"yes-no" />
450 <xsl:apply-templates select=
"." mode=
"download" />
453 <xsl:apply-templates select=
"." mode=
"log-link" />
456 <xsl:apply-templates select=
"." mode=
"duration" />
459 <xsl:apply-templates select=
"." mode=
"log-dump" />
461 <xsl:for-each select=
"$BUILD/helenos-extra-build[@arch=$ARCH]">
462 <tr class=
"result-{@result}">
463 <td>HelenOS with
<xsl:value-of select=
"@harbours" /></td>
465 <xsl:apply-templates select=
"." mode=
"yes-no" />
468 <xsl:apply-templates select=
"." mode=
"download" />
471 <xsl:apply-templates select=
"." mode=
"log-link" />
474 <xsl:apply-templates select=
"." mode=
"duration" />
477 <xsl:apply-templates select=
"." mode=
"log-dump" />
479 <xsl:for-each select=
"$BUILD/test[@arch=$ARCH]">
480 <tr class=
"result-{@result}">
481 <td><xsl:value-of select=
"@description" /></td>
483 <xsl:apply-templates select=
"." mode=
"yes-no" />
486 <xsl:apply-templates select=
"." mode=
"download" />
489 <xsl:apply-templates select=
"." mode=
"log-link" />
492 <xsl:apply-templates select=
"." mode=
"duration" />
495 <xsl:apply-templates select=
"." mode=
"log-dump" />
502 <xsl:if test=
"count(*[@package]) > 0">
503 <h2>Per-harbour details
<xsl:copy-of select=
"$LINK_TO_TOP" /></h2>
504 <xsl:for-each select=
"$BUILD/*[@package and count(. | key('by-harbour', @package)[parent::build = $BUILD][1]) = 1]">
505 <xsl:sort select=
"@package" />
506 <xsl:variable name=
"PKG" select=
"@package" />
507 <h3 id=
"harbour-{$PKG}"><xsl:value-of select=
"$PKG" /><xsl:copy-of select=
"$LINK_TO_TOP" /></h3>
511 <th width=
"25%">Architecture
</th>
512 <th width=
"10%">Result
</th>
513 <th width=
"35%">Download
</th>
514 <th width=
"20%">Log
</th>
515 <th width=
"10%">Duration
</th>
519 <tr class=
"result-{$BUILD/harbour-fetch[@package=$PKG]/@result}">
520 <td><i>Tarball fetch
</i></td>
522 <xsl:apply-templates select=
"$BUILD/harbour-fetch[@package=$PKG]" mode=
"yes-no" />
525 <xsl:apply-templates select=
"." mode=
"download" />
528 <xsl:apply-templates select=
"$BUILD/harbour-fetch[@package=$PKG]" mode=
"log-link" />
531 <xsl:apply-templates select=
"." mode=
"duration" />
534 <xsl:apply-templates select=
"$BUILD/harbour-fetch[@package=$PKG]" mode=
"log-dump" />
535 <xsl:for-each select=
"$BUILD/harbour-build[@package=$PKG]">
536 <xsl:sort select=
"@arch" />
537 <tr class=
"result-{@result}">
538 <td><xsl:value-of select=
"@arch" /></td>
540 <xsl:apply-templates select=
"." mode=
"yes-no" />
543 <xsl:apply-templates select=
"." mode=
"download" />
546 <xsl:apply-templates select=
"." mode=
"log-link" />
549 <xsl:apply-templates select=
"." mode=
"duration" />
552 <xsl:apply-templates select=
"." mode=
"log-dump" />
559 <xsl:if test=
"count(*[@scenario]) > 0">
560 <h2>Per-scenario details
<xsl:copy-of select=
"$LINK_TO_TOP" /></h2>
561 <xsl:for-each select=
"$BUILD/*[@scenario and count(. | key('by-scenario', @scenario)[parent::build = $BUILD][1]) = 1]">
562 <xsl:sort select=
"@scenario" />
563 <xsl:variable name=
"SCENARIO" select=
"@scenario" />
564 <h3 id=
"scenario-{$SCENARIO}"><xsl:value-of select=
"@description" /><xsl:copy-of select=
"$LINK_TO_TOP" /></h3>
568 <th width=
"25%">Architecture
</th>
569 <th width=
"10%">Result
</th>
570 <th width=
"35%">Download
</th>
571 <th width=
"20%">Log
</th>
572 <th width=
"10%">Duration
</th>
576 <xsl:for-each select=
"$BUILD/test[@scenario=$SCENARIO]">
577 <xsl:sort select=
"@arch" />
578 <tr class=
"result-{@result}">
579 <td><xsl:value-of select=
"@arch" /></td>
581 <xsl:apply-templates select=
"." mode=
"yes-no" />
584 <xsl:apply-templates select=
"." mode=
"download" />
587 <xsl:apply-templates select=
"." mode=
"log-link" />
590 <xsl:apply-templates select=
"." mode=
"duration" />
593 <xsl:apply-templates select=
"." mode=
"log-dump" />
606 <xsl:template match=
"@*" mode=
"architecture-with-hyphens">
607 <xsl:variable name=
"PLATFORM" select=
"substring-before(., '/')" />
608 <xsl:variable name=
"MACHINE" select=
"substring-after(., '/')" />
610 <xsl:when test=
"concat($PLATFORM, $MACHINE) = ''">
611 <xsl:value-of select=
"." />
614 <xsl:value-of select=
"$PLATFORM" />
615 <xsl:text> </xsl:text>
617 <xsl:when test=
"$MACHINE = 'beagleboardxm'">
618 <xsl:text disable-output-escaping=
"yes"><![CDATA[beagle
­board
­xm]]
></xsl:text>
620 <xsl:when test=
"$MACHINE = 'beaglebone'">
621 <xsl:text disable-output-escaping=
"yes"><![CDATA[beagle
­bone]]
></xsl:text>
623 <xsl:when test=
"$MACHINE = 'malta-be'">
624 <xsl:text disable-output-escaping=
"yes"><![CDATA[malta
­-be]]
></xsl:text>
626 <xsl:when test=
"$MACHINE = 'malta-le'">
627 <xsl:text disable-output-escaping=
"yes"><![CDATA[malta
­-le]]
></xsl:text>
629 <xsl:when test=
"$MACHINE = 'integratorcp'">
630 <xsl:text disable-output-escaping=
"yes"><![CDATA[inte
­gra
­torcp]]
></xsl:text>
632 <xsl:when test=
"$MACHINE = 'raspberrypi'">
633 <xsl:text disable-output-escaping=
"yes"><![CDATA[rasp
­ber
­ry
­pi]]
></xsl:text>
635 <xsl:when test=
"$MACHINE = 'raspberrypi'">
636 <xsl:text disable-output-escaping=
"yes"><![CDATA[rasp
­ber
­ry
­pi]]
></xsl:text>
639 <xsl:value-of select=
"$MACHINE" />
646 <xsl:template match=
"*" mode=
"yes-no">
648 <xsl:when test=
"@result = 'ok'">
649 <xsl:text>OK
</xsl:text>
651 <xsl:when test=
"@result = 'fail'">
652 <xsl:text>Failed
</xsl:text>
654 <xsl:when test=
"@result = 'skip'">
655 <xsl:text>Skipped
</xsl:text>
658 <xsl:text>?
</xsl:text>
659 <code>(
<xsl:value-of select=
"@result" />)
</code>
664 <xsl:template match=
"*" mode=
"image-link">
665 <xsl:if test=
"@image">
666 <a href=
"{@image}">Image
</a>
670 <xsl:template match=
"*" mode=
"log-link">
672 <a href=
"{@log}">View
</a>
673 <xsl:if test=
"log/logline">
674 (
<a href=
"#" onclick=
"return showHideLog(this, 'log-{generate-id(.)}');">tail
</a>)
679 <xsl:template match=
"*" mode=
"log-link-matrix">
681 <a href=
"{@log}"><xsl:apply-templates select=
"." mode=
"yes-no" /></a>
685 <xsl:template match=
"*" mode=
"duration">
686 <xsl:if test=
"@duration">
687 <xsl:variable name=
"SECONDS" select=
"@duration div 1000" />
688 <xsl:variable name=
"MINUTES" select=
"floor($SECONDS div 60)" />
689 <xsl:variable name=
"HOURS" select=
"floor($MINUTES div 60)" />
691 <xsl:when test=
"$MINUTES > 90">
692 <xsl:value-of select=
"$HOURS" /><xsl:text disable-output-escaping=
"yes"><![CDATA[
 ]]
>h
</xsl:text>
693 <xsl:value-of select=
"format-number($MINUTES - 60 * $HOURS, '#')" /><xsl:text disable-output-escaping=
"yes"><![CDATA[
 ]]
>min
</xsl:text>
695 <xsl:when test=
"$SECONDS > 90">
696 <xsl:value-of select=
"$MINUTES" /><xsl:text disable-output-escaping=
"yes"><![CDATA[
 ]]
>min
</xsl:text>
697 <xsl:value-of select=
"format-number($SECONDS - 60 * $MINUTES, '#')" /><xsl:text disable-output-escaping=
"yes"><![CDATA[
 ]]
>s
</xsl:text>
700 <xsl:value-of select=
"format-number($SECONDS, '#')" /><xsl:text disable-output-escaping=
"yes"><![CDATA[
 ]]
>s
</xsl:text>
703 <!-- (<xsl:value-of select="format-number(@duration div 1000, '#.00')" />s) -->
707 <xsl:template match=
"*" mode=
"log-dump">
708 <xsl:if test=
"count(log/logline) > 0">
709 <tr class=
"logdump log-{generate-id(.)}">
711 <pre><xsl:for-each select=
"log/logline">
712 <xsl:value-of select=
"text()" /><xsl:text>
714 </xsl:for-each></pre>
720 <xsl:template match=
"*" mode=
"download">
721 <xsl:for-each select=
"file">
722 <a href=
"{@filename}"><xsl:value-of select=
"@title" /></a>
723 <xsl:if test=
"not(position() = last())">
724 <xsl:text>,
</xsl:text>
727 <xsl:if test=
"not(file)">
728 <xsl:text disable-output-escaping=
"yes"><![CDATA[
—]]
></xsl:text>
734 <xsl:template match=
"*" mode=
"html-failed-task-table-row">
735 <tr class=
"result-fail">
736 <xsl:apply-templates select=
"." mode=
"html-failed-task-table-row-inner" />
738 <xsl:apply-templates select=
"." mode=
"log-link" />
741 <xsl:apply-templates select=
"." mode=
"duration" />
744 <xsl:apply-templates select=
"." mode=
"log-dump" />
747 <xsl:template match=
"checkout" mode=
"html-failed-task-table-row-inner">
748 <td>Repository checkout
</td>
749 <td><xsl:value-of select=
"@repository" /></td>
750 <td><xsl:text disable-output-escaping=
"yes"><![CDATA[
—]]
></xsl:text></td>
753 <xsl:template match=
"harbour-check" mode=
"html-failed-task-table-row-inner">
754 <td>Harbour self-check
</td>
755 <td><xsl:text disable-output-escaping=
"yes"><![CDATA[
—]]
></xsl:text></td>
756 <td><xsl:text disable-output-escaping=
"yes"><![CDATA[
—]]
></xsl:text></td>
759 <xsl:template match=
"harbour-fetch" mode=
"html-failed-task-table-row-inner">
760 <td>Tarball fetch
</td>
761 <td><xsl:value-of select=
"@package" /></td>
762 <td><xsl:text disable-output-escaping=
"yes"><![CDATA[
—]]
></xsl:text></td>
765 <xsl:template match=
"helenos-build" mode=
"html-failed-task-table-row-inner">
767 <td><xsl:text disable-output-escaping=
"yes"><![CDATA[
—]]
></xsl:text></td>
768 <td><xsl:value-of select=
"@arch" /></td>
771 <xsl:template match=
"harbour-build" mode=
"html-failed-task-table-row-inner">
772 <td>Harbour build
</td>
773 <td><xsl:value-of select=
"@package" /></td>
774 <td><xsl:value-of select=
"@arch" /></td>
777 <xsl:template match=
"helenos-extra-build" mode=
"html-failed-task-table-row-inner">
778 <td>Extras build
</td>
779 <td>HelenOS and
<xsl:value-of select=
"@packages" /></td>
780 <td><xsl:value-of select=
"@arch" /></td>
783 <xsl:template match=
"test" mode=
"html-failed-task-table-row-inner">
785 <td><xsl:value-of select=
"@description" /></td>
786 <td><xsl:value-of select=
"@arch" /></td>
789 <xsl:template match=
"*" mode=
"html-failed-task-table-row-inner">
790 <td><xsl:value-of select=
"name()" /></td>
791 <td><xsl:text disable-output-escaping=
"yes"><![CDATA[
—]]
></xsl:text></td>
792 <td><xsl:text disable-output-escaping=
"yes"><![CDATA[
—]]
></xsl:text></td>