chiark / gitweb /
index.xml cannot handle APKs with the same packageName/versionCode
authorHans-Christoph Steiner <hans@eds.org>
Wed, 31 May 2017 19:43:40 +0000 (21:43 +0200)
committerHans-Christoph Steiner <hans@eds.org>
Thu, 1 Jun 2017 14:01:05 +0000 (16:01 +0200)
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

fdroidserver/index.py
tests/run-tests

index d3c1a0b737f8fda9f47de8c635988f58c2f7750e..32727115593331c12c2d52bcfd06575f33789579 100644 (file)
@@ -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
index 484ed2a8f150444c8cc2634502332d3ef37e0a14..a3d62d279cc6bef3e5ea6f6f2bc61faca5199c34 100755 (executable)
@@ -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