diff --git a/docs/fdroid.texi b/docs/fdroid.texi index cbcea84c..3f4ff4d6 100644 --- a/docs/fdroid.texi +++ b/docs/fdroid.texi @@ -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 diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index 97bad1d0..2a6f26ec 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -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: diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 52681b84..91650b30 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -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: