dhodovsk / source-git / pacemaker

Forked from source-git/pacemaker 3 years ago
Clone

Blame xml/best-match.sh

rpm-build 3ee90c
#!/bin/sh
rpm-build 3ee90c
#
rpm-build 3ee90c
# Find the (sub-)schema that best matches a desired version.
rpm-build 3ee90c
#
rpm-build 3ee90c
# Version numbers are assumed to be in the format X.Y,
rpm-build 3ee90c
# where X and Y are integers, and Y is no more than 3 digits,
rpm-build 3ee90c
# or the special value "next".
rpm-build 3ee90c
#
rpm-build 3ee90c
rpm-build 3ee90c
# (Sub-)schema name (e.g. "resources")
rpm-build 3ee90c
base="$1"; shift
rpm-build 3ee90c
rpm-build 3ee90c
# Desired version (e.g. "1.0" or "next")
rpm-build 3ee90c
target="$1"; shift
rpm-build 3ee90c
rpm-build 3ee90c
# If not empty, append the best match as an XML externalRef to this file
rpm-build 3ee90c
# (otherwise, just echo the best match). Using readlink allows building
rpm-build 3ee90c
# from a different directory.
rpm-build 3ee90c
destination="$(readlink -f "$1")"; shift
rpm-build 3ee90c
rpm-build 3ee90c
# Arbitrary text to print before XML (generally spaces to indent)
rpm-build 3ee90c
prefix="$1"; shift
rpm-build 3ee90c
rpm-build 3ee90c
# Allow building from a different directory
rpm-build 3ee90c
cd "$(dirname $0)"
rpm-build 3ee90c
rpm-build 3ee90c
list_candidates() {
rpm-build 3ee90c
    ls -1 "${1}.rng" "${1}"-*.rng 2>/dev/null
rpm-build 3ee90c
}
rpm-build 3ee90c
rpm-build 3ee90c
version_from_filename() {
rpm-build 3ee90c
    vff_filename="$1"
rpm-build 3ee90c
rpm-build 3ee90c
    case "$vff_filename" in
rpm-build 3ee90c
        *-*.rng)
rpm-build 3ee90c
            echo "$vff_filename" | sed -e 's/.*-\(.*\).rng/\1/'
rpm-build 3ee90c
            ;;
rpm-build 3ee90c
        *)
rpm-build 3ee90c
            # special case for bare ${base}.rng, no -0.1's around anyway
rpm-build 3ee90c
            echo 0.1
rpm-build 3ee90c
            ;;
rpm-build 3ee90c
    esac
rpm-build 3ee90c
}
rpm-build 3ee90c
rpm-build 3ee90c
filename_from_version() {
rpm-build 3ee90c
    ffv_version="$1"
rpm-build 3ee90c
    ffv_base="$2"
rpm-build 3ee90c
rpm-build 3ee90c
    if [ "$ffv_version" = "0.1" ]; then
rpm-build 3ee90c
        echo "${ffv_base}.rng"
rpm-build 3ee90c
    else
rpm-build 3ee90c
        echo "${ffv_base}-${ffv_version}.rng"
rpm-build 3ee90c
    fi
rpm-build 3ee90c
}
rpm-build 3ee90c
rpm-build 3ee90c
# Convert version string (e.g. 2.10) into integer (e.g. 2010) for comparisons
rpm-build 3ee90c
int_version() {
rpm-build 3ee90c
    echo "$1" | awk -F. '{ printf("%d%03d\n", $1,$2); }';
rpm-build 3ee90c
}
rpm-build 3ee90c
rpm-build 3ee90c
best="0.0"
rpm-build 3ee90c
for rng in $(list_candidates "${base}"); do
rpm-build 3ee90c
    case ${rng} in
rpm-build 3ee90c
        ${base}-${target}.rng)
rpm-build 3ee90c
            # We found exactly what was requested
rpm-build 3ee90c
            best=${target}
rpm-build 3ee90c
            break
rpm-build 3ee90c
            ;;
rpm-build 3ee90c
        *-next.rng)
rpm-build 3ee90c
            # "Next" schemas cannot be a best match unless directly requested
rpm-build 3ee90c
            ;;
rpm-build 3ee90c
        *)
rpm-build 3ee90c
            v=$(version_from_filename "${rng}")
rpm-build 3ee90c
	    if [ $(int_version "${v}") -gt $(int_version "${best}") ]; then
rpm-build 3ee90c
                # This version beats the previous best match
rpm-build 3ee90c
rpm-build 3ee90c
                if [ "${target}" = "next" ]; then
rpm-build 3ee90c
                    best=${v}
rpm-build 3ee90c
                elif [ $(int_version "${v}") -lt $(int_version "${target}") ]; then
rpm-build 3ee90c
                    # This value is best only if it's still less than the target
rpm-build 3ee90c
                    best=${v}
rpm-build 3ee90c
                fi
rpm-build 3ee90c
            fi
rpm-build 3ee90c
            ;;
rpm-build 3ee90c
    esac
rpm-build 3ee90c
done
rpm-build 3ee90c
rpm-build 3ee90c
if [ "$best" != "0.0" ]; then
rpm-build 3ee90c
    found=$(filename_from_version "$best" "$base")
rpm-build 3ee90c
    if [ -z "$destination" ]; then
rpm-build 3ee90c
        echo "$(basename $found)"
rpm-build 3ee90c
    else
rpm-build 3ee90c
        echo "${prefix}<externalRef href=\"$(basename $found)\"/>" >> "$destination"
rpm-build 3ee90c
    fi
rpm-build 3ee90c
    exit 0
rpm-build 3ee90c
fi
rpm-build 3ee90c
rpm-build 3ee90c
exit 1