From: Daan De Meyer Date: Wed, 15 Oct 2025 19:35:12 +0000 (+0200) Subject: Rework PACKAGE_GLOBS to be a PackageManager classmethod X-Git-Tag: v26~79 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=71ffced0f1796d12d8eb927761646a810ef882f1;p=thirdparty%2Fmkosi.git Rework PACKAGE_GLOBS to be a PackageManager classmethod --- diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 3fd1d4f95..be4338ee7 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -48,7 +48,6 @@ from mkosi.bootloader import ( from mkosi.burn import run_burn from mkosi.completion import print_completion from mkosi.config import ( - PACKAGE_GLOBS, Args, ArtifactOutput, Cacheonly, @@ -1263,7 +1262,10 @@ def install_package_directories(context: Context, directories: Sequence[Path]) - with complete_step("Copying in extra packages…"): for d in directories: - for p in itertools.chain(*(d.glob(glob) for glob in PACKAGE_GLOBS)): + for p in itertools.chain.from_iterable( + d.glob(glob) + for glob in context.config.distribution.package_manager(context.config).package_globs() + ): shutil.copy(p, context.repository, follow_symlinks=True) diff --git a/mkosi/config.py b/mkosi/config.py index 2fbc9e776..87b214fcb 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -1882,15 +1882,6 @@ class Args: return dataclasses.replace(cls.default(), **{k: v for k, v in j.items() if k in cls.fields()}) -PACKAGE_GLOBS = ( - "*.rpm", - "*.pkg.tar*", - "*.deb", - "*.ddeb", - "*.apk", -) - - @dataclasses.dataclass(frozen=True) class UKIProfile: profile: dict[str, str] @@ -2375,7 +2366,9 @@ class Config: "package_directories": [ (p.name, p.stat().st_mtime_ns) for d in self.package_directories - for p in sorted(flatten(d.glob(glob) for glob in PACKAGE_GLOBS)) + for p in sorted( + flatten(d.glob(glob) for glob in self.distribution.package_manager(self).package_globs()) + ) ], "repositories": sorted(self.repositories), "overlay": self.overlay, diff --git a/mkosi/installer/__init__.py b/mkosi/installer/__init__.py index da8fa4db6..2647fca41 100644 --- a/mkosi/installer/__init__.py +++ b/mkosi/installer/__init__.py @@ -25,6 +25,10 @@ class PackageManager: def package_subdirs(cls, cache: Path) -> list[tuple[Path, Path]]: return [] + @classmethod + def package_globs(cls) -> list[str]: + return [] + @classmethod def state_subdirs(cls, state: Path) -> list[Path]: return [] diff --git a/mkosi/installer/apk.py b/mkosi/installer/apk.py index 9c9b754fa..6cf8749ec 100644 --- a/mkosi/installer/apk.py +++ b/mkosi/installer/apk.py @@ -31,6 +31,10 @@ class Apk(PackageManager): def package_subdirs(cls, cache: Path) -> list[tuple[Path, Path]]: return [(Path("."), Path("."))] + @classmethod + def package_globs(cls) -> list[str]: + return ["*.apk"] + @classmethod def scripts(cls, context: Context) -> dict[str, list[PathString]]: return { diff --git a/mkosi/installer/apt.py b/mkosi/installer/apt.py index cff959010..9ffec6457 100644 --- a/mkosi/installer/apt.py +++ b/mkosi/installer/apt.py @@ -6,7 +6,7 @@ from collections.abc import Sequence from pathlib import Path from typing import Final, Optional -from mkosi.config import PACKAGE_GLOBS, Config, ConfigFeature +from mkosi.config import Config, ConfigFeature from mkosi.context import Context from mkosi.installer import PackageManager from mkosi.log import die @@ -59,6 +59,10 @@ class Apt(PackageManager): def package_subdirs(cls, cache: Path) -> list[tuple[Path, Path]]: return [(Path("archives"), Path("archives"))] + @classmethod + def package_globs(cls) -> list[str]: + return ["*.deb", "*.ddeb"] + @classmethod def state_subdirs(cls, state: Path) -> list[Path]: return [state / "lists"] @@ -286,7 +290,7 @@ class Apt(PackageManager): @classmethod def createrepo(cls, context: Context) -> None: - names = [d.name for glob in PACKAGE_GLOBS for d in context.repository.glob(glob) if "deb" in glob] + names = [d.name for glob in cls.package_globs() for d in context.repository.glob(glob)] if not names: return diff --git a/mkosi/installer/dnf.py b/mkosi/installer/dnf.py index 938fdf845..3c7a6fc0e 100644 --- a/mkosi/installer/dnf.py +++ b/mkosi/installer/dnf.py @@ -42,6 +42,10 @@ class Dnf(PackageManager): for d in dirs ] + @classmethod + def package_globs(cls) -> list[str]: + return ["*.rpm"] + @classmethod def scripts(cls, context: Context) -> dict[str, list[PathString]]: return { diff --git a/mkosi/installer/pacman.py b/mkosi/installer/pacman.py index 1f15928e0..dc42af8cf 100644 --- a/mkosi/installer/pacman.py +++ b/mkosi/installer/pacman.py @@ -38,6 +38,10 @@ class Pacman(PackageManager): def package_subdirs(cls, cache: Path) -> list[tuple[Path, Path]]: return [(Path("pkg"), Path("pkg"))] + @classmethod + def package_globs(cls) -> list[str]: + return ["*.pkg.tar"] + @classmethod def state_subdirs(cls, state: Path) -> list[Path]: return [state / "sync"] diff --git a/mkosi/installer/zypper.py b/mkosi/installer/zypper.py index 5c656d11f..66ffcf724 100644 --- a/mkosi/installer/zypper.py +++ b/mkosi/installer/zypper.py @@ -26,6 +26,10 @@ class Zypper(PackageManager): def package_subdirs(cls, cache: Path) -> list[tuple[Path, Path]]: return [(Path("packages"), Path("packages"))] + @classmethod + def package_globs(cls) -> list[str]: + return ["*.rpm"] + @classmethod def scripts(cls, context: Context) -> dict[str, list[PathString]]: install: list[PathString] = [