Merge branch 'read_metadata' into 'master'

Read only metadata of apps given on the command line

See merge request fdroid/fdroidserver!1037
This commit is contained in:
Jochen Sprickerhof 2024-10-06 08:35:05 +00:00
commit b9ff024775
10 changed files with 16 additions and 37 deletions

View file

@ -24,9 +24,9 @@ def main():
) )
metadata.add_metadata_arguments(parser) metadata.add_metadata_arguments(parser)
options = common.parse_args(parser) options = common.parse_args(parser)
pkgs = common.read_pkg_args(options.appid, True) apps = common.read_app_args(
allapps = metadata.read_metadata(pkgs) options.appid, allow_version_codes=True, sort_by_time=True
apps = common.read_app_args(options.appid, allapps, True) )
common.read_config() common.read_config()
for appid, app in apps.items(): for appid, app in apps.items():

View file

@ -19,9 +19,7 @@ def main():
parser.add_argument("appid", nargs='*', help=_("applicationId with optional versionCode in the form APPID[:VERCODE]")) parser.add_argument("appid", nargs='*', help=_("applicationId with optional versionCode in the form APPID[:VERCODE]"))
metadata.add_metadata_arguments(parser) metadata.add_metadata_arguments(parser)
options = common.parse_args(parser) options = common.parse_args(parser)
pkgs = common.read_pkg_args(options.appid, True) apps = common.read_app_args(options.appid, allow_version_codes=True, sort_by_time=True)
allapps = metadata.read_metadata(pkgs)
apps = common.read_app_args(options.appid, allapps, True)
common.read_config() common.read_config()
srclib_dir = os.path.join('build', 'srclib') srclib_dir = os.path.join('build', 'srclib')
os.makedirs(srclib_dir, exist_ok=True) os.makedirs(srclib_dir, exist_ok=True)

View file

@ -1117,10 +1117,7 @@ def main():
srclib_dir = os.path.join(build_dir, 'srclib') srclib_dir = os.path.join(build_dir, 'srclib')
extlib_dir = os.path.join(build_dir, 'extlib') extlib_dir = os.path.join(build_dir, 'extlib')
# Read all app and srclib metadata apps = common.read_app_args(options.appid, allow_version_codes=True, sort_by_time=True)
pkgs = common.read_pkg_args(options.appid, True)
allapps = metadata.read_metadata(pkgs, sort_by_time=True)
apps = common.read_app_args(options.appid, allapps, True)
for appid, app in list(apps.items()): for appid, app in list(apps.items()):
if (app.get('Disabled') and not options.force) or not app.get('RepoType') or not app.get('Builds', []): if (app.get('Disabled') and not options.force) or not app.get('RepoType') or not app.get('Builds', []):

View file

@ -730,10 +730,7 @@ def main():
logging.error(_('Build metadata git repo has uncommited changes!')) logging.error(_('Build metadata git repo has uncommited changes!'))
sys.exit(1) sys.exit(1)
# Get all apps... apps = common.read_app_args(options.appid)
allapps = metadata.read_metadata()
apps = common.read_app_args(options.appid, allapps, False)
processed = [] processed = []
failed = dict() failed = dict()

View file

@ -939,7 +939,7 @@ def get_metadata_files(vercodes):
return metadatafiles return metadatafiles
def read_app_args(appid_versionCode_pairs, allapps, allow_version_codes=False): def read_app_args(appid_versionCode_pairs, allow_version_codes=False, sort_by_time=False):
"""Build a list of App instances for processing. """Build a list of App instances for processing.
On top of what read_pkg_args does, this returns the whole app On top of what read_pkg_args does, this returns the whole app
@ -950,6 +950,7 @@ def read_app_args(appid_versionCode_pairs, allapps, allow_version_codes=False):
""" """
vercodes = read_pkg_args(appid_versionCode_pairs, allow_version_codes) vercodes = read_pkg_args(appid_versionCode_pairs, allow_version_codes)
allapps = fdroidserver.metadata.read_metadata(vercodes, sort_by_time)
if not vercodes: if not vercodes:
return allapps return allapps
@ -959,11 +960,6 @@ def read_app_args(appid_versionCode_pairs, allapps, allow_version_codes=False):
if appid in vercodes: if appid in vercodes:
apps[appid] = app apps[appid] = app
if len(apps) != len(vercodes):
for p in vercodes:
if p not in allapps:
logging.critical(_("No such package: %s") % p)
raise FDroidException(_("Found invalid appids in arguments"))
if not apps: if not apps:
raise FDroidException(_("No packages specified")) raise FDroidException(_("No packages specified"))

