From: Michael Pöhn Date: Wed, 9 Aug 2017 15:14:51 +0000 (+0200) Subject: choose best apk version vor index v0 X-Git-Tag: 0.9~65^2~2 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=6fc968f7cd2d3e79e3b3df2dfdf3599bd726c2d2;p=fdroidserver.git choose best apk version vor index v0 --- diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 5914109c..94789024 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -512,8 +512,8 @@ def publishednameinfo(filename): return result -apk_release_filename = re.compile('(?P[a-z0-9_\.]+)_(?P[0-9]+)\.apk') -apk_release_filename_with_sigfp = re.compile('(?P[a-z0-9_\.]+)_(?P[0-9]+)_(?P[0-9a-f]{7})\.apk') +apk_release_filename = re.compile('(?P[a-zA-Z0-9_\.]+)_(?P[0-9]+)\.apk') +apk_release_filename_with_sigfp = re.compile('(?P[a-zA-Z0-9_\.]+)_(?P[0-9]+)_(?P[0-9a-f]{7})\.apk') def apk_parse_release_filename(apkname): diff --git a/fdroidserver/index.py b/fdroidserver/index.py index c4fb6e6b..4266fa59 100644 --- a/fdroidserver/index.py +++ b/fdroidserver/index.py @@ -354,6 +354,8 @@ def make_v0(apps, apks, repodir, repodict, requestsdict): root.appendChild(element) element.setAttribute('packageName', packageName) + fdroid_signed = load_sigkeys(repodir) + for appid, appdict in apps.items(): app = metadata.App(appdict) @@ -362,12 +364,27 @@ def make_v0(apps, apks, repodir, repodict, requestsdict): # Get a list of the apks for this app... apklist = [] - versionCodes = [] + apksbyversion = collections.defaultdict(lambda: []) for apk in apks: - if apk['packageName'] == appid: - if apk['versionCode'] not in versionCodes: - apklist.append(apk) - versionCodes.append(apk['versionCode']) + if apk.get('versionCode') and apk.get('packageName') == appid: + apksbyversion[apk['versionCode']].append(apk) + for versionCode, apksforver in apksbyversion.items(): + fdroidsig = fdroid_signed.get(appid, {}).get('signer') + fdroid_signed_apk = None + name_match_apk = None + for x in apksforver: + if fdroidsig and x.get('signer', None) == fdroidsig: + fdroid_signed_apk = x + if common.apk_release_filename.match(x.get('apkName', '')): + name_match_apk = x + # choose which of the available versions is most + # suiteable for index v0 + if fdroid_signed_apk: + apklist.append(fdroid_signed_apk) + elif name_match_apk: + apklist.append(name_match_apk) + else: + apklist.append(apksforver[0]) if len(apklist) == 0: continue diff --git a/fdroidserver/update.py b/fdroidserver/update.py index 96a48b6a..c5fb4fd3 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -901,7 +901,7 @@ def scan_repo_files(apkcache, repodir, knownapks, use_date_from_file=False): logging.debug("Reading " + name_utf8 + " from cache") usecache = True else: - logging.debug("Ignoring stale cache data for " + name) + logging.debug("Ignoring stale cache data for " + name_utf8) if not usecache: logging.debug(_("Processing {apkfilename}").format(apkfilename=name_utf8))