From 94224984cb4a240231544a489529ce6156a7421a Mon Sep 17 00:00:00 2001 From: Cooper Stimson Date: Sat, 21 Jan 2017 12:35:27 -0800 Subject: [PATCH 1/5] Create test for next_version method. --- semantic_version/base.py | 3 +++ tests/test_base.py | 44 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/semantic_version/base.py b/semantic_version/base.py index 61d0f6a..e980b32 100644 --- a/semantic_version/base.py +++ b/semantic_version/base.py @@ -11,6 +11,9 @@ from .compat import base_cmp +MAJOR, MINOR, PATCH = 'major', 'minor', 'patch' + + def _to_int(value): try: return int(value), True diff --git a/tests/test_base.py b/tests/test_base.py index a1255c3..34030d8 100755 --- a/tests/test_base.py +++ b/tests/test_base.py @@ -393,6 +393,50 @@ def test_bump_prerelease_versions(self): self.assertEqual(v.prerelease, ()) self.assertEqual(v.build, ()) + def test_bump_version(self): + + v = base.Version('1.0.0+build') + self.assertEqual(v.next_major(), v.next_version(base.MAJOR)) + v = base.Version('1.0.0+build') + self.assertEqual(v.next_minor(), v.next_version(base.MINOR)) + v = base.Version('1.0.0+build') + self.assertEqual(v.next_patch(), v.next_version(base.PATCH)) + + v = base.Version('1.1.0+build') + self.assertEqual(v.next_major(), v.next_version(base.MAJOR)) + v = base.Version('1.1.0+build') + self.assertEqual(v.next_minor(), v.next_version(base.MINOR)) + v = base.Version('1.1.0+build') + self.assertEqual(v.next_patch(), v.next_version(base.PATCH)) + + v = base.Version('1.0.1+build') + self.assertEqual(v.next_major(), v.next_version(base.MAJOR)) + v = base.Version('1.0.1+build') + self.assertEqual(v.next_minor(), v.next_version(base.MINOR)) + v = base.Version('1.0.1+build') + self.assertEqual(v.next_patch(), v.next_version(base.PATCH)) + + v = base.Version('1.0.0-pre+build') + self.assertEqual(v.next_major(), v.next_version(base.MAJOR)) + v = base.Version('1.0.0-pre+build') + self.assertEqual(v.next_minor(), v.next_version(base.MINOR)) + v = base.Version('1.0.0-pre+build') + self.assertEqual(v.next_patch(), v.next_version(base.PATCH)) + + v = base.Version('1.1.0-pre+build') + self.assertEqual(v.next_major(), v.next_version(base.MAJOR)) + v = base.Version('1.1.0-pre+build') + self.assertEqual(v.next_minor(), v.next_version(base.MINOR)) + v = base.Version('1.1.0-pre+build') + self.assertEqual(v.next_patch(), v.next_version(base.PATCH)) + + v = base.Version('1.0.1-pre+build') + self.assertEqual(v.next_major(), v.next_version(base.MAJOR)) + v = base.Version('1.0.1-pre+build') + self.assertEqual(v.next_minor(), v.next_version(base.MINOR)) + v = base.Version('1.0.1-pre+build') + self.assertEqual(v.next_patch(), v.next_version(base.PATCH)) + class SpecItemTestCase(unittest.TestCase): invalids = [ From 4fe4fbef60f7eba2c71914ecf053d24956b4fc2a Mon Sep 17 00:00:00 2001 From: Cooper Stimson Date: Sat, 21 Jan 2017 12:36:37 -0800 Subject: [PATCH 2/5] Add base.Version.next_version convenience method. --- semantic_version/base.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/semantic_version/base.py b/semantic_version/base.py index e980b32..5a68b2f 100644 --- a/semantic_version/base.py +++ b/semantic_version/base.py @@ -113,6 +113,15 @@ def next_patch(self): return Version( '.'.join(str(x) for x in [self.major, self.minor, self.patch + 1])) + def next_version(self, version_level): + """Increment the given version level""" + if version_level not in (MAJOR, MINOR, PATCH): + raise ValueError( + 'Version level must be one of {}, {} or {}' + .format(MAJOR, MINOR, PATCH) + ) + return getattr(self, 'next_{}'.format(version_level))() + @classmethod def coerce(cls, version_string, partial=False): """Coerce an arbitrary version string into a semver-compatible one. From d311be84b241ea75bb328885dc182bf77654a580 Mon Sep 17 00:00:00 2001 From: Cooper Stimson Date: Sat, 21 Jan 2017 12:36:55 -0800 Subject: [PATCH 3/5] Update README. --- README.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.rst b/README.rst index c1d97d2..d1419e6 100644 --- a/README.rst +++ b/README.rst @@ -138,6 +138,15 @@ You can also get a new version that represents a bump in one of the version leve >>> str(new_v) '1.1.2' +A parameterized convenience wrapper is available: + +.. code-block:: pycon + + >>> v = semantic_version.Version('1.1.1-pre+build') + >>> new_v = v.next_version('minor') + >>> str(new_v) + '1.2.0' + It is also possible to check whether a given string is a proper semantic version string: From 369bce2dc64f3b1a9c922d2d39cc5d143adb5c02 Mon Sep 17 00:00:00 2001 From: Cooper Stimson Date: Sat, 21 Jan 2017 12:39:34 -0800 Subject: [PATCH 4/5] Alphabetize contributors. --- CREDITS | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CREDITS b/CREDITS index ca9a781..ea3e918 100644 --- a/CREDITS +++ b/CREDITS @@ -18,12 +18,12 @@ Contributors The project has received contributions from (in alphabetical order): * Raphaƫl Barrois (https://github.com/rbarrois) +* Martin Ek (https://github.com/ekmartin) * Rick Eyre (https://github.com/rickeyre) -* Hugo Rodger-Brown (https://github.com/yunojuno) +* Dave Hall (https://github.com/skwashd) * Michael Hrivnak (https://github.com/mhrivnak) * William Minchin (https://github.com/minchinweb) -* Dave Hall (https://github.com/skwashd) -* Martin Ek (https://github.com/ekmartin) +* Hugo Rodger-Brown (https://github.com/yunojuno) Contributor license agreement From e5ecc3312f1ff4d6a687b2e058c8e9c7447bd33a Mon Sep 17 00:00:00 2001 From: Cooper Stimson Date: Sat, 21 Jan 2017 12:40:26 -0800 Subject: [PATCH 5/5] Sign contributor license agreement. --- CREDITS | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS b/CREDITS index ea3e918..258ea2b 100644 --- a/CREDITS +++ b/CREDITS @@ -24,6 +24,7 @@ The project has received contributions from (in alphabetical order): * Michael Hrivnak (https://github.com/mhrivnak) * William Minchin (https://github.com/minchinweb) * Hugo Rodger-Brown (https://github.com/yunojuno) +* Cooper Stimson (https://github.com/6c1) Contributor license agreement