aboutsummaryrefslogtreecommitdiffhomepage
path: root/gbp
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2010-08-10 17:47:24 +0200
committerGuido Günther <agx@sigxcpu.org>2010-08-10 18:51:23 +0200
commit55fdbc67064a4f236b6d1e3ebc885f40c2c1fc44 (patch)
treecb16fd396deebab4c865703515d99b2219e9f66e /gbp
parent3c6bbd0f4992f8da91693494f1a8980a4152e564 (diff)
Check for legacy tags where necessary.
Diffstat (limited to 'gbp')
-rw-r--r--gbp/git.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/gbp/git.py b/gbp/git.py
index eec7d2ba..b162bc0d 100644
--- a/gbp/git.py
+++ b/gbp/git.py
@@ -93,6 +93,43 @@ class GitRepository(object):
out, ret = self.__git_getoutput('tag', [ '-l', tag ])
return [ False, True ][len(out)]
+
+ def _build_legacy_tag(self, format, version):
+ """legacy version numbering"""
+ if ':' in version: # strip of any epochs
+ version = version.split(':', 1)[1]
+ version = version.replace('~', '.')
+ return format % dict(version=version)
+
+
+ def find_version(self, format, version):
+ """
+ Check if a certain version is stored in this repo. Return it's SHA1 in
+ this case. For legacy tags Don't check only the tag but also the
+ message, since the former wasn't injective until recently.
+ You only need to use this funciton if you also need to check for legacy
+ tags.
+
+ @param pattern: tag pattern
+ @param version: debian version number
+ @return: sha1 of the version tag
+ """
+ tag = build_tag(format, version)
+ legacy_tag = self._build_legacy_tag(format, version)
+ if self.has_tag(tag): # new tags are injective
+ return self.rev_parse(tag)
+ elif self.has_tag(legacy_tag):
+ out, ret = self.__git_getoutput('cat-file', args=['-p', legacy_tag])
+ if ret:
+ return None
+ for line in out:
+ if line.endswith(" %s\n" % version):
+ return self.rev_parse(legacy_tag)
+ elif line.startswith('---'): # GPG signature start
+ return None
+ return None
+
+
def remove_tag(self, tag):
"""remove a tag 'tag'"""
self.__check_path()