pmbootstrap-meow/pmb/commands/kconfig_check.py
Oliver Smith 479bad049f
kconfig check: don't print URL for each warning (MR 2399)
Instead of printing an URL with each warning, print one once at the
end. This gives less cluttered output, and we don't have information
about each and every option on that wiki page anyway (and given that we
now have so many options, I don't think it's good use of time to add it
there.)
2024-09-08 00:09:16 +02:00

70 lines
2.4 KiB
Python

# 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
from pmb.helpers.exceptions import NonBugError
import pmb.parse.kconfig
import pmb.helpers.git
import pmb.config
import logging
class KConfigCheck(commands.Command):
details: bool
file: str
packages: list[str]
keep_going: bool
def __init__(self, details, file, packages, keep_going):
self.details = details
self.file = file
self.packages = packages
self.keep_going = keep_going
def run(self):
# Build the components list from cli arguments (--waydroid etc.)
components_list: list[str] = []
error_msg = "kconfig check failed! More info: https://postmarketos.org/kconfig"
# 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 NonBugError(error_msg)
# 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
if not self.keep_going:
break
# At least one failure
if error:
raise NonBugError(error_msg)
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!")