From: Daan De Meyer Date: Mon, 18 Mar 2024 10:58:29 +0000 (+0100) Subject: Simplify gen_required_kernel_modules() X-Git-Tag: v23~81 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af738de263929d7b470123bd07ff1a30cf8fb184;p=thirdparty%2Fmkosi.git Simplify gen_required_kernel_modules() - Make sure we yield paths in sorted order - Use yield from more - Replace parents_relative_to() with a simpler solution --- diff --git a/mkosi/kmod.py b/mkosi/kmod.py index 8fafa7650..6dc82e330 100644 --- a/mkosi/kmod.py +++ b/mkosi/kmod.py @@ -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(