From: Michael Ferrari Date: Mon, 11 Nov 2024 01:18:22 +0000 (+0100) Subject: Refactor resolve_deps and reorder after configure X-Git-Tag: v25~182 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a411ff78f5f9bdc20a3abe72386dfe6402e58f69;p=thirdparty%2Fmkosi.git Refactor resolve_deps and reorder after configure As a configure script can modify the config in nearly any way it pleases it is not impossible that dependencies may be resolved at runtime. So just rerun dependency resolution after all configure scripts have done their stuff. --- diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 688b23ebc..3336fcc58 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -73,6 +73,7 @@ from mkosi.config import ( format_bytes, parse_boolean, parse_config, + resolve_deps, summary, systemd_tool_version, want_selinux_relabel, @@ -4727,7 +4728,9 @@ def run_verb(args: Args, images: Sequence[Config], *, resources: Path) -> None: images[i] = config = run_configure_scripts(config) # The images array has been modified so we need to reevaluate last again. + # Also ensure that all other images are reordered in case their dependencies were modified. last = images[-1] + images = resolve_deps(images[:-1], last.dependencies) + [last] if not (last.output_dir_or_cwd() / last.output).exists() or last.output_format == OutputFormat.none: for config in images: diff --git a/mkosi/config.py b/mkosi/config.py index 54f67fbd7..546ebe5e8 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -3856,7 +3856,7 @@ def create_argument_parser(chdir: bool = True) -> argparse.ArgumentParser: return parser -def resolve_deps(images: Sequence[argparse.Namespace], include: Sequence[str]) -> list[argparse.Namespace]: +def resolve_deps(images: Sequence[Config], include: Sequence[str]) -> list[Config]: graph = {config.image: config.dependencies for config in images} if any((missing := i) not in graph for i in include): @@ -4463,9 +4463,12 @@ def parse_config( if dependencies is not None: setattr(config, "dependencies", dependencies) - images = resolve_deps(images, config.dependencies) + main = load_config(config) - return args, tuple([load_config(ns) for ns in images] + [load_config(config)]) + subimages = [load_config(ns) for ns in images] + subimages = resolve_deps(subimages, main.dependencies) + + return args, tuple(subimages + [main]) def finalize_term() -> str: