From 0f90ab9aac76209921bf794ffc3d0a93676d3dde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Mon, 1 May 2017 21:19:51 +0200 Subject: [PATCH 01/17] rewrite to yaml works for app data now (builds still missing) --- fdroidserver/metadata.py | 67 +++++++++++++++++++++- tests/rewrite-metadata/fake.ota.update.yml | 37 ++++++++++++ tests/rewritemeta.TestCase | 54 +++++++++++++++++ 3 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 tests/rewrite-metadata/fake.ota.update.yml create mode 100755 tests/rewritemeta.TestCase diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 0c9d4831..4e7af381 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -25,7 +25,7 @@ import html import logging import textwrap import io - +import ruamel.yaml import yaml # use libyaml if it is available try: @@ -35,6 +35,8 @@ except ImportError: from yaml import Loader YamlLoader = Loader +from collections import OrderedDict + import fdroidserver.common from fdroidserver.exception import MetaDataException @@ -953,6 +955,69 @@ def parse_yaml_metadata(mf, app): app.update(yamlinfo) return app +def write_yaml(mf, app): + + def _class_as_dict_representer(dumper, data): + '''Creates a YAML representation of a App/Build instance''' + return dumper.represent_dict(data) + + empty_keys = [k for k, v in app.items() if not v] + for k in empty_keys: + del app[k] + + for k in ['added', 'lastUpdated', 'id', 'metadatapath']: + if k in app: + del app[k] + + #yaml.add_representer(fdroidserver.metadata.App, _class_as_dict_representer) + #ruamel.yaml.add_representer(fdroidserver.metadata.Build, _class_as_dict_representer) + #yaml.dump(app.asOrderedDict(), mf, default_flow_style=False, Dumper=yamlordereddictloader.Dumper) + + yaml_app_field_order = [ + 'Categories', + 'License', + 'Web Site', + 'Source Code', + 'Issue Tracker', + 'Donate', + 'Bitcoin', + '\n', + 'Auto Name', + 'Summary', + 'Description', + '\n', + 'Repo Type', + 'Repo', + '\n', + 'Auto Update Mode', + 'Update Check Mode', + 'Current Version', + 'Current Version Code', + ] + + preformated = ruamel.yaml.comments.CommentedMap() + insert_newline = False + for field in yaml_app_field_order: + if field is '\n': + insert_newline = True + else: + f = field.replace(' ', '') + if hasattr(app, f) and getattr(app, f): + if f in ['Description']: + preformated.update({f: ruamel.yaml.scalarstring.preserve_literal(getattr(app, f))}) + else: + preformated.update({f: getattr(app, f)}) + if insert_newline: + insert_newline = False + # inserting empty lines is not supported so we add a + # bogus comment and over-write its value + preformated.yaml_set_comment_before_after_key(f, 'bogus') + preformated.ca.items[f][1][0].value = '\n' + # TODO implement dump for builds + del(preformated['builds']) + + ruamel.yaml.round_trip_dump(preformated, mf, indent=4, block_seq_indent=2) + def write_yaml(mf, app): diff --git a/tests/rewrite-metadata/fake.ota.update.yml b/tests/rewrite-metadata/fake.ota.update.yml new file mode 100644 index 00000000..80a46780 --- /dev/null +++ b/tests/rewrite-metadata/fake.ota.update.yml @@ -0,0 +1,37 @@ +Categories: + - System +License: Apache-2.0 +WebSite: https://f-droid.org +SourceCode: https://gitlab.com/fdroid/privileged-extension +IssueTracker: https://gitlab.com/fdroid/privileged-extension/issues +Donate: https://f-droid.org/about + +AutoName: Fake OTA Update +Summary: Tests whether OTA ZIP files are being include +Description: |- + F-Droid can make use of system privileges or permissions to + install, update and remove applications on its own. The only way to obtain those + privileges is to become a system app. + + This is where the Privileged Extension comes in - being a separate app and much + smaller, it can be installed as a system app and communicate with the main app + via AIDL IPC. + + This has several advantages: + + * Reduced disk usage in the system partition + * System updates don't remove F-Droid + * The process of installing into system via root is safer + + This is packaged as an OTA (Over-The-Air) update ZIP file. It must be installed + using TWRP or other Android recovery that can flash updates to the system from + the /data/data/org.fdroid.fdroid folder on the /data partition. The standalone + APK is called F-Droid Privileged Extension. + +RepoType: git +Repo: https://gitlab.com/fdroid/privileged-extension.git + +AutoUpdateMode: Version %v +UpdateCheckMode: Tags +CurrentVersion: 0.2.1 +CurrentVersionCode: '2000' diff --git a/tests/rewritemeta.TestCase b/tests/rewritemeta.TestCase new file mode 100755 index 00000000..ade55548 --- /dev/null +++ b/tests/rewritemeta.TestCase @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 + +import inspect +import optparse +import os +import sys +import shutil +import unittest +import yaml +import tempfile +import textwrap + +localmodule = os.path.realpath( + os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..')) +if localmodule not in sys.path: + sys.path.insert(0, localmodule) + +import fdroidserver.common +import fdroidserver.metadata + + +class RewritemetaTest(unittest.TestCase): + ''' fdroidserver/metadata.py''' + + def test_rewrite_yaml(self): + + # setup/reset test dir if necessary and setup params + tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles') + if not os.path.exists(tmpdir): + os.makedirs(tmpdir) + testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir) + fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']} + + # rewrite metadata + allapps = fdroidserver.metadata.read_metadata(xref=True) + for appid, app in allapps.items(): + if appid == 'fake.ota.update': + fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app) + + # assert rewrite result + with open(os.path.join(testdir, 'fake.ota.update.yml'), 'r', encoding='utf-8') as result: + with open('rewrite-metadata/fake.ota.update.yml', 'r', encoding='utf-8') as orig: + self.maxDiff = None + self.assertEqual(result.read(), orig.read()) + +if __name__ == "__main__": + parser = optparse.OptionParser() + parser.add_option("-v", "--verbose", action="store_true", default=False, + help="Spew out even more information than normal") + (fdroidserver.common.options, args) = parser.parse_args(['--verbose']) + + newSuite = unittest.TestSuite() + newSuite.addTest(unittest.makeSuite(RewritemetaTest)) + unittest.main() From 735b7d0f33066bca637c54794d4dcfdafe06b47e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Mon, 1 May 2017 22:35:06 +0200 Subject: [PATCH 02/17] fixed pyflakes/pep warings --- fdroidserver/metadata.py | 30 ++++-------------------------- tests/rewritemeta.TestCase | 3 --- 2 files changed, 4 insertions(+), 29 deletions(-) diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 4e7af381..cd16724a 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -35,8 +35,6 @@ except ImportError: from yaml import Loader YamlLoader = Loader -from collections import OrderedDict - import fdroidserver.common from fdroidserver.exception import MetaDataException @@ -955,6 +953,7 @@ def parse_yaml_metadata(mf, app): app.update(yamlinfo) return app + def write_yaml(mf, app): def _class_as_dict_representer(dumper, data): @@ -969,9 +968,9 @@ def write_yaml(mf, app): if k in app: del app[k] - #yaml.add_representer(fdroidserver.metadata.App, _class_as_dict_representer) - #ruamel.yaml.add_representer(fdroidserver.metadata.Build, _class_as_dict_representer) - #yaml.dump(app.asOrderedDict(), mf, default_flow_style=False, Dumper=yamlordereddictloader.Dumper) + # yaml.add_representer(fdroidserver.metadata.App, _class_as_dict_representer) + ruamel.yaml.add_representer(fdroidserver.metadata.Build, _class_as_dict_representer) + # yaml.dump(app.asOrderedDict(), mf, default_flow_style=False, Dumper=yamlordereddictloader.Dumper) yaml_app_field_order = [ 'Categories', @@ -1013,31 +1012,10 @@ def write_yaml(mf, app): # bogus comment and over-write its value preformated.yaml_set_comment_before_after_key(f, 'bogus') preformated.ca.items[f][1][0].value = '\n' - # TODO implement dump for builds - del(preformated['builds']) ruamel.yaml.round_trip_dump(preformated, mf, indent=4, block_seq_indent=2) -def write_yaml(mf, app): - - def _class_as_dict_representer(dumper, data): - '''Creates a YAML representation of a App/Build instance''' - return dumper.represent_dict(data) - - empty_keys = [k for k, v in app.items() if not v] - for k in empty_keys: - del app[k] - - for k in ['added', 'lastUpdated', 'id', 'metadatapath']: - if k in app: - del app[k] - - yaml.add_representer(fdroidserver.metadata.App, _class_as_dict_representer) - yaml.add_representer(fdroidserver.metadata.Build, _class_as_dict_representer) - yaml.dump(app, mf, default_flow_style=False) - - build_line_sep = re.compile(r'(? Date: Mon, 1 May 2017 22:40:14 +0200 Subject: [PATCH 03/17] add ruamel.yaml to setup.py --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 18661e95..00e3755f 100644 --- a/setup.py +++ b/setup.py @@ -38,6 +38,7 @@ setup(name='fdroidserver', 'pyasn1-modules', 'python-vagrant', 'PyYAML', + 'ruamel.yaml', 'requests < 2.11', 'docker-py == 1.9.0', ], From fbd5e8772cb2d157848e479a2c4a32720a7fbdaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 2 May 2017 10:06:42 +0200 Subject: [PATCH 04/17] yaml metadata rewrite: correct blank line --- fdroidserver/metadata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index cd16724a..5c1c52e4 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -1011,7 +1011,7 @@ def write_yaml(mf, app): # inserting empty lines is not supported so we add a # bogus comment and over-write its value preformated.yaml_set_comment_before_after_key(f, 'bogus') - preformated.ca.items[f][1][0].value = '\n' + preformated.ca.items[f][1][-1].value = '\n' ruamel.yaml.round_trip_dump(preformated, mf, indent=4, block_seq_indent=2) From f9d4007ea622e750652b8d313e9686c5b843cc3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 2 May 2017 13:00:33 +0200 Subject: [PATCH 05/17] rewrite metadata builds list to yaml --- fdroidserver/metadata.py | 59 +- tests/metadata/org.fdroid.fdroid.txt | 720 +++++++++++++ .../rewrite-yml}/fake.ota.update.yml | 7 + .../rewrite-yml/org.fdroid.fdroid.yml | 950 ++++++++++++++++++ tests/rewritemeta.TestCase | 26 +- 5 files changed, 1744 insertions(+), 18 deletions(-) create mode 100644 tests/metadata/org.fdroid.fdroid.txt rename tests/{rewrite-metadata => metadata/rewrite-yml}/fake.ota.update.yml (86%) create mode 100644 tests/metadata/rewrite-yml/org.fdroid.fdroid.yml diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 5c1c52e4..17c8b6b4 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -960,6 +960,26 @@ def write_yaml(mf, app): '''Creates a YAML representation of a App/Build instance''' return dumper.represent_dict(data) + def _builds_to_yaml(app): + + fields = ['versionName', 'versionCode'] + fields.extend(build_flags_order) + + builds = ruamel.yaml.comments.CommentedSeq() + for build in app.builds: + b = ruamel.yaml.comments.CommentedMap() + for field in fields: + if hasattr(build, field) and getattr(build, field): + b.update({field: getattr(build, field)}) + builds.append(b) + + # insert extra empty lines between builds + for i in range(1, len(builds)): + builds.yaml_set_comment_before_after_key(i, 'bogus') + builds.ca.items[i][1][-1].value = '\n' + + return builds + empty_keys = [k for k, v in app.items() if not v] for k in empty_keys: del app[k] @@ -975,23 +995,28 @@ def write_yaml(mf, app): yaml_app_field_order = [ 'Categories', 'License', - 'Web Site', - 'Source Code', - 'Issue Tracker', + 'WebSite', + 'SourceCode', + 'IssueTracker', + 'Changelog', 'Donate', + 'FlattrID', 'Bitcoin', '\n', - 'Auto Name', + 'AutoName', 'Summary', 'Description', '\n', - 'Repo Type', + 'RepoType', 'Repo', '\n', - 'Auto Update Mode', - 'Update Check Mode', - 'Current Version', - 'Current Version Code', + 'Builds', + '\n', + 'ArchivePolicy', + 'AutoUpdateMode', + 'UpdateCheckMode', + 'CurrentVersion', + 'CurrentVersionCode', ] preformated = ruamel.yaml.comments.CommentedMap() @@ -1000,18 +1025,20 @@ def write_yaml(mf, app): if field is '\n': insert_newline = True else: - f = field.replace(' ', '') - if hasattr(app, f) and getattr(app, f): - if f in ['Description']: - preformated.update({f: ruamel.yaml.scalarstring.preserve_literal(getattr(app, f))}) + if (hasattr(app, field) and getattr(app, field)) or field is 'Builds': + if field in ['Description']: + preformated.update({field: ruamel.yaml.scalarstring.preserve_literal(getattr(app, field))}) + elif field is 'Builds': + preformated.update({'Builds': _builds_to_yaml(app)}) else: - preformated.update({f: getattr(app, f)}) + preformated.update({field: getattr(app, field)}) + if insert_newline: insert_newline = False # inserting empty lines is not supported so we add a # bogus comment and over-write its value - preformated.yaml_set_comment_before_after_key(f, 'bogus') - preformated.ca.items[f][1][-1].value = '\n' + preformated.yaml_set_comment_before_after_key(field, 'bogus') + preformated.ca.items[field][1][-1].value = '\n' ruamel.yaml.round_trip_dump(preformated, mf, indent=4, block_seq_indent=2) diff --git a/tests/metadata/org.fdroid.fdroid.txt b/tests/metadata/org.fdroid.fdroid.txt new file mode 100644 index 00000000..912cd581 --- /dev/null +++ b/tests/metadata/org.fdroid.fdroid.txt @@ -0,0 +1,720 @@ +Categories:System +License:GPL-3.0+ +Web Site:https://f-droid.org +Source Code:https://gitlab.com/fdroid/fdroidclient +Issue Tracker:https://gitlab.com/fdroid/fdroidclient/issues +Changelog:https://gitlab.com/fdroid/fdroidclient/raw/HEAD/CHANGELOG.md +Donate:https://f-droid.org/about +FlattrID:343053 +Bitcoin:15u8aAPK4jJ5N8wpWJ5gutAyyeHtKX5i18 + +Auto Name:F-Droid +Summary:Application manager +Description: +Connects to F-Droid compatible repositories. The default repo is hosted at +f-droid.org, which contains only bona fide FOSS. + +Android is open in the sense that you are free to install apks from anywhere you +wish, but there are many good reasons for using a client/repository setup: + +* Be notified when updates are available +* Keep track of older and beta versions +* Filter apps that aren't compatible with the device +* Find apps via categories and searchable descriptions +* Access associated urls for donations, source code etc. +* Stay safe by checking repo index signatures and apk hashes +. + +Repo Type:srclib +Repo:fdroidclient + +Build:0.17,8 + commit=c626ce5f6d3e10ae15942f01ff028be310cc695a + init=rm -f build.xml + +Build:0.18,9 + commit=a6c9ed8d06b19315df9ba9041324f78139f7d238 + init=rm -f build.xml + +Build:0.19,10 + commit=540b7d0522f4d67a4896697f7342e4c75b4cbf59 + init=rm -f build.xml + +Build:0.20,11 + commit=ddacfb856ad66c1c367e20c9cbecbfb15fe00813 + init=rm -f build.xml + +Build:0.21,12 + commit=49fa56aa6626a190f2d711120b69e435e9e615b1 + init=rm -f build.xml + +Build:0.22,13 + commit=a6a33c942495cc4c74a7cb6e968efe0e00815e68 + init=rm -f build.xml + +Build:0.23,14 + commit=aa58a8aad1a1c3832eafb9f1bdd6db8292d2c172 + init=rm -f build.xml + +Build:0.24,15 + commit=9b5fe2976443255b95027abd412f1c1e7f3d27b2 + init=rm -f build.xml + +Build:0.25,16 + commit=43977cc493e47a4dc841c4192ae8a40fb14b639b + init=rm -f build.xml + +Build:0.28,19 + commit=f881aabe5bd0ac94771b03f1318a6e0972ab4128 + target=android-15 + +Build:0.29,20 + commit=87b229b95d0909bfd05c65c5670794e743626f6c + target=android-15 + +Build:0.30,21 + commit=497cb19840f79b31ae9590f5abd9e4df832b34ee + target=android-15 + +Build:0.31,22 + commit=f99f8a544c7cb4d4a48ad09da00ad281af05f2ac + target=android-15 + +Build:0.32,23 + commit=cc3970cc243e345416bfc62781ece6eeefd11495 + target=android-15 + +Build:0.33,24 + commit=58eb580159aa4d54767f0af1736cad233fec2475 + target=android-15 + +Build:0.34-test,25 + commit=335d27b725b0f92e9e8804ae09518cd47bc7b021 + target=android-15 + +Build:0.35-test,26 + commit=a06d18b029392669e98359f86c07e442a04e6a13 + target=android-15 + +Build:0.36-test,27 + commit=647e230c9e888c04bb0554078c5aa81da63548a0 + target=android-15 + +Build:0.37-test,28 + commit=3c02e3ccc147a34af42cedf7d85f18dc75c8efa8 + target=android-15 + +Build:0.38,38 + commit=99b52c988d203811f434d6ac40675a63d5ae41ab + target=android-15 + +Build:0.39-test,39 + commit=9a7d0b9f10710105d51d8206a7faa4408c60c20d + target=android-15 + +Build:0.40,40 + commit=51a67efdf1ee2819bee99d9263b2980dafaf761d + target=android-15 + +Build:0.42,42 + commit=36b815095ef51ca4f21887d973dbc0a50575cd65 + target=android-15 + +Build:0.43,43 + disable=sdk doesn't like tzm (at f2109e4e0bf1597c625221d8d2d10050f146ba5a) + commit=f2109e4e0bf1597c625221d8d2d10050f146ba5a + target=android-15 + +Build:0.44,44 + disable=nasty upgrade bug + commit=0.44 + target=android-15 + +Build:0.45,45 + commit=0.45 + target=android-15 + +Build:0.46,46 + commit=0.46 + target=android-15 + +Build:0.47-test,47 + commit=0.47-test + target=android-17 + +Build:0.48-test,48 + commit=0.48-test + target=android-17 + +Build:0.50,50 + commit=0.50 + +Build:0.51-test,51 + commit=0.51-test + +Build:0.52-test,52 + commit=0.52-test + submodules=yes + prebuild=rm -rf extern/Universal-Image-Loader/downloads + update=.,extern/Universal-Image-Loader/library + +Build:0.53-test,53 + commit=0.53-test + submodules=yes + scandelete=yes + +Build:0.54,540 + commit=0.54 + submodules=yes + scandelete=yes + +Build:0.55,550 + commit=0.55 + submodules=yes + +Build:0.56-test,560 + commit=0.56-test + submodules=yes + +Build:0.57-test,570 + commit=0.57-test + submodules=yes + +Build:0.58,580 + commit=0.58 + submodules=yes + +Build:0.59-test,590 + commit=0.59-test + submodules=yes + +Build:0.61-test,610 + commit=0.61-test + submodules=yes + +Build:0.62,620 + commit=0.62 + submodules=yes + +Build:0.63,630 + commit=0.63 + submodules=yes + +Build:0.64-test,640 + commit=0.64-test + submodules=yes + +Build:0.65,650 + commit=0.65 + submodules=yes + +Build:0.66,660 + commit=0.66 + submodules=yes + +Build:0.67-test,670 + commit=0.67-test + submodules=yes + +Build:0.68-test,680 + commit=0.68-test + submodules=yes + +Build:0.69-test,690 + commit=0.69-test + submodules=yes + +Build:0.70-test,700 + commit=0.70-test + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.71,710 + disable=Broken MTM/AndroidPinning + commit=0.71 + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.72,720 + disable=proguard issues + commit=0.72 + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.73,730 + disable=local repos broken + commit=0.73 + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.74,740 + disable=still some proguard issues + commit=0.74 + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.75,750 + disable=repo update progress crasher + commit=0.75 + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.76,760 + commit=0.76 + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.77-test,770 + commit=0.77-test + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.78,780 + commit=0.78 + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.79-test,790 + commit=0.79-test + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.80-test,800 + commit=0.80-test + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.81-test,810 + commit=0.81-test + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.82,820 + commit=0.82 + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.83,830 + commit=0.83 + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.84-test,840 + commit=0.84-test + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.85-test,850 + commit=0.85-test + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.86-test,860 + commit=0.86-test + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.87-test,870 + commit=0.87-test + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.88,880 + commit=0.88 + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.89-test,890 + commit=0.89-test + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.90-test,900 + commit=0.90-test + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.91,910 + commit=0.91 + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.92,920 + commit=0.92 + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.93-test,930 + commit=0.93-test + subdir=F-Droid + submodules=yes + prebuild=./ant-prepare.sh + update=. + +Build:0.94-test,940 + commit=0.94-test + subdir=F-Droid + submodules=yes + gradle=yes + +Build:0.95-alpha1,95001 + commit=0.95-alpha1 + subdir=F-Droid + submodules=yes + gradle=yes + +Build:0.95-alpha2,95002 + commit=v0.95-alpha2 + subdir=F-Droid + submodules=yes + gradle=yes + +Build:0.95,95050 + commit=v0.95 + subdir=F-Droid + submodules=yes + gradle=yes + +Build:0.95.1,95150 + commit=v0.95.1 + subdir=F-Droid + submodules=yes + gradle=yes + +Build:0.96-alpha1,96001 + commit=v0.96-alpha1 + subdir=F-Droid + gradle=yes + +Build:0.96-alpha2,96002 + commit=v0.96-alpha2 + subdir=F-Droid + gradle=yes + +Build:0.96-alpha3,96003 + commit=v0.96-alpha3 + subdir=F-Droid + gradle=yes + +Build:0.96-alpha4,96004 + commit=v0.96-alpha4 + subdir=F-Droid + gradle=yes + +Build:0.96-alpha5,96005 + commit=v0.96-alpha5 + subdir=F-Droid + gradle=yes + +Build:0.96-alpha6,96006 + commit=v0.96-alpha6 + subdir=F-Droid + gradle=yes + +Build:0.96,96050 + commit=v0.96 + subdir=F-Droid + gradle=yes + scanignore=extern/AndroidPinning/res/raw/cacerts + +Build:0.96.1,96150 + commit=v0.96.1 + subdir=F-Droid + gradle=yes + scanignore=extern/AndroidPinning/res/raw/cacerts + +Build:0.97-alpha1,97001 + commit=v0.97-alpha1 + subdir=F-Droid + gradle=yes + scanignore=extern/AndroidPinning/res/raw/cacerts + +Build:0.97-alpha2,97002 + commit=v0.97-alpha2 + subdir=F-Droid + gradle=yes + +Build:0.97-alpha3,97003 + commit=v0.97-alpha3 + subdir=F-Droid + gradle=yes + +Build:0.97-alpha4,97004 + commit=v0.97-alpha4 + subdir=F-Droid + gradle=yes + +Build:0.97-alpha5,97005 + commit=v0.97-alpha5 + subdir=F-Droid + gradle=yes + +Build:0.97-alpha6,97006 + commit=v0.97-alpha6 + subdir=F-Droid + gradle=yes + +Build:0.97-alpha7,97007 + commit=v0.97-alpha7 + subdir=F-Droid + gradle=yes + +Build:0.97-alpha8,97008 + commit=v0.97-alpha8 + subdir=F-Droid + gradle=yes + +Build:0.97,97050 + commit=v0.97 + subdir=F-Droid + gradle=yes + +Build:0.98-alpha1,98001 + commit=v0.98-alpha1 + subdir=F-Droid + gradle=yes + +Build:0.98-alpha2,98002 + commit=v0.98-alpha2 + subdir=F-Droid + gradle=yes + +Build:0.98-alpha3,98003 + commit=v0.98-alpha3 + subdir=F-Droid + gradle=yes + +Build:0.98-alpha4,98004 + commit=v0.98-alpha4 + subdir=F-Droid + gradle=yes + +Build:0.98-alpha5,98005 + commit=v0.98-alpha5 + subdir=F-Droid + gradle=yes + +Build:0.98-alpha6,98006 + commit=v0.98-alpha6 + subdir=F-Droid + gradle=yes + +Build:0.98-alpha7,98007 + commit=v0.98-alpha7 + subdir=F-Droid + gradle=yes + +Build:0.98,98050 + commit=v0.98 + subdir=F-Droid + gradle=yes + +Build:0.98.1,98150 + commit=v0.98.1 + subdir=F-Droid + gradle=yes + +Build:0.99-alpha1,99001 + commit=v0.99-alpha1 + subdir=F-Droid + gradle=yes + +Build:0.99-alpha2,99002 + commit=v0.99-alpha2 + subdir=F-Droid + gradle=yes + +Build:0.99,99050 + commit=v0.99 + subdir=F-Droid + gradle=yes + +Build:0.99.1,99150 + commit=v0.99.1 + subdir=F-Droid + gradle=yes + +Build:0.99.2,99250 + commit=v0.99.2 + subdir=F-Droid + gradle=yes + +Build:0.100-alpha1,100001 + commit=v0.100-alpha1 + subdir=F-Droid + gradle=yes + +Build:0.100-alpha2,100002 + commit=v0.100-alpha2 + subdir=F-Droid + gradle=yes + +Build:0.100-alpha3,100003 + commit=v0.100-alpha3 + subdir=app + gradle=yes + +Build:0.100-alpha4,100004 + commit=v0.100-alpha4 + subdir=app + gradle=yes + +Build:0.100-alpha5,100005 + commit=v0.100-alpha5 + subdir=app + gradle=yes + +Build:0.100-alpha6,100006 + commit=v0.100-alpha6 + subdir=app + gradle=yes + +Build:0.100-alpha7,100007 + commit=v0.100-alpha7 + subdir=app + gradle=yes + +Build:0.100-alpha8,100008 + commit=v0.100-alpha8 + subdir=app + gradle=yes + +Build:0.100,100050 + commit=v0.100 + subdir=app + gradle=yes + +Build:0.100.1,100150 + commit=v0.100.1 + subdir=app + gradle=yes + +Build:0.101-alpha1,101001 + commit=v0.101-alpha1 + subdir=app + gradle=yes + +Build:0.101-alpha2,101002 + commit=v0.101-alpha2 + subdir=app + gradle=yes + +Build:0.101-alpha3,101003 + commit=v0.101-alpha3 + subdir=app + gradle=yes + +Build:0.101-alpha4,101004 + commit=v0.101-alpha4 + subdir=app + gradle=yes + +Build:0.101-alpha5,101005 + commit=v0.101-alpha5 + subdir=app + gradle=yes + +Build:0.101-alpha6,101006 + commit=v0.101-alpha6 + subdir=app + gradle=yes + +Build:0.101,101050 + commit=v0.101 + subdir=app + gradle=yes + +Build:0.102-alpha1,102001 + commit=v0.102-alpha1 + subdir=app + gradle=yes + +Build:0.102-alpha2,102002 + commit=v0.102-alpha2 + subdir=app + gradle=yes + +Build:0.102-alpha3,102003 + commit=v0.102-alpha3 + subdir=app + gradle=yes + +Build:0.102,102050 + commit=v0.102 + subdir=app + gradle=yes + +Build:0.102.1,102150 + commit=v0.102.1 + subdir=app + gradle=yes + +Build:0.102.2,102250 + commit=v0.102.2 + subdir=app + gradle=yes + +Build:0.102.3,102350 + commit=v0.102.3 + subdir=app + gradle=yes + +Build:0.103-alpha1,103001 + commit=v0.103-alpha1 + subdir=app + gradle=yes + +Build:0.103-alpha2,103002 + commit=v0.103-alpha2 + subdir=app + gradle=yes + +Build:0.103-alpha3,103003 + commit=v0.103-alpha3 + subdir=app + gradle=yes + +Archive Policy:12 versions +Auto Update Mode:None +Update Check Mode:Static +Current Version:0.102.3 +Current Version Code:102350 diff --git a/tests/rewrite-metadata/fake.ota.update.yml b/tests/metadata/rewrite-yml/fake.ota.update.yml similarity index 86% rename from tests/rewrite-metadata/fake.ota.update.yml rename to tests/metadata/rewrite-yml/fake.ota.update.yml index 80a46780..b974793f 100644 --- a/tests/rewrite-metadata/fake.ota.update.yml +++ b/tests/metadata/rewrite-yml/fake.ota.update.yml @@ -31,6 +31,13 @@ Description: |- RepoType: git Repo: https://gitlab.com/fdroid/privileged-extension.git +Builds: + - versionName: 0.2.1 + versionCode: '2000' + commit: 0.2.1 + output: app/build/distributions/FDroidPrivilegedExtensionFromBinaries-$$VERSION$$.zip + build: gradle assembleUpdateZipFromBinariesDebug + AutoUpdateMode: Version %v UpdateCheckMode: Tags CurrentVersion: 0.2.1 diff --git a/tests/metadata/rewrite-yml/org.fdroid.fdroid.yml b/tests/metadata/rewrite-yml/org.fdroid.fdroid.yml new file mode 100644 index 00000000..c1d91532 --- /dev/null +++ b/tests/metadata/rewrite-yml/org.fdroid.fdroid.yml @@ -0,0 +1,950 @@ +Categories: + - System +License: GPL-3.0+ +WebSite: https://f-droid.org +SourceCode: https://gitlab.com/fdroid/fdroidclient +IssueTracker: https://gitlab.com/fdroid/fdroidclient/issues +Changelog: https://gitlab.com/fdroid/fdroidclient/raw/HEAD/CHANGELOG.md +Donate: https://f-droid.org/about +FlattrID: '343053' +Bitcoin: 15u8aAPK4jJ5N8wpWJ5gutAyyeHtKX5i18 + +AutoName: F-Droid +Summary: Application manager +Description: |- + Connects to F-Droid compatible repositories. The default repo is hosted at + f-droid.org, which contains only bona fide FOSS. + + Android is open in the sense that you are free to install apks from anywhere you + wish, but there are many good reasons for using a client/repository setup: + + * Be notified when updates are available + * Keep track of older and beta versions + * Filter apps that aren't compatible with the device + * Find apps via categories and searchable descriptions + * Access associated urls for donations, source code etc. + * Stay safe by checking repo index signatures and apk hashes + +RepoType: srclib +Repo: fdroidclient + +Builds: + - versionName: '0.17' + versionCode: '8' + commit: c626ce5f6d3e10ae15942f01ff028be310cc695a + init: rm -f build.xml + + - versionName: '0.18' + versionCode: '9' + commit: a6c9ed8d06b19315df9ba9041324f78139f7d238 + init: rm -f build.xml + + - versionName: '0.19' + versionCode: '10' + commit: 540b7d0522f4d67a4896697f7342e4c75b4cbf59 + init: rm -f build.xml + + - versionName: '0.20' + versionCode: '11' + commit: ddacfb856ad66c1c367e20c9cbecbfb15fe00813 + init: rm -f build.xml + + - versionName: '0.21' + versionCode: '12' + commit: 49fa56aa6626a190f2d711120b69e435e9e615b1 + init: rm -f build.xml + + - versionName: '0.22' + versionCode: '13' + commit: a6a33c942495cc4c74a7cb6e968efe0e00815e68 + init: rm -f build.xml + + - versionName: '0.23' + versionCode: '14' + commit: aa58a8aad1a1c3832eafb9f1bdd6db8292d2c172 + init: rm -f build.xml + + - versionName: '0.24' + versionCode: '15' + commit: 9b5fe2976443255b95027abd412f1c1e7f3d27b2 + init: rm -f build.xml + + - versionName: '0.25' + versionCode: '16' + commit: 43977cc493e47a4dc841c4192ae8a40fb14b639b + init: rm -f build.xml + + - versionName: '0.28' + versionCode: '19' + commit: f881aabe5bd0ac94771b03f1318a6e0972ab4128 + target: android-15 + + - versionName: '0.29' + versionCode: '20' + commit: 87b229b95d0909bfd05c65c5670794e743626f6c + target: android-15 + + - versionName: '0.30' + versionCode: '21' + commit: 497cb19840f79b31ae9590f5abd9e4df832b34ee + target: android-15 + + - versionName: '0.31' + versionCode: '22' + commit: f99f8a544c7cb4d4a48ad09da00ad281af05f2ac + target: android-15 + + - versionName: '0.32' + versionCode: '23' + commit: cc3970cc243e345416bfc62781ece6eeefd11495 + target: android-15 + + - versionName: '0.33' + versionCode: '24' + commit: 58eb580159aa4d54767f0af1736cad233fec2475 + target: android-15 + + - versionName: 0.34-test + versionCode: '25' + commit: 335d27b725b0f92e9e8804ae09518cd47bc7b021 + target: android-15 + + - versionName: 0.35-test + versionCode: '26' + commit: a06d18b029392669e98359f86c07e442a04e6a13 + target: android-15 + + - versionName: 0.36-test + versionCode: '27' + commit: 647e230c9e888c04bb0554078c5aa81da63548a0 + target: android-15 + + - versionName: 0.37-test + versionCode: '28' + commit: 3c02e3ccc147a34af42cedf7d85f18dc75c8efa8 + target: android-15 + + - versionName: '0.38' + versionCode: '38' + commit: 99b52c988d203811f434d6ac40675a63d5ae41ab + target: android-15 + + - versionName: 0.39-test + versionCode: '39' + commit: 9a7d0b9f10710105d51d8206a7faa4408c60c20d + target: android-15 + + - versionName: '0.40' + versionCode: '40' + commit: 51a67efdf1ee2819bee99d9263b2980dafaf761d + target: android-15 + + - versionName: '0.42' + versionCode: '42' + commit: 36b815095ef51ca4f21887d973dbc0a50575cd65 + target: android-15 + + - versionName: '0.43' + versionCode: '43' + disable: sdk doesn't like tzm (at f2109e4e0bf1597c625221d8d2d10050f146ba5a) + commit: f2109e4e0bf1597c625221d8d2d10050f146ba5a + target: android-15 + + - versionName: '0.44' + versionCode: '44' + disable: nasty upgrade bug + commit: '0.44' + target: android-15 + + - versionName: '0.45' + versionCode: '45' + commit: '0.45' + target: android-15 + + - versionName: '0.46' + versionCode: '46' + commit: '0.46' + target: android-15 + + - versionName: 0.47-test + versionCode: '47' + commit: 0.47-test + target: android-17 + + - versionName: 0.48-test + versionCode: '48' + commit: 0.48-test + target: android-17 + + - versionName: '0.50' + versionCode: '50' + commit: '0.50' + + - versionName: 0.51-test + versionCode: '51' + commit: 0.51-test + + - versionName: 0.52-test + versionCode: '52' + commit: 0.52-test + submodules: true + prebuild: rm -rf extern/Universal-Image-Loader/downloads + androidupdate: + - . + - extern/Universal-Image-Loader/library + + - versionName: 0.53-test + versionCode: '53' + commit: 0.53-test + submodules: true + scandelete: + - yes + + - versionName: '0.54' + versionCode: '540' + commit: '0.54' + submodules: true + scandelete: + - yes + + - versionName: '0.55' + versionCode: '550' + commit: '0.55' + submodules: true + + - versionName: 0.56-test + versionCode: '560' + commit: 0.56-test + submodules: true + + - versionName: 0.57-test + versionCode: '570' + commit: 0.57-test + submodules: true + + - versionName: '0.58' + versionCode: '580' + commit: '0.58' + submodules: true + + - versionName: 0.59-test + versionCode: '590' + commit: 0.59-test + submodules: true + + - versionName: 0.61-test + versionCode: '610' + commit: 0.61-test + submodules: true + + - versionName: '0.62' + versionCode: '620' + commit: '0.62' + submodules: true + + - versionName: '0.63' + versionCode: '630' + commit: '0.63' + submodules: true + + - versionName: 0.64-test + versionCode: '640' + commit: 0.64-test + submodules: true + + - versionName: '0.65' + versionCode: '650' + commit: '0.65' + submodules: true + + - versionName: '0.66' + versionCode: '660' + commit: '0.66' + submodules: true + + - versionName: 0.67-test + versionCode: '670' + commit: 0.67-test + submodules: true + + - versionName: 0.68-test + versionCode: '680' + commit: 0.68-test + submodules: true + + - versionName: 0.69-test + versionCode: '690' + commit: 0.69-test + submodules: true + + - versionName: 0.70-test + versionCode: '700' + commit: 0.70-test + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: '0.71' + versionCode: '710' + disable: Broken MTM/AndroidPinning + commit: '0.71' + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: '0.72' + versionCode: '720' + disable: proguard issues + commit: '0.72' + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: '0.73' + versionCode: '730' + disable: local repos broken + commit: '0.73' + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: '0.74' + versionCode: '740' + disable: still some proguard issues + commit: '0.74' + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: '0.75' + versionCode: '750' + disable: repo update progress crasher + commit: '0.75' + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: '0.76' + versionCode: '760' + commit: '0.76' + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: 0.77-test + versionCode: '770' + commit: 0.77-test + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: '0.78' + versionCode: '780' + commit: '0.78' + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: 0.79-test + versionCode: '790' + commit: 0.79-test + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: 0.80-test + versionCode: '800' + commit: 0.80-test + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: 0.81-test + versionCode: '810' + commit: 0.81-test + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: '0.82' + versionCode: '820' + commit: '0.82' + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: '0.83' + versionCode: '830' + commit: '0.83' + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: 0.84-test + versionCode: '840' + commit: 0.84-test + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: 0.85-test + versionCode: '850' + commit: 0.85-test + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: 0.86-test + versionCode: '860' + commit: 0.86-test + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: 0.87-test + versionCode: '870' + commit: 0.87-test + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: '0.88' + versionCode: '880' + commit: '0.88' + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: 0.89-test + versionCode: '890' + commit: 0.89-test + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: 0.90-test + versionCode: '900' + commit: 0.90-test + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: '0.91' + versionCode: '910' + commit: '0.91' + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: '0.92' + versionCode: '920' + commit: '0.92' + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: 0.93-test + versionCode: '930' + commit: 0.93-test + subdir: F-Droid + submodules: true + prebuild: ./ant-prepare.sh + androidupdate: + - . + + - versionName: 0.94-test + versionCode: '940' + commit: 0.94-test + subdir: F-Droid + submodules: true + gradle: + - yes + + - versionName: 0.95-alpha1 + versionCode: '95001' + commit: 0.95-alpha1 + subdir: F-Droid + submodules: true + gradle: + - yes + + - versionName: 0.95-alpha2 + versionCode: '95002' + commit: v0.95-alpha2 + subdir: F-Droid + submodules: true + gradle: + - yes + + - versionName: '0.95' + versionCode: '95050' + commit: v0.95 + subdir: F-Droid + submodules: true + gradle: + - yes + + - versionName: 0.95.1 + versionCode: '95150' + commit: v0.95.1 + subdir: F-Droid + submodules: true + gradle: + - yes + + - versionName: 0.96-alpha1 + versionCode: '96001' + commit: v0.96-alpha1 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.96-alpha2 + versionCode: '96002' + commit: v0.96-alpha2 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.96-alpha3 + versionCode: '96003' + commit: v0.96-alpha3 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.96-alpha4 + versionCode: '96004' + commit: v0.96-alpha4 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.96-alpha5 + versionCode: '96005' + commit: v0.96-alpha5 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.96-alpha6 + versionCode: '96006' + commit: v0.96-alpha6 + subdir: F-Droid + gradle: + - yes + + - versionName: '0.96' + versionCode: '96050' + commit: v0.96 + subdir: F-Droid + gradle: + - yes + scanignore: + - extern/AndroidPinning/res/raw/cacerts + + - versionName: 0.96.1 + versionCode: '96150' + commit: v0.96.1 + subdir: F-Droid + gradle: + - yes + scanignore: + - extern/AndroidPinning/res/raw/cacerts + + - versionName: 0.97-alpha1 + versionCode: '97001' + commit: v0.97-alpha1 + subdir: F-Droid + gradle: + - yes + scanignore: + - extern/AndroidPinning/res/raw/cacerts + + - versionName: 0.97-alpha2 + versionCode: '97002' + commit: v0.97-alpha2 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.97-alpha3 + versionCode: '97003' + commit: v0.97-alpha3 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.97-alpha4 + versionCode: '97004' + commit: v0.97-alpha4 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.97-alpha5 + versionCode: '97005' + commit: v0.97-alpha5 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.97-alpha6 + versionCode: '97006' + commit: v0.97-alpha6 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.97-alpha7 + versionCode: '97007' + commit: v0.97-alpha7 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.97-alpha8 + versionCode: '97008' + commit: v0.97-alpha8 + subdir: F-Droid + gradle: + - yes + + - versionName: '0.97' + versionCode: '97050' + commit: v0.97 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.98-alpha1 + versionCode: '98001' + commit: v0.98-alpha1 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.98-alpha2 + versionCode: '98002' + commit: v0.98-alpha2 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.98-alpha3 + versionCode: '98003' + commit: v0.98-alpha3 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.98-alpha4 + versionCode: '98004' + commit: v0.98-alpha4 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.98-alpha5 + versionCode: '98005' + commit: v0.98-alpha5 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.98-alpha6 + versionCode: '98006' + commit: v0.98-alpha6 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.98-alpha7 + versionCode: '98007' + commit: v0.98-alpha7 + subdir: F-Droid + gradle: + - yes + + - versionName: '0.98' + versionCode: '98050' + commit: v0.98 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.98.1 + versionCode: '98150' + commit: v0.98.1 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.99-alpha1 + versionCode: '99001' + commit: v0.99-alpha1 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.99-alpha2 + versionCode: '99002' + commit: v0.99-alpha2 + subdir: F-Droid + gradle: + - yes + + - versionName: '0.99' + versionCode: '99050' + commit: v0.99 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.99.1 + versionCode: '99150' + commit: v0.99.1 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.99.2 + versionCode: '99250' + commit: v0.99.2 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.100-alpha1 + versionCode: '100001' + commit: v0.100-alpha1 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.100-alpha2 + versionCode: '100002' + commit: v0.100-alpha2 + subdir: F-Droid + gradle: + - yes + + - versionName: 0.100-alpha3 + versionCode: '100003' + commit: v0.100-alpha3 + subdir: app + gradle: + - yes + + - versionName: 0.100-alpha4 + versionCode: '100004' + commit: v0.100-alpha4 + subdir: app + gradle: + - yes + + - versionName: 0.100-alpha5 + versionCode: '100005' + commit: v0.100-alpha5 + subdir: app + gradle: + - yes + + - versionName: 0.100-alpha6 + versionCode: '100006' + commit: v0.100-alpha6 + subdir: app + gradle: + - yes + + - versionName: 0.100-alpha7 + versionCode: '100007' + commit: v0.100-alpha7 + subdir: app + gradle: + - yes + + - versionName: 0.100-alpha8 + versionCode: '100008' + commit: v0.100-alpha8 + subdir: app + gradle: + - yes + + - versionName: '0.100' + versionCode: '100050' + commit: v0.100 + subdir: app + gradle: + - yes + + - versionName: 0.100.1 + versionCode: '100150' + commit: v0.100.1 + subdir: app + gradle: + - yes + + - versionName: 0.101-alpha1 + versionCode: '101001' + commit: v0.101-alpha1 + subdir: app + gradle: + - yes + + - versionName: 0.101-alpha2 + versionCode: '101002' + commit: v0.101-alpha2 + subdir: app + gradle: + - yes + + - versionName: 0.101-alpha3 + versionCode: '101003' + commit: v0.101-alpha3 + subdir: app + gradle: + - yes + + - versionName: 0.101-alpha4 + versionCode: '101004' + commit: v0.101-alpha4 + subdir: app + gradle: + - yes + + - versionName: 0.101-alpha5 + versionCode: '101005' + commit: v0.101-alpha5 + subdir: app + gradle: + - yes + + - versionName: 0.101-alpha6 + versionCode: '101006' + commit: v0.101-alpha6 + subdir: app + gradle: + - yes + + - versionName: '0.101' + versionCode: '101050' + commit: v0.101 + subdir: app + gradle: + - yes + + - versionName: 0.102-alpha1 + versionCode: '102001' + commit: v0.102-alpha1 + subdir: app + gradle: + - yes + + - versionName: 0.102-alpha2 + versionCode: '102002' + commit: v0.102-alpha2 + subdir: app + gradle: + - yes + + - versionName: 0.102-alpha3 + versionCode: '102003' + commit: v0.102-alpha3 + subdir: app + gradle: + - yes + + - versionName: '0.102' + versionCode: '102050' + commit: v0.102 + subdir: app + gradle: + - yes + + - versionName: 0.102.1 + versionCode: '102150' + commit: v0.102.1 + subdir: app + gradle: + - yes + + - versionName: 0.102.2 + versionCode: '102250' + commit: v0.102.2 + subdir: app + gradle: + - yes + + - versionName: 0.102.3 + versionCode: '102350' + commit: v0.102.3 + subdir: app + gradle: + - yes + + - versionName: 0.103-alpha1 + versionCode: '103001' + commit: v0.103-alpha1 + subdir: app + gradle: + - yes + + - versionName: 0.103-alpha2 + versionCode: '103002' + commit: v0.103-alpha2 + subdir: app + gradle: + - yes + + - versionName: 0.103-alpha3 + versionCode: '103003' + commit: v0.103-alpha3 + subdir: app + gradle: + - yes + +ArchivePolicy: 12 versions +AutoUpdateMode: None +UpdateCheckMode: Static +CurrentVersion: 0.102.3 +CurrentVersionCode: '102350' diff --git a/tests/rewritemeta.TestCase b/tests/rewritemeta.TestCase index 281913a2..47801747 100755 --- a/tests/rewritemeta.TestCase +++ b/tests/rewritemeta.TestCase @@ -19,7 +19,7 @@ import fdroidserver.metadata class RewritemetaTest(unittest.TestCase): ''' fdroidserver/metadata.py''' - def test_rewrite_yaml(self): + def test_rewrite_yaml_fakeotaupdate(self): # setup/reset test dir if necessary and setup params tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles') @@ -36,10 +36,32 @@ class RewritemetaTest(unittest.TestCase): # assert rewrite result with open(os.path.join(testdir, 'fake.ota.update.yml'), 'r', encoding='utf-8') as result: - with open('rewrite-metadata/fake.ota.update.yml', 'r', encoding='utf-8') as orig: + with open('metadata/rewrite-yml/fake.ota.update.yml', 'r', encoding='utf-8') as orig: self.maxDiff = None self.assertEqual(result.read(), orig.read()) + def test_rewrite_yaml_fdroidclient(self): + + # setup/reset test dir if necessary and setup params + tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles') + if not os.path.exists(tmpdir): + os.makedirs(tmpdir) + testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir) + fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']} + + # rewrite metadata + allapps = fdroidserver.metadata.read_metadata(xref=True) + for appid, app in allapps.items(): + if appid == 'org.fdroid.fdroid': + fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app) + + # assert rewrite result + with open(os.path.join(testdir, 'org.fdroid.fdroid.yml'), 'r', encoding='utf-8') as result: + with open('metadata/rewrite-yml/org.fdroid.fdroid.yml', 'r', encoding='utf-8') as orig: + self.maxDiff = None + self.assertEqual(result.read(), orig.read()) + + if __name__ == "__main__": parser = optparse.OptionParser() parser.add_option("-v", "--verbose", action="store_true", default=False, From 7aa92abebc84eb0c791956315785349f834debec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 2 May 2017 14:13:30 +0200 Subject: [PATCH 06/17] yaml rewrite version code as int --- fdroidserver/metadata.py | 9 +- .../metadata/rewrite-yml/fake.ota.update.yml | 4 +- .../rewrite-yml/org.fdroid.fdroid.yml | 272 +++++++++--------- 3 files changed, 145 insertions(+), 140 deletions(-) diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 17c8b6b4..1e252e58 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -970,7 +970,10 @@ def write_yaml(mf, app): b = ruamel.yaml.comments.CommentedMap() for field in fields: if hasattr(build, field) and getattr(build, field): - b.update({field: getattr(build, field)}) + if field is 'versionCode': + b.update({field: int(getattr(build, field))}) + else: + b.update({field: getattr(build, field)}) builds.append(b) # insert extra empty lines between builds @@ -1029,7 +1032,9 @@ def write_yaml(mf, app): if field in ['Description']: preformated.update({field: ruamel.yaml.scalarstring.preserve_literal(getattr(app, field))}) elif field is 'Builds': - preformated.update({'Builds': _builds_to_yaml(app)}) + preformated.update({field: _builds_to_yaml(app)}) + elif field is 'CurrentVersionCode': + preformated.update({field: int(getattr(app, field))}) else: preformated.update({field: getattr(app, field)}) diff --git a/tests/metadata/rewrite-yml/fake.ota.update.yml b/tests/metadata/rewrite-yml/fake.ota.update.yml index b974793f..dc8b6b9c 100644 --- a/tests/metadata/rewrite-yml/fake.ota.update.yml +++ b/tests/metadata/rewrite-yml/fake.ota.update.yml @@ -33,7 +33,7 @@ Repo: https://gitlab.com/fdroid/privileged-extension.git Builds: - versionName: 0.2.1 - versionCode: '2000' + versionCode: 2000 commit: 0.2.1 output: app/build/distributions/FDroidPrivilegedExtensionFromBinaries-$$VERSION$$.zip build: gradle assembleUpdateZipFromBinariesDebug @@ -41,4 +41,4 @@ Builds: AutoUpdateMode: Version %v UpdateCheckMode: Tags CurrentVersion: 0.2.1 -CurrentVersionCode: '2000' +CurrentVersionCode: 2000 diff --git a/tests/metadata/rewrite-yml/org.fdroid.fdroid.yml b/tests/metadata/rewrite-yml/org.fdroid.fdroid.yml index c1d91532..1982ace6 100644 --- a/tests/metadata/rewrite-yml/org.fdroid.fdroid.yml +++ b/tests/metadata/rewrite-yml/org.fdroid.fdroid.yml @@ -30,162 +30,162 @@ Repo: fdroidclient Builds: - versionName: '0.17' - versionCode: '8' + versionCode: 8 commit: c626ce5f6d3e10ae15942f01ff028be310cc695a init: rm -f build.xml - versionName: '0.18' - versionCode: '9' + versionCode: 9 commit: a6c9ed8d06b19315df9ba9041324f78139f7d238 init: rm -f build.xml - versionName: '0.19' - versionCode: '10' + versionCode: 10 commit: 540b7d0522f4d67a4896697f7342e4c75b4cbf59 init: rm -f build.xml - versionName: '0.20' - versionCode: '11' + versionCode: 11 commit: ddacfb856ad66c1c367e20c9cbecbfb15fe00813 init: rm -f build.xml - versionName: '0.21' - versionCode: '12' + versionCode: 12 commit: 49fa56aa6626a190f2d711120b69e435e9e615b1 init: rm -f build.xml - versionName: '0.22' - versionCode: '13' + versionCode: 13 commit: a6a33c942495cc4c74a7cb6e968efe0e00815e68 init: rm -f build.xml - versionName: '0.23' - versionCode: '14' + versionCode: 14 commit: aa58a8aad1a1c3832eafb9f1bdd6db8292d2c172 init: rm -f build.xml - versionName: '0.24' - versionCode: '15' + versionCode: 15 commit: 9b5fe2976443255b95027abd412f1c1e7f3d27b2 init: rm -f build.xml - versionName: '0.25' - versionCode: '16' + versionCode: 16 commit: 43977cc493e47a4dc841c4192ae8a40fb14b639b init: rm -f build.xml - versionName: '0.28' - versionCode: '19' + versionCode: 19 commit: f881aabe5bd0ac94771b03f1318a6e0972ab4128 target: android-15 - versionName: '0.29' - versionCode: '20' + versionCode: 20 commit: 87b229b95d0909bfd05c65c5670794e743626f6c target: android-15 - versionName: '0.30' - versionCode: '21' + versionCode: 21 commit: 497cb19840f79b31ae9590f5abd9e4df832b34ee target: android-15 - versionName: '0.31' - versionCode: '22' + versionCode: 22 commit: f99f8a544c7cb4d4a48ad09da00ad281af05f2ac target: android-15 - versionName: '0.32' - versionCode: '23' + versionCode: 23 commit: cc3970cc243e345416bfc62781ece6eeefd11495 target: android-15 - versionName: '0.33' - versionCode: '24' + versionCode: 24 commit: 58eb580159aa4d54767f0af1736cad233fec2475 target: android-15 - versionName: 0.34-test - versionCode: '25' + versionCode: 25 commit: 335d27b725b0f92e9e8804ae09518cd47bc7b021 target: android-15 - versionName: 0.35-test - versionCode: '26' + versionCode: 26 commit: a06d18b029392669e98359f86c07e442a04e6a13 target: android-15 - versionName: 0.36-test - versionCode: '27' + versionCode: 27 commit: 647e230c9e888c04bb0554078c5aa81da63548a0 target: android-15 - versionName: 0.37-test - versionCode: '28' + versionCode: 28 commit: 3c02e3ccc147a34af42cedf7d85f18dc75c8efa8 target: android-15 - versionName: '0.38' - versionCode: '38' + versionCode: 38 commit: 99b52c988d203811f434d6ac40675a63d5ae41ab target: android-15 - versionName: 0.39-test - versionCode: '39' + versionCode: 39 commit: 9a7d0b9f10710105d51d8206a7faa4408c60c20d target: android-15 - versionName: '0.40' - versionCode: '40' + versionCode: 40 commit: 51a67efdf1ee2819bee99d9263b2980dafaf761d target: android-15 - versionName: '0.42' - versionCode: '42' + versionCode: 42 commit: 36b815095ef51ca4f21887d973dbc0a50575cd65 target: android-15 - versionName: '0.43' - versionCode: '43' + versionCode: 43 disable: sdk doesn't like tzm (at f2109e4e0bf1597c625221d8d2d10050f146ba5a) commit: f2109e4e0bf1597c625221d8d2d10050f146ba5a target: android-15 - versionName: '0.44' - versionCode: '44' + versionCode: 44 disable: nasty upgrade bug commit: '0.44' target: android-15 - versionName: '0.45' - versionCode: '45' + versionCode: 45 commit: '0.45' target: android-15 - versionName: '0.46' - versionCode: '46' + versionCode: 46 commit: '0.46' target: android-15 - versionName: 0.47-test - versionCode: '47' + versionCode: 47 commit: 0.47-test target: android-17 - versionName: 0.48-test - versionCode: '48' + versionCode: 48 commit: 0.48-test target: android-17 - versionName: '0.50' - versionCode: '50' + versionCode: 50 commit: '0.50' - versionName: 0.51-test - versionCode: '51' + versionCode: 51 commit: 0.51-test - versionName: 0.52-test - versionCode: '52' + versionCode: 52 commit: 0.52-test submodules: true prebuild: rm -rf extern/Universal-Image-Loader/downloads @@ -194,91 +194,91 @@ Builds: - extern/Universal-Image-Loader/library - versionName: 0.53-test - versionCode: '53' + versionCode: 53 commit: 0.53-test submodules: true scandelete: - yes - versionName: '0.54' - versionCode: '540' + versionCode: 540 commit: '0.54' submodules: true scandelete: - yes - versionName: '0.55' - versionCode: '550' + versionCode: 550 commit: '0.55' submodules: true - versionName: 0.56-test - versionCode: '560' + versionCode: 560 commit: 0.56-test submodules: true - versionName: 0.57-test - versionCode: '570' + versionCode: 570 commit: 0.57-test submodules: true - versionName: '0.58' - versionCode: '580' + versionCode: 580 commit: '0.58' submodules: true - versionName: 0.59-test - versionCode: '590' + versionCode: 590 commit: 0.59-test submodules: true - versionName: 0.61-test - versionCode: '610' + versionCode: 610 commit: 0.61-test submodules: true - versionName: '0.62' - versionCode: '620' + versionCode: 620 commit: '0.62' submodules: true - versionName: '0.63' - versionCode: '630' + versionCode: 630 commit: '0.63' submodules: true - versionName: 0.64-test - versionCode: '640' + versionCode: 640 commit: 0.64-test submodules: true - versionName: '0.65' - versionCode: '650' + versionCode: 650 commit: '0.65' submodules: true - versionName: '0.66' - versionCode: '660' + versionCode: 660 commit: '0.66' submodules: true - versionName: 0.67-test - versionCode: '670' + versionCode: 670 commit: 0.67-test submodules: true - versionName: 0.68-test - versionCode: '680' + versionCode: 680 commit: 0.68-test submodules: true - versionName: 0.69-test - versionCode: '690' + versionCode: 690 commit: 0.69-test submodules: true - versionName: 0.70-test - versionCode: '700' + versionCode: 700 commit: 0.70-test submodules: true prebuild: ./ant-prepare.sh @@ -286,7 +286,7 @@ Builds: - . - versionName: '0.71' - versionCode: '710' + versionCode: 710 disable: Broken MTM/AndroidPinning commit: '0.71' submodules: true @@ -295,7 +295,7 @@ Builds: - . - versionName: '0.72' - versionCode: '720' + versionCode: 720 disable: proguard issues commit: '0.72' submodules: true @@ -304,7 +304,7 @@ Builds: - . - versionName: '0.73' - versionCode: '730' + versionCode: 730 disable: local repos broken commit: '0.73' submodules: true @@ -313,7 +313,7 @@ Builds: - . - versionName: '0.74' - versionCode: '740' + versionCode: 740 disable: still some proguard issues commit: '0.74' submodules: true @@ -322,7 +322,7 @@ Builds: - . - versionName: '0.75' - versionCode: '750' + versionCode: 750 disable: repo update progress crasher commit: '0.75' submodules: true @@ -331,7 +331,7 @@ Builds: - . - versionName: '0.76' - versionCode: '760' + versionCode: 760 commit: '0.76' submodules: true prebuild: ./ant-prepare.sh @@ -339,7 +339,7 @@ Builds: - . - versionName: 0.77-test - versionCode: '770' + versionCode: 770 commit: 0.77-test subdir: F-Droid submodules: true @@ -348,7 +348,7 @@ Builds: - . - versionName: '0.78' - versionCode: '780' + versionCode: 780 commit: '0.78' subdir: F-Droid submodules: true @@ -357,7 +357,7 @@ Builds: - . - versionName: 0.79-test - versionCode: '790' + versionCode: 790 commit: 0.79-test subdir: F-Droid submodules: true @@ -366,7 +366,7 @@ Builds: - . - versionName: 0.80-test - versionCode: '800' + versionCode: 800 commit: 0.80-test subdir: F-Droid submodules: true @@ -375,7 +375,7 @@ Builds: - . - versionName: 0.81-test - versionCode: '810' + versionCode: 810 commit: 0.81-test subdir: F-Droid submodules: true @@ -384,7 +384,7 @@ Builds: - . - versionName: '0.82' - versionCode: '820' + versionCode: 820 commit: '0.82' subdir: F-Droid submodules: true @@ -393,7 +393,7 @@ Builds: - . - versionName: '0.83' - versionCode: '830' + versionCode: 830 commit: '0.83' subdir: F-Droid submodules: true @@ -402,7 +402,7 @@ Builds: - . - versionName: 0.84-test - versionCode: '840' + versionCode: 840 commit: 0.84-test subdir: F-Droid submodules: true @@ -411,7 +411,7 @@ Builds: - . - versionName: 0.85-test - versionCode: '850' + versionCode: 850 commit: 0.85-test subdir: F-Droid submodules: true @@ -420,7 +420,7 @@ Builds: - . - versionName: 0.86-test - versionCode: '860' + versionCode: 860 commit: 0.86-test subdir: F-Droid submodules: true @@ -429,7 +429,7 @@ Builds: - . - versionName: 0.87-test - versionCode: '870' + versionCode: 870 commit: 0.87-test subdir: F-Droid submodules: true @@ -438,7 +438,7 @@ Builds: - . - versionName: '0.88' - versionCode: '880' + versionCode: 880 commit: '0.88' subdir: F-Droid submodules: true @@ -447,7 +447,7 @@ Builds: - . - versionName: 0.89-test - versionCode: '890' + versionCode: 890 commit: 0.89-test subdir: F-Droid submodules: true @@ -456,7 +456,7 @@ Builds: - . - versionName: 0.90-test - versionCode: '900' + versionCode: 900 commit: 0.90-test subdir: F-Droid submodules: true @@ -465,7 +465,7 @@ Builds: - . - versionName: '0.91' - versionCode: '910' + versionCode: 910 commit: '0.91' subdir: F-Droid submodules: true @@ -474,7 +474,7 @@ Builds: - . - versionName: '0.92' - versionCode: '920' + versionCode: 920 commit: '0.92' subdir: F-Droid submodules: true @@ -483,7 +483,7 @@ Builds: - . - versionName: 0.93-test - versionCode: '930' + versionCode: 930 commit: 0.93-test subdir: F-Droid submodules: true @@ -492,7 +492,7 @@ Builds: - . - versionName: 0.94-test - versionCode: '940' + versionCode: 940 commit: 0.94-test subdir: F-Droid submodules: true @@ -500,7 +500,7 @@ Builds: - yes - versionName: 0.95-alpha1 - versionCode: '95001' + versionCode: 95001 commit: 0.95-alpha1 subdir: F-Droid submodules: true @@ -508,7 +508,7 @@ Builds: - yes - versionName: 0.95-alpha2 - versionCode: '95002' + versionCode: 95002 commit: v0.95-alpha2 subdir: F-Droid submodules: true @@ -516,7 +516,7 @@ Builds: - yes - versionName: '0.95' - versionCode: '95050' + versionCode: 95050 commit: v0.95 subdir: F-Droid submodules: true @@ -524,7 +524,7 @@ Builds: - yes - versionName: 0.95.1 - versionCode: '95150' + versionCode: 95150 commit: v0.95.1 subdir: F-Droid submodules: true @@ -532,49 +532,49 @@ Builds: - yes - versionName: 0.96-alpha1 - versionCode: '96001' + versionCode: 96001 commit: v0.96-alpha1 subdir: F-Droid gradle: - yes - versionName: 0.96-alpha2 - versionCode: '96002' + versionCode: 96002 commit: v0.96-alpha2 subdir: F-Droid gradle: - yes - versionName: 0.96-alpha3 - versionCode: '96003' + versionCode: 96003 commit: v0.96-alpha3 subdir: F-Droid gradle: - yes - versionName: 0.96-alpha4 - versionCode: '96004' + versionCode: 96004 commit: v0.96-alpha4 subdir: F-Droid gradle: - yes - versionName: 0.96-alpha5 - versionCode: '96005' + versionCode: 96005 commit: v0.96-alpha5 subdir: F-Droid gradle: - yes - versionName: 0.96-alpha6 - versionCode: '96006' + versionCode: 96006 commit: v0.96-alpha6 subdir: F-Droid gradle: - yes - versionName: '0.96' - versionCode: '96050' + versionCode: 96050 commit: v0.96 subdir: F-Droid gradle: @@ -583,7 +583,7 @@ Builds: - extern/AndroidPinning/res/raw/cacerts - versionName: 0.96.1 - versionCode: '96150' + versionCode: 96150 commit: v0.96.1 subdir: F-Droid gradle: @@ -592,7 +592,7 @@ Builds: - extern/AndroidPinning/res/raw/cacerts - versionName: 0.97-alpha1 - versionCode: '97001' + versionCode: 97001 commit: v0.97-alpha1 subdir: F-Droid gradle: @@ -601,343 +601,343 @@ Builds: - extern/AndroidPinning/res/raw/cacerts - versionName: 0.97-alpha2 - versionCode: '97002' + versionCode: 97002 commit: v0.97-alpha2 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha3 - versionCode: '97003' + versionCode: 97003 commit: v0.97-alpha3 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha4 - versionCode: '97004' + versionCode: 97004 commit: v0.97-alpha4 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha5 - versionCode: '97005' + versionCode: 97005 commit: v0.97-alpha5 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha6 - versionCode: '97006' + versionCode: 97006 commit: v0.97-alpha6 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha7 - versionCode: '97007' + versionCode: 97007 commit: v0.97-alpha7 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha8 - versionCode: '97008' + versionCode: 97008 commit: v0.97-alpha8 subdir: F-Droid gradle: - yes - versionName: '0.97' - versionCode: '97050' + versionCode: 97050 commit: v0.97 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha1 - versionCode: '98001' + versionCode: 98001 commit: v0.98-alpha1 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha2 - versionCode: '98002' + versionCode: 98002 commit: v0.98-alpha2 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha3 - versionCode: '98003' + versionCode: 98003 commit: v0.98-alpha3 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha4 - versionCode: '98004' + versionCode: 98004 commit: v0.98-alpha4 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha5 - versionCode: '98005' + versionCode: 98005 commit: v0.98-alpha5 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha6 - versionCode: '98006' + versionCode: 98006 commit: v0.98-alpha6 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha7 - versionCode: '98007' + versionCode: 98007 commit: v0.98-alpha7 subdir: F-Droid gradle: - yes - versionName: '0.98' - versionCode: '98050' + versionCode: 98050 commit: v0.98 subdir: F-Droid gradle: - yes - versionName: 0.98.1 - versionCode: '98150' + versionCode: 98150 commit: v0.98.1 subdir: F-Droid gradle: - yes - versionName: 0.99-alpha1 - versionCode: '99001' + versionCode: 99001 commit: v0.99-alpha1 subdir: F-Droid gradle: - yes - versionName: 0.99-alpha2 - versionCode: '99002' + versionCode: 99002 commit: v0.99-alpha2 subdir: F-Droid gradle: - yes - versionName: '0.99' - versionCode: '99050' + versionCode: 99050 commit: v0.99 subdir: F-Droid gradle: - yes - versionName: 0.99.1 - versionCode: '99150' + versionCode: 99150 commit: v0.99.1 subdir: F-Droid gradle: - yes - versionName: 0.99.2 - versionCode: '99250' + versionCode: 99250 commit: v0.99.2 subdir: F-Droid gradle: - yes - versionName: 0.100-alpha1 - versionCode: '100001' + versionCode: 100001 commit: v0.100-alpha1 subdir: F-Droid gradle: - yes - versionName: 0.100-alpha2 - versionCode: '100002' + versionCode: 100002 commit: v0.100-alpha2 subdir: F-Droid gradle: - yes - versionName: 0.100-alpha3 - versionCode: '100003' + versionCode: 100003 commit: v0.100-alpha3 subdir: app gradle: - yes - versionName: 0.100-alpha4 - versionCode: '100004' + versionCode: 100004 commit: v0.100-alpha4 subdir: app gradle: - yes - versionName: 0.100-alpha5 - versionCode: '100005' + versionCode: 100005 commit: v0.100-alpha5 subdir: app gradle: - yes - versionName: 0.100-alpha6 - versionCode: '100006' + versionCode: 100006 commit: v0.100-alpha6 subdir: app gradle: - yes - versionName: 0.100-alpha7 - versionCode: '100007' + versionCode: 100007 commit: v0.100-alpha7 subdir: app gradle: - yes - versionName: 0.100-alpha8 - versionCode: '100008' + versionCode: 100008 commit: v0.100-alpha8 subdir: app gradle: - yes - versionName: '0.100' - versionCode: '100050' + versionCode: 100050 commit: v0.100 subdir: app gradle: - yes - versionName: 0.100.1 - versionCode: '100150' + versionCode: 100150 commit: v0.100.1 subdir: app gradle: - yes - versionName: 0.101-alpha1 - versionCode: '101001' + versionCode: 101001 commit: v0.101-alpha1 subdir: app gradle: - yes - versionName: 0.101-alpha2 - versionCode: '101002' + versionCode: 101002 commit: v0.101-alpha2 subdir: app gradle: - yes - versionName: 0.101-alpha3 - versionCode: '101003' + versionCode: 101003 commit: v0.101-alpha3 subdir: app gradle: - yes - versionName: 0.101-alpha4 - versionCode: '101004' + versionCode: 101004 commit: v0.101-alpha4 subdir: app gradle: - yes - versionName: 0.101-alpha5 - versionCode: '101005' + versionCode: 101005 commit: v0.101-alpha5 subdir: app gradle: - yes - versionName: 0.101-alpha6 - versionCode: '101006' + versionCode: 101006 commit: v0.101-alpha6 subdir: app gradle: - yes - versionName: '0.101' - versionCode: '101050' + versionCode: 101050 commit: v0.101 subdir: app gradle: - yes - versionName: 0.102-alpha1 - versionCode: '102001' + versionCode: 102001 commit: v0.102-alpha1 subdir: app gradle: - yes - versionName: 0.102-alpha2 - versionCode: '102002' + versionCode: 102002 commit: v0.102-alpha2 subdir: app gradle: - yes - versionName: 0.102-alpha3 - versionCode: '102003' + versionCode: 102003 commit: v0.102-alpha3 subdir: app gradle: - yes - versionName: '0.102' - versionCode: '102050' + versionCode: 102050 commit: v0.102 subdir: app gradle: - yes - versionName: 0.102.1 - versionCode: '102150' + versionCode: 102150 commit: v0.102.1 subdir: app gradle: - yes - versionName: 0.102.2 - versionCode: '102250' + versionCode: 102250 commit: v0.102.2 subdir: app gradle: - yes - versionName: 0.102.3 - versionCode: '102350' + versionCode: 102350 commit: v0.102.3 subdir: app gradle: - yes - versionName: 0.103-alpha1 - versionCode: '103001' + versionCode: 103001 commit: v0.103-alpha1 subdir: app gradle: - yes - versionName: 0.103-alpha2 - versionCode: '103002' + versionCode: 103002 commit: v0.103-alpha2 subdir: app gradle: - yes - versionName: 0.103-alpha3 - versionCode: '103003' + versionCode: 103003 commit: v0.103-alpha3 subdir: app gradle: @@ -947,4 +947,4 @@ ArchivePolicy: 12 versions AutoUpdateMode: None UpdateCheckMode: Static CurrentVersion: 0.102.3 -CurrentVersionCode: '102350' +CurrentVersionCode: 102350 From f1e0089931745bde847acb0aa7f2dff24b748e41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Sun, 7 May 2017 02:13:25 +0200 Subject: [PATCH 07/17] prettify write_yaml metadata --- fdroidserver/metadata.py | 94 ++++++++++--------- .../app.with.speacial.build.params.txt | 64 +++++++++++++ .../app.with.speacial.build.params.yml | 80 ++++++++++++++++ tests/rewritemeta.TestCase | 21 +++++ 4 files changed, 215 insertions(+), 44 deletions(-) create mode 100644 tests/metadata/app.with.speacial.build.params.txt create mode 100644 tests/metadata/rewrite-yml/app.with.speacial.build.params.yml diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 1e252e58..3596d522 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -49,7 +49,7 @@ def warn_or_exception(value): elif warnings_action == 'error': raise MetaDataException(value) else: - logging.warn(value) + logging.warning(value) # To filter which ones should be written to the metadata files if @@ -179,6 +179,7 @@ TYPE_SCRIPT = 5 TYPE_MULTILINE = 6 TYPE_BUILD = 7 TYPE_BUILD_V2 = 8 +TYPE_INT = 9 fieldtypes = { 'Description': TYPE_MULTILINE, @@ -318,6 +319,7 @@ class Build(dict): flagtypes = { + 'versionCode': TYPE_INT, 'extlibs': TYPE_LIST, 'srclibs': TYPE_LIST, 'patch': TYPE_LIST, @@ -960,41 +962,67 @@ def write_yaml(mf, app): '''Creates a YAML representation of a App/Build instance''' return dumper.represent_dict(data) - def _builds_to_yaml(app): + def _field_to_yaml(typ, value): + if typ is TYPE_STRING: + return str(value) + elif typ is TYPE_INT: + return int(value) + elif typ is TYPE_MULTILINE: + if '\n' in value: + return ruamel.yaml.scalarstring.preserve_literal(str(value)) + else: + return str(value) + elif typ is TYPE_SCRIPT: + if len(value) > 50: + return ruamel.yaml.scalarstring.preserve_literal(value) + else: + return value + else: + return value + def _app_to_yaml(app): + cm = ruamel.yaml.comments.CommentedMap() + insert_newline = False + for field in yaml_app_field_order: + if field is '\n': + # next iteration will need to insert a newline + insert_newline = True + else: + if (hasattr(app, field) and getattr(app, field)) or field is 'Builds': + if field is 'Builds': + cm.update({field: _builds_to_yaml(app)}) + elif field is 'CurrentVersionCode': + cm.update({field: _field_to_yaml(TYPE_INT, getattr(app, field))}) + else: + cm.update({field: _field_to_yaml(fieldtype(field), getattr(app, field))}) + + if insert_newline: + # we need to prepend a newline in front of this field + insert_newline = False + # inserting empty lines is not supported so we add a + # bogus comment and over-write its value + cm.yaml_set_comment_before_after_key(field, 'bogus') + cm.ca.items[field][1][-1].value = '\n' + return cm + + def _builds_to_yaml(app): fields = ['versionName', 'versionCode'] fields.extend(build_flags_order) - builds = ruamel.yaml.comments.CommentedSeq() for build in app.builds: b = ruamel.yaml.comments.CommentedMap() for field in fields: if hasattr(build, field) and getattr(build, field): - if field is 'versionCode': - b.update({field: int(getattr(build, field))}) - else: - b.update({field: getattr(build, field)}) + b.update({field: _field_to_yaml(flagtype(field), getattr(build, field))}) builds.append(b) - # insert extra empty lines between builds + # insert extra empty lines between build entries for i in range(1, len(builds)): builds.yaml_set_comment_before_after_key(i, 'bogus') builds.ca.items[i][1][-1].value = '\n' return builds - empty_keys = [k for k, v in app.items() if not v] - for k in empty_keys: - del app[k] - - for k in ['added', 'lastUpdated', 'id', 'metadatapath']: - if k in app: - del app[k] - - # yaml.add_representer(fdroidserver.metadata.App, _class_as_dict_representer) - ruamel.yaml.add_representer(fdroidserver.metadata.Build, _class_as_dict_representer) - # yaml.dump(app.asOrderedDict(), mf, default_flow_style=False, Dumper=yamlordereddictloader.Dumper) - yaml_app_field_order = [ 'Categories', 'License', @@ -1022,30 +1050,8 @@ def write_yaml(mf, app): 'CurrentVersionCode', ] - preformated = ruamel.yaml.comments.CommentedMap() - insert_newline = False - for field in yaml_app_field_order: - if field is '\n': - insert_newline = True - else: - if (hasattr(app, field) and getattr(app, field)) or field is 'Builds': - if field in ['Description']: - preformated.update({field: ruamel.yaml.scalarstring.preserve_literal(getattr(app, field))}) - elif field is 'Builds': - preformated.update({field: _builds_to_yaml(app)}) - elif field is 'CurrentVersionCode': - preformated.update({field: int(getattr(app, field))}) - else: - preformated.update({field: getattr(app, field)}) - - if insert_newline: - insert_newline = False - # inserting empty lines is not supported so we add a - # bogus comment and over-write its value - preformated.yaml_set_comment_before_after_key(field, 'bogus') - preformated.ca.items[field][1][-1].value = '\n' - - ruamel.yaml.round_trip_dump(preformated, mf, indent=4, block_seq_indent=2) + yaml_app = _app_to_yaml(app) + ruamel.yaml.round_trip_dump(yaml_app, mf, indent=4, block_seq_indent=2) build_line_sep = re.compile(r'(? Accounts & Sync => Add Account". Depending on +how many friends you have, the first import might take a while, so be patient. + +* Facebook does not allow to export phone numbers or emails: only names, pictures and statuses are synced. +* Facebook users have the option to block one or all apps: if they opt for that, they will be EXCLUDED from your friends list. + +Appbrain SDK was removed before building. +. + +Repo Type:git +Repo:https://github.com/loadrunner/Facebook-Contact-Sync.git + +Build:1.0.0,32 + commit=b3879c973e7cac3a3319 + +Build:1.0.1,33 + commit=252c8dd4c9 + +Build:1.2.0,39 + commit=v1.2.0 + patch=appbrain.patch + srclibs=FacebookSDK@sdk-version-3.0.1 + rm=libs/appbrain-sdk-android.jar + prebuild=sed -i 's@\(reference.1=\).*@\1$$FacebookSDK$$@' project.properties && \ + sed -i 's/Class\[\]/Class\\[\]/g' $$FacebookSDK$$/src/com/facebook/model/GraphObject.java + +Build:1.2.2,42 + commit=v1.2.2 + patch=appbrain.patch + srclibs=FacebookSDK@sdk-version-3.0.2 + rm=libs/appbrain-sdk-android.jar + extlibs=android/android-support-v4.jar + prebuild=mv libs/android-support-v4.jar $$FacebookSDK$$/libs/ && \ + sed -i 's@\(reference.1=\).*@\1$$FacebookSDK$$@' project.properties && \ + sed -i 's/Class\[\]/Class\\[\]/g' $$FacebookSDK$$/src/com/facebook/model/GraphObject.java + +Build:2.1.1,48 + commit=2.1.1 + patch=manifest-ads.patch,mobilecore.patch + srclibs=FacebookSDK@sdk-version-3.0.2 + rm=libs/applovin*,libs/mobileCore* + extlibs=android/android-support-v4.jar + prebuild=cp libs/android-support-v4.jar $$FacebookSDK$$/libs/ && \ + sed -i 's@\(reference.1=\).*@\1$$FacebookSDK$$@' project.properties && \ + sed -i 's/Class\[\]/Class\\[\]/g' $$FacebookSDK$$/src/com/facebook/model/GraphObject.java + +Build:2.1.2,49 + disable=Labelled as pre-release, so skipped + +Archive Policy:0 versions +Auto Update Mode:None +Update Check Mode:None +Current Version:2.1.2 +Current Version Code:49 diff --git a/tests/metadata/rewrite-yml/app.with.speacial.build.params.yml b/tests/metadata/rewrite-yml/app.with.speacial.build.params.yml new file mode 100644 index 00000000..6f579797 --- /dev/null +++ b/tests/metadata/rewrite-yml/app.with.speacial.build.params.yml @@ -0,0 +1,80 @@ +Categories: + - System +License: GPL-3.0 +SourceCode: https://github.com/loadrunner/Facebook-Contact-Sync +IssueTracker: https://github.com/loadrunner/Facebook-Contact-Sync/issues + +AutoName: UberSync for Facebook +Summary: Sync your Facebook Contacts +Description: |- + To configure, go to "Settings => Accounts & Sync => Add Account". Depending on + how many friends you have, the first import might take a while, so be patient. + + * Facebook does not allow to export phone numbers or emails: only names, pictures and statuses are synced. + * Facebook users have the option to block one or all apps: if they opt for that, they will be EXCLUDED from your friends list. + + Appbrain SDK was removed before building. + +RepoType: git +Repo: https://github.com/loadrunner/Facebook-Contact-Sync.git + +Builds: + - versionName: 1.0.0 + versionCode: 32 + commit: b3879c973e7cac3a3319 + + - versionName: 1.0.1 + versionCode: 33 + commit: 252c8dd4c9 + + - versionName: 1.2.0 + versionCode: 39 + commit: v1.2.0 + patch: + - appbrain.patch + srclibs: + - FacebookSDK@sdk-version-3.0.1 + rm: + - libs/appbrain-sdk-android.jar + prebuild: |- + sed -i 's@\(reference.1=\).*@\1$$FacebookSDK$$@' project.properties && sed -i 's/Class\[\]/Class\\[\]/g' $$FacebookSDK$$/src/com/facebook/model/GraphObject.java + + - versionName: 1.2.2 + versionCode: 42 + commit: v1.2.2 + patch: + - appbrain.patch + srclibs: + - FacebookSDK@sdk-version-3.0.2 + rm: + - libs/appbrain-sdk-android.jar + extlibs: + - android/android-support-v4.jar + prebuild: |- + mv libs/android-support-v4.jar $$FacebookSDK$$/libs/ && sed -i 's@\(reference.1=\).*@\1$$FacebookSDK$$@' project.properties && sed -i 's/Class\[\]/Class\\[\]/g' $$FacebookSDK$$/src/com/facebook/model/GraphObject.java + + - versionName: 2.1.1 + versionCode: 48 + commit: 2.1.1 + patch: + - manifest-ads.patch + - mobilecore.patch + srclibs: + - FacebookSDK@sdk-version-3.0.2 + rm: + - libs/applovin* + - libs/mobileCore* + extlibs: + - android/android-support-v4.jar + prebuild: |- + cp libs/android-support-v4.jar $$FacebookSDK$$/libs/ && sed -i 's@\(reference.1=\).*@\1$$FacebookSDK$$@' project.properties && sed -i 's/Class\[\]/Class\\[\]/g' $$FacebookSDK$$/src/com/facebook/model/GraphObject.java + + - versionName: 2.1.2 + versionCode: 49 + disable: Labelled as pre-release, so skipped + +ArchivePolicy: 0 versions +AutoUpdateMode: None +UpdateCheckMode: None +CurrentVersion: 2.1.2 +CurrentVersionCode: 49 diff --git a/tests/rewritemeta.TestCase b/tests/rewritemeta.TestCase index 47801747..1801ebc3 100755 --- a/tests/rewritemeta.TestCase +++ b/tests/rewritemeta.TestCase @@ -61,6 +61,27 @@ class RewritemetaTest(unittest.TestCase): self.maxDiff = None self.assertEqual(result.read(), orig.read()) + def test_rewrite_yaml_special_build_params(self): + + # setup/reset test dir if necessary and setup params + tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles') + if not os.path.exists(tmpdir): + os.makedirs(tmpdir) + testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir) + fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']} + + # rewrite metadata + allapps = fdroidserver.metadata.read_metadata(xref=True) + for appid, app in allapps.items(): + if appid == 'app.with.speacial.build.params': + fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app) + + # assert rewrite result + with open(os.path.join(testdir, 'app.with.speacial.build.params.yml'), 'r', encoding='utf-8') as result: + with open('metadata/rewrite-yml/app.with.speacial.build.params.yml', 'r', encoding='utf-8') as orig: + self.maxDiff = None + self.assertEqual(result.read(), orig.read()) + if __name__ == "__main__": parser = optparse.OptionParser() From 7ab197be2e01c3b8af9b780aafb3b59ba9e2ad39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Sun, 7 May 2017 18:23:22 +0200 Subject: [PATCH 08/17] completed ordered yaml field list --- fdroidserver/metadata.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 3596d522..f014d1f0 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -1024,8 +1024,14 @@ def write_yaml(mf, app): return builds yaml_app_field_order = [ + 'Disabled', + 'AnitFeatures', + 'Provides', 'Categories', 'License', + 'AuthorName', + 'AuthorEmail', + 'AuthorWebSite', 'WebSite', 'SourceCode', 'IssueTracker', @@ -1033,21 +1039,34 @@ def write_yaml(mf, app): 'Donate', 'FlattrID', 'Bitcoin', + 'Litecoin', '\n', + 'Name', 'AutoName', 'Summary', 'Description', '\n', + 'RequiresRoot', + '\n', 'RepoType', 'Repo', + 'Binaries', '\n', 'Builds', '\n', + 'MaintainerNotes', + '\n', 'ArchivePolicy', 'AutoUpdateMode', 'UpdateCheckMode', + 'UpdateCheckIgnore', + 'VercodeOperation', + 'UpdateCheckName', + 'UpdateCheckData', 'CurrentVersion', 'CurrentVersionCode', + '\n', + 'NoSourceSince', ] yaml_app = _app_to_yaml(app) From cdec1a5b80826c9eee7f1fafa4f13704c671e563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 9 May 2017 13:15:28 +0200 Subject: [PATCH 09/17] add ruamel yaml to buildserver depenencies --- buildserver/provision-apt-get-install | 1 + 1 file changed, 1 insertion(+) diff --git a/buildserver/provision-apt-get-install b/buildserver/provision-apt-get-install index c11d996b..a1b0f4b1 100644 --- a/buildserver/provision-apt-get-install +++ b/buildserver/provision-apt-get-install @@ -91,6 +91,7 @@ packages=" python3-pyasn1-modules python3-requests python3-yaml + python3-ruamel.yaml qt5-default qtbase5-dev quilt From fc070ee65750eda97784c02cf8cc825a45d7d39d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 9 May 2017 14:13:14 +0200 Subject: [PATCH 10/17] refactored yaml tests into metadata test case; fixed typo --- tests/metadata.TestCase | 64 +++++++++++++ ....txt => app.with.special.build.params.txt} | 0 ....yml => app.with.special.build.params.yml} | 0 tests/rewritemeta.TestCase | 94 ------------------- 4 files changed, 64 insertions(+), 94 deletions(-) rename tests/metadata/{app.with.speacial.build.params.txt => app.with.special.build.params.txt} (100%) rename tests/metadata/rewrite-yml/{app.with.speacial.build.params.yml => app.with.special.build.params.yml} (100%) delete mode 100755 tests/rewritemeta.TestCase diff --git a/tests/metadata.TestCase b/tests/metadata.TestCase index 791ac652..712d16f7 100755 --- a/tests/metadata.TestCase +++ b/tests/metadata.TestCase @@ -8,6 +8,7 @@ import os import sys import unittest import yaml +import tempfile localmodule = os.path.realpath( os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..')) @@ -54,6 +55,69 @@ class MetadataTest(unittest.TestCase): # yaml.add_representer(fdroidserver.metadata.Build, _build_yaml_representer) # yaml.dump(frommeta, f, default_flow_style=False) + def test_rewrite_yaml_fakeotaupdate(self): + + # setup/reset test dir if necessary and setup params + tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles') + if not os.path.exists(tmpdir): + os.makedirs(tmpdir) + testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir) + fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']} + + # rewrite metadata + allapps = fdroidserver.metadata.read_metadata(xref=True) + for appid, app in allapps.items(): + if appid == 'fake.ota.update': + fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app) + + # assert rewrite result + with open(os.path.join(testdir, 'fake.ota.update.yml'), 'r', encoding='utf-8') as result: + with open('metadata/rewrite-yml/fake.ota.update.yml', 'r', encoding='utf-8') as orig: + self.maxDiff = None + self.assertEqual(result.read(), orig.read()) + + def test_rewrite_yaml_fdroidclient(self): + + # setup/reset test dir if necessary and setup params + tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles') + if not os.path.exists(tmpdir): + os.makedirs(tmpdir) + testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir) + fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']} + + # rewrite metadata + allapps = fdroidserver.metadata.read_metadata(xref=True) + for appid, app in allapps.items(): + if appid == 'org.fdroid.fdroid': + fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app) + + # assert rewrite result + with open(os.path.join(testdir, 'org.fdroid.fdroid.yml'), 'r', encoding='utf-8') as result: + with open('metadata/rewrite-yml/org.fdroid.fdroid.yml', 'r', encoding='utf-8') as orig: + self.maxDiff = None + self.assertEqual(result.read(), orig.read()) + + def test_rewrite_yaml_special_build_params(self): + + # setup/reset test dir if necessary and setup params + tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles') + if not os.path.exists(tmpdir): + os.makedirs(tmpdir) + testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir) + fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']} + + # rewrite metadata + allapps = fdroidserver.metadata.read_metadata(xref=True) + for appid, app in allapps.items(): + if appid == 'app.with.special.build.params': + fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app) + + # assert rewrite result + with open(os.path.join(testdir, 'app.with.special.build.params.yml'), 'r', encoding='utf-8') as result: + with open('metadata/rewrite-yml/app.with.special.build.params.yml', 'r', encoding='utf-8') as orig: + self.maxDiff = None + self.assertEqual(result.read(), orig.read()) + if __name__ == "__main__": parser = optparse.OptionParser() diff --git a/tests/metadata/app.with.speacial.build.params.txt b/tests/metadata/app.with.special.build.params.txt similarity index 100% rename from tests/metadata/app.with.speacial.build.params.txt rename to tests/metadata/app.with.special.build.params.txt diff --git a/tests/metadata/rewrite-yml/app.with.speacial.build.params.yml b/tests/metadata/rewrite-yml/app.with.special.build.params.yml similarity index 100% rename from tests/metadata/rewrite-yml/app.with.speacial.build.params.yml rename to tests/metadata/rewrite-yml/app.with.special.build.params.yml diff --git a/tests/rewritemeta.TestCase b/tests/rewritemeta.TestCase deleted file mode 100755 index 1801ebc3..00000000 --- a/tests/rewritemeta.TestCase +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env python3 - -import inspect -import optparse -import os -import sys -import unittest -import tempfile - -localmodule = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..')) -if localmodule not in sys.path: - sys.path.insert(0, localmodule) - -import fdroidserver.common -import fdroidserver.metadata - - -class RewritemetaTest(unittest.TestCase): - ''' fdroidserver/metadata.py''' - - def test_rewrite_yaml_fakeotaupdate(self): - - # setup/reset test dir if necessary and setup params - tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles') - if not os.path.exists(tmpdir): - os.makedirs(tmpdir) - testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir) - fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']} - - # rewrite metadata - allapps = fdroidserver.metadata.read_metadata(xref=True) - for appid, app in allapps.items(): - if appid == 'fake.ota.update': - fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app) - - # assert rewrite result - with open(os.path.join(testdir, 'fake.ota.update.yml'), 'r', encoding='utf-8') as result: - with open('metadata/rewrite-yml/fake.ota.update.yml', 'r', encoding='utf-8') as orig: - self.maxDiff = None - self.assertEqual(result.read(), orig.read()) - - def test_rewrite_yaml_fdroidclient(self): - - # setup/reset test dir if necessary and setup params - tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles') - if not os.path.exists(tmpdir): - os.makedirs(tmpdir) - testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir) - fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']} - - # rewrite metadata - allapps = fdroidserver.metadata.read_metadata(xref=True) - for appid, app in allapps.items(): - if appid == 'org.fdroid.fdroid': - fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app) - - # assert rewrite result - with open(os.path.join(testdir, 'org.fdroid.fdroid.yml'), 'r', encoding='utf-8') as result: - with open('metadata/rewrite-yml/org.fdroid.fdroid.yml', 'r', encoding='utf-8') as orig: - self.maxDiff = None - self.assertEqual(result.read(), orig.read()) - - def test_rewrite_yaml_special_build_params(self): - - # setup/reset test dir if necessary and setup params - tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles') - if not os.path.exists(tmpdir): - os.makedirs(tmpdir) - testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir) - fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']} - - # rewrite metadata - allapps = fdroidserver.metadata.read_metadata(xref=True) - for appid, app in allapps.items(): - if appid == 'app.with.speacial.build.params': - fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app) - - # assert rewrite result - with open(os.path.join(testdir, 'app.with.speacial.build.params.yml'), 'r', encoding='utf-8') as result: - with open('metadata/rewrite-yml/app.with.speacial.build.params.yml', 'r', encoding='utf-8') as orig: - self.maxDiff = None - self.assertEqual(result.read(), orig.read()) - - -if __name__ == "__main__": - parser = optparse.OptionParser() - parser.add_option("-v", "--verbose", action="store_true", default=False, - help="Spew out even more information than normal") - (fdroidserver.common.options, args) = parser.parse_args(['--verbose']) - - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(RewritemetaTest)) - unittest.main() From 54963506a057fdff7447828ebc86a99fb8271441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 16 May 2017 10:29:32 +0200 Subject: [PATCH 11/17] set required minimum ruamel.yaml version --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 00e3755f..c1705ed9 100644 --- a/setup.py +++ b/setup.py @@ -38,7 +38,7 @@ setup(name='fdroidserver', 'pyasn1-modules', 'python-vagrant', 'PyYAML', - 'ruamel.yaml', + 'ruamel.yaml >= 0.13', 'requests < 2.11', 'docker-py == 1.9.0', ], From 75ebb6e8ccca19ae936463b5574b452a0825ad9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 16 May 2017 15:04:37 +0200 Subject: [PATCH 12/17] fix building with yml metadata --- fdroidserver/build.py | 8 ++++---- fdroidserver/common.py | 30 ++++++++++++++++++++++++++++-- fdroidserver/metadata.py | 14 ++++++++++---- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/fdroidserver/build.py b/fdroidserver/build.py index 1cfc7ff5..cc73679d 100644 --- a/fdroidserver/build.py +++ b/fdroidserver/build.py @@ -136,8 +136,8 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force): ftp.mkdir('metadata') ftp.mkdir('srclibs') ftp.chdir('metadata') - ftp.put(os.path.join('metadata', app.id + '.txt'), - app.id + '.txt') + metadatapath = common.metadata_relpath(app.id) + ftp.put(metadatapath, os.path.basename(metadatapath)) # And patches if there are any... if os.path.exists(os.path.join('metadata', app.id)): send_dir(os.path.join('metadata', app.id)) @@ -185,8 +185,8 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force): send_dir(lib) # Copy the metadata file too... ftp.chdir(homedir + '/srclibs') - ftp.put(os.path.join('srclibs', name + '.txt'), - name + '.txt') + srclibpath = common.metadata_srclib_relpath(name) + ftp.put(srclibpath, os.path.basename(srclibpath)) # Copy the main app source code # (no need if it's a srclib) if (not basesrclib) and os.path.exists(build_dir): diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 76888cce..b908dd6f 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -397,8 +397,8 @@ def get_local_metadata_files(): def read_pkg_args(args, allow_vercodes=False): """ - Given the arguments in the form of multiple appid:[vc] strings, this returns - a dictionary with the set of vercodes specified for each package. + :param args: arguments in the form of multiple appid:[vc] strings + :returns: a dictionary with the set of vercodes specified for each package """ vercodes = {} @@ -474,6 +474,32 @@ def has_extension(filename, ext): return ext == f_ext +def metadata_srclib_relpath(name): + ''' + :param name: name of the src lib. (eg. 'HttpClient') + :returns: relative path for requested srclib (eg. 'srclib/HttpClient.txt') + ''' + global config + for ext in config['accepted_formats']: + pth = os.path.join('srclibs', name + '.' + ext) + if os.path.isfile(pth): + return pth + raise FDroidException("could not find srclib metadata file for '{}'".format(name)) + + +def metadata_relpath(appid): + ''' + :param appid: an appid. (eg. 'org.fdroid.fdroid') + :returns: relative path for requested srclib (eg. 'metadata/org.fdroid.fdroid.txt') + ''' + global config + for ext in config['accepted_formats']: + pth = os.path.join('metadata', appid + '.' + ext) + if os.path.isfile(pth): + return pth + raise FDroidException("could not find metadata file for '{}'".format(appid)) + + publish_name_regex = re.compile(r"^(.+)_([0-9]+)\.(apk|zip)$") diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index f014d1f0..481f10c6 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -812,6 +812,12 @@ def post_metadata_parse(app): if type(v) in (float, int): app[k] = str(v) + if 'Builds' in app: + app['builds'] = app.pop('Builds') + + if 'flavours' in app and app['flavours'] == [True]: + app['flavours'] = ['yes'] + if isinstance(app.Categories, str): app.Categories = [app.Categories] elif app.Categories is None: @@ -833,7 +839,8 @@ def post_metadata_parse(app): build[k] = ['yes'] else: build[k] = [] - elif flagtype(k) == TYPE_STRING and type(v) in (float, int): + elif (flagtype(k) == TYPE_STRING or flagtype(k) == TYPE_INT) \ + and type(v) in (float, int): build[k] = str(v) builds.append(build) @@ -950,9 +957,8 @@ def parse_json_metadata(mf, app): def parse_yaml_metadata(mf, app): - - yamlinfo = yaml.load(mf, Loader=YamlLoader) - app.update(yamlinfo) + yamldata = yaml.load(mf, Loader=YamlLoader) + app.update(yamldata) return app From 3cb936ae92bf666baab02955d5d11474acb3f753 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 25 Nov 2016 15:23:01 +0100 Subject: [PATCH 13/17] `fdroid update --create-metadata` now outputs YAML format As part of the push towards using YAML as the main metadata format, this makes the blank template be a .yml file. --- fdroidserver/update.py | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/fdroidserver/update.py b/fdroidserver/update.py index b05700bd..a0f4ca61 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -1721,20 +1721,15 @@ def main(): if 'name' not in apk: logging.error(apk['packageName'] + ' does not have a name! Skipping...') continue - f = open(os.path.join('metadata', apk['packageName'] + '.txt'), 'w', encoding='utf8') - f.write("License:Unknown\n") - f.write("Web Site:\n") - f.write("Source Code:\n") - f.write("Issue Tracker:\n") - f.write("Changelog:\n") - f.write("Summary:" + apk['name'] + "\n") - f.write("Description:\n") - f.write(apk['name'] + "\n") - f.write(".\n") - f.write("Name:" + apk['name'] + "\n") - f.close() - logging.info("Generated skeleton metadata for " + apk['packageName']) - newmetadata = True + with open(os.path.join('metadata', apk['packageName'] + '.yml'), 'w') as f: + app = metadata.App() + app.Name = apk['name'] + app.Summary = apk['name'] + app.CurrentVersionCode = 2147483647 # Java's Integer.MAX_VALUE + app.Categories = [os.path.basename(os.path.dirname(os.getcwd()))] + metadata.write_yaml(f, app) + logging.info("Generated skeleton metadata for " + apk['packageName']) + newmetadata = True else: msg = apk['apkName'] + " (" + apk['packageName'] + ") has no metadata!" if options.delete_unknown: From 056a28f89739fb0c1b9669988511089d60559b2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 16 May 2017 15:26:59 +0200 Subject: [PATCH 14/17] fix indentation --- fdroidserver/metadata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 481f10c6..3e0dfcee 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -840,7 +840,7 @@ def post_metadata_parse(app): else: build[k] = [] elif (flagtype(k) == TYPE_STRING or flagtype(k) == TYPE_INT) \ - and type(v) in (float, int): + and type(v) in (float, int): build[k] = str(v) builds.append(build) From cfd3e84250676644b6cd1942fe97e960f9e8c4d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 16 May 2017 16:28:24 +0200 Subject: [PATCH 15/17] use stored metadatapath instead of guessing it --- fdroidserver/build.py | 8 ++++---- fdroidserver/common.py | 26 -------------------------- 2 files changed, 4 insertions(+), 30 deletions(-) diff --git a/fdroidserver/build.py b/fdroidserver/build.py index cc73679d..21e4fce2 100644 --- a/fdroidserver/build.py +++ b/fdroidserver/build.py @@ -136,8 +136,8 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force): ftp.mkdir('metadata') ftp.mkdir('srclibs') ftp.chdir('metadata') - metadatapath = common.metadata_relpath(app.id) - ftp.put(metadatapath, os.path.basename(metadatapath)) + ftp.put(app.metadatapath, os.path.basename(app.metadatapath)) + # And patches if there are any... if os.path.exists(os.path.join('metadata', app.id)): send_dir(os.path.join('metadata', app.id)) @@ -185,8 +185,8 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force): send_dir(lib) # Copy the metadata file too... ftp.chdir(homedir + '/srclibs') - srclibpath = common.metadata_srclib_relpath(name) - ftp.put(srclibpath, os.path.basename(srclibpath)) + ftp.put(os.path.join('srclibs', name + '.txt'), + name + '.txt') # Copy the main app source code # (no need if it's a srclib) if (not basesrclib) and os.path.exists(build_dir): diff --git a/fdroidserver/common.py b/fdroidserver/common.py index b908dd6f..875e43a3 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -474,32 +474,6 @@ def has_extension(filename, ext): return ext == f_ext -def metadata_srclib_relpath(name): - ''' - :param name: name of the src lib. (eg. 'HttpClient') - :returns: relative path for requested srclib (eg. 'srclib/HttpClient.txt') - ''' - global config - for ext in config['accepted_formats']: - pth = os.path.join('srclibs', name + '.' + ext) - if os.path.isfile(pth): - return pth - raise FDroidException("could not find srclib metadata file for '{}'".format(name)) - - -def metadata_relpath(appid): - ''' - :param appid: an appid. (eg. 'org.fdroid.fdroid') - :returns: relative path for requested srclib (eg. 'metadata/org.fdroid.fdroid.txt') - ''' - global config - for ext in config['accepted_formats']: - pth = os.path.join('metadata', appid + '.' + ext) - if os.path.isfile(pth): - return pth - raise FDroidException("could not find metadata file for '{}'".format(appid)) - - publish_name_regex = re.compile(r"^(.+)_([0-9]+)\.(apk|zip)$") From 19d422da861e911b0730e1acaee7ef5426b1e21a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Fri, 19 May 2017 13:47:05 +0200 Subject: [PATCH 16/17] rewritemeta yaml: fixed boolen mapping for build flags --- fdroidserver/metadata.py | 74 +++++++++++++++---- fdroidserver/rewritemeta.py | 2 + .../convert_metadata_to_yaml_then_txt.sh | 14 ++++ .../app.with.special.build.params.txt | 20 +++-- .../app.with.special.build.params.yml | 32 ++++++-- 5 files changed, 115 insertions(+), 27 deletions(-) create mode 100755 tests/extra/convert_metadata_to_yaml_then_txt.sh diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 3e0dfcee..74454d55 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -816,7 +816,7 @@ def post_metadata_parse(app): app['builds'] = app.pop('Builds') if 'flavours' in app and app['flavours'] == [True]: - app['flavours'] = ['yes'] + app['flavours'] = 'yes' if isinstance(app.Categories, str): app.Categories = [app.Categories] @@ -825,23 +825,49 @@ def post_metadata_parse(app): else: app.Categories = [str(i) for i in app.Categories] + def _yaml_bool_unmapable(v): + return v in (True, False, [True], [False]) + + def _yaml_bool_unmap(v): + if v is True: + return 'yes' + elif v is False: + return 'no' + elif v == [True]: + return ['yes'] + elif v == [False]: + return ['no'] + + _bool_allowed = ('disable', 'kivy', 'maven') + builds = [] if 'builds' in app: for build in app['builds']: if not isinstance(build, Build): build = Build(build) for k, v in build.items(): - if flagtype(k) == TYPE_LIST: - if isinstance(v, str): - build[k] = [v] - elif isinstance(v, bool): - if v: - build[k] = ['yes'] + if not (v is None): + if flagtype(k) == TYPE_LIST: + if _yaml_bool_unmapable(v): + build[k] = _yaml_bool_unmap(v) + + if isinstance(v, str): + build[k] = [v] + elif isinstance(v, bool): + if v: + build[k] = ['yes'] + else: + build[k] = [] + elif flagtype(k) is TYPE_INT: + build[k] = str(v) + elif flagtype(k) is TYPE_STRING: + if isinstance(v, bool) and k in _bool_allowed: + build[k] = v else: - build[k] = [] - elif (flagtype(k) == TYPE_STRING or flagtype(k) == TYPE_INT) \ - and type(v) in (float, int): - build[k] = str(v) + if _yaml_bool_unmapable(v): + build[k] = _yaml_bool_unmap(v) + else: + build[k] = str(v) builds.append(build) app.builds = sorted_builds(builds) @@ -964,12 +990,26 @@ def parse_yaml_metadata(mf, app): def write_yaml(mf, app): + _yaml_bools_true = ('y', 'Y', 'yes', 'Yes', 'YES', + 'true', 'True', 'TRUE', + 'on', 'On', 'ON') + _yaml_bools_false = ('n', 'N', 'no', 'No', 'NO', + 'false', 'False', 'FALSE', + 'off', 'Off', 'OFF') + _yaml_bools_plus_lists = [] + _yaml_bools_plus_lists.extend(_yaml_bools_true) + _yaml_bools_plus_lists.extend([[x] for x in _yaml_bools_true]) + _yaml_bools_plus_lists.extend(_yaml_bools_false) + _yaml_bools_plus_lists.extend([[x] for x in _yaml_bools_false]) + def _class_as_dict_representer(dumper, data): '''Creates a YAML representation of a App/Build instance''' return dumper.represent_dict(data) def _field_to_yaml(typ, value): if typ is TYPE_STRING: + if value in _yaml_bools_plus_lists: + return ruamel.yaml.scalarstring.SingleQuotedScalarString(str(value)) return str(value) elif typ is TYPE_INT: return int(value) @@ -1019,7 +1059,15 @@ def write_yaml(mf, app): b = ruamel.yaml.comments.CommentedMap() for field in fields: if hasattr(build, field) and getattr(build, field): - b.update({field: _field_to_yaml(flagtype(field), getattr(build, field))}) + value = getattr(build, field) + if field == 'gradle' and value == ['off']: + value = [ruamel.yaml.scalarstring.SingleQuotedScalarString('off')] + if field in ('disable', 'kivy', 'maven'): + if value == 'no': + continue + elif value == 'yes': + value = 'yes' + b.update({field: _field_to_yaml(flagtype(field), value)}) builds.append(b) # insert extra empty lines between build entries @@ -1031,7 +1079,7 @@ def write_yaml(mf, app): yaml_app_field_order = [ 'Disabled', - 'AnitFeatures', + 'AntiFeatures', 'Provides', 'Categories', 'License', diff --git a/fdroidserver/rewritemeta.py b/fdroidserver/rewritemeta.py index 2d2d1803..58fd7994 100644 --- a/fdroidserver/rewritemeta.py +++ b/fdroidserver/rewritemeta.py @@ -77,6 +77,8 @@ def main(): if not options.to and ext not in supported: logging.info("Ignoring %s file at '%s'" % (ext, path)) continue + else: + logging.info("rewriting '%s' to %s" % (appid, options.to)) to_ext = ext if options.to is not None: diff --git a/tests/extra/convert_metadata_to_yaml_then_txt.sh b/tests/extra/convert_metadata_to_yaml_then_txt.sh new file mode 100755 index 00000000..efc03350 --- /dev/null +++ b/tests/extra/convert_metadata_to_yaml_then_txt.sh @@ -0,0 +1,14 @@ +#! /bin/bash + +if [ ! -d metadata ]; then + echo 'no metadata directory present' + exit 1 +fi + +fdroid rewritemeta --to yml +fdroid rewritemeta --to txt + +echo '## stripping maven, kivy, disable buildflags if they are set to "no"' +sed -i '/^ maven=no$/d' metadata/*.txt +sed -i '/^ kivy=no$/d' metadata/*.txt +sed -i '/^ disable=no$/d' metadata/*.txt diff --git a/tests/metadata/app.with.special.build.params.txt b/tests/metadata/app.with.special.build.params.txt index 63d25e45..db4970eb 100644 --- a/tests/metadata/app.with.special.build.params.txt +++ b/tests/metadata/app.with.special.build.params.txt @@ -47,14 +47,22 @@ Build:1.2.2,42 Build:2.1.1,48 commit=2.1.1 patch=manifest-ads.patch,mobilecore.patch + maven=yes srclibs=FacebookSDK@sdk-version-3.0.2 - rm=libs/applovin*,libs/mobileCore* - extlibs=android/android-support-v4.jar - prebuild=cp libs/android-support-v4.jar $$FacebookSDK$$/libs/ && \ - sed -i 's@\(reference.1=\).*@\1$$FacebookSDK$$@' project.properties && \ - sed -i 's/Class\[\]/Class\\[\]/g' $$FacebookSDK$$/src/com/facebook/model/GraphObject.java -Build:2.1.2,49 +Build:2.1.1-b,49 + commit=2.1.1 + patch=manifest-ads.patch,mobilecore.patch + maven=yes@.. + srclibs=FacebookSDK@sdk-version-3.0.2 + +Build:2.1.1-c,50 + commit=2.1.1 + patch=manifest-ads.patch,mobilecore.patch + maven=2 + srclibs=FacebookSDK@sdk-version-3.0.2 + +Build:2.1.2,51 disable=Labelled as pre-release, so skipped Archive Policy:0 versions diff --git a/tests/metadata/rewrite-yml/app.with.special.build.params.yml b/tests/metadata/rewrite-yml/app.with.special.build.params.yml index 6f579797..2b55701f 100644 --- a/tests/metadata/rewrite-yml/app.with.special.build.params.yml +++ b/tests/metadata/rewrite-yml/app.with.special.build.params.yml @@ -1,3 +1,5 @@ +AntiFeatures: + - UpstreamNonFree Categories: - System License: GPL-3.0 @@ -59,18 +61,32 @@ Builds: patch: - manifest-ads.patch - mobilecore.patch + maven: 'yes' + srclibs: + - FacebookSDK@sdk-version-3.0.2 + + - versionName: 2.1.1-b + versionCode: 49 + commit: 2.1.1 + patch: + - manifest-ads.patch + - mobilecore.patch + maven: yes@.. + srclibs: + - FacebookSDK@sdk-version-3.0.2 + + - versionName: 2.1.1-c + versionCode: 50 + commit: 2.1.1 + patch: + - manifest-ads.patch + - mobilecore.patch + maven: '2' srclibs: - FacebookSDK@sdk-version-3.0.2 - rm: - - libs/applovin* - - libs/mobileCore* - extlibs: - - android/android-support-v4.jar - prebuild: |- - cp libs/android-support-v4.jar $$FacebookSDK$$/libs/ && sed -i 's@\(reference.1=\).*@\1$$FacebookSDK$$@' project.properties && sed -i 's/Class\[\]/Class\\[\]/g' $$FacebookSDK$$/src/com/facebook/model/GraphObject.java - versionName: 2.1.2 - versionCode: 49 + versionCode: 51 disable: Labelled as pre-release, so skipped ArchivePolicy: 0 versions From 0980fb4df8ab64bd18052ae8af143e8b669d74f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 23 May 2017 12:36:57 +0200 Subject: [PATCH 17/17] import ruamel.ymal only when re-writing yaml metadata --- fdroidserver/metadata.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 74454d55..f63349de 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -25,7 +25,6 @@ import html import logging import textwrap import io -import ruamel.yaml import yaml # use libyaml if it is available try: @@ -990,6 +989,8 @@ def parse_yaml_metadata(mf, app): def write_yaml(mf, app): + import ruamel.yaml + _yaml_bools_true = ('y', 'Y', 'yes', 'Yes', 'YES', 'true', 'True', 'TRUE', 'on', 'On', 'ON')