]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Refactor resolve_deps and reorder after configure
authorMichael Ferrari <nekkodroid404@gmail.com>
Mon, 11 Nov 2024 01:18:22 +0000 (02:18 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 12 Nov 2024 10:05:11 +0000 (11:05 +0100)
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.

mkosi/__init__.py
mkosi/config.py

index 688b23ebc87c19a42c06cbbec42bf48c4a2bc66c..3336fcc582e11a32a8f8afa6380846cc3a6d1cb8 100644 (file)
@@ -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:
index 54f67fbd732acff5b4b09144d70b2d8d4ce0f47f..546ebe5e8fa39a277261551f9b30b8adc54dcaea 100644 (file)
@@ -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: