chiark / gitweb /
New metadata field: Vercode Operation
authorDaniel Martí <mvdan@mvdan.cc>
Fri, 1 Nov 2013 12:25:50 +0000 (13:25 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Fri, 1 Nov 2013 12:25:50 +0000 (13:25 +0100)
docs/fdroid.texi
fdroidserver/checkupdates.py
fdroidserver/common.py

index cbcea84cd2c9e8fd5d96b886af79085f021dd805..3f4ff4d698f8add1c07aa29d2eb05ad6a4bbec64 100644 (file)
@@ -476,6 +476,7 @@ The following sections describe the fields recognised within the file.
 * Requires Root::
 * Archive Policy::
 * Update Check Mode::
+* Vercode Operation::
 * Update Check Data::
 * Auto Update Mode::
 * Current Version::
@@ -1136,6 +1137,20 @@ again, rather than retrieving a different one.
 
 Used in conjunction with @code{Update Check Mode} for certain modes.
 
+@node Vercode Operation
+@section Vercode Operation
+
+@cindex Vercode Operation
+
+Operation to be applied to the vercode obtained by the defined @code{Update
+Check Mode}. @code{%c} will be replaced by the actual vercode, and the whole
+string will be passed to python's @code{eval} function.
+
+Especially useful with apps that we want to compile for different ABIs, but
+whose vercodes don't always have trailing zeros. With @code{Vercode Operation}
+set at something like @code{%c*10 + 4}, we will be able to track updates and
+build three different versions of every upstream version.
+
 @node Archive Policy
 @section Archive Policy
 
index 97bad1d0c7ab1dd2f8006342c3fdc588b3e3d3f8..2a6f26ec24bf634417be19906663a051b2b1820a 100644 (file)
@@ -333,6 +333,7 @@ def main():
         logmsg = None
 
         tag = None
+        msg = None
         mode = app['Update Check Mode']
         if mode == 'Tags':
             (version, vercode, tag) = check_tags(app, config['sdk_path'])
@@ -346,17 +347,21 @@ def main():
             (version, vercode) = check_http(app)
         elif mode == 'Static':
             version = None
-            vercode = 'Checking disabled'
+            msg = 'Checking disabled'
         elif mode == 'None':
             version = None
-            vercode = 'Checking disabled'
+            msg = 'Checking disabled'
         else:
             version = None
-            vercode = 'Invalid update check method'
+            msg = 'Invalid update check method'
+
+        if vercode and app['Vercode Operation']:
+            op = app['Vercode Operation'].replace("%c", str(int(vercode)))
+            vercode = str(eval(op))
 
         updating = False
         if not version:
-            print "..." + vercode
+            print "...%s" % msg
         elif vercode == app['Current Version Code']:
             print "...up to date"
         else:
index 52681b84ea253bf9b4fc6f49e5ae6e447a3daacd..91650b30fcc71a807f330d6fe2b6b0cb3fe9796f 100644 (file)
@@ -197,7 +197,7 @@ class vcs_git(vcs):
                 self.refreshed = True
         # Check out the appropriate revision...
         rev = str(rev if rev else 'origin/master')
-               if subprocess.call(['git', 'checkout', '-f', rev], cwd=self.local) != 0:
+        if subprocess.call(['git', 'checkout', '-f', rev], cwd=self.local) != 0:
             raise VCSException("Git checkout failed")
         # Get rid of any uncontrolled files left behind...
         if subprocess.call(['git', 'clean', '-dffx'], cwd=self.local) != 0:
@@ -211,14 +211,14 @@ class vcs_git(vcs):
         if subprocess.call(['git', 'submodule', 'update'],
                 cwd=self.local) != 0:
             raise VCSException("Git submodule update failed")
-               if subprocess.call(['git', 'submodule', 'foreach',
-                       'git', 'reset', '--hard'],
-                               cwd=self.local) != 0:
-                       raise VCSException("Git submodule reset failed")
-               if subprocess.call(['git', 'submodule', 'foreach',
-                       'git', 'clean', '-dffx'],
-                               cwd=self.local) != 0:
-                       raise VCSException("Git submodule clean failed")
+        if subprocess.call(['git', 'submodule', 'foreach',
+            'git', 'reset', '--hard'],
+                cwd=self.local) != 0:
+            raise VCSException("Git submodule reset failed")
+        if subprocess.call(['git', 'submodule', 'foreach',
+            'git', 'clean', '-dffx'],
+                cwd=self.local) != 0:
+            raise VCSException("Git submodule clean failed")
 
     def gettags(self):
         self.checkrepo()
@@ -566,6 +566,7 @@ def parse_metadata(metafile, verbose=False):
     thisinfo['AntiFeatures'] = None
     thisinfo['Archive Policy'] = None
     thisinfo['Update Check Mode'] = 'None'
+    thisinfo['Vercode Operation'] = None
     thisinfo['Auto Update Mode'] = 'None'
     thisinfo['Current Version'] = ''
     thisinfo['Current Version Code'] = '0'
@@ -829,6 +830,8 @@ def write_metadata(dest, app, verbose=False):
         writefield('Archive Policy')
     writefield('Auto Update Mode')
     writefield('Update Check Mode')
+    if app['Vercode Operation']:
+        writefield('Vercode Operation')
     if 'Update Check Data' in app:
         writefield('Update Check Data')
     if len(app['Current Version']) > 0: