mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-28 13:57:52 +08:00
Merge pull request #3136 from mateon1/fix/version-comparison
Fixes #3133: Properly handle release candidates in version comparison
This commit is contained in:
commit
0849375504
@ -23,55 +23,11 @@ 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
# Get path to the directory containing this file
|
||||
# If $0 has no slashes, uses "./"
|
||||
PREFIX=$(expr "$0" : "\(.*\/\)") || PREFIX='./'
|
||||
# Include the 'check_at_least_version' function
|
||||
. ${PREFIX}check_version
|
||||
|
||||
# Check that the go binary exist and is in the path
|
||||
|
||||
|
||||
@ -27,55 +27,11 @@ 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
# Get path to the directory containing this file
|
||||
# If $0 has no slashes, uses "./"
|
||||
PREFIX=$(expr "$0" : "\(.*\/\)") || PREFIX='./'
|
||||
# Include the 'check_at_least_version' function
|
||||
. ${PREFIX}check_version
|
||||
|
||||
# Check that the gx program exists
|
||||
|
||||
|
||||
77
bin/check_version
Executable file
77
bin/check_version
Executable file
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user