chiark / gitweb /
Only do the latest five tags when using UCM:Tags on git
authorDaniel Martí <mvdan@mvdan.cc>
Thu, 17 Apr 2014 19:05:18 +0000 (21:05 +0200)
committerDaniel Martí <mvdan@mvdan.cc>
Thu, 17 Apr 2014 19:05:18 +0000 (21:05 +0200)
fdroidserver/checkupdates.py
fdroidserver/common.py

index 9d04ab4c91f2397245c7eac5da7277d215e62712..9eaf61f115a05e79ab2153594489d0d40e51501d 100644 (file)
@@ -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)
index 29ee1f5f246094fa0291a08533ca91052bfe713b..33281d8088e21121c2343be0f422cc798a90dd20 100644 (file)
@@ -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,