pmbootstrap-meow/pmb/commands/__init__.py
Caleb Connolly 62d700c3d8
commands: add pmbootstrap test (MR 2252)
This is to serve as a place to dump useful internal tests, starting with
one that simply parses all available APKINDEX files.

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:40 +02:00

77 lines
1.9 KiB
Python

# Copyright 2024 Caleb Connolly
# SPDX-License-Identifier: GPL-3.0-or-later
from __future__ import annotations
import enum
from typing import Generator, Optional
from pathlib import Path, PosixPath, PurePosixPath
from pmb.types import PmbArgs
from pmb.helpers import frontend
from .base import Command
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."""
# Commands that are still invoked via pmb/helpers/frontend.py
unmigrated_commands = [
"init",
"work_migrate",
"repo_missing",
"kconfig",
"export",
"sideload",
"netboot",
"flasher",
"initfs",
"qemu",
"pkgrel_bump",
"aportupgrade",
"newapkbuild",
"lint",
"status",
"ci",
"zap",
"stats",
"update",
"build_init",
"chroot",
"install",
"checksum",
"aportgen",
"build",
"deviceinfo_parse",
"apkbuild_parse",
"apkindex_parse",
"config",
"bootimg_analyze",
"pull",
]
def run_command(args: PmbArgs):
# Handle deprecated command format
if args.action in unmigrated_commands:
getattr(frontend, args.action)(args)
return
command: Command
# Would be nice to use match case but we support Python 3.8
if args.action == "log":
command = Log(args.clear_log, int(args.lines))
elif args.action == "index":
# FIXME: should index support --arch?
command = Index()
elif args.action == "repo_bootstrap":
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.")
command.run()