|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
Copyright 2018 Red Hat, Inc.
|
|
rpm-build |
3ee90c |
Author: Jan Pokorny <jpokorny@redhat.com>
|
|
rpm-build |
3ee90c |
Part of pacemaker project
|
|
rpm-build |
3ee90c |
SPDX-License-Identifier: GPL-2.0-or-later
|
|
rpm-build |
3ee90c |
-->
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
xmlns:cibtr="http://clusterlabs.org/ns/pacemaker/cibtr-2"
|
|
rpm-build |
3ee90c |
exclude-result-prefixes="cibtr"
|
|
rpm-build |
3ee90c |
cibtr:filename="upgrade-2.10-leave.xsl">
|
|
rpm-build |
3ee90c |
<xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
<xsl:param name="cibtr:label-debug" select="'DEBUG: '"/>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
GENERIC UTILITIES
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
-->
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
Recursive implementation of "basename"
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
Merely parameter driven, no implicit context taken into account:
|
|
rpm-build |
3ee90c |
- Uri: input in it's current phase of processing
|
|
rpm-build |
3ee90c |
-->
|
|
rpm-build |
3ee90c |
<xsl:template name="cibtr:WrapSpecificBasename">
|
|
rpm-build |
3ee90c |
<xsl:param name="Uri"/>
|
|
rpm-build |
3ee90c |
<xsl:choose>
|
|
rpm-build |
3ee90c |
<xsl:when test="not(contains($Uri, '/'))">
|
|
rpm-build |
3ee90c |
<xsl:value-of select="$Uri"/>
|
|
rpm-build |
3ee90c |
</xsl:when>
|
|
rpm-build |
3ee90c |
<xsl:otherwise>
|
|
rpm-build |
3ee90c |
<xsl:call-template name="cibtr:WrapSpecificBasename">
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
select="substring-after($Uri, '/')"/>
|
|
rpm-build |
3ee90c |
</xsl:call-template>
|
|
rpm-build |
3ee90c |
</xsl:otherwise>
|
|
rpm-build |
3ee90c |
</xsl:choose>
|
|
rpm-build |
3ee90c |
</xsl:template>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
Id-mangling-enriched identity template.
|
|
rpm-build |
3ee90c |
-->
|
|
rpm-build |
3ee90c |
<xsl:template name="cibtr:HelperIdentityLeave">
|
|
rpm-build |
3ee90c |
<xsl:copy>
|
|
rpm-build |
3ee90c |
<xsl:apply-templates select="@*|node()" mode="cibtr:leave"/>
|
|
rpm-build |
3ee90c |
</xsl:copy>
|
|
rpm-build |
3ee90c |
</xsl:template>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
ACTUAL TRANSFORMATION
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
Extra modes: cibtr:leave
|
|
rpm-build |
3ee90c |
cibtr:leave-serialize
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
-->
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
<xsl:variable name="cibtr:WrapSpecificPrefix">
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
<xsl:call-template name="cibtr:WrapSpecificBasename">
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
select="namespace-uri(document('')/xsl:stylesheet/@cibtr:filename)"/>
|
|
rpm-build |
3ee90c |
</xsl:call-template>
|
|
rpm-build |
3ee90c |
</xsl:variable>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
select="concat('_', $cibtr:WrapSpecificPrefix, '_')"/>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
cibtr:leave-serialize mode
|
|
rpm-build |
3ee90c |
-->
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
<xsl:template match="@*|node()" mode="cibtr:leave-serialize">
|
|
rpm-build |
3ee90c |
<xsl:choose>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
and
|
|
rpm-build |
3ee90c |
name() = 'id'">
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
</xsl:when>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
or
|
|
rpm-build |
3ee90c |
self::processing-instruction()">
|
|
rpm-build |
3ee90c |
<xsl:variable name="Mark">
|
|
rpm-build |
3ee90c |
<xsl:if test="count(.|../@*)=count(../@*)">A</xsl:if>
|
|
rpm-build |
3ee90c |
<xsl:if test="self::processing-instruction()">P</xsl:if>
|
|
rpm-build |
3ee90c |
</xsl:variable>
|
|
rpm-build |
3ee90c |
<xsl:value-of select="concat($Mark, '(', name(), '=', ., '),')"/>
|
|
rpm-build |
3ee90c |
</xsl:when>
|
|
rpm-build |
3ee90c |
<xsl:when test="self::*">
|
|
rpm-build |
3ee90c |
<xsl:value-of select="concat('E(', name(), ',')"/>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
mode="cibtr:leave-serialize"/>
|
|
rpm-build |
3ee90c |
<xsl:value-of select="'),'"/>
|
|
rpm-build |
3ee90c |
</xsl:when>
|
|
rpm-build |
3ee90c |
<xsl:when test="self::comment()|self::text()">
|
|
rpm-build |
3ee90c |
<xsl:variable name="Mark">
|
|
rpm-build |
3ee90c |
<xsl:if test="self::comment()">C</xsl:if>
|
|
rpm-build |
3ee90c |
<xsl:if test="self::text()">T</xsl:if>
|
|
rpm-build |
3ee90c |
</xsl:variable>
|
|
rpm-build |
3ee90c |
<xsl:value-of select="concat($Mark, '(', ., '),')"/>
|
|
rpm-build |
3ee90c |
</xsl:when>
|
|
rpm-build |
3ee90c |
</xsl:choose>
|
|
rpm-build |
3ee90c |
</xsl:template>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
cibtr:leave mode
|
|
rpm-build |
3ee90c |
-->
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
This is to cover elements with the internal structure characterized
|
|
rpm-build |
3ee90c |
with the following RelaxNG Compact encoded grammar:
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
> attribute id-ref { xsd:IDREF }
|
|
rpm-build |
3ee90c |
> | (attribute id { xsd:ID },
|
|
rpm-build |
3ee90c |
> (rule?
|
|
rpm-build |
3ee90c |
> & nvpair*
|
|
rpm-build |
3ee90c |
> & attribute score {
|
|
rpm-build |
3ee90c |
> xsd:integer
|
|
rpm-build |
3ee90c |
> | xsd:token "INFINITY"
|
|
rpm-build |
3ee90c |
> | xsd:token "+INFINITY"
|
|
rpm-build |
3ee90c |
> | xsd:token "-INFINITY"
|
|
rpm-build |
3ee90c |
> }?))
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
The context node corresponds to "@id-ref" branch prior to unfolding
|
|
rpm-build |
3ee90c |
in the preceding "unfold" XSLT counterpart, and Original to the other,
|
|
rpm-build |
3ee90c |
and the task here is to recursively (and deterministically) compare
|
|
rpm-build |
3ee90c |
the content of the two, and when there's a match, to collapse the
|
|
rpm-build |
3ee90c |
former back to a mere empty @id-ref link.
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
NOTE: name of this template may be a bit misleading, but it's meant
|
|
rpm-build |
3ee90c |
to really mean "after upgrade of the same trailing numbers",
|
|
rpm-build |
3ee90c |
which effectively means we are playing per 3.X CIB schema
|
|
rpm-build |
3ee90c |
rules, which needs to be considered, should any element be
|
|
rpm-build |
3ee90c |
renamed, etc.
|
|
rpm-build |
3ee90c |
-->
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
contains(
|
|
rpm-build |
3ee90c |
concat('|cluster_property_set',
|
|
rpm-build |
3ee90c |
'|instance_attributes|',
|
|
rpm-build |
3ee90c |
'|meta_attributes|'),
|
|
rpm-build |
3ee90c |
concat('|', name(), '|')
|
|
rpm-build |
3ee90c |
)
|
|
rpm-build |
3ee90c |
]"
|
|
rpm-build |
3ee90c |
mode="cibtr:leave">
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
select="//*[
|
|
rpm-build |
3ee90c |
name() = name(current())
|
|
rpm-build |
3ee90c |
and
|
|
rpm-build |
3ee90c |
@id = substring-after(current()/@id,
|
|
rpm-build |
3ee90c |
$cibtr:WrapSpecificPrefixInitialRoot)
|
|
rpm-build |
3ee90c |
]"/>
|
|
rpm-build |
3ee90c |
<xsl:choose>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
starts-with(@id, $cibtr:WrapSpecificPrefixInitialRoot)
|
|
rpm-build |
3ee90c |
)">
|
|
rpm-build |
3ee90c |
<xsl:copy>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
mode="cibtr:leave"/>
|
|
rpm-build |
3ee90c |
</xsl:copy>
|
|
rpm-build |
3ee90c |
</xsl:when>
|
|
rpm-build |
3ee90c |
<xsl:when test="count($Original) = 0">
|
|
rpm-build |
3ee90c |
<xsl:if test="string($cibtr:label-debug) != string(false())">
|
|
rpm-build |
3ee90c |
<xsl:message>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
': original element pointed to with',
|
|
rpm-build |
3ee90c |
' @id-ref (',
|
|
rpm-build |
3ee90c |
substring-after(@id,
|
|
rpm-build |
3ee90c |
$cibtr:WrapSpecificPrefixInitialRoot),
|
|
rpm-build |
3ee90c |
') disappeared during upgrade')"/>
|
|
rpm-build |
3ee90c |
</xsl:message>
|
|
rpm-build |
3ee90c |
</xsl:if>
|
|
rpm-build |
3ee90c |
<xsl:copy>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
mode="cibtr:leave"/>
|
|
rpm-build |
3ee90c |
</xsl:copy>
|
|
rpm-build |
3ee90c |
</xsl:when>
|
|
rpm-build |
3ee90c |
<xsl:when test="count($Original) != 1">
|
|
rpm-build |
3ee90c |
<xsl:message terminate="yes">
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
name(), ': found several elements',
|
|
rpm-build |
3ee90c |
' that possibly were originally',
|
|
rpm-build |
3ee90c |
' pointed to with @id-ref (',
|
|
rpm-build |
3ee90c |
substring-after(@id,
|
|
rpm-build |
3ee90c |
$cibtr:WrapSpecificPrefixInitialRoot),
|
|
rpm-build |
3ee90c |
'); unexpected ambiguity')"/>
|
|
rpm-build |
3ee90c |
</xsl:message>
|
|
rpm-build |
3ee90c |
</xsl:when>
|
|
rpm-build |
3ee90c |
<xsl:otherwise>
|
|
rpm-build |
3ee90c |
<xsl:variable name="SerializedOriginal">
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
|$Original/node()"
|
|
rpm-build |
3ee90c |
mode="cibtr:leave-serialize"/>
|
|
rpm-build |
3ee90c |
</xsl:variable>
|
|
rpm-build |
3ee90c |
<xsl:variable name="SerializedDependant">
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
|node()"
|
|
rpm-build |
3ee90c |
mode="cibtr:leave-serialize"/>
|
|
rpm-build |
3ee90c |
</xsl:variable>
|
|
rpm-build |
3ee90c |
<xsl:copy>
|
|
rpm-build |
3ee90c |
<xsl:choose>
|
|
rpm-build |
3ee90c |
<xsl:when test="$SerializedOriginal = $SerializedDependant">
|
|
rpm-build |
3ee90c |
<xsl:attribute name="id-ref">
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
$cibtr:WrapSpecificPrefixInitialRoot)"/>
|
|
rpm-build |
3ee90c |
</xsl:attribute>
|
|
rpm-build |
3ee90c |
</xsl:when>
|
|
rpm-build |
3ee90c |
<xsl:otherwise>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
mode="cibtr:leave">
|
|
rpm-build |
3ee90c |
</xsl:apply-templates>
|
|
rpm-build |
3ee90c |
</xsl:otherwise>
|
|
rpm-build |
3ee90c |
</xsl:choose>
|
|
rpm-build |
3ee90c |
</xsl:copy>
|
|
rpm-build |
3ee90c |
</xsl:otherwise>
|
|
rpm-build |
3ee90c |
</xsl:choose>
|
|
rpm-build |
3ee90c |
</xsl:template>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
<xsl:template match="@*|node()" mode="cibtr:leave">
|
|
rpm-build |
3ee90c |
<xsl:call-template name="cibtr:HelperIdentityLeave"/>
|
|
rpm-build |
3ee90c |
</xsl:template>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
<xsl:template match="/">
|
|
rpm-build |
3ee90c |
<xsl:call-template name="cibtr:HelperIdentityLeave"/>
|
|
rpm-build |
3ee90c |
</xsl:template>
|
|
rpm-build |
3ee90c |
|
|
rpm-build |
3ee90c |
</xsl:stylesheet>
|