File pacemaker-XML-regression.sh-modularize-XSLT-processor-allow-substitutes.patch of Package pacemaker.21299

commit b8e84e42b4e079515d3fc808f452956763b76710
Author: Jan Pokorný <jpokorny@redhat.com>
Date:   Fri May 11 11:44:33 2018 +0200

    XML: regression.sh: modularize "XSLT processor", allow substitutes
    
    In general, it's better to have the transformation validated against
    XSLT specification, not a particular implementation thereof.
    Hence enable cross-validation also against other XSLT processors,
    Xalan and saxon (arranged with setting XSLTPROCESSOR=Xalan|saxon
    environment variable, respectively).  The interoperability aspect is
    also important, should anyone want to upgrade the CIB instance offline,
    outside of pacemaker's realm, because the only qualification of the
    chosen executive tool it compliance with XSLT 1.0 standard.
    
    Note that implicit (unpreprocessed) mode of diff'ing  displays some
    minor formatting differences, meaning only '-B' switch to regression.sh
    is suitable.
    Also, these other implementations revealed some discrepancies:
    
    - per both Xalan and saxon, the stylesheet should rather explicitly drop
      some namespace prefixes explicitly to avoid the namespaces being
      verbosely established at the elements that are generated as brand new
      in the output
    
    - per saxon:
    > Warning: on line 1476 of upgrade-2.10.xsl:
    >   The attribute axis starting at an attribute node will never select anything

diff --git a/xml/regression.sh b/xml/regression.sh
index dafe4e8e9..7b986aca1 100755
--- a/xml/regression.sh
+++ b/xml/regression.sh
@@ -13,6 +13,23 @@ DIFFPAGER=${DIFFPAGER:-less -LRX}
 # $1=schema, $2=validated
 # alt.: jing -i
 RNGVALIDATOR=${RNGVALIDATOR:-xmllint --noout --relaxng}
+# $1=stylesheet, $2=source
+# alt.: Xalan, saxon (note: only validates reliably with -B)
+_xalan_wrapper() {
+	{ Xalan "$2" "$1" 2>&1 1>&3 \
+	  | sed -e '/^Source tree node.*$/d' \
+	        -e 's|^XSLT message: \(.*\) (Occurred.*)|\1|'; } 3>&1- 1>&2
+}
+# filtered out message: https://bugzilla.redhat.com/show_bug.cgi?id=1577367
+_saxon_wrapper() {
+	{ saxon "-xsl:$1" "-s:$2" -versionmsg:off 2>&1 1>&3 \
+	  | sed -e '/^Cannot find CatalogManager.properties$/d'; } 3>&1- 1>&2
+}
+#_xalan_wrapper() { Xalan $2 $1; }
+XSLTPROCESSOR=${XSLTPROCESSOR:-xsltproc}
+test "${XSLTPROCESSOR}" != Xalan || XSLTPROCESSOR=_xalan_wrapper
+test "${XSLTPROCESSOR}" != saxon || XSLTPROCESSOR=_saxon_wrapper
+
 tests=  # test* names (should go first) here will become preselected default
 
 #
@@ -124,7 +141,7 @@ test_explanation() {
 		shift
 	done
 
-	xsltproc upgrade-detail.xsl "${_tsc_template}"
+	${XSLTPROCESSOR} upgrade-detail.xsl "${_tsc_template}"
 }
 
 # stdout: filename of the transformed file
@@ -141,7 +158,7 @@ test_runner_upgrade() {
 	_tru_target_err="${_tru_target}.err"
 
 	if test $((_tru_mode & (1 << 2))) -eq 0; then
-		xsltproc "${_tru_template}" "${_tru_source}" \
+		${XSLTPROCESSOR} "${_tru_template}" "${_tru_source}" \
 		  > "${_tru_target}" 2> "${_tru_target_err}" \
 		  || { _tru_ref=$?; echo "${_tru_target_err}"
 		       return ${_tru_ref}; }
@@ -155,7 +172,7 @@ test_runner_upgrade() {
 		#   (extraneous inter-element whitespace like blank
 		#   lines will not get removed otherwise, see lower)
 		xmllint --noblanks "${_tru_source}" \
-		  | xsltproc "${_tru_template}" - \
+		  | ${XSLTPROCESSOR} "${_tru_template}" - \
 		  > "${_tru_target}" 2> "${_tru_target_err}" \
 		  || { _tru_ref=$?; echo "${_tru_target_err}"
 		       return ${_tru_ref}; }
@@ -163,7 +180,7 @@ test_runner_upgrade() {
 		_tru_template="$(dirname "${_tru_target}")"
 		_tru_template="${_tru_template}/.$(basename "${_tru_target}")"
 		mv "${_tru_target}" "${_tru_template}"
-		xsltproc - "${_tru_template}" > "${_tru_target}" <<-EOF
+		${XSLTPROCESSOR} - "${_tru_template}" > "${_tru_target}" <<-EOF
 	<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 	<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>
 	<xsl:template match="@*|*|comment()|processing-instruction()">
@@ -205,7 +222,7 @@ EOF
 		fi
 	elif test -f "${_tru_ref}" && test -e "${_tru_ref_err}"; then
 		{ test "$((_tru_mode & (1 << 2)))" -eq 0 && cat "${_tru_ref}" \
-		    || xsltproc - "${_tru_ref}" <<-EOF
+		    || ${XSLTPROCESSOR} - "${_tru_ref}" <<-EOF
 	<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 	<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>
 	<xsl:template match="@*|*|comment()|processing-instruction()">
@@ -358,7 +375,7 @@ cts_scheduler() {
 			shift
 		done
 		while read _tcp_origin; do
-			_tcp_validatewith=$(xsltproc - "${_tcp_origin}" <<-EOF
+			_tcp_validatewith=$(${XSLTPROCESSOR} - "${_tcp_origin}" <<-EOF
 	<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 	<xsl:output method="text" encoding="UTF-8"/>
 	<xsl:template match="/">
diff --git a/xml/upgrade-2.10.xsl b/xml/upgrade-2.10.xsl
index fdcf1c8dc..29c17d6a7 100644
--- a/xml/upgrade-2.10.xsl
+++ b/xml/upgrade-2.10.xsl
@@ -5,7 +5,8 @@
  SPDX-License-Identifier: GPL-2.0-or-later
  -->
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns:cibtr="http://clusterlabs.org/ns/pacemaker/cibtr-2">
+                xmlns:cibtr="http://clusterlabs.org/ns/pacemaker/cibtr-2"
+                exclude-result-prefixes="cibtr">
 <xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
 
 <xsl:param name="cib-min-ver" select="'3.0'"/>
@@ -1462,7 +1463,7 @@
                                   and
                                   not(
                                     $MapClusterNode/cibtr:replace[
-                                      @what = current()/@name
+                                      @what = name(current())
                                       and
                                       @in-case-of
                                       and
openSUSE Build Service is sponsored by