From 420e2996bc572e41c78dec5e3762089fbbb551f9 Mon Sep 17 00:00:00 2001 From: Guido Günther Date: Wed, 16 Nov 2016 14:12:17 +0100 Subject: DebianGitRepository: Handle dot escaping as specified in DEP-14 Closes: #843840 --- gbp/deb/git.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/gbp/deb/git.py b/gbp/deb/git.py index 5f4cdf4f..80fb23b7 100644 --- a/gbp/deb/git.py +++ b/gbp/deb/git.py @@ -169,6 +169,8 @@ class DebianGitRepository(GitRepository): def _sanitize_version(version): """sanitize a version so git accepts it as a tag + as descirbed in DEP14 + >>> DebianGitRepository._sanitize_version("0.0.0") '0.0.0' >>> DebianGitRepository._sanitize_version("0.0~0") @@ -177,17 +179,26 @@ class DebianGitRepository(GitRepository): '0%0.0' >>> DebianGitRepository._sanitize_version("0%0~0") '0%0_0' + >>> DebianGitRepository._sanitize_version("0....0") + '0.#.#.#.0' + >>> DebianGitRepository._sanitize_version("0.lock") + '0.#lock' """ - return version.replace('~', '_').replace(':', '%') + v = re.sub('\.(?=\.|$|lock$)', '.#', version) + return v.replace('~', '_').replace(':', '%') @staticmethod def _unsanitize_version(tag): """Reverse _sanitize_version + as descirbed in DEP14 + >>> DebianGitRepository._unsanitize_version("1%0_bpo3") '1:0~bpo3' + >>> DebianGitRepository._unsanitize_version("1%0_bpo3.#.") + '1:0~bpo3..' """ - return tag.replace('_', '~').replace('%', ':') + return tag.replace('_', '~').replace('%', ':').replace('#', '') @staticmethod def tag_to_version(tag, format): -- cgit v1.2.3