From ebba3e8dcbd93ac9dc59cd1299e5907794f64ce4 Mon Sep 17 00:00:00 2001 From: Newbyte <newbyte@postmarketos.org> Date: Mon, 21 Oct 2024 00:04:54 +0200 Subject: [PATCH] pmb.flasher: Remove use of args Also adapt pmb/install/recovery.py to new API for variables.py. --- docs/api/pmb.commands.rst | 8 ++++ pmb/commands/__init__.py | 12 +++++- pmb/commands/flasher.py | 83 +++++++++++++++++++++++++++++++++++++++ pmb/flasher/__init__.py | 1 - pmb/flasher/frontend.py | 32 --------------- pmb/flasher/run.py | 19 ++++++--- pmb/flasher/variables.py | 28 +++++++------ pmb/helpers/frontend.py | 4 -- pmb/install/recovery.py | 9 ++++- 9 files changed, 140 insertions(+), 56 deletions(-) create mode 100644 pmb/commands/flasher.py diff --git a/docs/api/pmb.commands.rst b/docs/api/pmb.commands.rst index fd15a1d30..27fc44cb6 100644 --- a/docs/api/pmb.commands.rst +++ b/docs/api/pmb.commands.rst @@ -20,6 +20,14 @@ pmb.commands.base module :undoc-members: :show-inheritance: +pmb.commands.flasher module +--------------------------- + +.. automodule:: pmb.commands.flasher + :members: + :undoc-members: + :show-inheritance: + pmb.commands.index module ------------------------- diff --git a/pmb/commands/__init__.py b/pmb/commands/__init__.py index d0549e636..fe881d722 100644 --- a/pmb/commands/__init__.py +++ b/pmb/commands/__init__.py @@ -11,6 +11,7 @@ from pmb.helpers import frontend from .base import Command from .aportgen import Aportgen +from .flasher import Flasher from .log import Log from .index import Index from .repo_bootstrap import RepoBootstrap @@ -31,7 +32,6 @@ unmigrated_commands = [ "export", "sideload", "netboot", - "flasher", "initfs", "qemu", "aportupgrade", @@ -65,6 +65,16 @@ def run_command(args: PmbArgs): match args.action: case "aportgen": command = Aportgen(args.packages, args.fork_alpine, args.fork_alpine_retain_branch) + case "flasher": + command = Flasher( + args.action_flasher, + args.autoinstall, + getattr(args, "cmdline", None), + args.flash_method, + getattr(args, "no_reboot", None), + getattr(args, "partition", None), + getattr(args, "resume", None), + ) case "log": command = Log(args.clear_log, args.lines) case "index": diff --git a/pmb/commands/flasher.py b/pmb/commands/flasher.py new file mode 100644 index 000000000..c6f873a0b --- /dev/null +++ b/pmb/commands/flasher.py @@ -0,0 +1,83 @@ +# Copyright 2023 Oliver Smith +# Copyright 2024 Stefan Hansson +# SPDX-License-Identifier: GPL-3.0-or-later + +import pmb.parse.deviceinfo +from pmb import commands +from pmb.core.context import get_context +from pmb.flasher.frontend import flash_lk2nd, kernel, list_flavors, rootfs, sideload +from pmb.helpers import logging + + +class Flasher(commands.Command): + def __init__( + self, + action_flasher: str, + autoinstall: bool, + cmdline: str | None, + flash_method: str, + no_reboot: bool | None, + partition: str | None, + resume: bool | None, + ) -> None: + self.action_flasher = action_flasher + self.autoinstall = autoinstall + self.cmdline = cmdline + self.flash_method = flash_method + self.no_reboot = no_reboot + self.partition = partition + self.resume = resume + + def run(self) -> None: + context = get_context() + action = self.action_flasher + device = context.config.device + deviceinfo = pmb.parse.deviceinfo() + method = self.flash_method or deviceinfo.flash_method + + if method == "none" and action in ["boot", "flash_kernel", "flash_rootfs", "flash_lk2nd"]: + logging.info("This device doesn't support any flash method.") + return + + if action in ["boot", "flash_kernel"]: + kernel(deviceinfo, method, action == "boot", self.autoinstall) + elif action == "flash_rootfs": + rootfs(deviceinfo, method) + elif action == "flash_vbmeta": + logging.info("(native) flash vbmeta.img with verity disabled flag") + pmb.flasher.run( + deviceinfo, + method, + "flash_vbmeta", + cmdline=self.cmdline, + no_reboot=self.no_reboot, + partition=self.partition, + resume=self.resume, + ) + elif action == "flash_dtbo": + logging.info("(native) flash dtbo image") + pmb.flasher.run( + deviceinfo, + method, + "flash_dtbo", + cmdline=self.cmdline, + no_reboot=self.no_reboot, + partition=self.partition, + resume=self.resume, + ) + elif action == "flash_lk2nd": + flash_lk2nd(deviceinfo, method) + elif action == "list_flavors": + list_flavors(device) + elif action == "list_devices": + pmb.flasher.run( + deviceinfo, + method, + "list_devices", + cmdline=self.cmdline, + no_reboot=self.no_reboot, + partition=self.partition, + resume=self.resume, + ) + elif action == "sideload": + sideload(deviceinfo, method) diff --git a/pmb/flasher/__init__.py b/pmb/flasher/__init__.py index 2fd1c1fdc..6b163ce1f 100644 --- a/pmb/flasher/__init__.py +++ b/pmb/flasher/__init__.py @@ -5,4 +5,3 @@ from pmb.flasher.init import install_depends from pmb.flasher.run import run from pmb.flasher.run import check_partition_blacklist from pmb.flasher.variables import variables -from pmb.flasher.frontend import frontend diff --git a/pmb/flasher/frontend.py b/pmb/flasher/frontend.py index 4b78014e6..75f38894c 100644 --- a/pmb/flasher/frontend.py +++ b/pmb/flasher/frontend.py @@ -7,7 +7,6 @@ from pmb.helpers import logging import pmb.config from pmb.parse.deviceinfo import Deviceinfo -from pmb.types import PmbArgs import pmb.flasher import pmb.install import pmb.chroot.apk @@ -146,34 +145,3 @@ def flash_lk2nd(deviceinfo: Deviceinfo, method: str) -> None: logging.info("(native) flash lk2nd image") pmb.flasher.run(deviceinfo, method, "flash_lk2nd") - - -def frontend(args: PmbArgs) -> None: - context = get_context() - action = args.action_flasher - device = context.config.device - deviceinfo = pmb.parse.deviceinfo() - method = args.flash_method or deviceinfo.flash_method - - if method == "none" and action in ["boot", "flash_kernel", "flash_rootfs", "flash_lk2nd"]: - logging.info("This device doesn't support any flash method.") - return - - if action in ["boot", "flash_kernel"]: - kernel(deviceinfo, method, action == "boot", args.autoinstall) - elif action == "flash_rootfs": - rootfs(deviceinfo, method) - elif action == "flash_vbmeta": - logging.info("(native) flash vbmeta.img with verity disabled flag") - pmb.flasher.run(deviceinfo, method, "flash_vbmeta") - elif action == "flash_dtbo": - logging.info("(native) flash dtbo image") - pmb.flasher.run(deviceinfo, method, "flash_dtbo") - elif action == "flash_lk2nd": - flash_lk2nd(deviceinfo, method) - elif action == "list_flavors": - list_flavors(device) - elif action == "list_devices": - pmb.flasher.run(deviceinfo, method, "list_devices") - elif action == "sideload": - sideload(deviceinfo, method) diff --git a/pmb/flasher/run.py b/pmb/flasher/run.py index 46ba8cb8c..b8eaef0d4 100644 --- a/pmb/flasher/run.py +++ b/pmb/flasher/run.py @@ -24,7 +24,16 @@ def check_partition_blacklist(deviceinfo: Deviceinfo, key, value): ) -def run(deviceinfo: Deviceinfo, method: str, action: str, flavor=None): +def run( + deviceinfo: Deviceinfo, + method: str, + action: str, + flavor: str | None = None, + cmdline: str | None = None, + no_reboot: bool | None = None, + partition: str | None = None, + resume: bool | None = None, +) -> None: pmb.flasher.init(deviceinfo.codename, method) # Verify action @@ -42,9 +51,7 @@ def run(deviceinfo: Deviceinfo, method: str, action: str, flavor=None): ) # Variable setup - # FIXME: handle argparsing and pass in only the args we need. - args = pmb.helpers.args.please_i_really_need_args() - fvars = pmb.flasher.variables(args, flavor, method) + fvars = pmb.flasher.variables(flavor, method, cmdline, no_reboot, partition, resume) # vbmeta flasher requires vbmeta partition to be explicitly specified if action == "flash_vbmeta" and not fvars["$PARTITION_VBMETA"]: @@ -69,12 +76,12 @@ def run(deviceinfo: Deviceinfo, method: str, action: str, flavor=None): "Deviceinfo_reference>" ) - if args.no_reboot and ("flash" not in action or method != "heimdall-bootimg"): + if no_reboot and ("flash" not in action or method != "heimdall-bootimg"): raise RuntimeError( "The '--no-reboot' option is only" " supported when flashing with heimall-bootimg." ) - if args.resume and ("flash" not in action or method != "heimdall-bootimg"): + if resume and ("flash" not in action or method != "heimdall-bootimg"): raise RuntimeError( "The '--resume' option is only" " supported when flashing with heimall-bootimg." ) diff --git a/pmb/flasher/variables.py b/pmb/flasher/variables.py index 338032d09..b2f976e12 100644 --- a/pmb/flasher/variables.py +++ b/pmb/flasher/variables.py @@ -3,15 +3,21 @@ import pmb.config.pmaports from pmb.core.chroot import Chroot from pmb.core.context import get_context -from pmb.types import PmbArgs -def variables(args: PmbArgs, flavor: str, method: str): +def variables( + flavor: str | None, + method: str, + cmdline: str | None, + no_reboot: bool | None, + partition: str | None, + resume: bool | None, +) -> dict[str, str]: device = get_context().config.device deviceinfo = pmb.parse.deviceinfo() _cmdline = deviceinfo.kernel_cmdline or "" - if "cmdline" in args and args.cmdline: - _cmdline = args.cmdline + if cmdline: + _cmdline = cmdline flash_pagesize = deviceinfo.flash_pagesize @@ -54,22 +60,22 @@ def variables(args: PmbArgs, flavor: str, method: str): _partition_vbmeta = deviceinfo.flash_heimdall_partition_vbmeta or None _partition_dtbo = deviceinfo.flash_heimdall_partition_dtbo or None - if "partition" in args and args.partition: + if partition: # Only one operation is done at same time so it doesn't matter # sharing the arg - _partition_kernel = args.partition - _partition_rootfs = args.partition - _partition_vbmeta = args.partition - _partition_dtbo = args.partition + _partition_kernel = partition + _partition_rootfs = partition + _partition_vbmeta = partition + _partition_dtbo = partition _dtb = deviceinfo.dtb + ".dtb" _no_reboot = "" - if getattr(args, "no_reboot", False): + if no_reboot: _no_reboot = "--no-reboot" _resume = "" - if getattr(args, "resume", False): + if resume: _resume = "--resume" fvars = { diff --git a/pmb/helpers/frontend.py b/pmb/helpers/frontend.py index 69b62fcbe..aac0649eb 100644 --- a/pmb/helpers/frontend.py +++ b/pmb/helpers/frontend.py @@ -403,10 +403,6 @@ def install(args: PmbArgs) -> None: pmb.install.install(args) -def flasher(args: PmbArgs) -> None: - pmb.flasher.frontend(args) - - def export(args: PmbArgs) -> None: pmb.export.frontend(args) diff --git a/pmb/install/recovery.py b/pmb/install/recovery.py index e08e13b24..fee2c7fb8 100644 --- a/pmb/install/recovery.py +++ b/pmb/install/recovery.py @@ -21,7 +21,14 @@ def create_zip(args: PmbArgs, chroot: Chroot, device: str): flavor = pmb.helpers.frontend._parse_flavor(device) deviceinfo = pmb.parse.deviceinfo() method = deviceinfo.flash_method - fvars = pmb.flasher.variables(args, flavor, method) + fvars = pmb.flasher.variables( + flavor, + method, + getattr(args, "cmdline", None), + getattr(args, "no_reboot", None), + getattr(args, "partition", None), + getattr(args, "resume", None), + ) # Install recovery installer package in buildroot pmb.chroot.apk.install(["postmarketos-android-recovery-installer"], chroot) -- GitLab