1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-07-07 01:40:10 +02:00

static URLs to "Current Version" of each app

I wrote up the feature to automatically generate symlinks with a constant name
that points to the current release version. I have it on by default, with a
*config.py* option to turn it off. There is also an option to set where the
symlink name comes from which defaults to app['Name'] i.e. F-Droid.apk, but
can easily be set to app['id'], i.e. _org.fdroid.fdroid.apk_. I think the best
place for the symlinks is in the root of the repo, so like
https://f-droid.org/F-Droid.apk or https://guardianproject.info/fdroid/ChatSecure.apk

For the case of the current FDroid static link https://f-droid.org/FDroid.apk
it can just be a symlink to the generated one (https://f-droid.org/F-Droid.apk
or https://f-droid.org/org.fdroid.fdroid.apk). Right now, this feature is all
or nothing, meaning it generates symlinks for all apps in the repo, or none. I
can’t think of any problems that this might cause since its only symlinks, so
the amount of disk space is tiny. Also, I think it would be useful for having
an easy “Download this app” button on each app’s page on the “Browse” view. As
long as this button is less prominent than the “Download F-Droid” button, and
it is clear that it is better to use the FDroid app than doing direct
downloads. For the f-droid.org repo, the symlinks should probably be based on
app['id'] to prevent name conflicts.

more info here:
https://f-droid.org/forums/topic/static-urls-to-current-version-of-each-app/
This commit is contained in:
Hans-Christoph Steiner 2014-10-10 20:47:21 -04:00
parent c91fca7bb4
commit e826938734
3 changed files with 27 additions and 0 deletions

View File

@ -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'

View File

@ -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,

View File

@ -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()