diff options
author | Guido Günther <agx@sigxcpu.org> | 2016-11-16 14:12:22 +0100 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2016-11-16 14:12:22 +0100 |
commit | 7ed5e2b5ffbaf8dec310f98162e653fc95cd45f9 (patch) | |
tree | f59b00da4d654ac10abfa159893cb5c16f861aac /gbp/deb | |
parent | 25a5d679daf6ca90e03fe3bede787396fc630687 (diff) |
DebianGitRepository: Unmangle version
When mapping from a git tag to a Debian version unamngle it.
Diffstat (limited to 'gbp/deb')
-rw-r--r-- | gbp/deb/git.py | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/gbp/deb/git.py b/gbp/deb/git.py index 418d3b35..23d3ee7e 100644 --- a/gbp/deb/git.py +++ b/gbp/deb/git.py @@ -169,6 +169,9 @@ class DebianGitRepository(GitRepository): def _mangle_version(cls, format, version): """ Basic version mangling to replce single characters + + >>> DebianGitRepository._mangle_version("%(version%-%\%)s", "0-1.2.3") + ('%(version)s', '0%1.2.3') """ r = re.search(cls.version_mangle_re, format) if r: @@ -178,6 +181,29 @@ class DebianGitRepository(GitRepository): else: return format, version + @classmethod + def _unmangle_format(cls, format): + """ + Reverse of _mangle_version for format + """ + r = re.search(cls.version_mangle_re, format) + if r: + return re.sub(cls.version_mangle_re, "%(version)s", format) + else: + return format + + @classmethod + def _unmangle_version(cls, format, tag): + """ + Reverse of _mangle_version for version + """ + r = re.search(cls.version_mangle_re, format) + if r: + v = tag.replace(r.group('R').replace('\%', '%'), r.group('M')) + return v + else: + return tag + @staticmethod def _sanitize_version(version): """sanitize a version so git accepts it as a tag @@ -213,21 +239,26 @@ class DebianGitRepository(GitRepository): """ return tag.replace('_', '~').replace('%', ':').replace('#', '') - @staticmethod - def tag_to_version(tag, format): + @classmethod + def tag_to_version(cls, tag, format): """Extract the version from a tag >>> DebianGitRepository.tag_to_version("upstream/1%2_3-4", "upstream/%(version)s") '1:2~3-4' >>> DebianGitRepository.tag_to_version("foo/2.3.4", "foo/%(version)s") '2.3.4' + >>> DebianGitRepository.tag_to_version("v1-2-3", "v%(version%.%-)s") + '1.2.3' + >>> DebianGitRepository.tag_to_version("v1.#.2", "v%(version%.%-)s") + '1..2' >>> DebianGitRepository.tag_to_version("foo/2.3.4", "upstream/%(version)s") """ - version_re = format.replace('%(version)s', - '(?P<version>[\w_%+-.]+)') + f = cls._unmangle_format(format) + version_re = f.replace('%(version)s', '(?P<version>[\w_%+-.#]+)') r = re.match(version_re, tag) if r: - return DebianGitRepository._unsanitize_version(r.group('version')) + v = cls._unsanitize_version(r.group('version')) + return cls._unmangle_version(format, v) return None @property |