View file

@ -878,9 +878,7 @@ def main():
def lint_metadata(options): def lint_metadata(options):
# Get all apps... apps = common.read_app_args(options.appid)
allapps = metadata.read_metadata(options.appid)
apps = common.read_app_args(options.appid, allapps, False)
anywarns = check_for_unsupported_metadata_files() anywarns = check_for_unsupported_metadata_files()

View file

@ -545,7 +545,7 @@ def read_srclibs():
srclibs[metadatapath.stem] = parse_yaml_srclib(metadatapath) srclibs[metadatapath.stem] = parse_yaml_srclib(metadatapath)
def read_metadata(appids={}, sort_by_time=False): def read_metadata(appid_to_vercode={}, sort_by_time=False):
"""Return a list of App instances sorted newest first. """Return a list of App instances sorted newest first.
This reads all of the metadata files in a 'data' repository, then This reads all of the metadata files in a 'data' repository, then
@ -553,7 +553,7 @@ def read_metadata(appids={}, sort_by_time=False):
sorted based on creation time, newest first. Most of the time, sorted based on creation time, newest first. Most of the time,
the newer files are the most interesting. the newer files are the most interesting.
appids is a dict with appids a keys and versionCodes as values. appid_to_vercode is a dict with appids a keys and versionCodes as values.
""" """
# Always read the srclibs before the apps, since they can use a srlib as # Always read the srclibs before the apps, since they can use a srlib as
@ -565,9 +565,8 @@ def read_metadata(appids={}, sort_by_time=False):
for basedir in ('metadata', 'tmp'): for basedir in ('metadata', 'tmp'):
Path(basedir).mkdir(exist_ok=True) Path(basedir).mkdir(exist_ok=True)
if appids: if appid_to_vercode:
vercodes = common.read_pkg_args(appids) metadatafiles = common.get_metadata_files(appid_to_vercode)
metadatafiles = common.get_metadata_files(vercodes)
else: else:
metadatafiles = list(Path('metadata').glob('*.yml')) + list( metadatafiles = list(Path('metadata').glob('*.yml')) + list(
Path('.').glob('.fdroid.yml') Path('.').glob('.fdroid.yml')

View file

@ -81,9 +81,7 @@ def main():
config = common.read_config() config = common.read_config()
# Get all apps... apps = common.read_app_args(options.appid)
allapps = metadata.read_metadata(options.appid)
apps = common.read_app_args(options.appid, allapps, False)
for appid, app in apps.items(): for appid, app in apps.items():
path = Path(app.metadatapath) path = Path(app.metadatapath)

View file

@ -1144,10 +1144,7 @@ def main():
_get_tool() _get_tool()
return return
# Read all app and srclib metadata apps = common.read_app_args(appids, allow_version_codes=True)
allapps = metadata.read_metadata()
apps = common.read_app_args(appids, allapps, True)
build_dir = 'build' build_dir = 'build'
if not os.path.isdir(build_dir): if not os.path.isdir(build_dir):

View file

@ -1,6 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import collections
import glob import glob
import inspect import inspect
import logging import logging
@ -855,7 +854,7 @@ class Test_main(unittest.TestCase):
self.exit_func.assert_not_called() self.exit_func.assert_not_called()
self.read_app_args_func.assert_called_once_with( self.read_app_args_func.assert_called_once_with(
['com.example.app'], collections.OrderedDict(), True ['com.example.app'], allow_version_codes=True
) )
self.scan_binary_func.assert_not_called() self.scan_binary_func.assert_not_called()