commit: 393b8445925585a5ce192f9fde89720e8b37055a
Author: Ulrich Müller <ulm <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 21 07:34:19 2017 +0000
Commit: Ulrich Müller <ulm <AT> gentoo <DOT> org>
CommitDate: Thu Sep 21 07:37:14 2017 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=393b8445
eapi7-ver.eclass: Simplify version validation.
This also speeds ver_test up by about 20%.
eclass/eapi7-ver.eclass | 82 +++----------------------------------------------
1 file changed, 4 insertions(+), 78 deletions(-)
diff --git a/eclass/eapi7-ver.eclass b/eclass/eapi7-ver.eclass
index e0eede869d4..7cfbf7e88d2 100644
--- a/eclass/eapi7-ver.eclass
+++ b/eclass/eapi7-ver.eclass
@@ -176,81 +176,6 @@ ver_rs() {
echo "${comp[*]}"
}
-# @FUNCTION: _ver_validate
-# @USAGE: <comp[0]>...
-# @DESCRIPTION:
-# Verify that the version component array passed as the argument
-# validates according to the PMS version rules. Returns 0 if it does,
-# 1 otherwise.
-_ver_validate() {
- local prev=start
-
- while [[ ${1} || ${2} ]]; do
- local s=${1}
- local c=${2}
-
- if [[ -z ${s} ]]; then
- if [[ ${c} == [0-9]* ]]; then
- # number without preceding sep may be either:
- case ${prev} in
- # a. 1st version number
- start) prev=numeric;;
- # b. _foo suffix number
- suffix) prev=suffix_num;;
- # c. -rN revision number
- revision) prev=revision_num;;
- *) return 1;;
- esac
- elif [[ -n ${c} ]]; then
- # letter without preceding sep = letter after
version
- [[ ${prev} == numeric ]] || return 1
- [[ ${#c} -eq 1 ]] || return 1
- prev=letter
- fi
- elif [[ -z ${c} ]]; then
- # trailing suffix?
- return 1
- elif [[ ${s} == . ]]; then
- # number preceded by dot = numeric component
- [[ ${prev} == numeric ]] || return 1
- elif [[ ${s} == _ ]]; then
- # _ implies _foo suffix
- case ${prev} in
- numeric|letter|suffix|suffix_num) ;;
- *) return 1;;
- esac
-
- case ${c} in
- alpha) ;;
- beta) ;;
- rc) ;;
- pre) ;;
- p) ;;
- *) return 1;;
- esac
- prev=suffix
- elif [[ ${s} == - ]]; then
- # - implies revision
- case ${prev} in
- numeric|letter|suffix|suffix_num) ;;
- *) return 1;;
- esac
-
- [[ ${c} == r ]] || return 1
- prev=revision
- else
- return 1
- fi
-
- shift 2
- done
-
- # empty version string?
- [[ ${prev} != start ]] || return 1
-
- return 0
-}
-
# @FUNCTION: ver_test
# @USAGE: [<v1>] <op> <v2>
# @DESCRIPTION:
@@ -280,6 +205,10 @@ ver_test() {
*) die "${FUNCNAME}: invalid operator: ${op}" ;;
esac
+ local
re="^[0-9]+(\.[0-9]+)*[a-z]?((_alpha|_beta|_pre|_rc|_p)[0-9]*)*(-r[0-9]+)?$"
+ [[ ${va} =~ ${re} ]] || die "${FUNCNAME}: invalid version: ${va}"
+ [[ ${vb} =~ ${re} ]] || die "${FUNCNAME}: invalid version: ${vb}"
+
# explicitly strip -r0[00000...] to avoid overcomplexifying the algo
[[ ${va} == *-r0* && 10#${va#*-r} -eq 0 ]] && va=${va%-r*}
[[ ${vb} == *-r0* && 10#${vb#*-r} -eq 0 ]] && vb=${vb%-r*}
@@ -289,9 +218,6 @@ ver_test() {
compb=( "${comp[@]}" )
_ver_split "${va}"
- _ver_validate "${comp[@]}" || die "${FUNCNAME}: invalid version: ${va}"
- _ver_validate "${compb[@]}" || die "${FUNCNAME}: invalid version: ${vb}"
-
local i sa sb ca cb wa wb result=0
for (( i = 0;; i += 2 )); do
sa=${comp[i]}