chiark / gitweb /
Add ability to ignore updates based on version name matching
authorCiaran Gultnieks <ciaran@ciarang.com>
Tue, 13 May 2014 19:04:22 +0000 (20:04 +0100)
committerCiaran Gultnieks <ciaran@ciarang.com>
Tue, 13 May 2014 19:04:22 +0000 (20:04 +0100)
fdroidserver/checkupdates.py
fdroidserver/common.py
fdroidserver/metadata.py

index fc5257891d62ebd09d5722505ed57f3c517ed46d..590949a2aeeaff661e4ac7ff15624a2c4498bcb9 100644 (file)
@@ -134,7 +134,8 @@ def check_tags(app, pattern):
 
             # Only process tags where the manifest exists...
             paths = common.manifest_paths(build_dir, flavour)
-            version, vercode, package = common.parse_androidmanifests(paths)
+            version, vercode, package = common.parse_androidmanifests(paths,
+                    app['Update Check Ignore'])
             if not package or package != appid or not version or not vercode:
                 continue
 
@@ -209,7 +210,8 @@ def check_repomanifest(app, branch=None):
 
         paths = common.manifest_paths(build_dir, flavour)
 
-        version, vercode, package = common.parse_androidmanifests(paths)
+        version, vercode, package = common.parse_androidmanifests(paths,
+                app['Update Check Ignore'])
         if not package:
             return (None, "Couldn't find package ID")
         if package != appid:
@@ -217,6 +219,8 @@ def check_repomanifest(app, branch=None):
         if not version:
             return (None, "Couldn't find latest version name")
         if not vercode:
+            if "Ignore" == version:
+                return (None, "Latest version is ignored")
             return (None, "Couldn't find latest version code")
 
         vercode = str(int(vercode))
index 157b82dc3709b4c2923978613ad01b10ac10bb52..93ec35318686112577e1ce666568894c6f6c6462 100644 (file)
@@ -823,7 +823,7 @@ def remove_debuggable_flags(root_dir):
 # Extract some information from the AndroidManifest.xml at the given path.
 # Returns (version, vercode, package), any or all of which might be None.
 # All values returned are strings.
-def parse_androidmanifests(paths):
+def parse_androidmanifests(paths, ignoreversions=None):
 
     if not paths:
         return (None, None, None)
@@ -836,6 +836,8 @@ def parse_androidmanifests(paths):
     vnsearch_g = re.compile(r'.*versionName *=* *(["\'])((?:(?=(\\?))\3.)*?)\1.*').search
     psearch_g = re.compile(r'.*packageName *=* *["\']([^"]+)["\'].*').search
 
+    ignoresearch = re.compile(ignoreversions).search if ignoreversions else None
+
     max_version = None
     max_vercode = None
     max_package = None
@@ -876,9 +878,12 @@ def parse_androidmanifests(paths):
             max_package = package
 
         if max_vercode is None or (vercode is not None and vercode > max_vercode):
-            max_version = version
-            max_vercode = vercode
-            max_package = package
+            if not ignoresearch or not ignoresearch(version):
+                max_version = version
+                max_vercode = vercode
+                max_package = package
+            else:
+                max_version = "Ignore"
 
     if max_version is None:
         max_version = "Unknown"
index 820ce05b0629fe6d0447c9adc68fada3fc3d7e61..441a20ed203c1e8e30cd87e3f6dba6fc131ffe58 100644 (file)
@@ -51,6 +51,7 @@ app_defaults = {
     'AntiFeatures': None,
     'Archive Policy': None,
     'Update Check Mode': 'None',
+    'Update Check Ignore': None,
     'Update Check Name': None,
     'Update Check Data': None,
     'Vercode Operation': None,
@@ -808,6 +809,8 @@ def write_metadata(dest, app):
         writefield('Archive Policy')
     writefield('Auto Update Mode')
     writefield('Update Check Mode')
+    if app['Update Check Ignore']:
+        writefield('Update Check Ignore')
     if app['Vercode Operation']:
         writefield('Vercode Operation')
     if app['Update Check Data']: