Compare prerelease versions correctly for updates
ci / test (push) Waiting to run
ci / fuzz-smoke (push) Waiting to run
ci / windows-client (push) Waiting to run
ci / package-release (linux-x86_64, ubuntu-latest) (push) Waiting to run
ci / package-release (macos-aarch64, macos-14) (push) Waiting to run
ci / package-release (macos-x86_64, macos-13) (push) Waiting to run
ci / package-release (windows-x86_64, windows-latest) (push) Waiting to run
ci / publish-gitea-release (push) Blocked by required conditions
ci / remote-bench (push) Waiting to run
ci / test (push) Waiting to run
ci / fuzz-smoke (push) Waiting to run
ci / windows-client (push) Waiting to run
ci / package-release (linux-x86_64, ubuntu-latest) (push) Waiting to run
ci / package-release (macos-aarch64, macos-14) (push) Waiting to run
ci / package-release (macos-x86_64, macos-13) (push) Waiting to run
ci / package-release (windows-x86_64, windows-latest) (push) Waiting to run
ci / publish-gitea-release (push) Blocked by required conditions
ci / remote-bench (push) Waiting to run
This commit is contained in:
+45
-5
@@ -222,20 +222,60 @@ release_latest_tag_download_url() {
|
||||
esac
|
||||
}
|
||||
|
||||
version_part() {
|
||||
version_core() {
|
||||
value="${1#v}"
|
||||
value="${value%%+*}"
|
||||
printf '%s\n' "${value%%-*}"
|
||||
}
|
||||
|
||||
version_prerelease() {
|
||||
value="${1#v}"
|
||||
value="${value%%+*}"
|
||||
case "$value" in
|
||||
*-*) printf '%s\n' "${value#*-}" ;;
|
||||
*) printf '\n' ;;
|
||||
esac
|
||||
}
|
||||
|
||||
version_core_part() {
|
||||
version="$1"
|
||||
index="$2"
|
||||
printf '%s\n' "$version" \
|
||||
version_core "$version" \
|
||||
| sed 's/[^0-9][^0-9]*/ /g' \
|
||||
| awk -v index="$index" '{ value=$index; if (value == "") value=0; print value }'
|
||||
}
|
||||
|
||||
prerelease_less_than() {
|
||||
left="$1"
|
||||
right="$2"
|
||||
if [ -z "$left" ] && [ -z "$right" ]; then
|
||||
return 1
|
||||
fi
|
||||
if [ -z "$left" ]; then
|
||||
return 1
|
||||
fi
|
||||
if [ -z "$right" ]; then
|
||||
return 0
|
||||
fi
|
||||
if [ "$left" = "$right" ]; then
|
||||
return 1
|
||||
fi
|
||||
left_rc="$(printf '%s\n' "$left" | sed -n 's/^[Rr][Cc]\([0-9][0-9]*\)$/\1/p')"
|
||||
right_rc="$(printf '%s\n' "$right" | sed -n 's/^[Rr][Cc]\([0-9][0-9]*\)$/\1/p')"
|
||||
if [ -n "$left_rc" ] && [ -n "$right_rc" ]; then
|
||||
[ "$left_rc" -lt "$right_rc" ]
|
||||
return
|
||||
fi
|
||||
first="$(printf '%s\n%s\n' "$left" "$right" | LC_ALL=C sort | sed -n '1p')"
|
||||
[ "$first" = "$left" ]
|
||||
}
|
||||
|
||||
version_less_than() {
|
||||
left="$1"
|
||||
right="$2"
|
||||
for index in 1 2 3 4 5 6 7 8; do
|
||||
lpart="$(version_part "$left" "$index")"
|
||||
rpart="$(version_part "$right" "$index")"
|
||||
lpart="$(version_core_part "$left" "$index")"
|
||||
rpart="$(version_core_part "$right" "$index")"
|
||||
if [ "$lpart" -lt "$rpart" ]; then
|
||||
return 0
|
||||
fi
|
||||
@@ -243,7 +283,7 @@ version_less_than() {
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
prerelease_less_than "$(version_prerelease "$left")" "$(version_prerelease "$right")"
|
||||
}
|
||||
|
||||
current_source_version() {
|
||||
|
||||
Reference in New Issue
Block a user