diff options
author | Raphaël Barrois <raphael.barrois@polytechnique.org> | 2016-02-12 00:41:09 +0100 |
---|---|---|
committer | Raphaël Barrois <raphael.barrois@polytechnique.org> | 2016-02-12 00:41:09 +0100 |
commit | c321d091d9754bc0d3692864f6f1e594136ef429 (patch) | |
tree | f55f61c25fc08ba61f970c08d2402e66e11a6426 | |
parent | f74de67a9a476114370292691ac709109269ddbb (diff) | |
parent | 9a1144034f81ffa76b9e00ac9220f8c024dba1ab (diff) | |
download | semantic-version-c321d091d9754bc0d3692864f6f1e594136ef429.tar.gz |
Merge branch 'bump-version-2' of https://github.com/MinchinWeb/python-semanticversion into MinchinWeb-bump-version-2
-rw-r--r-- | CREDITS | 3 | ||||
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | semantic_version/base.py | 19 | ||||
-rwxr-xr-x | tests/test_base.py | 128 |
4 files changed, 144 insertions, 8 deletions
@@ -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 @@ -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) ------------------ diff --git a/semantic_version/base.py b/semantic_version/base.py index 982fcc8..619a113 100644 --- a/semantic_version/base.py +++ b/semantic_version/base.py @@ -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): diff --git a/tests/test_base.py b/tests/test_base.py index ae23d86..6707cef 100755 --- a/tests/test_base.py +++ b/tests/test_base.py @@ -241,19 +241,119 @@ 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.0.1-pre+build') + v = base.Version('1.1.0-pre+build') v = v.next_minor() self.assertEqual(v.major, 1) self.assertEqual(v.minor, 1) @@ -265,6 +365,30 @@ class VersionTestCase(unittest.TestCase): 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) + self.assertEqual(v.prerelease, ()) + self.assertEqual(v.build, ()) + + v = base.Version('1.0.1-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.0.1-pre+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, ()) |