Cleaned up argument loading slighly. (#1419)

* Cleaned up argument loading slighly. Also flipped some --silent logic to avoid double negatives. --plugin and --conf {'plugin': ...} should now both work.

* Tweaked xorg profile to use list instead of strings. Because strings causes some issues through add_additional_packages() as it ends up as [(xorg, xorg-xinit), nano] instead of a flat list of packages or string.

* Tweaked xorg profile to use list instead of strings. Because strings causes some issues through add_additional_packages() as it ends up as [(xorg, xorg-xinit), nano] instead of a flat list of packages or string.
This commit is contained in:
Anton Hvornum 2022-08-11 18:06:02 +02:00 committed by GitHub
parent 397cceca90
commit 1086fd686d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 10 deletions

View File

@ -1,5 +1,6 @@
"""Arch Linux installer - guided, templates etc."""
from argparse import ArgumentParser
import typing
from argparse import ArgumentParser, Namespace
from .lib.disk import *
from .lib.exceptions import *
@ -132,6 +133,24 @@ def parse_unspecified_argument_list(unknowns :list, multiple :bool = False, erro
print(f" We ignore the entry {element} as it isn't related to any argument")
return config
def cleanup_empty_args(args :typing.Union[Namespace, dict]) -> dict:
"""
Takes arguments (dictionary or argparse Namespace) and removes any
None values. This ensures clean mergers during dict.update(args)
"""
if type(args) == Namespace:
args = vars(args)
clean_args = {}
for key, val in args.items():
if type(val) == dict:
val = cleanup_empty_args(val)
if val is not None:
clean_args[key] = val
return clean_args
def get_arguments() -> Dict[str, Any]:
""" The handling of parameters from the command line
Is done on following steps:
@ -159,14 +178,15 @@ def get_arguments() -> Dict[str, Any]:
exit(1)
# load the parameters. first the known, then the unknowns
config.update(vars(args))
args = cleanup_empty_args(args)
config.update(args)
config.update(parse_unspecified_argument_list(unknowns))
# amend the parameters (check internal consistency)
# Installation can't be silent if config is not passed
if args.config is not None :
config["silent"] = args.silent
else:
if args.get('config') is None:
config["silent"] = False
else:
config["silent"] = args.get('silent')
# avoiding a compatibility issue
if 'dry-run' in config:

View File

@ -73,6 +73,7 @@ def find_nth(haystack :List[str], needle :str, n :int) -> int:
def load_plugin(path :str) -> ModuleType:
parsed_url = urllib.parse.urlparse(path)
log(f"Loading plugin {parsed_url}.", fg="gray", level=logging.INFO)
# The Profile was not a direct match on a remote URL
if not parsed_url.scheme:
@ -96,6 +97,7 @@ def load_plugin(path :str) -> ModuleType:
if hasattr(sys.modules[namespace], 'Plugin'):
try:
plugins[namespace] = sys.modules[namespace].Plugin()
log(f"Plugin {plugins[namespace]} has been loaded.", fg="gray", level=logging.INFO)
except Exception as err:
log(err, level=logging.ERROR)
log(f"The above error was detected when initiating the plugin: {path}", fg="red", level=logging.ERROR)

View File

@ -47,9 +47,9 @@ if __name__ == 'xorg':
for kernel in archinstall.storage['installation_session'].kernels:
archinstall.storage['installation_session'].add_additional_packages(f"{kernel}-headers") # Fixes https://github.com/archlinux/archinstall/issues/585
archinstall.storage['installation_session'].add_additional_packages("dkms") # I've had kernel regen fail if it wasn't installed before nvidia-dkms
archinstall.storage['installation_session'].add_additional_packages("xorg-server xorg-xinit nvidia-dkms")
archinstall.storage['installation_session'].add_additional_packages("xorg-server", "xorg-xinit", "nvidia-dkms")
else:
archinstall.storage['installation_session'].add_additional_packages(f"xorg-server xorg-xinit {' '.join(archinstall.storage.get('gfx_driver_packages', []))}")
archinstall.storage['installation_session'].add_additional_packages(f"xorg-server", "xorg-xinit", *archinstall.storage.get('gfx_driver_packages', []))
elif 'amdgpu' in archinstall.storage.get("gfx_driver_packages", []):
# The order of these two are important if amdgpu is installed #808
if 'amdgpu' in archinstall.storage['installation_session'].MODULES:
@ -60,9 +60,9 @@ if __name__ == 'xorg':
archinstall.storage['installation_session'].MODULES.remove('radeon')
archinstall.storage['installation_session'].MODULES.append('radeon')
archinstall.storage['installation_session'].add_additional_packages(f"xorg-server xorg-xinit {' '.join(archinstall.storage.get('gfx_driver_packages', []))}")
archinstall.storage['installation_session'].add_additional_packages(f"xorg-server", "xorg-xinit", *archinstall.storage.get('gfx_driver_packages', []))
else:
archinstall.storage['installation_session'].add_additional_packages(f"xorg-server xorg-xinit {' '.join(archinstall.storage.get('gfx_driver_packages', []))}")
archinstall.storage['installation_session'].add_additional_packages(f"xorg-server", "xorg-xinit", *archinstall.storage.get('gfx_driver_packages', []))
except Exception as err:
archinstall.log(f"Could not handle nvidia and linuz-zen specific situations during xorg installation: {err}", level=logging.WARNING, fg="yellow")
archinstall.storage['installation_session'].add_additional_packages("xorg-server xorg-xinit") # Prep didn't run, so there's no driver to install
archinstall.storage['installation_session'].add_additional_packages("xorg-server", "xorg-xinit") # Prep didn't run, so there's no driver to install