From 98e83c4361211bd745eae4a17905d562f86eaed7 Mon Sep 17 00:00:00 2001
From: Ben Finney <ben+python@benfinney.id.au>
Date: Tue, 18 Oct 2016 23:59:54 +1100
Subject: [PATCH 1/4] =?UTF-8?q?Add=20documentation=20examples=20for=20?=
 =?UTF-8?q?=E2=80=98semver.parse=E2=80=99.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.rst | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/README.rst b/README.rst
index 1073910..a9c9eab 100644
--- a/README.rst
+++ b/README.rst
@@ -43,6 +43,11 @@ This module provides just couple of functions, main of which are:
     False
     >>> semver.format_version(3, 4, 5, 'pre.2', 'build.4')
     '3.4.5-pre.2+build.4'
+    >>> version_parts = semver.parse("3.4.5-pre.2+build.4")
+    >>> version_parts == {
+    ...     'major': 3, 'minor': 4, 'patch': 5,
+    ...     'prerelease': 'pre.2', 'build': 'build.4'}
+    True
     >>> semver.bump_major("3.4.5")
     '4.0.0'
     >>> semver.bump_minor("3.4.5")

From 94b478badf70b01ef02411b435278f9cf86e010e Mon Sep 17 00:00:00 2001
From: Ben Finney <ben+python@benfinney.id.au>
Date: Wed, 19 Oct 2016 00:00:21 +1100
Subject: [PATCH 2/4] Rename version parts binding for clarity.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The “version info” meaning already conventionally means the tuple of
version components, like ‘sys.version_info’. Rename the mapping to avoid
this meaning.
---
 semver.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/semver.py b/semver.py
index ead1628..7baf57a 100644
--- a/semver.py
+++ b/semver.py
@@ -28,13 +28,13 @@ def parse(version):
     if match is None:
         raise ValueError('%s is not valid SemVer string' % version)
 
-    verinfo = match.groupdict()
+    version_parts = match.groupdict()
 
-    verinfo['major'] = int(verinfo['major'])
-    verinfo['minor'] = int(verinfo['minor'])
-    verinfo['patch'] = int(verinfo['patch'])
+    version_parts['major'] = int(version_parts['major'])
+    version_parts['minor'] = int(version_parts['minor'])
+    version_parts['patch'] = int(version_parts['patch'])
 
-    return verinfo
+    return version_parts
 
 
 def compare(ver1, ver2):

From 6f95ca74d5dfac4b9c6586c674789c4268028720 Mon Sep 17 00:00:00 2001
From: Ben Finney <ben+python@benfinney.id.au>
Date: Wed, 19 Oct 2016 00:03:01 +1100
Subject: [PATCH 3/4] Add a function to parse a version string to a version
 info tuple.

---
 README.rst |  9 +++++++++
 semver.py  | 18 ++++++++++++++++++
 2 files changed, 27 insertions(+)

diff --git a/README.rst b/README.rst
index a9c9eab..ecc95e1 100644
--- a/README.rst
+++ b/README.rst
@@ -48,6 +48,15 @@ This module provides just couple of functions, main of which are:
     ...     'major': 3, 'minor': 4, 'patch': 5,
     ...     'prerelease': 'pre.2', 'build': 'build.4'}
     True
+    >>> version_info = semver.parse_version_info("3.4.5-pre.2+build.4")
+    >>> version_info
+    VersionInfo(major=3, minor=4, patch=5, prerelease='pre.2', build='build.4')
+    >>> version_info.major
+    3
+    >>> version_info > (1, 0)
+    True
+    >>> version_info < (3, 5)
+    True
     >>> semver.bump_major("3.4.5")
     '4.0.0'
     >>> semver.bump_minor("3.4.5")
diff --git a/semver.py b/semver.py
index 7baf57a..d9d9950 100644
--- a/semver.py
+++ b/semver.py
@@ -1,8 +1,11 @@
 """
 Python helper for Semantic Versioning (http://semver.org/)
 """
+
+import collections
 import re
 
+
 __version__ = '2.6.0'
 __author__ = 'Konstantine Rybnikov'
 __author_email__ = 'k-bx@k-bx.com'
@@ -37,6 +40,21 @@ def parse(version):
     return version_parts
 
 
+VersionInfo = collections.namedtuple(
+        'VersionInfo', 'major minor patch prerelease build')
+
+def parse_version_info(version):
+    """
+    Parse version string to a VersionInfo instance.
+    """
+    parts = parse(version)
+    version_info = VersionInfo(
+            parts['major'], parts['minor'], parts['patch'],
+            parts['prerelease'], parts['build'])
+
+    return version_info
+
+
 def compare(ver1, ver2):
     def nat_cmp(a, b):
         def convert(text):

From fbeef3845f23eb036e6fa5df4a7a30159e6ff5d4 Mon Sep 17 00:00:00 2001
From: Ben Finney <ben+python@benfinney.id.au>
Date: Wed, 19 Oct 2016 00:04:55 +1100
Subject: [PATCH 4/4] Document the new feature in the change log.

---
 CHANGELOG | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/CHANGELOG b/CHANGELOG
index 6164bf2..2603dd4 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -9,6 +9,19 @@ All notable changes to this code base will be documented in this file,
 in every released version.
 
 
+Version NEXT
+============
+
+:Released: FUTURE
+:Maintainer: UNKNOWN <unknown>
+
+Additions
+---------
+
+* Add ‘parse_version_info’ to parse a version string to a version info
+  tuple.
+
+
 Version 2.6.0
 =============