summaryrefslogtreecommitdiff
path: root/gbp
diff options
context:
space:
mode:
authorMarkus Lehtonen <markus.lehtonen@linux.intel.com>2012-04-23 12:51:08 +0300
committerTzafrir Cohen <tzafrir@debian.org>2014-12-24 19:02:22 +0200
commite79f2ca2aa4da6cf65a9c5bbeee4e0a3b4b4dd06 (patch)
tree295cd10a78f0fcce2f8a61cf5e4225a878116c71 /gbp
parent8413e2fccb03d65f440511860846dfc446a77121 (diff)
rpm: add version parsing functions to pkg policy
Adds functions for version string generation and parsing. These are intended for parsing version strings taken e.g. from rpm filename or changelogs. Also, take these new version parsing functions into use in the rpm gbp scripts. Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com> Signed-off-by: Ed Bartosh <eduard.bartosh@intel.com> Left only the changes in policy.py itself, Signed-off-by: Tzafrir Cohen <tzafrir@debian.org>
Diffstat (limited to 'gbp')
-rw-r--r--gbp/rpm/policy.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/gbp/rpm/policy.py b/gbp/rpm/policy.py
index f8cb863..5818fcd 100644
--- a/gbp/rpm/policy.py
+++ b/gbp/rpm/policy.py
@@ -70,3 +70,73 @@ class RpmPkgPolicy(PkgPolicy):
return True
return False
+ @classmethod
+ def split_full_version(cls, version):
+ """
+ Parse full version string and split it into individual "version
+ components", i.e. upstreamversion, epoch and release
+
+ @param version: full version of a package
+ @type version: C{str}
+ @return: individual version components
+ @rtype: C{dict}
+
+ >>> RpmPkgPolicy.split_full_version("1")
+ {'release': None, 'epoch': None, 'upstreamversion': '1'}
+ >>> RpmPkgPolicy.split_full_version("1.2.3-5.3")
+ {'release': '5.3', 'epoch': None, 'upstreamversion': '1.2.3'}
+ >>> RpmPkgPolicy.split_full_version("3:1.2.3")
+ {'release': None, 'epoch': '3', 'upstreamversion': '1.2.3'}
+ >>> RpmPkgPolicy.split_full_version("3:1-0")
+ {'release': '0', 'epoch': '3', 'upstreamversion': '1'}
+ """
+ epoch = None
+ upstreamversion = None
+ release = None
+
+ e_vr = version.split(":", 1)
+ if len(e_vr) == 1:
+ v_r = e_vr[0].split("-", 1)
+ else:
+ epoch = e_vr[0]
+ v_r = e_vr[1].split("-", 1)
+ upstreamversion = v_r[0]
+ if len(v_r) > 1:
+ release = v_r[1]
+
+ return {'epoch': epoch,
+ 'upstreamversion': upstreamversion,
+ 'release': release}
+
+ @classmethod
+ def compose_full_version(cls, evr):
+ """
+ Compose a full version string from individual "version components",
+ i.e. epoch, version and release
+
+ @param evr: dict of version components
+ @type evr: C{dict} of C{str}
+ @return: full version
+ @rtype: C{str}
+
+ >>> RpmPkgPolicy.compose_full_version({'epoch': '', 'upstreamversion': '1.0'})
+ '1.0'
+ >>> RpmPkgPolicy.compose_full_version({'epoch': '2', 'upstreamversion': '1.0', 'release': None})
+ '2:1.0'
+ >>> RpmPkgPolicy.compose_full_version({'epoch': None, 'upstreamversion': '1', 'release': '0'})
+ '1-0'
+ >>> RpmPkgPolicy.compose_full_version({'epoch': '2', 'upstreamversion': '1.0', 'release': '2.3'})
+ '2:1.0-2.3'
+ >>> RpmPkgPolicy.compose_full_version({'epoch': '2', 'upstreamversion': '', 'release': '2.3'})
+ """
+ if 'upstreamversion' in evr and evr['upstreamversion']:
+ version = ""
+ if 'epoch' in evr and evr['epoch']:
+ version += "%s:" % evr['epoch']
+ version += evr['upstreamversion']
+ if 'release' in evr and evr['release']:
+ version += "-%s" % evr['release']
+ if version:
+ return version
+ return None
+