From bb2623e96ab1b66b78066d0d1b5432803dd0d015 Mon Sep 17 00:00:00 2001 From: Peter Foley Date: Sat, 9 May 2026 12:43:31 -0400 Subject: [PATCH] Avoid KeyError when a bls directory is empty If a bls directory is empty, eclean-kernel fails with a KeyError. This can happen when too many kernels build up and the /boot partition is filled to the point that writing the initramfs fails. Fixes #60 e.g. File "/home/peter/eclean-kernel/.venv/bin/eclean-kernel", line 10, in 12:42 [54/433] sys.exit(setuptools_main()) ~~~~~~~~~~~~~~~^^ File "/home/peter/eclean-kernel/ecleankernel/__main__.py", line 391, in setuptools_main sys.exit(main(sys.argv[1:])) ~~~~^^^^^^^^^^^^^^ File "/home/peter/eclean-kernel/ecleankernel/__main__.py", line 236, in main kernels = layout.find_kernels(exclusions=exclusions) File "/home/peter/eclean-kernel/ecleankernel/layout/blspec.py", line 130, in find_kernels kernels[(ver, "bls")].all_files.append( ~~~~~~~^^^^^^^^^^^^^^ KeyError: ('7.0.1-gentoo-dist', 'bls') --- ecleankernel/layout/blspec.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ecleankernel/layout/blspec.py b/ecleankernel/layout/blspec.py index 405f861..1f82ed8 100644 --- a/ecleankernel/layout/blspec.py +++ b/ecleankernel/layout/blspec.py @@ -77,7 +77,7 @@ def append_kernel_files(self, ver: str, module_dict: dict, exclusions: typing.Container[KernelFileType] = [], - ) -> Kernel: + ) -> None: fobj = GenericFile(path, ftype) if ftype == KernelFileType.KERNEL: @@ -95,8 +95,6 @@ def append_kernel_files(self, if ftype not in exclusions: k.all_files.append(fobj) - return k - def find_kernels(self, exclusions: typing.Container[KernelFileType] = [], ) -> typing.List[Kernel]: @@ -118,15 +116,16 @@ def find_kernels(self, if dir_path.is_symlink() or not dir_path.is_dir(): continue - k = Kernel(ver, layout="bls") + kernels[(ver, "bls")] = Kernel(ver, layout="bls") for fn in os.listdir(dir_path): if fn.startswith('.'): continue - kernels[(ver, "bls")] = self.append_kernel_files( + self.append_kernel_files( self.name_map.get(fn, KernelFileType.MISC), dir_path / fn, - k, ver, module_dict, exclusions) + kernels[(ver, "bls")], ver, module_dict, exclusions) + kernels[(ver, "bls")].all_files.append( EmptyDirectory(dir_path)) @@ -145,10 +144,11 @@ def find_kernels(self, # Not our UKI continue - kernels[(ver, "uki")] = self.append_kernel_files( + kernels[(ver, "uki")] = Kernel(ver, layout="uki") + self.append_kernel_files( KernelFileType.KERNEL, self.ukidir / file, - Kernel(ver, layout="uki"), + kernels[(ver, "uki")], ver, module_dict, exclusions)