diff --git a/host/gambio b/host/gambio index 016f76d..0398b5c 100644 --- a/host/gambio +++ b/host/gambio @@ -120,63 +120,53 @@ normalize_gambio_version() { echo "$1" \ | sed -E 's/^v//' \ - | sed -E 's/[^0-9.].*$//' + | grep -oE '^[0-9]+(\.[0-9]+)*' } compare_gambio_versions() { local version_a local version_b - local a_major - local a_minor - local a_patch - local b_major - local b_minor - local b_patch + local IFS='.' + local a_parts + local b_parts + local max_parts + local i + local a_part + local b_part version_a=$(normalize_gambio_version "$1") version_b=$(normalize_gambio_version "$2") - IFS='.' read -r a_major a_minor a_patch <<< "$version_a" - IFS='.' read -r b_major b_minor b_patch <<< "$version_b" - - a_major=${a_major:-0} - a_minor=${a_minor:-0} - a_patch=${a_patch:-0} - b_major=${b_major:-0} - b_minor=${b_minor:-0} - b_patch=${b_patch:-0} - - a_major=$((10#$a_major)) - a_minor=$((10#$a_minor)) - a_patch=$((10#$a_patch)) - b_major=$((10#$b_major)) - b_minor=$((10#$b_minor)) - b_patch=$((10#$b_patch)) - - if [ "$a_major" -gt "$b_major" ]; then - echo 1 - return 0 - elif [ "$a_major" -lt "$b_major" ]; then - echo -1 - return 0 + if [ -z "$version_a" ] || [ -z "$version_b" ]; then + echo 0 + return 1 fi - if [ "$a_minor" -gt "$b_minor" ]; then - echo 1 - return 0 - elif [ "$a_minor" -lt "$b_minor" ]; then - echo -1 - return 0 + read -ra a_parts <<< "$version_a" + read -ra b_parts <<< "$version_b" + + if [ "${#a_parts[@]}" -gt "${#b_parts[@]}" ]; then + max_parts="${#a_parts[@]}" + else + max_parts="${#b_parts[@]}" fi - if [ "$a_patch" -gt "$b_patch" ]; then - echo 1 - return 0 - elif [ "$a_patch" -lt "$b_patch" ]; then - echo -1 - return 0 - fi + for ((i = 0; i < max_parts; i++)); do + a_part="${a_parts[$i]:-0}" + b_part="${b_parts[$i]:-0}" + + a_part=$((10#$a_part)) + b_part=$((10#$b_part)) + + if [ "$a_part" -gt "$b_part" ]; then + echo 1 + return 0 + elif [ "$a_part" -lt "$b_part" ]; then + echo -1 + return 0 + fi + done echo 0 }