From: Hans-Christoph Steiner Date: Wed, 31 May 2017 19:43:40 +0000 (+0200) Subject: index.xml cannot handle APKs with the same packageName/versionCode X-Git-Tag: 0.8~49^2~4 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=ceac6d25cba7991a717cb7f1f287b46f369bd331;p=fdroidserver.git index.xml cannot handle APKs with the same packageName/versionCode Really, it is the fdroidclient parser of index.xml that fails, due to the hardcoded expectation that there will only ever be a single APK for any given versionCode. We keep index.xml backwards compatible for old clients, and use index-v1.json to support new things. Having multiple APKs that have the same packageName and versionCode will break the client v0.103.* since that version uses index-v1.json, but still has the hard- coded database parsing stuff. #153 --- diff --git a/fdroidserver/index.py b/fdroidserver/index.py index d3c1a0b7..32727115 100644 --- a/fdroidserver/index.py +++ b/fdroidserver/index.py @@ -294,9 +294,12 @@ def make_v0(apps, apks, repodir, repodict, requestsdict): # Get a list of the apks for this app... apklist = [] + versionCodes = [] for apk in apks: if apk['packageName'] == appid: - apklist.append(apk) + if apk['versionCode'] not in versionCodes: + apklist.append(apk) + versionCodes.append(apk['versionCode']) if len(apklist) == 0: continue diff --git a/tests/run-tests b/tests/run-tests index 484ed2a8..a3d62d27 100755 --- a/tests/run-tests +++ b/tests/run-tests @@ -241,7 +241,7 @@ diff $WORKSPACE/tests/repo/index.xml repo/index.xml #------------------------------------------------------------------------------# -echo_header 'rename apks with `fdroid update --rename-apks`' +echo_header 'rename apks with `fdroid update --rename-apks`, --nosign for speed' REPOROOT=`create_test_dir` cd $REPOROOT @@ -255,17 +255,24 @@ test -d metadata || mkdir metadata cp $WORKSPACE/tests/metadata/info.guardianproject.urzip.yml metadata/ test -d repo || mkdir repo cp $WORKSPACE/tests/urzip.apk "repo/asdfiuhk urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234 ö.apk" -$fdroid update --rename-apks +$fdroid update --rename-apks --pretty --nosign test -e repo/info.guardianproject.urzip_100.apk +grep -F 'info.guardianproject.urzip_100.apk' repo/index-v1.json repo/index.xml cp $WORKSPACE/tests/urzip-release.apk repo/ -$fdroid update --rename-apks +$fdroid update --rename-apks --pretty --nosign test -e repo/info.guardianproject.urzip_100.apk test -e repo/info.guardianproject.urzip_100_b4964fd.apk +grep -F 'info.guardianproject.urzip_100.apk' repo/index-v1.json repo/index.xml +grep -F 'info.guardianproject.urzip_100_b4964fd.apk' repo/index-v1.json +! grep -F 'info.guardianproject.urzip_100_b4964fd.apk' repo/index.xml cp $WORKSPACE/tests/urzip-release.apk repo/ -$fdroid update --rename-apks +$fdroid update --rename-apks --pretty --nosign test -e repo/info.guardianproject.urzip_100.apk test -e repo/info.guardianproject.urzip_100_b4964fd.apk test -e duplicates/repo/info.guardianproject.urzip_100_b4964fd.apk +grep -F 'info.guardianproject.urzip_100.apk' repo/index-v1.json repo/index.xml +grep -F 'info.guardianproject.urzip_100_b4964fd.apk' repo/index-v1.json +! grep -F 'info.guardianproject.urzip_100_b4964fd.apk' repo/index.xml #------------------------------------------------------------------------------# @@ -528,8 +535,9 @@ echo "accepted_formats = ['txt']" >> config.py cp $WORKSPACE/tests/repo/obb.mainpatch.current_1619.apk $REPOROOT/repo/ cp $WORKSPACE/tests/repo/obb.mainpatch.current_1619_another-release-key.apk $REPOROOT/repo/ $fdroid update --pretty -grep -F 'obb.mainpatch.current_1619.apk' repo/index.xml -grep -F 'obb.mainpatch.current_1619_another-release-key.apk' repo/index.xml +grep -F 'obb.mainpatch.current_1619.apk' repo/index.xml repo/index-v1.json +grep -F 'obb.mainpatch.current_1619_another-release-key.apk' repo/index-v1.json +! grep -F 'obb.mainpatch.current_1619_another-release-key.apk' repo/index.xml # die if there are exact duplicates cp $WORKSPACE/tests/repo/obb.mainpatch.current_1619.apk $REPOROOT/repo/duplicate.apk ! $fdroid update