diff --git a/xml/version-diff.sh.in b/xml/version-diff.sh.in index 40d388d8dc..33cfd5b587 100644 --- a/xml/version-diff.sh.in +++ b/xml/version-diff.sh.in @@ -1,60 +1,64 @@ #!@BASH_PATH@ # # Copyright 2016-2024 the Pacemaker project contributors # # The version control history for this file may have further details. # # This source code is licensed under the GNU General Public License version 2 # or later (GPLv2+) WITHOUT ANY WARRANTY. # -# diff fails with ec=2 if no predecessor is found; -# this uses '=' GNU extension to sed, if that's not available, -# one can use: hline=`echo "$${p}" | grep -Fn "$${hunk}" | cut -d: -f1`; -# XXX: use line information from hunk to avoid "not detected" for ambiguity -for p in $*; do - set $(echo "$p" | tr '-' ' ') - echo "### *-$2.rng vs. predecessor" - - for v in *-"$2".rng; do - echo "#### $v vs. predecessor" - - b=$(echo "$v" | cut -d- -f1) - old=$(./rng-helper match "$b" "$1") - p=$(diff -u "$old" "$v" 2>/dev/null) - - case $? in - 1) - echo "$p" | sed -n -e '/^@@ /!d;=;p' -e ':l;n;/^\([- ]\|+.*<[^ />]\+\([^/>]\+="ID\|>$$\)\)/bl;s/^[+ ]\(.*\)/\1/p' | - while read -r hline; do - if read -r h; then - read -r i - else - break - fi - - iline=$(grep -Fn "$i" "$v" | cut -d: -f1) - - if [ "$(echo "$iline" | wc -l)" = "1" ]; then - ctxt=$({ sed -n -e "1,$((iline - 1))p" "$v" - echo "$i" - sed -n -e "$((iline + 1)),$ p" "$v" - } | xsltproc --param skip 1 context-of.xsl -) - else - ctxt="(not detected)" - fi - - echo "$p" | sed -n -e "$((hline - 2)),$hline!d" -e '/^\(+++\|---\)/p' - echo "$h context: $ctxt" - echo "$p" | sed -n -e "1,${hline}d" -e '/^\(---\|@@ \)/be;p;d;:e;n;be' - done - - ;; - - 2) - echo "##### $v has no predecessor" - ;; - - esac +version_diff() { + # diff fails with ec=2 if no predecessor is found; + # this uses '=' GNU extension to sed, if that's not available, + # one can use: hline=`echo "$${p}" | grep -Fn "$${hunk}" | cut -d: -f1`; + # XXX: use line information from hunk to avoid "not detected" for ambiguity + for p in $*; do + set $(echo "$p" | tr '-' ' ') + echo "### *-$2.rng vs. predecessor" + + for v in *-"$2".rng; do + echo "#### $v vs. predecessor" + + b=$(echo "$v" | cut -d- -f1) + old=$(./rng-helper match "$b" "$1") + p=$(diff -u "$old" "$v" 2>/dev/null) + + case $? in + 1) + echo "$p" | sed -n -e '/^@@ /!d;=;p' -e ':l;n;/^\([- ]\|+.*<[^ />]\+\([^/>]\+="ID\|>$$\)\)/bl;s/^[+ ]\(.*\)/\1/p' | + while read -r hline; do + if read -r h; then + read -r i + else + break + fi + + iline=$(grep -Fn "$i" "$v" | cut -d: -f1) + + if [ "$(echo "$iline" | wc -l)" = "1" ]; then + ctxt=$({ sed -n -e "1,$((iline - 1))p" "$v" + echo "$i" + sed -n -e "$((iline + 1)),$ p" "$v" + } | xsltproc --param skip 1 context-of.xsl -) + else + ctxt="(not detected)" + fi + + echo "$p" | sed -n -e "$((hline - 2)),$hline!d" -e '/^\(+++\|---\)/p' + echo "$h context: $ctxt" + echo "$p" | sed -n -e "1,${hline}d" -e '/^\(---\|@@ \)/be;p;d;:e;n;be' + done + + ;; + + 2) + echo "##### $v has no predecessor" + ;; + + esac + done done -done +} + +version_diff "$@"