comparison bug-list.xsl @ 1:d1400de5832b

improved xsl
author cin
date Fri, 21 Aug 2015 20:07:52 +0300
parents 8cae44c166d3
children 36ae3ec94442
comparison
equal deleted inserted replaced
0:8cae44c166d3 1:d1400de5832b
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet version="1.0" 2 <xsl:stylesheet version="1.0"
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common">
4 <xsl:output method="text" /> 4 <xsl:output method="xml" indent="yes" />
5 <xsl:key name="bugs-key" match="bug" use="bug_id" /> 5 <xsl:key name="bugid" match="bug" use="bug_id" />
6 <xsl:variable name="roots" select="bugzilla/bug[not(blocked[key('bugs-key',.)])]"/> 6 <xsl:variable name="roots"
7 7 select="bugzilla/bug[not(blocked[key('bugid',.)])]" />
8
9 <!-- BUILD BUG TREE -->
10 <xsl:variable name="tree">
11 <xsl:apply-templates mode="tree" select="$roots" />
12 </xsl:variable>
13
14 <xsl:template match="bug" mode="tree">
15 <xsl:element name="bug">
16 <xsl:attribute name="id"><xsl:value-of select="bug_id" /></xsl:attribute>
17 <xsl:if test="component = 'product'">
18 <xsl:attribute name="product"><xsl:value-of select="boolean(1)" /></xsl:attribute>
19 </xsl:if>
20 <xsl:for-each select="dependson">
21 <xsl:apply-templates mode="tree" select="key('bugid', .)" />
22 </xsl:for-each>
23 </xsl:element>
24 </xsl:template>
25
26 <!-- CALCULATE RELATIONS -->
27 <xsl:variable name="relations">
28 <xsl:apply-templates select="bugzilla/bug" mode="relations" />
29 </xsl:variable>
30
31 <xsl:template match="bug" mode="relations">
32 <xsl:variable name="bugid" select="string(bug_id)" />
33 <bug id="{$bugid}">
34 <xsl:apply-templates select="exsl:node-set($tree)//bug[@id = $bugid]"
35 mode="traverse-relations">
36 </xsl:apply-templates>
37 </bug>
38 </xsl:template>
39
40 <xsl:template match="bug" mode="traverse-relations">
41 <xsl:variable name="bugid" select="@id" />
42 <xsl:variable name="level" select="count(ancestor::node())" />
43 <path>
44 <xsl:for-each select="ancestor::node()">
45 <bug id="{@id}" product="{@product}"/>
46 </xsl:for-each>
47 </path>
48 <xsl:for-each select="ancestor::bug[@product]">
49 <xsl:variable name="rank" select="$level - position()" />
50 <rel container="{@id}" rank="{$rank}" level="{$level}"/>
51 </xsl:for-each>
52 </xsl:template>
53
54 <!-- CALCULATE STRUCTURE -->
55
56 <xsl:variable name="structure">
57 <xsl:apply-templates select="exsl:node-set($relations)"
58 mode="structure" />
59 </xsl:variable>
60
61 <xsl:template match="bug" mode="structure">
62 <xsl:variable name="parent"
63 select="rel[ not(../rel/@rank &lt; @rank) ][1]/@container" />
64 <bug id="{@id}" container="{$parent}" />
65 </xsl:template>
66
67 <!-- -->
8 <xsl:template match="/"> 68 <xsl:template match="/">
9 <xsl:apply-templates select="$roots"/> 69 <root>
70 <xsl:copy-of select="$tree" />
71 <xsl:copy-of select="$relations" />
72 <xsl:copy-of select="$structure" />
73 </root>
10 </xsl:template> 74 </xsl:template>
11 75
12 <xsl:template match="bug"> 76 <xsl:template match="bug">
13 <xsl:call-template name="bug-template" /> 77 <xsl:value-of select="bug_id" />
78 <xsl:text>&#xa;</xsl:text>
79 </xsl:template>
80
81 <xsl:template match="bug[component = 'product']">
82 <xsl:value-of select="bug_id" />
83 <xsl:text>:&#xa;</xsl:text>
84 <xsl:for-each select="dependson">
85 <xsl:apply-templates select="key('bugid', .)" />
86 </xsl:for-each>
87 <xsl:text>---END---&#xa;</xsl:text>
14 </xsl:template> 88 </xsl:template>
15 89
16 <xsl:template match="text()" /> 90 <xsl:template match="text()" />
17 91
18 <xsl:template name="bug-template"> 92 <xsl:template name="bug-template">