Skip to content

Commit 97afc52

Browse files
committed
Improve utils:compare_versions to correctly handle v1.10.0 to v1.9.0 #minor
1 parent 700be3b commit 97afc52

File tree

1 file changed

+11
-18
lines changed

1 file changed

+11
-18
lines changed

apps/_utils.sh

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -205,26 +205,19 @@ utils:compare_versions() {
205205
local ver_left="${1?}"
206206
local operator="${2?}"
207207
local ver_right="${3?}"
208+
local sorted lowest highest
209+
210+
mapfile -t sorted < <(printf '%s\n%s' "$ver_left" "$ver_right" | sort -V)
211+
lowest="${sorted[0]}"
212+
highest="${sorted[1]}"
208213

209214
case "$operator" in
210-
lt)
211-
[[ "$ver_left" < "$ver_right" ]]
212-
;;
213-
gt)
214-
[[ "$ver_left" > "$ver_right" ]]
215-
;;
216-
eq)
217-
[[ "$ver_left" == "$ver_right" ]]
218-
;;
219-
ne)
220-
[[ "$ver_left" != "$ver_right" ]]
221-
;;
222-
le)
223-
[[ "$ver_left" < "$ver_right" ]] || [[ "$ver_left" == "$ver_right" ]]
224-
;;
225-
ge)
226-
[[ "$ver_left" > "$ver_right" ]] || [[ "$ver_left" == "$ver_right" ]]
227-
;;
215+
lt) [[ "$ver_left" == "$lowest" && "$ver_left" != "$ver_right" ]] ;;
216+
gt) [[ "$ver_left" == "$highest" && "$ver_left" != "$ver_right" ]] ;;
217+
eq) [[ "$ver_left" == "$ver_right" ]] ;;
218+
ne) [[ "$ver_left" != "$ver_right" ]] ;;
219+
le) [[ "$ver_left" == "$lowest" ]] ;;
220+
ge) [[ "$ver_left" == "$highest" ]] ;;
228221
*)
229222
echo "usage: ${FUNCNAME[0]} ver1 lt|le|gt|ge|eq|ne ver2" >&2
230223
exit 1

0 commit comments

Comments
 (0)