Handle more legacy version numbers
We were not handling 1.2.1a1 or 2.1.0.rc1. Change-Id: I087ff6f0449d528ee86b8e16721d12fd9b231846 Closes-Bug: #1361251
This commit is contained in:
parent
81c2000881
commit
85ba9600b2
|
@ -107,6 +107,31 @@ class TestSemanticVersion(base.BaseTestCase):
|
|||
parsed = from_pip_string('1.2.0rc1')
|
||||
self.assertEqual(expected, parsed)
|
||||
|
||||
def test_from_pip_string_legacy_nonzero_lead_in(self):
|
||||
# reported in bug 1361251
|
||||
expected = version.SemanticVersion(
|
||||
0, 0, 1, prerelease_type='a', prerelease=2)
|
||||
parsed = from_pip_string('0.0.1a2')
|
||||
self.assertEqual(expected, parsed)
|
||||
|
||||
def test_from_pip_string_legacy_short_nonzero_lead_in(self):
|
||||
expected = version.SemanticVersion(
|
||||
0, 1, 0, prerelease_type='a', prerelease=2)
|
||||
parsed = from_pip_string('0.1a2')
|
||||
self.assertEqual(expected, parsed)
|
||||
|
||||
def test_from_pip_string_legacy_no_0_prerelease(self):
|
||||
expected = version.SemanticVersion(
|
||||
2, 1, 0, prerelease_type='rc', prerelease=1)
|
||||
parsed = from_pip_string('2.1.0.rc1')
|
||||
self.assertEqual(expected, parsed)
|
||||
|
||||
def test_from_pip_string_legacy_no_0_prerelease_2(self):
|
||||
expected = version.SemanticVersion(
|
||||
2, 0, 0, prerelease_type='rc', prerelease=1)
|
||||
parsed = from_pip_string('2.0.0.rc1')
|
||||
self.assertEqual(expected, parsed)
|
||||
|
||||
def test_from_pip_string_legacy_non_440_beta(self):
|
||||
expected = version.SemanticVersion(
|
||||
2014, 2, prerelease_type='b', prerelease=2)
|
||||
|
@ -153,6 +178,12 @@ class TestSemanticVersion(base.BaseTestCase):
|
|||
self.assertEqual("1.2.3", semver.rpm_string())
|
||||
self.assertEqual(semver, from_pip_string("1.2.3"))
|
||||
|
||||
def test_parsing_short_forms(self):
|
||||
semver = version.SemanticVersion(1, 0, 0)
|
||||
self.assertEqual(semver, from_pip_string("1"))
|
||||
self.assertEqual(semver, from_pip_string("1.0"))
|
||||
self.assertEqual(semver, from_pip_string("1.0.0"))
|
||||
|
||||
def test_dev_version(self):
|
||||
semver = version.SemanticVersion(1, 2, 4, dev_count=5, githash='12')
|
||||
self.assertEqual((1, 2, 4, 'dev', 4), semver.version_tuple())
|
||||
|
|
|
@ -169,6 +169,16 @@ class SemanticVersion(object):
|
|||
if digit_len == 0:
|
||||
raise ValueError("Invalid version %r" % version_string)
|
||||
elif digit_len < 3:
|
||||
if (digit_len < len(input_components) and
|
||||
input_components[digit_len][0].isdigit()):
|
||||
# Handle X.YaZ - Y is a digit not a leadin to pre-release.
|
||||
mixed_component = input_components[digit_len]
|
||||
last_component = ''.join(itertools.takewhile(
|
||||
lambda x: x.isdigit(), mixed_component))
|
||||
components.append(last_component)
|
||||
input_components[digit_len:digit_len + 1] = [
|
||||
last_component, mixed_component[len(last_component):]]
|
||||
digit_len += 1
|
||||
components.extend([0] * (3 - digit_len))
|
||||
components.extend(input_components[digit_len:])
|
||||
major = int(components[0])
|
||||
|
@ -205,7 +215,7 @@ class SemanticVersion(object):
|
|||
dev_count = int(remainder[0])
|
||||
else:
|
||||
if remainder and (remainder[0][0] == '0' or
|
||||
remainder[0][0] in ('a', 'b', 'rc')):
|
||||
remainder[0][0] in ('a', 'b', 'r')):
|
||||
# Current RC/beta layout
|
||||
prerelease_type, prerelease = _parse_type(remainder[0])
|
||||
remainder = remainder[1:]
|
||||
|
@ -218,7 +228,9 @@ class SemanticVersion(object):
|
|||
dev_count = 1
|
||||
githash = component[1:]
|
||||
else:
|
||||
raise ValueError('Unknown remainder %r' % (remainder,))
|
||||
raise ValueError(
|
||||
'Unknown remainder %r in %r'
|
||||
% (remainder, version_string))
|
||||
if len(remainder) > 1:
|
||||
githash = remainder[1][1:]
|
||||
return SemanticVersion(
|
||||
|
|
Loading…
Reference in New Issue