From 1fccfcab6b3ab0d4e32bd594e9474ca397e69a3b Mon Sep 17 00:00:00 2001 From: Markus Lehtonen Date: Mon, 23 Apr 2012 12:51:08 +0300 Subject: 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 Signed-off-by: Ed Bartosh Left only the changes in policy.py itself, Signed-off-by: Tzafrir Cohen --- gbp/rpm/policy.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) 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 + -- cgit v1.2.3