diff options
-rw-r--r-- | CREDITS | 1 | ||||
-rw-r--r-- | README.rst | 16 | ||||
-rw-r--r-- | semantic_version/base.py | 11 | ||||
-rwxr-xr-x | tests/test_base.py | 28 |
4 files changed, 56 insertions, 0 deletions
@@ -19,6 +19,7 @@ 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) Contributor license agreement @@ -107,6 +107,22 @@ Obviously, :class:`Versions <Version>` can be compared: >>> semantic_version.Version('0.1.1') <= semantic_version.Version('0.1.1-alpha') False +You can also get a new version that represents a bump in one of the version levels: + +.. code-block:: pycon + + >>> v = semantic_version.Version('0.1.1-pre+build') + >>> new_v = v.next_major() + >>> str(new_v) + '1.0.0' + >>> v = semantic_version.Version('1.1.1-pre+build') + >>> new_v = v.next_minor() + >>> str(new_v) + '1.2.0' + >>> v = semantic_version.Version('1.1.1-pre+build') + >>> new_v = v.next_patch() + >>> str(new_v) + '1.1.2' It is also possible to check whether a given string is a proper semantic version string: diff --git a/semantic_version/base.py b/semantic_version/base.py index b56fcee..841c5f3 100644 --- a/semantic_version/base.py +++ b/semantic_version/base.py @@ -88,6 +88,17 @@ class Version(object): return value return int(value) + def next_major(self): + 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])) + + def next_patch(self): + return Version( + '.'.join(str(x) for x in [self.major, self.minor, self.patch + 1])) + @classmethod def coerce(cls, version_string, partial=False): """Coerce an arbitrary version string into a semver-compatible one. diff --git a/tests/test_base.py b/tests/test_base.py index f482140..df5d4ee 100755 --- a/tests/test_base.py +++ b/tests/test_base.py @@ -242,6 +242,34 @@ class VersionTestCase(unittest.TestCase): self.assertTrue(v != '0.1.0') self.assertFalse(v == '0.1.0') + def test_bump_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, 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.1.0-pre+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, ()) + class SpecItemTestCase(unittest.TestCase): components = { |