1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-11-10 17:30:11 +01:00
fdroidserver/tests/dump_internal_metadata_format.py
Hans-Christoph Steiner 18f3acc32e split out options from read_config()
There is no longer any reason for these to be intertwined.

This deliberately avoids touching some files as much as possible because
they are super tangled and due to be replaced.  Those files are:

* fdroidserver/build.py
* fdroidserver/update.py

# Conflicts:
#	tests/testcommon.py

# Conflicts:
#	fdroidserver/btlog.py
#	fdroidserver/import_subcommand.py
2024-05-08 16:26:46 +02:00

80 lines
2.4 KiB
Python
Executable File

#!/usr/bin/env python3
#
# Test that the parsing of the .yml metadata format didn't change from last
# released version. This uses the commit ID of the release tags,
# rather than the release tag itself so that contributor forks do not
# need to include the tags in them for this test to work.
#
# This is for running manual tests when changing the metadata format.
# The idea is to test changes using all of the files in
# fdroiddata.git. To run it, do:
#
# cd fdroidserver
# git checkout <latest tag>
# cd ../fdroiddata
# ../fdroidserver/tests/dump_internal_metadata_format.py
# cd ../fdroidserver
# git checkout master
# cd ../fdroiddata
# ../fdroidserver/tests/dump_internal_metadata_format.py
# diff -uw metadata/dump_*
import inspect
import os
import sys
from argparse import ArgumentParser
import git
import yaml
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 # noqa
import fdroidserver.metadata # noqa
def _build_yaml_representer(dumper, data):
"""Create a YAML representation of a Build instance."""
# internal representation of keys were switched
# to lists instead of strings concatenated by &&
# https://gitlab.com/fdroid/fdroidserver/merge_requests/1185
output = {}
for k, v in data.items():
if k in ("build", "init", "prebuild", "sudo"):
output[k] = " && ".join(v)
else:
output[k] = v
return dumper.represent_dict(output)
parser = ArgumentParser()
fdroidserver.common.setup_global_opts(parser)
fdroidserver.metadata.add_metadata_arguments(parser)
options = fdroidserver.common.parse_args(parser)
fdroidserver.metadata.warnings_action = options.W
fdroidserver.common.read_config()
if not os.path.isdir('metadata'):
print("This script must be run in an F-Droid data folder with a 'metadata' subdir!")
sys.exit(1)
repo = git.Repo(localmodule)
savedir = os.path.join('metadata', 'dump_' + repo.git.rev_parse('HEAD'))
if not os.path.isdir(savedir):
os.mkdir(savedir)
apps = fdroidserver.metadata.read_metadata()
for appid, app in apps.items():
savepath = os.path.join(savedir, appid + '.yaml')
frommeta = dict(app)
with open(savepath, "w", encoding="utf-8") as f:
yaml.add_representer(fdroidserver.metadata.Build, _build_yaml_representer)
yaml.dump(frommeta, f, default_flow_style=False)