diff --git a/bin/check_go_version b/bin/check_go_version index 20fae7df5ed5..948854975beb 100755 --- a/bin/check_go_version +++ b/bin/check_go_version @@ -23,55 +23,8 @@ GO_MIN_VERSION="$1" UPGRADE_MSG="Please take a look at https://golang.org/doc/install to install or upgrade go." -die_upgrade() { - printf >&2 "fatal: %s\n" "$@" - printf >&2 "=> %s\n" "$UPGRADE_MSG" - exit 1 -} - -major_number() { - vers="$1" - - # Hack around 'expr' exiting with code 1 when it outputs 0 - case "$vers" in - 0) echo "0" ;; - 0.*) echo "0" ;; - *) expr "$vers" : "\([^.]*\).*" || return 1 - esac -} - -check_at_least_version() { - MIN_VERS="$1" - CUR_VERS="$2" - PROG_NAME="$3" - - # Get major, minor and fix numbers for each version - MIN_MAJ=$(major_number "$MIN_VERS") || die "No major version number in '$MIN_VERS' for '$PROG_NAME'" - CUR_MAJ=$(major_number "$CUR_VERS") || die "No major version number in '$CUR_VERS' for '$PROG_NAME'" - - if MIN_MIN=$(expr "$MIN_VERS" : "[^.]*\.\([^.]*\).*"); then - MIN_FIX=$(expr "$MIN_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || MIN_FIX="0" - else - MIN_MIN="0" - MIN_FIX="0" - fi - if CUR_MIN=$(expr "$CUR_VERS" : "[^.]*\.\([^.]*\).*"); then - CUR_FIX=$(expr "$CUR_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || CUR_FIX="0" - else - CUR_MIN="0" - CUR_FIX="0" - fi - - # Compare versions - VERS_LEAST="$PROG_NAME version '$CUR_VERS' should be at least '$MIN_VERS'" - test "$CUR_MAJ" -gt $(expr "$MIN_MAJ" - 1) || die_upgrade "$VERS_LEAST" - test "$CUR_MAJ" -gt "$MIN_MAJ" || { - test "$CUR_MIN" -gt $(expr "$MIN_MIN" - 1) || die_upgrade "$VERS_LEAST" - test "$CUR_MIN" -gt "$MIN_MIN" || { - test "$CUR_FIX" -ge "$MIN_FIX" || die_upgrade "$VERS_LEAST" - } - } -} +# Include the 'check_at_least_version' function +. ./check_version # Check that the go binary exist and is in the path diff --git a/bin/check_gx_program b/bin/check_gx_program index 37ada6edc8bb..48ccb8f5f402 100755 --- a/bin/check_gx_program +++ b/bin/check_gx_program @@ -27,55 +27,8 @@ GX_PROGRAM_NAME="$1" GX_MIN_VERSION="$2" UPGRADE_MSG="$3" -die_upgrade() { - printf >&2 "fatal: %s\n" "$@" - printf >&2 "=> %s\n" "$UPGRADE_MSG" - exit 1 -} - -major_number() { - vers="$1" - - # Hack around 'expr' exiting with code 1 when it outputs 0 - case "$vers" in - 0) echo "0" ;; - 0.*) echo "0" ;; - *) expr "$vers" : "\([^.]*\).*" || return 1 - esac -} - -check_at_least_version() { - MIN_VERS="$1" - CUR_VERS="$2" - PROG_NAME="$3" - - # Get major, minor and fix numbers for each version - MIN_MAJ=$(major_number "$MIN_VERS") || die "No major version number in '$MIN_VERS' for '$PROG_NAME'" - CUR_MAJ=$(major_number "$CUR_VERS") || die "No major version number in '$CUR_VERS' for '$PROG_NAME'" - - if MIN_MIN=$(expr "$MIN_VERS" : "[^.]*\.\([^.]*\).*"); then - MIN_FIX=$(expr "$MIN_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || MIN_FIX="0" - else - MIN_MIN="0" - MIN_FIX="0" - fi - if CUR_MIN=$(expr "$CUR_VERS" : "[^.]*\.\([^.]*\).*"); then - CUR_FIX=$(expr "$CUR_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || CUR_FIX="0" - else - CUR_MIN="0" - CUR_FIX="0" - fi - - # Compare versions - VERS_LEAST="$PROG_NAME version '$CUR_VERS' should be at least '$MIN_VERS'" - test "$CUR_MAJ" -gt $(expr "$MIN_MAJ" - 1) || die_upgrade "$VERS_LEAST" - test "$CUR_MAJ" -gt "$MIN_MAJ" || { - test "$CUR_MIN" -gt $(expr "$MIN_MIN" - 1) || die_upgrade "$VERS_LEAST" - test "$CUR_MIN" -gt "$MIN_MIN" || { - test "$CUR_FIX" -ge "$MIN_FIX" || die_upgrade "$VERS_LEAST" - } - } -} +# Include the 'check_at_least_version' function +. ./check_version # Check that the gx program exists diff --git a/bin/check_version b/bin/check_version new file mode 100644 index 000000000000..401471c3158f --- /dev/null +++ b/bin/check_version @@ -0,0 +1,77 @@ +#!/bin/sh + +if test "x$UPGRADE_MSG" = "x"; then + printf >&2 "fatal: Please set '"'$UPGRADE_MSG'"' before sourcing this script\n" + exit 1 +fi + +die_upgrade() { + printf >&2 "fatal: %s\n" "$@" + printf >&2 "=> %s\n" "$UPGRADE_MSG" + exit 1 +} + +major_number() { + vers="$1" + + # Hack around 'expr' exiting with code 1 when it outputs 0 + case "$vers" in + 0) echo "0" ;; + 0.*) echo "0" ;; + *) expr "$vers" : "\([^.]*\).*" || return 1 + esac +} + +check_at_least_version() { + MIN_VERS="$1" + CUR_VERS="$2" + PROG_NAME="$3" + + # Get major, minor and fix numbers for each version + MIN_MAJ=$(major_number "$MIN_VERS") || die "No major version number in '$MIN_VERS' for '$PROG_NAME'" + CUR_MAJ=$(major_number "$CUR_VERS") || die "No major version number in '$CUR_VERS' for '$PROG_NAME'" + + # We expect a version to be of form X.X.X + # if the second dot doesn't match, we consider it a prerelease + + if MIN_MIN=$(expr "$MIN_VERS" : "[^.]*\.\([0-9]\+\)"); then + # this captured digit is neccessary, since expr returns code 1 if the output is empty + if expr "$MIN_VERS" : "[^.]*\.[0-9]*\([0-9]\.\|[0-9]\$\)" >/dev/null; then + MIN_PRERELEASE="0" + else + MIN_PRERELEASE="1" + fi + MIN_FIX=$(expr "$MIN_VERS" : "[^.]*\.[0-9]\+[^0-9]\+\([0-9]\+\)") || MIN_FIX="0" + else + MIN_MIN="0" + MIN_PRERELEASE="0" + MIN_FIX="0" + fi + if CUR_MIN=$(expr "$CUR_VERS" : "[^.]*\.\([0-9]\+\)"); then + # this captured digit is neccessary, since expr returns code 1 if the output is empty + if expr "$CUR_VERS" : "[^.]*\.[0-9]*\([0-9]\.\|[0-9]\$\)" >/dev/null; then + CUR_PRERELEASE="0" + else + CUR_PRERELEASE="1" + fi + CUR_FIX=$(expr "$CUR_VERS" : "[^.]*\.[0-9]\+[^0-9]\+\([0-9]\+\)") || CUR_FIX="0" + else + CUR_MIN="0" + CUR_PRERELEASE="0" + CUR_FIX="0" + fi + + # Compare versions + VERS_LEAST="$PROG_NAME version '$CUR_VERS' should be at least '$MIN_VERS'" + test "$CUR_MAJ" -lt "$MIN_MAJ" && die_upgrade "$VERS_LEAST" + test "$CUR_MAJ" -gt "$MIN_MAJ" || { + test "$CUR_MIN" -lt "$MIN_MIN" && die_upgrade "$VERS_LEAST" + test "$CUR_MIN" -gt "$MIN_MIN" || { + test "$CUR_PRERELEASE" -gt "$MIN_PRERELEASE" && die_upgrade "$VERS_LEAST" + test "$CUR_PRERELEASE" -lt "$MIN_PRERELEASE" || { + test "$CUR_FIX" -lt "$MIN_FIX" && die_upgrade "$VERS_LEAST" + true + } + } + } +}