diff --git a/examples/config.py b/examples/config.py index e1272649..974a4d5b 100644 --- a/examples/config.py +++ b/examples/config.py @@ -52,6 +52,15 @@ archive_description = """ The repository of older versions of applications from the main demo repository. """ +# `fdroid update` will create a link to the current version of a given app. +# This provides a static path to the current APK. To disable the creation of +# this link, uncomment this: +# make_current_version_link = False + +# By default, the "current version" link will be based on the "Name" of the +# app from the metadata. You can change it to use a different field from the +# metadata here: +# current_version_name_source = 'id' # The ID of a GPG key for making detached signatures for apks. Optional. # gpgkey = '1DBA2E89' diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 033cba8b..f6e9538f 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -47,6 +47,8 @@ default_config = { 'mvn3': "mvn", 'gradle': 'gradle', 'sync_from_local_copy_dir': False, + 'make_current_version_link': True, + 'current_version_name_source': 'Name', 'update_stats': False, 'stats_ignore': [], 'stats_server': None, diff --git a/fdroidserver/update.py b/fdroidserver/update.py index 225f594d..cd59a656 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -824,7 +824,15 @@ def make_index(apps, sortedids, apks, repodir, archive, categories): apklist[i]['apkname'], apklist[i + 1]['apkname'])) sys.exit(1) + current_version_code = 0 + current_version_file = None for apk in apklist: + # find the APK for the "Current Version" + if current_version_code < apk['versioncode']: + current_version_code = apk['versioncode'] + if current_version_code < int(app['Current Version Code']): + current_version_file = apk['apkname'] + apkel = doc.createElement("package") apel.appendChild(apkel) addElement('version', apk['version'], doc, apkel) @@ -857,6 +865,14 @@ def make_index(apps, sortedids, apks, repodir, archive, categories): if len(apk['features']) > 0: addElement('features', ','.join(apk['features']), doc, apkel) + if current_version_file is not None \ + and config['make_current_version_link'] \ + and repodir == 'repo': # only create these + apklinkname = app[config['current_version_name_source']] + '.apk' + if os.path.exists(apklinkname): + os.remove(apklinkname) + os.symlink(os.path.join(repodir, current_version_file), apklinkname) + of = open(os.path.join(repodir, 'index.xml'), 'wb') if options.pretty: output = doc.toprettyxml()