]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Simplify gen_required_kernel_modules()
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 18 Mar 2024 10:58:29 +0000 (11:58 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 18 Mar 2024 12:32:26 +0000 (13:32 +0100)
- Make sure we yield paths in sorted order
- Use yield from more
- Replace parents_relative_to() with a simpler solution

mkosi/kmod.py

index 8fafa7650d6957790581279c99fd14069b64c2ed..6dc82e330bf18958e5ca91254d21943566307947 100644 (file)
@@ -150,12 +150,9 @@ def resolve_module_dependencies(
     return set(nametofile[m] for m in mods if m in nametofile), set(firmware)
 
 
-def parents_relative_to(path: Path, other: Path) -> Iterator[Path]:
-    for p in path.parents:
-        if p == other or not p.is_relative_to(other):
-            return
-
-        yield p
+def parents_below(path: Path, below: Path) -> list[Path]:
+    parents = list(path.parents)
+    return parents[:parents.index(below)]
 
 
 def gen_required_kernel_modules(
@@ -181,28 +178,21 @@ def gen_required_kernel_modules(
         mods = set((modulesd / "kernel").rglob("*.ko*"))
         firmware = set()
 
-    yield modulesd.parent
-    yield modulesd
-    yield modulesd / "kernel"
-
-    if (root / "usr/lib/firmware").exists():
-        yield root / "usr/lib/firmware"
-
-    yield from {p for m in sorted(mods) for p in parents_relative_to(m, modulesd / "kernel")}
-    yield from {p for f in sorted(firmware) for p in parents_relative_to(f, root / "usr/lib/firmware")}
-
-    for p in itertools.chain(sorted(mods), sorted(firmware)):
-        yield p
+    yield from sorted(
+        itertools.chain(
+            {p for f in mods | firmware for p in parents_below(f, root / "usr/lib")},
+            mods,
+            firmware,
+            modulesd.glob("modules*"),
+        )
+    )
 
-    for p in (root / modulesd).iterdir():
-        if p.name.startswith("modules"):
-            yield p
+    if (modulesd / "vdso").exists():
+        if not mods:
+            yield from parents_below(modulesd / "vdso", root / "usr/lib")
 
-    if (root / modulesd / "vdso").exists():
         yield modulesd / "vdso"
-
-        for p in (root / modulesd / "vdso").iterdir():
-            yield p
+        yield from sorted((modulesd / "vdso").iterdir())
 
 
 def process_kernel_modules(