forked from Mirror/pmbootstrap
pmb.helpers.frontend.kconfig: modernize (MR 2333)
Create new pmb/commands/kconfig_check.py and _edit.py files and move related code there.
This commit is contained in:
parent
6f6cf1e8da
commit
b6058e3569
4 changed files with 90 additions and 60 deletions
|
@ -16,6 +16,8 @@ from .repo_bootstrap import RepoBootstrap
|
||||||
from .shutdown import Shutdown
|
from .shutdown import Shutdown
|
||||||
from .test import Test
|
from .test import Test
|
||||||
from .pull import Pull
|
from .pull import Pull
|
||||||
|
from .kconfig_check import KConfigCheck
|
||||||
|
from .kconfig_edit import KConfigEdit
|
||||||
|
|
||||||
"""New way to model pmbootstrap subcommands that can be invoked without PmbArgs."""
|
"""New way to model pmbootstrap subcommands that can be invoked without PmbArgs."""
|
||||||
|
|
||||||
|
@ -24,7 +26,6 @@ unmigrated_commands = [
|
||||||
"init",
|
"init",
|
||||||
"work_migrate",
|
"work_migrate",
|
||||||
"repo_missing",
|
"repo_missing",
|
||||||
"kconfig",
|
|
||||||
"export",
|
"export",
|
||||||
"sideload",
|
"sideload",
|
||||||
"netboot",
|
"netboot",
|
||||||
|
@ -75,6 +76,10 @@ def run_command(args: PmbArgs):
|
||||||
command = Test(args.action_test)
|
command = Test(args.action_test)
|
||||||
elif args.action == "pull":
|
elif args.action == "pull":
|
||||||
command = Pull()
|
command = Pull()
|
||||||
|
elif args.action == "kconfig" and args.action_kconfig == "check":
|
||||||
|
command = KConfigCheck(args.kconfig_check_details, args.file, args.package)
|
||||||
|
elif args.action == "kconfig" and args.action_kconfig in ["edit", "migrate"]:
|
||||||
|
command = KConfigEdit(args.package, args.action_kconfig == "migrate")
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError(f"Command '{args.action}' is not implemented.")
|
raise NotImplementedError(f"Command '{args.action}' is not implemented.")
|
||||||
|
|
||||||
|
|
63
pmb/commands/kconfig_check.py
Normal file
63
pmb/commands/kconfig_check.py
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
# Copyright 2024 Oliver Smith
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
from pmb import commands
|
||||||
|
from pmb.core.context import get_context
|
||||||
|
import pmb.helpers.git
|
||||||
|
import pmb.config
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
class KConfigCheck(commands.Command):
|
||||||
|
details: bool
|
||||||
|
file: str
|
||||||
|
packages: list[str]
|
||||||
|
|
||||||
|
def __init__(self, details, file, packages):
|
||||||
|
self.details = details
|
||||||
|
self.file = file
|
||||||
|
self.packages = packages
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
# Build the components list from cli arguments (--waydroid etc.)
|
||||||
|
components_list = []
|
||||||
|
|
||||||
|
# Handle passing a file directly
|
||||||
|
if self.file:
|
||||||
|
if pmb.parse.kconfig.check_file(self.file, components_list, details=self.details):
|
||||||
|
logging.info("kconfig check succeeded!")
|
||||||
|
return
|
||||||
|
raise RuntimeError("kconfig check failed!")
|
||||||
|
|
||||||
|
# Default to all kernel packages
|
||||||
|
if not self.packages:
|
||||||
|
for pkg in pmb.helpers.pmaports.get_list():
|
||||||
|
if pkg.startswith("linux-"):
|
||||||
|
self.packages.append(pkg.split("linux-")[1])
|
||||||
|
|
||||||
|
# Iterate over all kernels
|
||||||
|
error = False
|
||||||
|
skipped = 0
|
||||||
|
self.packages.sort()
|
||||||
|
for package in self.packages:
|
||||||
|
if not get_context().force:
|
||||||
|
pkgname = package if package.startswith("linux-") else f"linux-{package}"
|
||||||
|
aport = pmb.helpers.pmaports.find(pkgname)
|
||||||
|
apkbuild = pmb.parse.apkbuild(aport)
|
||||||
|
if "!pmb:kconfigcheck" in apkbuild["options"]:
|
||||||
|
skipped += 1
|
||||||
|
continue
|
||||||
|
if not pmb.parse.kconfig.check(package, components_list, details=self.details):
|
||||||
|
error = True
|
||||||
|
|
||||||
|
# At least one failure
|
||||||
|
if error:
|
||||||
|
raise RuntimeError("kconfig check failed!")
|
||||||
|
else:
|
||||||
|
if skipped:
|
||||||
|
logging.info(
|
||||||
|
f"NOTE: {skipped} kernel{' was' if skipped == 1 else 's were'} skipped"
|
||||||
|
" (consider 'pmbootstrap kconfig check -f')"
|
||||||
|
)
|
||||||
|
logging.info("kconfig check succeeded!")
|
21
pmb/commands/kconfig_edit.py
Normal file
21
pmb/commands/kconfig_edit.py
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# Copyright 2024 Oliver Smith
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
from pmb import commands
|
||||||
|
import pmb.build
|
||||||
|
import pmb.helpers.args
|
||||||
|
|
||||||
|
|
||||||
|
class KConfigEdit(commands.Command):
|
||||||
|
pkgname: str
|
||||||
|
use_oldconfig: bool
|
||||||
|
|
||||||
|
def __init__(self, pkgname, use_oldconfig):
|
||||||
|
self.pkgname = pkgname
|
||||||
|
self.use_oldconfig = use_oldconfig
|
||||||
|
pass
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
args = pmb.helpers.args.please_i_really_need_args()
|
||||||
|
pmb.build.menuconfig(args, self.pkgname, self.use_oldconfig)
|
|
@ -457,65 +457,6 @@ def newapkbuild(args: PmbArgs):
|
||||||
pmb.build.newapkbuild(args.folder, pass_through, args.force)
|
pmb.build.newapkbuild(args.folder, pass_through, args.force)
|
||||||
|
|
||||||
|
|
||||||
def kconfig(args: PmbArgs):
|
|
||||||
if args.action_kconfig == "check":
|
|
||||||
details = args.kconfig_check_details
|
|
||||||
# Build the components list from cli arguments (--waydroid etc.)
|
|
||||||
components_list = []
|
|
||||||
|
|
||||||
# Handle passing a file directly
|
|
||||||
if args.file:
|
|
||||||
if pmb.parse.kconfig.check_file(args.file, components_list, details=details):
|
|
||||||
logging.info("kconfig check succeeded!")
|
|
||||||
return
|
|
||||||
raise RuntimeError("kconfig check failed!")
|
|
||||||
|
|
||||||
# Default to all kernel packages
|
|
||||||
packages: list[str]
|
|
||||||
# FIXME (#2324): figure out the args.package vs args.packages situation
|
|
||||||
if isinstance(args.package, list):
|
|
||||||
packages = args.package
|
|
||||||
else:
|
|
||||||
packages = [args.package]
|
|
||||||
if not args.package:
|
|
||||||
for pkg in pmb.helpers.pmaports.get_list():
|
|
||||||
if pkg.startswith("linux-"):
|
|
||||||
packages.append(pkg.split("linux-")[1])
|
|
||||||
|
|
||||||
# Iterate over all kernels
|
|
||||||
error = False
|
|
||||||
skipped = 0
|
|
||||||
packages.sort()
|
|
||||||
for package in packages:
|
|
||||||
if not get_context().force:
|
|
||||||
pkgname = package if package.startswith("linux-") else "linux-" + package
|
|
||||||
aport = pmb.helpers.pmaports.find(pkgname)
|
|
||||||
apkbuild = pmb.parse.apkbuild(aport)
|
|
||||||
if "!pmb:kconfigcheck" in apkbuild["options"]:
|
|
||||||
skipped += 1
|
|
||||||
continue
|
|
||||||
if not pmb.parse.kconfig.check(package, components_list, details=details):
|
|
||||||
error = True
|
|
||||||
|
|
||||||
# At least one failure
|
|
||||||
if error:
|
|
||||||
raise RuntimeError("kconfig check failed!")
|
|
||||||
else:
|
|
||||||
if skipped:
|
|
||||||
logging.info(
|
|
||||||
"NOTE: " + str(skipped) + " kernel(s) was skipped"
|
|
||||||
" (consider 'pmbootstrap kconfig check -f')"
|
|
||||||
)
|
|
||||||
logging.info("kconfig check succeeded!")
|
|
||||||
elif args.action_kconfig in ["edit", "migrate"]:
|
|
||||||
if args.package:
|
|
||||||
pkgname = args.package if isinstance(args.package, str) else args.package[0]
|
|
||||||
else:
|
|
||||||
pkgname = get_context().config.device
|
|
||||||
use_oldconfig = args.action_kconfig == "migrate"
|
|
||||||
pmb.build.menuconfig(args, pkgname, use_oldconfig)
|
|
||||||
|
|
||||||
|
|
||||||
def deviceinfo_parse(args: PmbArgs):
|
def deviceinfo_parse(args: PmbArgs):
|
||||||
# Default to all devices
|
# Default to all devices
|
||||||
devices = args.devices
|
devices = args.devices
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue