From: Daniel Martí Date: Mon, 10 Feb 2014 10:27:28 +0000 (+0100) Subject: Support UCM:Tags using git tag -l X-Git-Tag: 0.2~310 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=08607a3cd45827008d7db47fa8d520185ce51588;p=fdroidserver.git Support UCM:Tags using git tag -l --- diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index 4984ef22..46fe7f7e 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -85,7 +85,7 @@ def check_http(app): # caution, because it's inappropriate for many projects. # Returns (None, "a message") if this didn't work, or (version, vercode) for # the details of the current version. -def check_tags(app): +def check_tags(app, pattern): try: @@ -98,6 +98,8 @@ def check_tags(app): 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) + 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... vcs = common.getvcs(app['Repo Type'], app['Repo'], build_dir) @@ -115,7 +117,9 @@ def check_tags(app): hver = None 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)) vcs.gotorevision(tag) @@ -346,8 +350,9 @@ def main(): msg = None vercode = None mode = app['Update Check Mode'] - if mode == 'Tags': - (version, vercode, tag) = check_tags(app) + if mode.startswith('Tags'): + pattern = mode[5:] if len(mode) > 4 else None + (version, vercode, tag) = check_tags(app, pattern) elif mode == 'RepoManifest': (version, vercode) = check_repomanifest(app) elif mode.startswith('RepoManifest/'): diff --git a/fdroidserver/common.py b/fdroidserver/common.py index d9721d8c..4509338b 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -275,6 +275,10 @@ class vcs: def gettags(self): 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) def getref(self): raise VCSException('getref not supported for this vcs type') @@ -352,6 +356,11 @@ class vcs_git(vcs): p = FDroidPopen(['git', 'tag'], cwd=self.local) 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): diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 267095cc..8103e347 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -175,7 +175,7 @@ valuetypes = { [ ]), '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" ], [ ]) }