From 91609c16b5d229dfa08985e74ca20a204805049e Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Tue, 29 Jul 2025 17:48:23 +0000 Subject: [PATCH] Fix circular bootloader dependency (#3686) --- archinstall/lib/args.py | 9 +++++---- archinstall/lib/models/bootloader.py | 15 ++++++--------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/archinstall/lib/args.py b/archinstall/lib/args.py index eda61c32..d30fd852 100644 --- a/archinstall/lib/args.py +++ b/archinstall/lib/args.py @@ -131,7 +131,7 @@ class ArchConfig: return config @classmethod - def from_config(cls, args_config: dict[str, Any]) -> 'ArchConfig': + def from_config(cls, args_config: dict[str, Any], args: Arguments) -> 'ArchConfig': arch_config = ArchConfig() arch_config.locale_config = LocaleConfiguration.parse_arg(args_config) @@ -178,7 +178,7 @@ class ArchConfig: arch_config.network_config = NetworkConfiguration.parse_arg(net_config) if bootloader_config := args_config.get('bootloader', None): - arch_config.bootloader = Bootloader.from_arg(bootloader_config) + arch_config.bootloader = Bootloader.from_arg(bootloader_config, args.skip_boot) if args_config.get('uki') and (arch_config.bootloader is None or not arch_config.bootloader.has_uki_support()): arch_config.uki = False @@ -250,12 +250,13 @@ class ArchConfig: class ArchConfigHandler: def __init__(self) -> None: self._parser: ArgumentParser = self._define_arguments() - self._args: Arguments = self._parse_args() + args: Arguments = self._parse_args() + self._args = args config = self._parse_config() try: - self._config = ArchConfig.from_config(config) + self._config = ArchConfig.from_config(config, args) except ValueError as err: warn(str(err)) exit(1) diff --git a/archinstall/lib/models/bootloader.py b/archinstall/lib/models/bootloader.py index 22218c99..1eb3562c 100644 --- a/archinstall/lib/models/bootloader.py +++ b/archinstall/lib/models/bootloader.py @@ -24,12 +24,6 @@ class Bootloader(Enum): def json(self) -> str: return self.value - @staticmethod - def values() -> list[str]: - from ..args import arch_config_handler - - return [e.value for e in Bootloader if e != Bootloader.NO_BOOTLOADER or arch_config_handler.args.skip_boot is True] - @classmethod def get_default(cls) -> Bootloader: from ..args import arch_config_handler @@ -42,12 +36,15 @@ class Bootloader(Enum): return Bootloader.Grub @classmethod - def from_arg(cls, bootloader: str) -> Bootloader: + def from_arg(cls, bootloader: str, skip_boot: bool) -> Bootloader: # to support old configuration files bootloader = bootloader.capitalize() - if bootloader not in cls.values(): - values = ', '.join(cls.values()) + bootloader_options = [e.value for e in Bootloader if e != Bootloader.NO_BOOTLOADER or skip_boot is True] + + if bootloader not in bootloader_options: + values = ', '.join(bootloader_options) warn(f'Invalid bootloader value "{bootloader}". Allowed values: {values}') sys.exit(1) + return Bootloader(bootloader)