Merge branch 'bump-version-2' of https://github.com/MinchinWeb/python-semanticversion into MinchinWeb-bump-version-2

This commit is contained in:
Raphaël Barrois 2016-02-12 00:41:09 +01:00
commit c321d091d9
4 changed files with 145 additions and 9 deletions

View File

@ -18,9 +18,10 @@ Contributors
The project has received contributions from (in alphabetical order):
* Raphaël Barrois <raphael.barrois+semver@polytechnique.org> (https://github.com/rbarrois)
* Michael Hrivnak <mhrivnak@hrivnak.org> (https://github.com/mhrivnak)
* Rick Eyre <rick.eyre@outlook.com> (https://github.com/rickeyre)
* Hugo Rodger-Brown <hugo@yunojuno.com> (https://github.com/yunojuno)
* Michael Hrivnak <mhrivnak@hrivnak.org> (https://github.com/mhrivnak)
* William Minchin <w_minchin@hotmail.com> (https://github.com/minchinweb)
Contributor license agreement

View File

@ -31,6 +31,8 @@ ChangeLog
parameters differ only by build metadata
* ``Spec('<=1.3.0')`` now matches ``Version('1.3.0+abde24fe883')``
* `#24 <https://github.com/rbarrois/python-semanticversion/issues/24>`_: Fix handling of bumping pre-release versions, thanks to @minchinweb.
2.4.2 (2015-07-02)
------------------

View File

@ -89,15 +89,24 @@ class Version(object):
return int(value)
def next_major(self):
return Version('.'.join(str(x) for x in [self.major + 1, 0, 0]))
if self.prerelease and self.minor is 0 and self.patch is 0:
return Version('.'.join(str(x) for x in [self.major, self.minor, self.patch]))
else:
return Version('.'.join(str(x) for x in [self.major + 1, 0, 0]))
def next_minor(self):
return Version(
'.'.join(str(x) for x in [self.major, self.minor + 1, 0]))
if self.prerelease and self.patch is 0:
return Version('.'.join(str(x) for x in [self.major, self.minor, self.patch]))
else:
return Version(
'.'.join(str(x) for x in [self.major, self.minor + 1, 0]))
def next_patch(self):
return Version(
'.'.join(str(x) for x in [self.major, self.minor, self.patch + 1]))
if self.prerelease:
return Version('.'.join(str(x) for x in [self.major, self.minor, self.patch]))
else:
return Version(
'.'.join(str(x) for x in [self.major, self.minor, self.patch + 1]))
@classmethod
def coerce(cls, version_string, partial=False):

View File

@ -241,12 +241,136 @@ class VersionTestCase(unittest.TestCase):
self.assertTrue(v != '0.1.0')
self.assertFalse(v == '0.1.0')
def test_bump_versions(self):
def test_bump_clean_versions(self):
# We Test each property explicitly as the == comparator for versions
# does not distinguish between prerelease or builds for equality.
v = base.Version('1.0.0+build')
v = v.next_major()
self.assertEqual(v.major, 2)
self.assertEqual(v.minor, 0)
self.assertEqual(v.patch, 0)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
v = base.Version('1.0.0+build')
v = v.next_minor()
self.assertEqual(v.major, 1)
self.assertEqual(v.minor, 1)
self.assertEqual(v.patch, 0)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
v = base.Version('1.0.0+build')
v = v.next_patch()
self.assertEqual(v.major, 1)
self.assertEqual(v.minor, 0)
self.assertEqual(v.patch, 1)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
v = base.Version('1.1.0+build')
v = v.next_major()
self.assertEqual(v.major, 2)
self.assertEqual(v.minor, 0)
self.assertEqual(v.patch, 0)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
v = base.Version('1.1.0+build')
v = v.next_minor()
self.assertEqual(v.major, 1)
self.assertEqual(v.minor, 2)
self.assertEqual(v.patch, 0)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
v = base.Version('1.1.0+build')
v = v.next_patch()
self.assertEqual(v.major, 1)
self.assertEqual(v.minor, 1)
self.assertEqual(v.patch, 1)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
v = base.Version('1.0.1+build')
v = v.next_major()
self.assertEqual(v.major, 2)
self.assertEqual(v.minor, 0)
self.assertEqual(v.patch, 0)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
v = base.Version('1.0.1+build')
v = v.next_minor()
self.assertEqual(v.major, 1)
self.assertEqual(v.minor, 1)
self.assertEqual(v.patch, 0)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
v = base.Version('1.0.1+build')
v = v.next_patch()
self.assertEqual(v.major, 1)
self.assertEqual(v.minor, 0)
self.assertEqual(v.patch, 2)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
def test_bump_prerelease_versions(self):
# We Test each property explicitly as the == comparator for versions
# does not distinguish between prerelease or builds for equality.
v = base.Version('1.0.0-pre+build')
v = v.next_major()
self.assertEqual(v.major, 1)
self.assertEqual(v.minor, 0)
self.assertEqual(v.patch, 0)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
v = base.Version('1.0.0-pre+build')
v = v.next_minor()
self.assertEqual(v.major, 1)
self.assertEqual(v.minor, 0)
self.assertEqual(v.patch, 0)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
v = base.Version('1.0.0-pre+build')
v = v.next_patch()
self.assertEqual(v.major, 1)
self.assertEqual(v.minor, 0)
self.assertEqual(v.patch, 0)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
v = base.Version('1.1.0-pre+build')
v = v.next_major()
self.assertEqual(v.major, 2)
self.assertEqual(v.minor, 0)
self.assertEqual(v.patch, 0)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
v = base.Version('1.1.0-pre+build')
v = v.next_minor()
self.assertEqual(v.major, 1)
self.assertEqual(v.minor, 1)
self.assertEqual(v.patch, 0)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
v = base.Version('1.1.0-pre+build')
v = v.next_patch()
self.assertEqual(v.major, 1)
self.assertEqual(v.minor, 1)
self.assertEqual(v.patch, 0)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
v = base.Version('1.0.1-pre+build')
v = v.next_major()
self.assertEqual(v.major, 2)
self.assertEqual(v.minor, 0)
self.assertEqual(v.patch, 0)
@ -261,10 +385,10 @@ class VersionTestCase(unittest.TestCase):
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())
v = base.Version('1.1.0-pre+build')
v = base.Version('1.0.1-pre+build')
v = v.next_patch()
self.assertEqual(v.major, 1)
self.assertEqual(v.minor, 1)
self.assertEqual(v.minor, 0)
self.assertEqual(v.patch, 1)
self.assertEqual(v.prerelease, ())
self.assertEqual(v.build, ())