@cryptotaxi247 / kubo / commits / 16672127b

Fixes #3133: Properly handle release candidates in version comparison

Deduplicate version checking code across scripts License: MIT Signed-off-by: Mateusz Naściszewski <matin1111@wp.pl>

mateon1 committed Aug 27, 2016 at 20:42 UTC 16672127b85ff07b5ee0c54bfa2fe55b900a6e7c
3 files changed +87 -98
bin/check_go_version
+5 -49
@@ -23,55 +23,11 @@ GO_MIN_VERSION="$1"
23
24 UPGRADE_MSG="Please take a look at https://golang.org/doc/install to install or upgrade go."
25
26 -die_upgrade() {
27 - printf >&2 "fatal: %s\n" "$@"
28 - printf >&2 "=> %s\n" "$UPGRADE_MSG"
29 - exit 1
30 -}
31 -
32 -major_number() {
33 - vers="$1"
34 -
35 - # Hack around 'expr' exiting with code 1 when it outputs 0
36 - case "$vers" in
37 - 0) echo "0" ;;
38 - 0.*) echo "0" ;;
39 - *) expr "$vers" : "\([^.]*\).*" || return 1
40 - esac
41 -}
42 -
43 -check_at_least_version() {
44 - MIN_VERS="$1"
45 - CUR_VERS="$2"
46 - PROG_NAME="$3"
47 -
48 - # Get major, minor and fix numbers for each version
49 - MIN_MAJ=$(major_number "$MIN_VERS") || die "No major version number in '$MIN_VERS' for '$PROG_NAME'"
50 - CUR_MAJ=$(major_number "$CUR_VERS") || die "No major version number in '$CUR_VERS' for '$PROG_NAME'"
51 -
52 - if MIN_MIN=$(expr "$MIN_VERS" : "[^.]*\.\([^.]*\).*"); then
53 - MIN_FIX=$(expr "$MIN_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || MIN_FIX="0"
54 - else
55 - MIN_MIN="0"
56 - MIN_FIX="0"
57 - fi
58 - if CUR_MIN=$(expr "$CUR_VERS" : "[^.]*\.\([^.]*\).*"); then
59 - CUR_FIX=$(expr "$CUR_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || CUR_FIX="0"
60 - else
61 - CUR_MIN="0"
62 - CUR_FIX="0"
63 - fi
64 -
65 - # Compare versions
66 - VERS_LEAST="$PROG_NAME version '$CUR_VERS' should be at least '$MIN_VERS'"
67 - test "$CUR_MAJ" -gt $(expr "$MIN_MAJ" - 1) || die_upgrade "$VERS_LEAST"
68 - test "$CUR_MAJ" -gt "$MIN_MAJ" || {
69 - test "$CUR_MIN" -gt $(expr "$MIN_MIN" - 1) || die_upgrade "$VERS_LEAST"
70 - test "$CUR_MIN" -gt "$MIN_MIN" || {
71 - test "$CUR_FIX" -ge "$MIN_FIX" || die_upgrade "$VERS_LEAST"
72 - }
73 - }
74 -}
26 +# Get path to the directory containing this file
27 +# If $0 has no slashes, uses "./"
28 +PREFIX=$(expr $0 : "\(.*\/\)") || PREFIX='./'
29 +# Include the 'check_at_least_version' function
30 +. ${PREFIX}check_version
31
32 # Check that the go binary exist and is in the path
33
bin/check_gx_program
+5 -49
@@ -27,55 +27,11 @@ GX_PROGRAM_NAME="$1"
27 GX_MIN_VERSION="$2"
28 UPGRADE_MSG="$3"
29
30 -die_upgrade() {
31 - printf >&2 "fatal: %s\n" "$@"
32 - printf >&2 "=> %s\n" "$UPGRADE_MSG"
33 - exit 1
34 -}
35 -
36 -major_number() {
37 - vers="$1"
38 -
39 - # Hack around 'expr' exiting with code 1 when it outputs 0
40 - case "$vers" in
41 - 0) echo "0" ;;
42 - 0.*) echo "0" ;;
43 - *) expr "$vers" : "\([^.]*\).*" || return 1
44 - esac
45 -}
46 -
47 -check_at_least_version() {
48 - MIN_VERS="$1"
49 - CUR_VERS="$2"
50 - PROG_NAME="$3"
51 -
52 - # Get major, minor and fix numbers for each version
53 - MIN_MAJ=$(major_number "$MIN_VERS") || die "No major version number in '$MIN_VERS' for '$PROG_NAME'"
54 - CUR_MAJ=$(major_number "$CUR_VERS") || die "No major version number in '$CUR_VERS' for '$PROG_NAME'"
55 -
56 - if MIN_MIN=$(expr "$MIN_VERS" : "[^.]*\.\([^.]*\).*"); then
57 - MIN_FIX=$(expr "$MIN_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || MIN_FIX="0"
58 - else
59 - MIN_MIN="0"
60 - MIN_FIX="0"
61 - fi
62 - if CUR_MIN=$(expr "$CUR_VERS" : "[^.]*\.\([^.]*\).*"); then
63 - CUR_FIX=$(expr "$CUR_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || CUR_FIX="0"
64 - else
65 - CUR_MIN="0"
66 - CUR_FIX="0"
67 - fi
68 -
69 - # Compare versions
70 - VERS_LEAST="$PROG_NAME version '$CUR_VERS' should be at least '$MIN_VERS'"
71 - test "$CUR_MAJ" -gt $(expr "$MIN_MAJ" - 1) || die_upgrade "$VERS_LEAST"
72 - test "$CUR_MAJ" -gt "$MIN_MAJ" || {
73 - test "$CUR_MIN" -gt $(expr "$MIN_MIN" - 1) || die_upgrade "$VERS_LEAST"
74 - test "$CUR_MIN" -gt "$MIN_MIN" || {
75 - test "$CUR_FIX" -ge "$MIN_FIX" || die_upgrade "$VERS_LEAST"
76 - }
77 - }
78 -}
30 +# Get path to the directory containing this file
31 +# If $0 has no slashes, uses "./"
32 +PREFIX=$(expr $0 : "\(.*\/\)") || PREFIX='./'
33 +# Include the 'check_at_least_version' function
34 +. ${PREFIX}check_version
35
36 # Check that the gx program exists
37
bin/check_version new
+77
@@ -0,0 +1,77 @@
1 +#!/bin/sh
2 +
3 +if test "x$UPGRADE_MSG" = "x"; then
4 + printf >&2 "fatal: Please set '"'$UPGRADE_MSG'"' before sourcing this script\n"
5 + exit 1
6 +fi
7 +
8 +die_upgrade() {
9 + printf >&2 "fatal: %s\n" "$@"
10 + printf >&2 "=> %s\n" "$UPGRADE_MSG"
11 + exit 1
12 +}
13 +
14 +major_number() {
15 + vers="$1"
16 +
17 + # Hack around 'expr' exiting with code 1 when it outputs 0
18 + case "$vers" in
19 + 0) echo "0" ;;
20 + 0.*) echo "0" ;;
21 + *) expr "$vers" : "\([^.]*\).*" || return 1
22 + esac
23 +}
24 +
25 +check_at_least_version() {
26 + MIN_VERS="$1"
27 + CUR_VERS="$2"
28 + PROG_NAME="$3"
29 +
30 + # Get major, minor and fix numbers for each version
31 + MIN_MAJ=$(major_number "$MIN_VERS") || die "No major version number in '$MIN_VERS' for '$PROG_NAME'"
32 + CUR_MAJ=$(major_number "$CUR_VERS") || die "No major version number in '$CUR_VERS' for '$PROG_NAME'"
33 +
34 + # We expect a version to be of form X.X.X
35 + # if the second dot doesn't match, we consider it a prerelease
36 +
37 + if MIN_MIN=$(expr "$MIN_VERS" : "[^.]*\.\([0-9]\+\)"); then
38 + # this captured digit is neccessary, since expr returns code 1 if the output is empty
39 + if expr "$MIN_VERS" : "[^.]*\.[0-9]*\([0-9]\.\|[0-9]\$\)" >/dev/null; then
40 + MIN_PRERELEASE="0"
41 + else
42 + MIN_PRERELEASE="1"
43 + fi
44 + MIN_FIX=$(expr "$MIN_VERS" : "[^.]*\.[0-9]\+[^0-9]\+\([0-9]\+\)") || MIN_FIX="0"
45 + else
46 + MIN_MIN="0"
47 + MIN_PRERELEASE="0"
48 + MIN_FIX="0"
49 + fi
50 + if CUR_MIN=$(expr "$CUR_VERS" : "[^.]*\.\([0-9]\+\)"); then
51 + # this captured digit is neccessary, since expr returns code 1 if the output is empty
52 + if expr "$CUR_VERS" : "[^.]*\.[0-9]*\([0-9]\.\|[0-9]\$\)" >/dev/null; then
53 + CUR_PRERELEASE="0"
54 + else
55 + CUR_PRERELEASE="1"
56 + fi
57 + CUR_FIX=$(expr "$CUR_VERS" : "[^.]*\.[0-9]\+[^0-9]\+\([0-9]\+\)") || CUR_FIX="0"
58 + else
59 + CUR_MIN="0"
60 + CUR_PRERELEASE="0"
61 + CUR_FIX="0"
62 + fi
63 +
64 + # Compare versions
65 + VERS_LEAST="$PROG_NAME version '$CUR_VERS' should be at least '$MIN_VERS'"
66 + test "$CUR_MAJ" -lt "$MIN_MAJ" && die_upgrade "$VERS_LEAST"
67 + test "$CUR_MAJ" -gt "$MIN_MAJ" || {
68 + test "$CUR_MIN" -lt "$MIN_MIN" && die_upgrade "$VERS_LEAST"
69 + test "$CUR_MIN" -gt "$MIN_MIN" || {
70 + test "$CUR_PRERELEASE" -gt "$MIN_PRERELEASE" && die_upgrade "$VERS_LEAST"
71 + test "$CUR_PRERELEASE" -lt "$MIN_PRERELEASE" || {
72 + test "$CUR_FIX" -lt "$MIN_FIX" && die_upgrade "$VERS_LEAST"
73 + true
74 + }
75 + }
76 + }
77 +}