Commit 17a8eec2 by Sébastien Eustace

Fix version parsing for 4 digits versions and post releases

parent 25953510
...@@ -2,8 +2,8 @@ import re ...@@ -2,8 +2,8 @@ import re
MODIFIERS = ( MODIFIERS = (
'[._-]?' '[._-]?'
'((?:beta|b|c|pre|RC|alpha|a|patch|pl|p|dev)(?:(?:[.-]?\d+)*)?)?' '((?!post)(?:beta|b|c|pre|RC|alpha|a|patch|pl|p|dev)(?:(?:[.-]?\d+)*)?)?'
'((?:[+-]|post)?([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?' '([+-]?([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?'
) )
_COMPLETE_VERSION = 'v?(\d+)(?:\.(\d+))?(?:\.(\d+))?{}(?:\+[^\s]+)?'.format(MODIFIERS) _COMPLETE_VERSION = 'v?(\d+)(?:\.(\d+))?(?:\.(\d+))?{}(?:\+[^\s]+)?'.format(MODIFIERS)
......
...@@ -50,6 +50,8 @@ class Version(VersionRange): ...@@ -50,6 +50,8 @@ class Version(VersionRange):
if pre is not None: if pre is not None:
self._prerelease = self._split_parts(pre) self._prerelease = self._split_parts(pre)
build = self._normalize_build(build)
self._build = [] self._build = []
if build is not None: if build is not None:
if build.startswith(('-', '+')): if build.startswith(('-', '+')):
...@@ -253,6 +255,21 @@ class Version(VersionRange): ...@@ -253,6 +255,21 @@ class Version(VersionRange):
return '{}.{}'.format(modifier, number) return '{}.{}'.format(modifier, number)
def _normalize_build(self, build): # type: (str) -> str
if not build:
return
if build == '0':
return
if build.startswith('post'):
build = build.lstrip('post')
if not build:
return
return build
def _split_parts(self, text): # type: (str) -> List[Union[str, int]] def _split_parts(self, text): # type: (str) -> List[Union[str, int]]
parts = text.split('.') parts = text.split('.')
......
...@@ -18,12 +18,16 @@ from poetry.semver import VersionRange ...@@ -18,12 +18,16 @@ from poetry.semver import VersionRange
('1.0.0-beta.1', Version(1, 0, 0, 'beta1')), ('1.0.0-beta.1', Version(1, 0, 0, 'beta1')),
('1.0.0+1', Version(1, 0, 0, None, '1')), ('1.0.0+1', Version(1, 0, 0, None, '1')),
('1.0.0-1', Version(1, 0, 0, None, '1')), ('1.0.0-1', Version(1, 0, 0, None, '1')),
('1.0.0.0', Version(1, 0, 0)),
('1.0.0-post', Version(1, 0, 0)),
('1.0.0-post1', Version(1, 0, 0, None, '1')),
('0.6c', Version(0, 6, 0, 'rc0')), ('0.6c', Version(0, 6, 0, 'rc0')),
('0.6pre', Version(0, 6, 0, 'rc0')), ('0.6pre', Version(0, 6, 0, 'rc0')),
] ]
) )
def test_parse_valid(input, version): def test_parse_valid(input, version):
parsed = Version.parse(input) parsed = Version.parse(input)
print(parsed.build)
assert parsed == version assert parsed == version
assert parsed.text == input assert parsed.text == input
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment