1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-07-07 01:40:10 +02:00

Merge branch 'remove-provides-in-yml' into 'master'

Remove `Provides:` in yaml metadata

Closes #676

See merge request fdroid/fdroidserver!654
This commit is contained in:
Hans-Christoph Steiner 2019-08-28 13:39:59 +00:00
commit 7090ce63dd
2 changed files with 64 additions and 5 deletions

View File

@ -53,7 +53,7 @@ def warn_or_exception(value):
app_fields = set([
'Disabled',
'AntiFeatures',
'Provides',
'Provides', # deprecated, txt only
'Categories',
'License',
'Author Name',
@ -97,7 +97,6 @@ app_fields = set([
yaml_app_field_order = [
'Disabled',
'AntiFeatures',
'Provides',
'Categories',
'License',
'AuthorName',
@ -1073,12 +1072,25 @@ def parse_json_metadata(mf, app):
def parse_yaml_metadata(mf, app):
yamldata = yaml.safe_load(mf)
deprecated_in_yaml = ['Provides']
if yamldata:
for field in yamldata:
if field not in yaml_app_fields:
warn_or_exception(_("Unrecognised app field '{fieldname}' "
"in '{path}'").format(fieldname=field,
path=mf.name))
if field not in deprecated_in_yaml:
warn_or_exception(_("Unrecognised app field "
"'{fieldname}' in '{path}'")
.format(fieldname=field,
path=mf.name))
for deprecated_field in deprecated_in_yaml:
if deprecated_field in yamldata:
logging.warning(_("Ignoring '{field}' in '{metapath}' "
"metadata because it is deprecated.")
.format(field=deprecated_field,
metapath=mf.name))
del(yamldata[deprecated_field])
if yamldata.get('Builds', None):
for build in yamldata.get('Builds', []):
# put all build flag keywords into a set to avoid

View File

@ -367,6 +367,25 @@ class MetadataTest(unittest.TestCase):
'prebuild': "a && b && "
"sed -i 's,a,b,'"}]})
def test_parse_yaml_provides_should_be_ignored(self):
mf = io.StringIO(textwrap.dedent("""\
Provides: this.is.deprecated
AutoName: F-Droid
RepoType: git
Builds:
- versionCode: 1
versionName: v0.1.0
prebuild: |-
a && b && sed -i 's,a,b,'
"""))
mf.name = 'mock_filename.yaml'
mf.seek(0)
result = {}
with mock.patch('fdroidserver.metadata.warnings_action', 'error'):
fdroidserver.metadata.parse_yaml_metadata(mf, result)
self.assertNotIn('Provides', result)
self.assertNotIn('provides', result)
def test_write_yaml_1_line_scripts_as_string(self):
mf = io.StringIO()
app = fdroidserver.metadata.App()
@ -521,6 +540,34 @@ class MetadataTest(unittest.TestCase):
UpdateCheckMode: None
"""))
def test_write_yaml_make_sure_provides_does_not_get_written(self):
mf = io.StringIO()
app = fdroidserver.metadata.App()
app.Categories = ['None']
app.Provides = 'this.is.deprecated'
app.builds = []
build = fdroidserver.metadata.Build()
build.versionCode = 102030
build.versionName = 'v1.2.3'
build.gradle = ['yes']
app.builds.append(build)
fdroidserver.metadata.write_yaml(mf, app)
mf.seek(0)
self.assertEqual(mf.read(), textwrap.dedent("""\
Categories:
- None
License: Unknown
Builds:
- versionName: v1.2.3
versionCode: 102030
gradle:
- yes
AutoUpdateMode: None
UpdateCheckMode: None
"""))
if __name__ == "__main__":
os.chdir(os.path.dirname(__file__))