diff --git a/examples/config.py b/examples/config.py index 9d0b8d04..b41ca4ac 100644 --- a/examples/config.py +++ b/examples/config.py @@ -223,7 +223,7 @@ The repository of older versions of applications from the main demo repository. # If you want to upload the release apk file to androidobservatory.org # -# uploadto_androidobservatory = False +# androidobservatory = False # If you want to upload the release apk file to virustotal.com diff --git a/fdroidserver/btlog.py b/fdroidserver/btlog.py index 94d4a2cb..3199781f 100755 --- a/fdroidserver/btlog.py +++ b/fdroidserver/btlog.py @@ -42,6 +42,7 @@ import zipfile from argparse import ArgumentParser from . import common +from . import server options = None @@ -49,8 +50,7 @@ options = None def make_binary_transparency_log(repodirs, btrepo='binary_transparency', url=None, - commit_title='fdroid update', - git_remote=None): + commit_title='fdroid update'): '''Log the indexes in a standalone git repo to serve as a "binary transparency" log. @@ -142,17 +142,6 @@ For more info on this idea: gitrepo.index.add([os.path.join(repodir, os.path.basename(f)), ]) gitrepo.index.commit(commit_title) - if git_remote: - logging.info('Pushing binary transparency log to ' + git_remote) - origin = git.remote.Remote(gitrepo, 'origin') - if origin in gitrepo.remotes: - origin = gitrepo.remote('origin') - if 'set_url' in dir(origin): # added in GitPython 2.x - origin.set_url(git_remote) - else: - origin = gitrepo.create_remote('origin', git_remote) - origin.fetch() - origin.push('master') def main(): @@ -199,6 +188,7 @@ def main(): headers = { 'User-Agent': 'F-Droid 0.102.3' } + etag = None if os.path.exists(http_headers_file): with open(http_headers_file) as fp: etag = json.load(fp)['ETag'] @@ -226,8 +216,9 @@ def main(): if new_files: os.chdir(tempdirbase) - make_binary_transparency_log(repodirs, options.git_repo, options.url, 'fdroid btlog', - git_remote=options.git_remote) + make_binary_transparency_log(repodirs, options.git_repo, options.url, 'fdroid btlog') + if options.git_remote: + server.push_binary_transparency(options.git_repo, options.git_remote) shutil.rmtree(tempdirbase, ignore_errors=True) if __name__ == "__main__": diff --git a/fdroidserver/server.py b/fdroidserver/server.py index e2969037..6e8a9d6e 100644 --- a/fdroidserver/server.py +++ b/fdroidserver/server.py @@ -281,20 +281,20 @@ def upload_to_virustotal(repo_section, vt_apikey): logging.info(response['verbose_msg'] + " " + response['permalink']) -def push_binary_transparency(binary_transparency_remote): +def push_binary_transparency(git_repo_path, git_remote): '''push the binary transparency git repo to the specifed remote''' import git - repo = git.Repo('binary_transparency_log') - pushremote = None - for remote in repo.remotes: - if remote.url == binary_transparency_remote: - pushremote = remote - break - - if not pushremote: - pushremote = repo.create_remote('fdroid_server_update', binary_transparency_remote) - pushremote.push('master') + logging.info('Pushing binary transparency log to ' + git_remote) + gitrepo = git.Repo(git_repo_path) + origin = git.remote.Remote(gitrepo, 'origin') + if origin in gitrepo.remotes: + origin = gitrepo.remote('origin') + if 'set_url' in dir(origin): # added in GitPython 2.x + origin.set_url(git_remote) + else: + origin = gitrepo.create_remote('origin', git_remote) + origin.push('master') def main(): @@ -376,11 +376,12 @@ def main(): if not config.get('awsbucket') \ and not config.get('serverwebroot') \ and not config.get('servergitmirrors') \ - and not config.get('uploadto_androidobservatory') \ + and not config.get('androidobservatory') \ + and not config.get('binary_transparency_remote') \ and not config.get('virustotal_apikey') \ and local_copy_dir is None: logging.warn('No option set! Edit your config.py to set at least one among:\n' - + 'serverwebroot, servergitmirrors, local_copy_dir, awsbucket, virustotal_apikey or uploadto_androidobservatory') + + 'serverwebroot, servergitmirrors, local_copy_dir, awsbucket, virustotal_apikey, androidobservatory, or binary_transparency_remote') sys.exit(1) repo_sections = ['repo'] @@ -428,14 +429,14 @@ def main(): update_servergitmirrors(servergitmirrors, repo_section) if config.get('awsbucket'): update_awsbucket(repo_section) - if config.get('uploadto_androidobservatory'): + if config.get('androidobservatory'): upload_to_android_observatory(repo_section) if config.get('virustotal_apikey'): upload_to_virustotal(repo_section, config.get('virustotal_apikey')) binary_transparency_remote = config.get('binary_transparency_remote') if binary_transparency_remote: - push_binary_transparency(binary_transparency_remote) + push_binary_transparency('binary_transparency', binary_transparency_remote) sys.exit(0) diff --git a/fdroidserver/update.py b/fdroidserver/update.py index e26388b6..271d334c 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -857,7 +857,7 @@ def scan_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk): perm_match['maxSdkVersion'] ) - apk['uses-permission'].add(permission) + apk['uses-permission'].append(permission) elif line.startswith('uses-permission-sdk-23:'): perm_match = re.match(APK_PERMISSION_PAT, line).groupdict() if perm_match['maxSdkVersion']: @@ -867,7 +867,7 @@ def scan_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk): perm_match['maxSdkVersion'] ) - apk['uses-permission-sdk-23'].add(permission_sdk_23) + apk['uses-permission-sdk-23'].append(permission_sdk_23) elif line.startswith('uses-feature:'): feature = re.match(APK_FEATURE_PAT, line).group(1) @@ -1410,7 +1410,7 @@ def main(): git_remote = config.get('binary_transparency_remote') if git_remote or os.path.isdir(os.path.join('binary_transparency', '.git')): - btlog.make_binary_transparency_log(repodirs, git_remote=git_remote) + btlog.make_binary_transparency_log(repodirs) if config['update_stats']: # Update known apks info... diff --git a/tests/repo/index.xml b/tests/repo/index.xml index 01ee18a8..052381a2 100644 --- a/tests/repo/index.xml +++ b/tests/repo/index.xml @@ -54,14 +54,18 @@ 0.1 1444412523 obb.main.oldversion_1444412523.apk - 7562a36c9e2b38013b96663cf41f0f290dc7a248a81befa8d89e14f390c94c7f - 11470 + c5f149e526f89c05c62923bdb7bb1e2be5673c46ec85143f41e514340631449c + 14323 4 18 main.1434483388.obb.main.oldversion.obb d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7 2013-12-31 - b4964fd759edaa54e65bb476d0276880 + eb41d4d6082bb3e81c3d58dbf7fc7332 + ACCESS_NETWORK_STATE,ACCESS_WIFI_STATE,BLUETOOTH,BLUETOOTH_ADMIN,CHANGE_NETWORK_STATE,CHANGE_WIFI_MULTICAST_STATE,CHANGE_WIFI_STATE,INTERNET,NFC,RECEIVE_BOOT_COMPLETED + + + diff --git a/tests/repo/obb.main.oldversion_1444412523.apk b/tests/repo/obb.main.oldversion_1444412523.apk index 94ed9503..b9c7d7fd 100644 Binary files a/tests/repo/obb.main.oldversion_1444412523.apk and b/tests/repo/obb.main.oldversion_1444412523.apk differ diff --git a/tests/run-tests b/tests/run-tests index d0ccf083..3c3dfc1a 100755 --- a/tests/run-tests +++ b/tests/run-tests @@ -602,7 +602,8 @@ echo 'keystorepass = "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI="' >> config.p echo 'keypass = "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI="' >> config.py echo "binary_transparency_remote = '$REPOROOT/git_remote'" >> config.py echo "accepted_formats = ['json', 'txt', 'yml']" >> config.py -$fdroid update --verbose --pretty +$fdroid update --verbose +$fdroid server update --verbose test -e repo/index.xml test -e repo/index.jar test -e repo/index-v1.jar