Support UCM:Tags <pattern> using git tag -l <pattern>

This commit is contained in:
Daniel Martí 2014-02-10 11:27:28 +01:00
parent 3f0dbe232c
commit 08607a3cd4
3 changed files with 19 additions and 5 deletions

View file

@ -85,7 +85,7 @@ def check_http(app):
# caution, because it's inappropriate for many projects. # caution, because it's inappropriate for many projects.
# Returns (None, "a message") if this didn't work, or (version, vercode) for # Returns (None, "a message") if this didn't work, or (version, vercode) for
# the details of the current version. # the details of the current version.
def check_tags(app): def check_tags(app, pattern):
try: try:
@ -98,6 +98,8 @@ def check_tags(app):
if repotype not in ('git', 'git-svn', 'hg', 'bzr'): if repotype not in ('git', 'git-svn', 'hg', 'bzr'):
return (None, 'Tags update mode only works for git, hg, bzr and git-svn repositories currently', None) return (None, 'Tags update mode only works for git, hg, bzr and git-svn repositories currently', None)
if pattern and repotype not in ('git'):
return (None, 'Tags with pattern update mode only works for git repositories currently', None)
# Set up vcs interface and make sure we have the latest code... # Set up vcs interface and make sure we have the latest code...
vcs = common.getvcs(app['Repo Type'], app['Repo'], build_dir) vcs = common.getvcs(app['Repo Type'], app['Repo'], build_dir)
@ -115,7 +117,9 @@ def check_tags(app):
hver = None hver = None
hcode = "0" hcode = "0"
for tag in vcs.gettags(): tags = vcs.gettags_pattern(pattern) if pattern else vcs.gettags()
for tag in tags:
logging.info("Check tag: '{0}'".format(tag)) logging.info("Check tag: '{0}'".format(tag))
vcs.gotorevision(tag) vcs.gotorevision(tag)
@ -346,8 +350,9 @@ def main():
msg = None msg = None
vercode = None vercode = None
mode = app['Update Check Mode'] mode = app['Update Check Mode']
if mode == 'Tags': if mode.startswith('Tags'):
(version, vercode, tag) = check_tags(app) pattern = mode[5:] if len(mode) > 4 else None
(version, vercode, tag) = check_tags(app, pattern)
elif mode == 'RepoManifest': elif mode == 'RepoManifest':
(version, vercode) = check_repomanifest(app) (version, vercode) = check_repomanifest(app)
elif mode.startswith('RepoManifest/'): elif mode.startswith('RepoManifest/'):

View file

@ -275,6 +275,10 @@ class vcs:
def gettags(self): def gettags(self):
raise VCSException('gettags not supported for this vcs type') raise VCSException('gettags not supported for this vcs type')
# Get a list of all known tags
def gettags_pattern(self, pattern):
raise VCSException('gettags with pattern not supported for this vcs type')
# Get current commit reference (hash, revision, etc) # Get current commit reference (hash, revision, etc)
def getref(self): def getref(self):
raise VCSException('getref not supported for this vcs type') raise VCSException('getref not supported for this vcs type')
@ -352,6 +356,11 @@ class vcs_git(vcs):
p = FDroidPopen(['git', 'tag'], cwd=self.local) p = FDroidPopen(['git', 'tag'], cwd=self.local)
return p.stdout.splitlines() return p.stdout.splitlines()
def gettags_pattern(self, pattern):
self.checkrepo()
p = FDroidPopen(['git', 'tag', '-l', pattern], cwd=self.local)
return p.stdout.splitlines()
class vcs_gitsvn(vcs): class vcs_gitsvn(vcs):

View file

@ -175,7 +175,7 @@ valuetypes = {
[ ]), [ ]),
'updatecheckmodes' : FieldType("Update Check Mode", 'updatecheckmodes' : FieldType("Update Check Mode",
r"^(Tags|RepoManifest|RepoManifest/.+|RepoTrunk|HTTP|Static|None)$", None, r"^(Tags|Tags .+|RepoManifest|RepoManifest/.+|RepoTrunk|HTTP|Static|None)$", None,
[ "Update Check Mode" ], [ "Update Check Mode" ],
[ ]) [ ])
} }