Mercurial > pub > buggler
comparison bug-list.xsl @ 5:d2efec56373f
working buglist transform and bugs fetching
author | cin |
---|---|
date | Tue, 01 Sep 2015 19:47:30 +0300 |
parents | f8f966388b68 |
children | 2a5f38eb25a9 |
comparison
equal
deleted
inserted
replaced
4:f8f966388b68 | 5:d2efec56373f |
---|---|
2 <xsl:stylesheet version="1.0" | 2 <xsl:stylesheet version="1.0" |
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" | 3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" |
4 extension-element-prefixes="exsl"> | 4 extension-element-prefixes="exsl"> |
5 <xsl:output method="text" indent="yes" /> | 5 <xsl:output method="text" indent="yes" /> |
6 | 6 |
7 <!-- PARAMETERS --> | |
8 | |
9 <!-- chargeset - название аккаунта, на который вести расходы --> | |
10 <xsl:param name="chargeset" /> | |
11 | |
12 <!-- root_task_id - id корневой задачи, в которую будут организованы все | |
13 задачи --> | |
14 <xsl:param name="root_task_id" /> | |
15 | |
16 <!-- root_task - описание корневой задачи --> | |
17 <xsl:param name="root_task" /> | |
18 | |
19 <!-- GLOBAL VARIABLES --> | |
7 <xsl:variable name="resources" | 20 <xsl:variable name="resources" |
8 select="document('resources.xml')/resources/resource" /> | 21 select="document('resources.xml')/resources/resource" /> |
9 | 22 |
10 <xsl:variable name="bugs" select="/bugzilla/bug" /> | 23 <xsl:variable name="bugs" select="/bugzilla/bug" /> |
11 | 24 |
20 | 33 |
21 <xsl:template match="bug" mode="tree"> | 34 <xsl:template match="bug" mode="tree"> |
22 <xsl:element name="bug"> | 35 <xsl:element name="bug"> |
23 <xsl:attribute name="id"><xsl:value-of select="bug_id" /></xsl:attribute> | 36 <xsl:attribute name="id"><xsl:value-of select="bug_id" /></xsl:attribute> |
24 <xsl:if test="component = 'product' or not(number(estimated_time))"> | 37 <xsl:if test="component = 'product' or not(number(estimated_time))"> |
25 <xsl:attribute name="product"><xsl:value-of select="boolean(1)" /></xsl:attribute> | 38 <xsl:attribute name="group"><xsl:value-of select="boolean(1)" /></xsl:attribute> |
26 </xsl:if> | 39 </xsl:if> |
27 <xsl:for-each select="dependson"> | 40 <xsl:for-each select="dependson"> |
28 <xsl:apply-templates mode="tree" select="key('bugid', .)" /> | 41 <xsl:apply-templates mode="tree" select="key('bugid', .)" /> |
29 </xsl:for-each> | 42 </xsl:for-each> |
30 </xsl:element> | 43 </xsl:element> |
46 | 59 |
47 <xsl:template match="bug" mode="traverse-relations"> | 60 <xsl:template match="bug" mode="traverse-relations"> |
48 <xsl:variable name="bugid" select="@id" /> | 61 <xsl:variable name="bugid" select="@id" /> |
49 <xsl:variable name="path" select="ancestor::bug" /> | 62 <xsl:variable name="path" select="ancestor::bug" /> |
50 <xsl:variable name="level" select="count($path)" /> | 63 <xsl:variable name="level" select="count($path)" /> |
51 <xsl:for-each select="$path[@product]"> | 64 <xsl:for-each select="$path[@group]"> |
52 <xsl:variable name="pos" select="position()" /> | 65 <xsl:variable name="pos" select="position()" /> |
53 <xsl:variable name="rank" select="$level - $pos" /> | 66 <xsl:variable name="rank" select="$level - $pos" /> |
54 <rel container="{@id}" rank="{$rank}" level="{$level}"> | 67 <rel container="{@id}" rank="{$rank}" level="{$level}"> |
55 <xsl:for-each select="$path[position() >= $pos and @product]"> | 68 <xsl:for-each select="$path[position() >= $pos and @group]"> |
56 <bug id="{@id}" /> | 69 <bug id="{@id}" /> |
57 </xsl:for-each> | 70 </xsl:for-each> |
58 </rel> | 71 </rel> |
59 </xsl:for-each> | 72 </xsl:for-each> |
60 </xsl:template> | 73 </xsl:template> |
72 <bug id="{@id}" parent="{$parent/@container}" rank="{$parent/@rank}" | 85 <bug id="{@id}" parent="{$parent/@container}" rank="{$parent/@rank}" |
73 level="{$parent/@level}" /> | 86 level="{$parent/@level}" /> |
74 </xsl:template> | 87 </xsl:template> |
75 | 88 |
76 <xsl:variable name="structure"> | 89 <xsl:variable name="structure"> |
77 <xsl:apply-templates select="$roots" mode="structure" /> | 90 <xsl:choose> |
91 <xsl:when test="$root_task"> | |
92 <bug id="_root" desc="{$root_task}" group="true"> | |
93 <xsl:apply-templates select="$roots" mode="structure"/> | |
94 </bug> | |
95 </xsl:when> | |
96 <xsl:otherwise> | |
97 <xsl:apply-templates select="$roots" mode="structure"/> | |
98 </xsl:otherwise> | |
99 </xsl:choose> | |
78 </xsl:variable> | 100 </xsl:variable> |
79 | 101 |
80 <xsl:template match="bug" mode="structure"> | 102 <xsl:template match="bug" mode="structure"> |
81 <xsl:variable name="id" select="string(bug_id)" /> | 103 <xsl:variable name="id" select="string(bug_id)" /> |
82 <xsl:variable name="self" select="." /> | 104 <xsl:variable name="self" select="." /> |
83 <bug id="{$id}"> | 105 <xsl:variable name="children" |
84 <xsl:for-each select="exsl:node-set($parents)/bug[@parent = $id]"> | 106 select="exsl:node-set($parents)/bug[@parent = $id]" /> |
85 <xsl:variable name="child" select="@id" /> | 107 <xsl:element name="bug"> |
86 <xsl:apply-templates select="$bugs[bug_id = $child]" | 108 <xsl:attribute name="id"><xsl:value-of select="$id" /></xsl:attribute> |
87 mode="structure" /> | 109 <xsl:attribute name="desc"><xsl:value-of select="short_desc" /></xsl:attribute> |
88 </xsl:for-each> | 110 |
111 <xsl:if test="$children"> | |
112 <xsl:attribute name="group"><xsl:value-of select="boolean($children)" /></xsl:attribute> | |
113 | |
114 <xsl:for-each select="$children"> | |
115 <xsl:variable name="child" select="@id" /> | |
116 <xsl:apply-templates select="$bugs[bug_id = $child]" | |
117 mode="structure" /> | |
118 </xsl:for-each> | |
119 | |
120 </xsl:if> | |
121 | |
122 <!-- filter out dependencies --> | |
89 <xsl:variable name="dependencies" | 123 <xsl:variable name="dependencies" |
90 select="dependson[not(text() = exsl:node-set($parents)/bug[@parent = $id]/@id)]" /> | 124 select="dependson[not(text() = exsl:node-set($parents)/bug[@parent = $id]/@id)]" /> |
91 <xsl:if test="$dependencies"> | 125 <xsl:for-each select="$dependencies"> |
92 <depends> | 126 <dependency id="{.}" /> |
93 <xsl:for-each select="$dependencies"> | 127 </xsl:for-each> |
94 <bug id="{.}" /> | 128 </xsl:element> |
95 </xsl:for-each> | |
96 </depends> | |
97 </xsl:if> | |
98 </bug> | |
99 </xsl:template> | 129 </xsl:template> |
100 | 130 |
101 <!-- output --> | 131 <!-- output --> |
102 <xsl:template match="/"> | 132 <xsl:template match="/"> |
103 <xsl:apply-templates select="exsl:node-set($structure)/bug"> | 133 <xsl:apply-templates select="exsl:node-set($structure)/bug"> |
104 <xsl:with-param name="indent" select="0" /> | 134 <xsl:with-param name="indent" select="0" /> |
135 <xsl:with-param name="chargeset" select="$chargeset"/> | |
105 </xsl:apply-templates> | 136 </xsl:apply-templates> |
106 </xsl:template> | 137 </xsl:template> |
107 | 138 |
108 <xsl:template match="bug"> | 139 <xsl:template match="bug"> |
109 <xsl:param name="indent" select="0" /> | 140 <xsl:param name="indent" select="0" /> |
141 <xsl:param name="chargeset" /> | |
110 <xsl:variable name="id" select="@id" /> | 142 <xsl:variable name="id" select="@id" /> |
111 <xsl:variable name="details" select="$bugs[bug_id = $id]" /> | 143 <xsl:variable name="details" select="$bugs[bug_id = $id]" /> |
144 | |
145 <!-- task header --> | |
112 <xsl:call-template name="start-task"> | 146 <xsl:call-template name="start-task"> |
113 <xsl:with-param name="indent" select="$indent" /> | 147 <xsl:with-param name="indent" select="$indent" /> |
114 <xsl:with-param name="id" select="@id" /> | 148 <xsl:with-param name="id"> |
115 <xsl:with-param name="desc" select="$details/short_desc" /> | 149 <xsl:call-template name="bug-local-name"> |
116 </xsl:call-template> | 150 <xsl:with-param name="id" select="@id" /> |
117 | 151 </xsl:call-template> |
118 <xsl:for-each select="$details/*"> | 152 </xsl:with-param> |
119 <xsl:variable name="directive"> | 153 <xsl:with-param name="desc" select="@desc" /> |
120 <xsl:apply-templates select="." mode="task-details" /> | 154 </xsl:call-template> |
121 </xsl:variable> | 155 |
122 <xsl:if test="string($directive)"> | 156 <xsl:if test="$chargeset"> |
123 <xsl:call-template name="begin-line"> | 157 <xsl:call-template name="println"> |
158 <xsl:with-param name="indent" select="$indent + 1"/> | |
159 <xsl:with-param name="text" select="concat('chargeset ', $chargeset)"/> | |
160 </xsl:call-template> | |
161 </xsl:if> | |
162 | |
163 <!-- task details --> | |
164 <xsl:choose> | |
165 <xsl:when test="@group"> | |
166 <!-- DEBUG --> | |
167 <xsl:call-template name="comment"> | |
124 <xsl:with-param name="indent" select="$indent + 1" /> | 168 <xsl:with-param name="indent" select="$indent + 1" /> |
169 <xsl:with-param name="comment" select="'group'" /> | |
125 </xsl:call-template> | 170 </xsl:call-template> |
126 <xsl:value-of select="$directive" /> | 171 |
127 <xsl:call-template name="end-line" /> | 172 |
128 </xsl:if> | 173 <xsl:apply-templates select="$details/node()" |
129 </xsl:for-each> | 174 mode="group-details"> |
130 | 175 <xsl:with-param name="indent" select="$indent + 1" /> |
176 </xsl:apply-templates> | |
177 | |
178 <xsl:if | |
179 test="number($details/estimated_time) or number($details/actual_time) or number($details/remaining_time)"> | |
180 <xsl:call-template name="start-task"> | |
181 <xsl:with-param name="indent" select="$indent + 1" /> | |
182 <xsl:with-param name="id" select="'manage'" /> | |
183 <xsl:with-param name="desc" select="@desc" /> | |
184 </xsl:call-template> | |
185 <xsl:apply-templates | |
186 select="$details/estimated_time | $details/actual_time | $details/remaining_time | $details/assigned_to" | |
187 mode="task-details"> | |
188 <xsl:with-param name="indent" select="$indent + 2" /> | |
189 </xsl:apply-templates> | |
190 <xsl:call-template name="end-task"> | |
191 <xsl:with-param name="indent" select="$indent + 1" /> | |
192 </xsl:call-template> | |
193 </xsl:if> | |
194 </xsl:when> | |
195 <xsl:otherwise> | |
196 <xsl:apply-templates select="$details/node()" | |
197 mode="task-details"> | |
198 <xsl:with-param name="indent" select="$indent + 1" /> | |
199 </xsl:apply-templates> | |
200 </xsl:otherwise> | |
201 </xsl:choose> | |
202 | |
203 <!-- subtasks and dependencies --> | |
131 <xsl:apply-templates> | 204 <xsl:apply-templates> |
132 <xsl:with-param name="indent" select="$indent + 1" /> | 205 <xsl:with-param name="indent" select="$indent + 1" /> |
206 <xsl:with-param name="referer" select="." /> | |
133 </xsl:apply-templates> | 207 </xsl:apply-templates> |
134 | 208 |
135 <xsl:call-template name="end-task"> | 209 <xsl:call-template name="end-task"> |
136 <xsl:with-param name="indent" select="$indent" /> | 210 <xsl:with-param name="indent" select="$indent" /> |
137 </xsl:call-template> | 211 </xsl:call-template> |
138 </xsl:template> | 212 </xsl:template> |
139 | 213 |
214 <xsl:template match="dependency"> | |
215 <xsl:param name="indent" /> | |
216 <xsl:param name="referer" /> | |
217 <xsl:call-template name="println"> | |
218 <xsl:with-param name="indent" select="$indent" /> | |
219 <xsl:with-param name="text"> | |
220 <xsl:text>depends </xsl:text> | |
221 <xsl:call-template name="bug-reference"> | |
222 <xsl:with-param name="id" select="@id" /> | |
223 <xsl:with-param name="referer" select="$referer" /> | |
224 </xsl:call-template> | |
225 </xsl:with-param> | |
226 </xsl:call-template> | |
227 </xsl:template> | |
228 | |
229 | |
230 <xsl:template match="text()" /> | |
231 | |
232 <!-- TASK ATTRIBUTES --> | |
233 | |
140 <xsl:template match="estimated_time" mode="task-details"> | 234 <xsl:template match="estimated_time" mode="task-details"> |
235 <xsl:param name="indent" /> | |
141 <xsl:if test="number(.)"> | 236 <xsl:if test="number(.)"> |
142 <xsl:value-of select="concat('effort ', .,'h')" /> | 237 <xsl:call-template name="println"> |
238 <xsl:with-param name="indent" select="$indent" /> | |
239 <xsl:with-param name="text" select="concat('effort ', .,'h')" /> | |
240 </xsl:call-template> | |
143 </xsl:if> | 241 </xsl:if> |
144 </xsl:template> | 242 </xsl:template> |
145 | 243 |
146 <xsl:template match="assigned_to" mode="task-details"> | 244 <xsl:template match="assigned_to" mode="task-details"> |
245 <xsl:param name="indent" /> | |
147 <xsl:variable name="email" select="string(.)" /> | 246 <xsl:variable name="email" select="string(.)" /> |
148 <xsl:variable name="resource" select="$resources[@email = $email]/@id" /> | 247 <xsl:variable name="resource" select="$resources[@email = $email]/@id" /> |
149 <xsl:if test="$resource"> | 248 <xsl:if test="$resource"> |
150 <xsl:value-of select="concat('allocate ', $resource)" /> | 249 <xsl:call-template name="println"> |
250 <xsl:with-param name="indent" select="$indent" /> | |
251 <xsl:with-param name="text" select="concat('allocate ', $resource)" /> | |
252 </xsl:call-template> | |
151 </xsl:if> | 253 </xsl:if> |
152 </xsl:template> | 254 </xsl:template> |
153 <xsl:template match="text()" mode="task-details"> | 255 <xsl:template match="text()" mode="task-details"> |
154 </xsl:template> | 256 </xsl:template> |
155 | 257 |
156 <xsl:template match="depends"> | 258 <xsl:template match="assigned_to" mode="group-details"> |
157 <xsl:param name="indent" select="0" /> | 259 <xsl:param name="indent" /> |
158 <xsl:call-template name="begin-line"> | 260 <xsl:variable name="email" select="string(.)" /> |
159 <xsl:with-param name="indent" select="$indent" /> | 261 <xsl:variable name="resource" select="$resources[@email = $email]/@id" /> |
160 </xsl:call-template> | 262 <xsl:if test="$resource"> |
161 <xsl:text>depends </xsl:text> | 263 <xsl:call-template name="println"> |
162 <xsl:apply-templates> | 264 <xsl:with-param name="indent" select="$indent" /> |
163 <xsl:with-param name="referer" select=".." /> | 265 <xsl:with-param name="text" |
164 </xsl:apply-templates> | 266 select="concat('responsible ', $resource)" /> |
165 <xsl:call-template name="end-line" /> | 267 </xsl:call-template> |
166 </xsl:template> | 268 </xsl:if> |
167 | 269 </xsl:template> |
168 <xsl:template match="depends/bug"> | 270 <xsl:template match="text()" mode="group-details"> |
169 <xsl:param name="referer" /> | 271 </xsl:template> |
170 <xsl:call-template name="bug-reference"> | 272 |
171 <xsl:with-param name="id" select="@id" /> | 273 <!-- PRIMITIVES --> |
172 <xsl:with-param name="referer" select="$referer" /> | |
173 </xsl:call-template> | |
174 <xsl:if test="position() != last()"> | |
175 <xsl:text>, </xsl:text> | |
176 </xsl:if> | |
177 </xsl:template> | |
178 | |
179 | |
180 <xsl:template match="text()" /> | |
181 | 274 |
182 | 275 |
183 | 276 |
184 <xsl:template name="bug-local-name"> | 277 <xsl:template name="bug-local-name"> |
185 <xsl:param name="id" /> | 278 <xsl:param name="id" /> |
198 </xsl:for-each> | 291 </xsl:for-each> |
199 </xsl:variable> | 292 </xsl:variable> |
200 <xsl:variable name="targetPathFragment"> | 293 <xsl:variable name="targetPathFragment"> |
201 <bug id="#root" /> | 294 <bug id="#root" /> |
202 <xsl:for-each | 295 <xsl:for-each |
203 select="exsl:node-set($structure)//bug[local-name(..) != 'depends' and @id = $id]/ancestor-or-self::bug"> | 296 select="exsl:node-set($structure)//bug[@id = $id]/ancestor-or-self::bug"> |
204 <bug id="{@id}" /> | 297 <bug id="{@id}" /> |
205 </xsl:for-each> | 298 </xsl:for-each> |
206 </xsl:variable> | 299 </xsl:variable> |
207 <xsl:variable name="path" | 300 <xsl:variable name="path" |
208 select="exsl:node-set($refererPathFragment)/bug" /> | 301 select="exsl:node-set($refererPathFragment)/bug" /> |
248 <xsl:param name="desc" /> | 341 <xsl:param name="desc" /> |
249 <xsl:call-template name="begin-line"> | 342 <xsl:call-template name="begin-line"> |
250 <xsl:with-param name="indent" select="$indent" /> | 343 <xsl:with-param name="indent" select="$indent" /> |
251 </xsl:call-template> | 344 </xsl:call-template> |
252 <xsl:text>task </xsl:text> | 345 <xsl:text>task </xsl:text> |
253 <xsl:call-template name="bug-local-name"> | 346 <xsl:value-of select="$id" /> |
254 <xsl:with-param name="id" select="$id" /> | |
255 </xsl:call-template> | |
256 <xsl:value-of select="concat(' "',$desc,'" {')" /> | 347 <xsl:value-of select="concat(' "',$desc,'" {')" /> |
257 <xsl:call-template name="end-line" /> | 348 <xsl:call-template name="end-line" /> |
258 </xsl:template> | 349 </xsl:template> |
259 | 350 |
260 <xsl:template name="end-task"> | 351 <xsl:template name="end-task"> |
273 <xsl:call-template name="begin-line"> | 364 <xsl:call-template name="begin-line"> |
274 <xsl:with-param name="indent" select="$indent - 1" /> | 365 <xsl:with-param name="indent" select="$indent - 1" /> |
275 </xsl:call-template> | 366 </xsl:call-template> |
276 </xsl:if> | 367 </xsl:if> |
277 </xsl:template> | 368 </xsl:template> |
369 | |
278 <xsl:template name="end-line"> | 370 <xsl:template name="end-line"> |
279 <xsl:text>
</xsl:text> | 371 <xsl:text>
</xsl:text> |
280 </xsl:template> | 372 </xsl:template> |
281 | 373 |
282 <xsl:template name="repeat"> | 374 <xsl:template name="repeat"> |
289 <xsl:with-param name="value" select="$value" /> | 381 <xsl:with-param name="value" select="$value" /> |
290 <xsl:with-param name="count" select="$count - 1" /> | 382 <xsl:with-param name="count" select="$count - 1" /> |
291 </xsl:call-template> | 383 </xsl:call-template> |
292 </xsl:if> | 384 </xsl:if> |
293 </xsl:template> | 385 </xsl:template> |
386 | |
387 <xsl:template name="comment"> | |
388 <xsl:param name="indent" /> | |
389 <xsl:param name="comment" /> | |
390 <xsl:call-template name="println"> | |
391 <xsl:with-param name="indent" select="$indent" /> | |
392 <xsl:with-param name="text"> | |
393 <xsl:text># </xsl:text> | |
394 <xsl:value-of select="$comment" /> | |
395 </xsl:with-param> | |
396 </xsl:call-template> | |
397 </xsl:template> | |
398 | |
399 <xsl:template name="println"> | |
400 <xsl:param name="indent" /> | |
401 <xsl:param name="text" /> | |
402 <xsl:call-template name="begin-line"> | |
403 <xsl:with-param name="indent" select="$indent" /> | |
404 </xsl:call-template> | |
405 <xsl:value-of select="$text" /> | |
406 <xsl:call-template name="end-line" /> | |
407 </xsl:template> | |
294 </xsl:stylesheet> | 408 </xsl:stylesheet> |