mirror of
https://github.com/f-droid/fdroidserver.git
synced 2026-05-10 00:34:35 -04:00
rewritemeta: support read from stdin
This commit is contained in:
committed by
Hans-Christoph Steiner
parent
cbb7698f55
commit
146f2b93fe
@@ -1302,6 +1302,23 @@ def _app_to_yaml(app):
|
||||
return cm
|
||||
|
||||
|
||||
def remove_blank_flags_from_builds(builds):
|
||||
"""Remove unset entries from Builds so they are not written out."""
|
||||
if not builds:
|
||||
return list()
|
||||
newbuilds = list()
|
||||
for build in builds:
|
||||
new = dict()
|
||||
for k in build_flags:
|
||||
v = build.get(k)
|
||||
# 0 is valid value, it should not be stripped
|
||||
if v is None or v is False or v == '' or v == dict() or v == list():
|
||||
continue
|
||||
new[k] = v
|
||||
newbuilds.append(new)
|
||||
return newbuilds
|
||||
|
||||
|
||||
def write_yaml(mf, app):
|
||||
"""Write metadata in yaml format.
|
||||
|
||||
@@ -1318,6 +1335,10 @@ def write_yaml(mf, app):
|
||||
app metadata to written to the YAML file
|
||||
|
||||
"""
|
||||
builds = remove_blank_flags_from_builds(app.get('Builds'))
|
||||
if builds:
|
||||
app['Builds'] = builds
|
||||
|
||||
_del_duplicated_NoSourceSince(app)
|
||||
yaml_app = _app_to_yaml(app)
|
||||
yamlmf = ruamel.yaml.YAML(typ='rt')
|
||||
|
||||
@@ -23,6 +23,7 @@ import shutil
|
||||
import tempfile
|
||||
from argparse import ArgumentParser
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
from . import _, common, metadata
|
||||
|
||||
@@ -41,23 +42,6 @@ def proper_format(app):
|
||||
return content == cur_content
|
||||
|
||||
|
||||
def remove_blank_flags_from_builds(builds):
|
||||
"""Remove unset entries from Builds so they are not written out."""
|
||||
if not builds:
|
||||
return list()
|
||||
newbuilds = list()
|
||||
for build in builds:
|
||||
new = dict()
|
||||
for k in metadata.build_flags:
|
||||
v = build.get(k)
|
||||
# 0 is valid value, it should not be stripped
|
||||
if v is None or v is False or v == '' or v == dict() or v == list():
|
||||
continue
|
||||
new[k] = v
|
||||
newbuilds.append(new)
|
||||
return newbuilds
|
||||
|
||||
|
||||
def main():
|
||||
global config
|
||||
|
||||
@@ -70,6 +54,13 @@ def main():
|
||||
default=False,
|
||||
help=_("List files that would be reformatted (dry run)"),
|
||||
)
|
||||
parser.add_argument(
|
||||
"-s",
|
||||
"--stdin",
|
||||
action="store_true",
|
||||
default=False,
|
||||
help=_("Format file from stdin and output the result to stdout"),
|
||||
)
|
||||
parser.add_argument(
|
||||
"appid", nargs='*', help=_("application ID of file to operate on")
|
||||
)
|
||||
@@ -79,6 +70,12 @@ def main():
|
||||
|
||||
config = common.read_config()
|
||||
|
||||
if options.stdin:
|
||||
app = metadata.parse_yaml_metadata(sys.stdin)
|
||||
metadata.write_yaml(sys.stdout, app)
|
||||
logging.debug(_("Finished"))
|
||||
return
|
||||
|
||||
apps = common.read_app_args(options.appid)
|
||||
|
||||
for appid, app in apps.items():
|
||||
@@ -94,11 +91,6 @@ def main():
|
||||
print(path)
|
||||
continue
|
||||
|
||||
# TODO these should be moved to metadata.write_yaml()
|
||||
builds = remove_blank_flags_from_builds(app.get('Builds'))
|
||||
if builds:
|
||||
app['Builds'] = builds
|
||||
|
||||
# rewrite to temporary file before overwriting existing
|
||||
# file in case there's a bug in write_metadata
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
|
||||
@@ -2507,3 +2507,140 @@ class PostMetadataParseTest(unittest.TestCase):
|
||||
self.assertEqual(*self._post_metadata_parse_build_list(True, ['true']))
|
||||
self.assertEqual(*self._post_metadata_parse_build_script(True, ['true']))
|
||||
self.assertEqual(*self._post_metadata_parse_build_string(True, 'true'))
|
||||
|
||||
def test_remove_blank_flags_from_builds_com_politedroid_3(self):
|
||||
"""Unset fields in Builds: entries should be removed."""
|
||||
appid = 'com.politedroid'
|
||||
app = metadata.read_metadata({appid: -1})[appid]
|
||||
builds = metadata.remove_blank_flags_from_builds(app.get('Builds'))
|
||||
self.assertEqual(
|
||||
builds[0],
|
||||
{
|
||||
'versionName': '1.2',
|
||||
'versionCode': 3,
|
||||
'commit': '6a548e4b19',
|
||||
'target': 'android-10',
|
||||
'antifeatures': {
|
||||
'KnownVuln': {},
|
||||
'NonFreeAssets': {},
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
def test_remove_blank_flags_from_builds_com_politedroid_4(self):
|
||||
"""Unset fields in Builds: entries should be removed."""
|
||||
appid = 'com.politedroid'
|
||||
app = metadata.read_metadata({appid: -1})[appid]
|
||||
builds = metadata.remove_blank_flags_from_builds(app.get('Builds'))
|
||||
self.assertEqual(
|
||||
builds[1],
|
||||
{
|
||||
'versionName': '1.3',
|
||||
'versionCode': 4,
|
||||
'commit': 'ad865b57bf3ac59580f38485608a9b1dda4fa7dc',
|
||||
'target': 'android-15',
|
||||
},
|
||||
)
|
||||
|
||||
def test_remove_blank_flags_from_builds_org_adaway_52(self):
|
||||
"""Unset fields in Builds: entries should be removed."""
|
||||
appid = 'org.adaway'
|
||||
app = metadata.read_metadata({appid: -1})[appid]
|
||||
builds = metadata.remove_blank_flags_from_builds(app.get('Builds'))
|
||||
self.assertEqual(
|
||||
builds[-1],
|
||||
{
|
||||
'buildjni': ['yes'],
|
||||
'commit': 'v3.0',
|
||||
'gradle': ['yes'],
|
||||
'preassemble': ['renameExecutables'],
|
||||
'subdir': 'AdAway',
|
||||
'versionCode': 52,
|
||||
'versionName': '3.0',
|
||||
},
|
||||
)
|
||||
|
||||
def test_remove_blank_flags_from_builds_no_builds(self):
|
||||
"""Unset fields in Builds: entries should be removed."""
|
||||
self.assertEqual(
|
||||
metadata.remove_blank_flags_from_builds(None),
|
||||
list(),
|
||||
)
|
||||
self.assertEqual(
|
||||
metadata.remove_blank_flags_from_builds(dict()),
|
||||
list(),
|
||||
)
|
||||
self.assertEqual(
|
||||
metadata.remove_blank_flags_from_builds(list()),
|
||||
list(),
|
||||
)
|
||||
self.assertEqual(
|
||||
metadata.remove_blank_flags_from_builds(set()),
|
||||
list(),
|
||||
)
|
||||
self.assertEqual(
|
||||
metadata.remove_blank_flags_from_builds(tuple()),
|
||||
list(),
|
||||
)
|
||||
|
||||
def test_remove_blank_flags_from_builds_0_is_a_value(self):
|
||||
self.assertEqual(
|
||||
metadata.remove_blank_flags_from_builds([{'versionCode': 0}]),
|
||||
[{'versionCode': 0}],
|
||||
)
|
||||
|
||||
def test_remove_blank_flags_from_builds_values_to_purge(self):
|
||||
self.assertEqual(
|
||||
metadata.remove_blank_flags_from_builds(
|
||||
[
|
||||
{
|
||||
'antifeatures': dict(),
|
||||
'forceversion': False,
|
||||
'init': None,
|
||||
'rm': '',
|
||||
'scandelete': list(),
|
||||
'versionCode': 0,
|
||||
},
|
||||
{'antifeatures': list(), 'versionCode': 1},
|
||||
{'antifeatures': '', 'versionCode': 2},
|
||||
]
|
||||
),
|
||||
[{'versionCode': 0}, {'versionCode': 1}, {'versionCode': 2}],
|
||||
)
|
||||
|
||||
def test_remove_blank_flags_from_builds_app_with_special_build_params(self):
|
||||
appid = 'app.with.special.build.params'
|
||||
app = metadata.read_metadata({appid: -1})[appid]
|
||||
builds = metadata.remove_blank_flags_from_builds(app.get('Builds'))
|
||||
self.assertEqual(
|
||||
builds[-1],
|
||||
{
|
||||
'versionName': '2.1.2',
|
||||
'versionCode': 51,
|
||||
'disable': 'Labelled as pre-release, so skipped',
|
||||
},
|
||||
)
|
||||
|
||||
def test_remove_blank_flags_from_builds_app_with_special_build_params_af(self):
|
||||
"""Unset fields in Builds: entries should be removed."""
|
||||
appid = 'app.with.special.build.params'
|
||||
app = metadata.read_metadata({appid: -1})[appid]
|
||||
builds = metadata.remove_blank_flags_from_builds(app.get('Builds'))
|
||||
self.assertEqual(
|
||||
builds[-2],
|
||||
{
|
||||
'antifeatures': {
|
||||
'Ads': {'en-US': 'includes ad lib\n', 'zh-CN': '包括广告图书馆\n'},
|
||||
'Tracking': {'en-US': 'standard suspects\n'},
|
||||
},
|
||||
'commit': '2.1.1',
|
||||
'maven': '2',
|
||||
'patch': [
|
||||
'manifest-ads.patch',
|
||||
'mobilecore.patch',
|
||||
],
|
||||
'srclibs': ['FacebookSDK@sdk-version-3.0.2'],
|
||||
'versionCode': 50,
|
||||
'versionName': '2.1.1-c',
|
||||
},
|
||||
)
|
||||
|
||||
@@ -26,106 +26,6 @@ class RewriteMetaTest(unittest.TestCase):
|
||||
def tearDown(self):
|
||||
self._td.cleanup()
|
||||
|
||||
def test_remove_blank_flags_from_builds_com_politedroid_3(self):
|
||||
"""Unset fields in Builds: entries should be removed."""
|
||||
appid = 'com.politedroid'
|
||||
app = metadata.read_metadata({appid: -1})[appid]
|
||||
builds = rewritemeta.remove_blank_flags_from_builds(app.get('Builds'))
|
||||
self.assertEqual(
|
||||
builds[0],
|
||||
{
|
||||
'versionName': '1.2',
|
||||
'versionCode': 3,
|
||||
'commit': '6a548e4b19',
|
||||
'target': 'android-10',
|
||||
'antifeatures': {
|
||||
'KnownVuln': {},
|
||||
'NonFreeAssets': {},
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
def test_remove_blank_flags_from_builds_com_politedroid_4(self):
|
||||
"""Unset fields in Builds: entries should be removed."""
|
||||
appid = 'com.politedroid'
|
||||
app = metadata.read_metadata({appid: -1})[appid]
|
||||
builds = rewritemeta.remove_blank_flags_from_builds(app.get('Builds'))
|
||||
self.assertEqual(
|
||||
builds[1],
|
||||
{
|
||||
'versionName': '1.3',
|
||||
'versionCode': 4,
|
||||
'commit': 'ad865b57bf3ac59580f38485608a9b1dda4fa7dc',
|
||||
'target': 'android-15',
|
||||
},
|
||||
)
|
||||
|
||||
def test_remove_blank_flags_from_builds_org_adaway_52(self):
|
||||
"""Unset fields in Builds: entries should be removed."""
|
||||
appid = 'org.adaway'
|
||||
app = metadata.read_metadata({appid: -1})[appid]
|
||||
builds = rewritemeta.remove_blank_flags_from_builds(app.get('Builds'))
|
||||
self.assertEqual(
|
||||
builds[-1],
|
||||
{
|
||||
'buildjni': ['yes'],
|
||||
'commit': 'v3.0',
|
||||
'gradle': ['yes'],
|
||||
'preassemble': ['renameExecutables'],
|
||||
'subdir': 'AdAway',
|
||||
'versionCode': 52,
|
||||
'versionName': '3.0',
|
||||
},
|
||||
)
|
||||
|
||||
def test_remove_blank_flags_from_builds_no_builds(self):
|
||||
"""Unset fields in Builds: entries should be removed."""
|
||||
self.assertEqual(
|
||||
rewritemeta.remove_blank_flags_from_builds(None),
|
||||
list(),
|
||||
)
|
||||
self.assertEqual(
|
||||
rewritemeta.remove_blank_flags_from_builds(dict()),
|
||||
list(),
|
||||
)
|
||||
self.assertEqual(
|
||||
rewritemeta.remove_blank_flags_from_builds(list()),
|
||||
list(),
|
||||
)
|
||||
self.assertEqual(
|
||||
rewritemeta.remove_blank_flags_from_builds(set()),
|
||||
list(),
|
||||
)
|
||||
self.assertEqual(
|
||||
rewritemeta.remove_blank_flags_from_builds(tuple()),
|
||||
list(),
|
||||
)
|
||||
|
||||
def test_remove_blank_flags_from_builds_0_is_a_value(self):
|
||||
self.assertEqual(
|
||||
rewritemeta.remove_blank_flags_from_builds([{'versionCode': 0}]),
|
||||
[{'versionCode': 0}],
|
||||
)
|
||||
|
||||
def test_remove_blank_flags_from_builds_values_to_purge(self):
|
||||
self.assertEqual(
|
||||
rewritemeta.remove_blank_flags_from_builds(
|
||||
[
|
||||
{
|
||||
'antifeatures': dict(),
|
||||
'forceversion': False,
|
||||
'init': None,
|
||||
'rm': '',
|
||||
'scandelete': list(),
|
||||
'versionCode': 0,
|
||||
},
|
||||
{'antifeatures': list(), 'versionCode': 1},
|
||||
{'antifeatures': '', 'versionCode': 2},
|
||||
]
|
||||
),
|
||||
[{'versionCode': 0}, {'versionCode': 1}, {'versionCode': 2}],
|
||||
)
|
||||
|
||||
@mock.patch('sys.argv', ['fdroid rewritemeta', 'a'])
|
||||
def test_rewrite_no_builds(self):
|
||||
os.chdir(self.testdir)
|
||||
@@ -180,43 +80,6 @@ class RewriteMetaTest(unittest.TestCase):
|
||||
),
|
||||
)
|
||||
|
||||
def test_remove_blank_flags_from_builds_app_with_special_build_params(self):
|
||||
appid = 'app.with.special.build.params'
|
||||
app = metadata.read_metadata({appid: -1})[appid]
|
||||
builds = rewritemeta.remove_blank_flags_from_builds(app.get('Builds'))
|
||||
self.assertEqual(
|
||||
builds[-1],
|
||||
{
|
||||
'versionName': '2.1.2',
|
||||
'versionCode': 51,
|
||||
'disable': 'Labelled as pre-release, so skipped',
|
||||
},
|
||||
)
|
||||
|
||||
def test_remove_blank_flags_from_builds_app_with_special_build_params_af(self):
|
||||
"""Unset fields in Builds: entries should be removed."""
|
||||
appid = 'app.with.special.build.params'
|
||||
app = metadata.read_metadata({appid: -1})[appid]
|
||||
builds = rewritemeta.remove_blank_flags_from_builds(app.get('Builds'))
|
||||
self.assertEqual(
|
||||
builds[-2],
|
||||
{
|
||||
'antifeatures': {
|
||||
'Ads': {'en-US': 'includes ad lib\n', 'zh-CN': '包括广告图书馆\n'},
|
||||
'Tracking': {'en-US': 'standard suspects\n'},
|
||||
},
|
||||
'commit': '2.1.1',
|
||||
'maven': '2',
|
||||
'patch': [
|
||||
'manifest-ads.patch',
|
||||
'mobilecore.patch',
|
||||
],
|
||||
'srclibs': ['FacebookSDK@sdk-version-3.0.2'],
|
||||
'versionCode': 50,
|
||||
'versionName': '2.1.1-c',
|
||||
},
|
||||
)
|
||||
|
||||
@mock.patch('sys.argv', ['fdroid rewritemeta', 'a', 'b'])
|
||||
def test_rewrite_scenario_trivial(self):
|
||||
with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir):
|
||||
|
||||
Reference in New Issue
Block a user