From 00fa44e9163eb83660145dcc51eb5c0dc84e4d14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=AD?= Date: Thu, 17 Apr 2014 21:05:18 +0200 Subject: [PATCH] Only do the latest five tags when using UCM:Tags on git --- fdroidserver/checkupdates.py | 3 +++ fdroidserver/common.py | 21 +++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index 9d04ab4c..9eaf61f1 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -123,6 +123,9 @@ def check_tags(app, pattern): pat = re.compile(pattern) tags = [tag for tag in tags if pat.match(tag)] + if repotype in ('git',): + tags = vcs.latesttags(tags, 5) + for tag in tags: logging.debug("Check tag: '{0}'".format(tag)) vcs.gotorevision(tag) diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 29ee1f5f..33281d80 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -320,6 +320,10 @@ class vcs: def gettags(self): raise VCSException('gettags not supported for this vcs type') + # Get a list of latest number tags + def latesttags(self, number): + raise VCSException('latesttags 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') @@ -412,6 +416,14 @@ class vcs_git(vcs): p = SilentPopen(['git', 'tag'], cwd=self.local) return p.stdout.splitlines() + def latesttags(self, alltags, number): + self.checkrepo() + p = SilentPopen(['echo "'+'\n'.join(alltags)+'" | \ + xargs -I@ git log --format=format:"%at @%n" -1 @ | \ + sort -n | awk \'{print $2}\''], + cwd=self.local, shell=True) + return p.stdout.splitlines()[-number:] + class vcs_gitsvn(vcs): @@ -1441,10 +1453,11 @@ def FDroidPopen(commands, cwd=None, shell=False, output=True): :returns: A PopenResult. """ - if cwd: - cwd = os.path.normpath(cwd) - logging.info("Directory: %s" % cwd) - logging.info("> %s" % ' '.join(commands)) + if output: + if cwd: + cwd = os.path.normpath(cwd) + logging.info("Directory: %s" % cwd) + logging.info("> %s" % ' '.join(commands)) result = PopenResult() p = subprocess.Popen(commands, cwd=cwd, shell=shell,