summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author0dminnimda <0dminnimda@gmail.com>2023-01-11 00:25:15 +0300
committerGitHub <noreply@github.com>2023-01-10 22:25:15 +0100
commit17fa2640293ac264788a404efc9441afff5129d7 (patch)
tree0c8fd06cd651fd9467ad7af4fd95117ddbee75ee
parent069794816423948a3dd7cc3365cf969d44fc9326 (diff)
downloadcython-17fa2640293ac264788a404efc9441afff5129d7.tar.gz
Clean up `build_hex_version` (GH-5209)
-rw-r--r--Cython/Utils.py22
1 files changed, 13 insertions, 9 deletions
diff --git a/Cython/Utils.py b/Cython/Utils.py
index 0f4a636f1..e7d26f5bf 100644
--- a/Cython/Utils.py
+++ b/Cython/Utils.py
@@ -611,19 +611,23 @@ def raise_error_if_module_name_forbidden(full_module_name):
def build_hex_version(version_string):
"""
- Parse and translate '4.3a1' into the readable hex representation '0x040300A1' (like PY_VERSION_HEX).
+ Parse and translate public version identifier like '4.3a1' into the readable hex representation '0x040300A1' (like PY_VERSION_HEX).
+
+ SEE: https://peps.python.org/pep-0440/#public-version-identifiers
"""
- # First, parse '4.12a1' into [4, 12, 0, 0xA01].
+ # Parse '4.12a1' into [4, 12, 0, 0xA01]
+ # And ignore .dev, .pre and .post segments
digits = []
release_status = 0xF0
- for digit in re.split('(\D+)', version_string):
- if digit in ('a', 'b', 'rc'):
- release_status = {'a': 0xA0, 'b': 0xB0, 'rc': 0xC0}[digit]
+ for segment in re.split(r'(\D+)', version_string):
+ if segment in ('a', 'b', 'rc'):
+ release_status = {'a': 0xA0, 'b': 0xB0, 'rc': 0xC0}[segment]
digits = (digits + [0, 0])[:3] # 1.2a1 -> 1.2.0a1
- elif digit in ('.dev', '.pre', '.post'):
- break # ignore '.dev0' / '.post0' in hex version
- elif digit != '.':
- digits.append(int(digit))
+ elif segment in ('.dev', '.pre', '.post'):
+ break # break since those are the last segments
+ elif segment != '.':
+ digits.append(int(segment))
+
digits = (digits + [0] * 3)[:4]
digits[3] += release_status