diff --git a/pmb/commands/__init__.py b/pmb/commands/__init__.py index e9e38e16..e937643c 100644 --- a/pmb/commands/__init__.py +++ b/pmb/commands/__init__.py @@ -13,6 +13,7 @@ from .log import Log from .index import Index from .repo_bootstrap import RepoBootstrap from .shutdown import Shutdown +from .test import Test """New way to model pmbootstrap subcommands that can be invoked without PmbArgs.""" @@ -68,6 +69,8 @@ def run_command(args: PmbArgs): command = RepoBootstrap(args.arch, args.repository) elif args.action == "shutdown": command = Shutdown() + elif args.action == "test": + command = Test(args.action_test) else: raise NotImplementedError(f"Command '{args.action}' is not implemented.") diff --git a/pmb/commands/test.py b/pmb/commands/test.py new file mode 100644 index 00000000..28e8d44f --- /dev/null +++ b/pmb/commands/test.py @@ -0,0 +1,35 @@ +# Copyright 2024 Caleb Connolly +# SPDX-License-Identifier: GPL-3.0-or-later + +from __future__ import annotations +from typing import Any, Dict, List +from pmb import commands, logging +import pmb.helpers.repo +import pmb.parse.apkindex +from pmb.core.arch import Arch +import time + + +"""Various internal test commands for performance testing and debugging.""" + +def apkindex_parse_all(): + indexes = pmb.helpers.repo.apkindex_files(Arch.native()) + + pkgs = 0 + indxs = len(indexes) + start = time.time() + for index in indexes: + ret = pmb.parse.apkindex.parse(index) + pkgs += len(ret) + end = time.time() + logging.info(f"Parsed {pkgs} packages from {indxs} APKINDEX files in {end - start:.3f} seconds") + + +class Test(commands.Command): + def __init__(self, action: str): + self.action = action + + def run(self): + if self.action == "apkindex_parse_all": + apkindex_parse_all() + diff --git a/pmb/parse/arguments.py b/pmb/parse/arguments.py index 85287bdf..573b4ecc 100644 --- a/pmb/parse/arguments.py +++ b/pmb/parse/arguments.py @@ -564,6 +564,12 @@ def arguments_lint(subparser): add_packages_arg(lint, nargs="*") +def arguments_test(subparser): + test = subparser.add_parser("test", help="Internal pmbootstrap test tools") + sub = test.add_subparsers(dest="action_test", required=True) + sub.add_parser("apkindex_parse_all", help="parse all APKINDEX files") + + def arguments_status(subparser): ret = subparser.add_parser("status", help="show a config and pmaports overview") @@ -730,6 +736,7 @@ def get_parser(): arguments_aportupgrade(sub) arguments_newapkbuild(sub) arguments_lint(sub) + arguments_test(sub) arguments_status(sub) arguments_ci(sub) diff --git a/pmb/types.py b/pmb/types.py index 6d34f08c..3e33446c 100644 --- a/pmb/types.py +++ b/pmb/types.py @@ -31,6 +31,7 @@ class PmbArgs(Namespace): action_initfs: str action_kconfig: str action_netboot: str + action_test: str add: str all: bool all_git: str