Add pmb.parse.version.check_string() (!1796)
Compare a version against a check string. This will be used in "pmbootstrap kconfig check", to only require certain options if the pkgver is in a specified range.
This commit is contained in:
parent
0c3dd46993
commit
22b49fe495
|
@ -284,3 +284,42 @@ def compare(a_version, b_version, fuzzy=False):
|
||||||
# The tokens are not the same, but previous checks revealed that it
|
# The tokens are not the same, but previous checks revealed that it
|
||||||
# is equal anyway (e.g. "1.0" == "1").
|
# is equal anyway (e.g. "1.0" == "1").
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
Convenience functions below are not modeled after apk's version.c.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def check_string(a_version, rule):
|
||||||
|
"""
|
||||||
|
Compare a version against a check string. This is used in "pmbootstrap
|
||||||
|
kconfig check", to only require certain options if the pkgver is in a
|
||||||
|
specified range (#1795).
|
||||||
|
|
||||||
|
:param a_version: "3.4.1"
|
||||||
|
:param rule: ">=1.0.0"
|
||||||
|
:returns: True if a_version matches rule, false otherwise.
|
||||||
|
"""
|
||||||
|
# Operators and the expected returns of compare(a,b)
|
||||||
|
operator_results = {">=": [1, 0],
|
||||||
|
"<": [-1]}
|
||||||
|
|
||||||
|
# Find the operator
|
||||||
|
b_version = None
|
||||||
|
expected_results = None
|
||||||
|
for operator in operator_results:
|
||||||
|
if rule.startswith(operator):
|
||||||
|
b_version = rule[len(operator):]
|
||||||
|
expected_results = operator_results[operator]
|
||||||
|
break
|
||||||
|
|
||||||
|
# No operator found
|
||||||
|
if not b_version:
|
||||||
|
raise RuntimeError("Could not find operator in '" + rule + "'. You"
|
||||||
|
" probably need to adjust check_string() in"
|
||||||
|
" pmb/parse/version.py.")
|
||||||
|
|
||||||
|
# Compare
|
||||||
|
result = compare(a_version, b_version)
|
||||||
|
return result in expected_results
|
||||||
|
|
|
@ -72,3 +72,17 @@ def test_version(args):
|
||||||
for error in errors:
|
for error in errors:
|
||||||
print(error)
|
print(error)
|
||||||
assert errors == []
|
assert errors == []
|
||||||
|
|
||||||
|
|
||||||
|
def test_version_check_string():
|
||||||
|
func = pmb.parse.version.check_string
|
||||||
|
assert func("3.2.4", ">=0.0.0") is True
|
||||||
|
assert func("3.2.4", ">=3.2.4") is True
|
||||||
|
assert func("3.2.4", "<4.0.0") is True
|
||||||
|
|
||||||
|
assert func("0.0.0", ">=0.0.1") is False
|
||||||
|
assert func("4.0.0", "<4.0.0") is False
|
||||||
|
assert func("4.0.1", "<4.0.0") is False
|
||||||
|
|
||||||
|
assert func("5.2.0_rc3", "<5.2.0") is False
|
||||||
|
assert func("5.2.0_rc3", ">=5.2.0") is True
|
||||||
|
|
Loading…
Reference in New Issue