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>2015-03-26 14:27:44 +0200
commit1fccfcab6b3ab0d4e32bd594e9474ca397e69a3b (patch)
tree153dba9fb6db220b0fa78cd70ef7778dd8b13504 /gbp
parent601352fdbecbe96cb9daf0fe4d3838e0addb307c (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
+