From: Zbigniew Jędrzejewski-Szmek Date: Thu, 28 Sep 2023 12:39:57 +0000 (+0200) Subject: distributions: rename all installers to "Installer" X-Git-Tag: v18~26^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a38c6ad95730df9f00cff920e03f9c5afd61dd23;p=thirdparty%2Fmkosi.git distributions: rename all installers to "Installer" We were doing "double namespacing": "centos.CentosInstaller", "ubuntu.UbuntuInstaller", etc. Let's simplify things by dropping the second name. This avoids the awkward issue how capitalize the names of distributions that already have capitals in their name, e.g. CentoOS, or dashes in the name, e.g. RHEL-UBI. The one call site where we import the right installer becomes simpler. In Distribution.installer(), try..except is replaced by assert. If the installer class for a distro is missing, then it's a programming error and not not something we should suppress. --- diff --git a/mkosi/distributions/__init__.py b/mkosi/distributions/__init__.py index d617318fc..e1af068c4 100644 --- a/mkosi/distributions/__init__.py +++ b/mkosi/distributions/__init__.py @@ -7,7 +7,6 @@ from collections.abc import Sequence from typing import TYPE_CHECKING, Optional, cast from mkosi.architecture import Architecture -from mkosi.log import die from mkosi.util import StrEnum, read_os_release if TYPE_CHECKING: @@ -124,14 +123,11 @@ class Distribution(StrEnum): return self.installer().tools_tree_packages() def installer(self) -> type[DistributionInstaller]: - try: - mod = importlib.import_module(f"mkosi.distributions.{self}") - installer = getattr(mod, f"{str(self).title().replace('_','')}Installer") - if not issubclass(installer, DistributionInstaller): - die(f"Distribution installer for {self} is not a subclass of DistributionInstaller") - return cast(type[DistributionInstaller], installer) - except (ImportError, AttributeError): - die("No installer for this distribution.") + modname = str(self).replace('-', '_') + mod = importlib.import_module(f"mkosi.distributions.{modname}") + installer = getattr(mod, "Installer") + assert issubclass(installer, DistributionInstaller) + return cast(type[DistributionInstaller], installer) def detect_distribution() -> tuple[Optional[Distribution], Optional[str]]: diff --git a/mkosi/distributions/alma.py b/mkosi/distributions/alma.py index 921e39f81..dfe4c0bd1 100644 --- a/mkosi/distributions/alma.py +++ b/mkosi/distributions/alma.py @@ -1,11 +1,11 @@ # SPDX-License-Identifier: LGPL-2.1+ from mkosi.config import MkosiConfig -from mkosi.distributions.centos import CentosInstaller +from mkosi.distributions import centos from mkosi.installer.dnf import Repo -class AlmaInstaller(CentosInstaller): +class Installer(centos.Installer): @staticmethod def gpgurls() -> tuple[str, ...]: return ("https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux-$releasever",) diff --git a/mkosi/distributions/arch.py b/mkosi/distributions/arch.py index aae6e1202..4818e9670 100644 --- a/mkosi/distributions/arch.py +++ b/mkosi/distributions/arch.py @@ -9,7 +9,7 @@ from mkosi.log import die from mkosi.state import MkosiState -class ArchInstaller(DistributionInstaller): +class Installer(DistributionInstaller): @classmethod def filesystem(cls) -> str: return "ext4" diff --git a/mkosi/distributions/centos.py b/mkosi/distributions/centos.py index 22dbd5935..13413e1fb 100644 --- a/mkosi/distributions/centos.py +++ b/mkosi/distributions/centos.py @@ -33,7 +33,7 @@ def join_mirror(config: MkosiConfig, link: str) -> str: return urllib.parse.urljoin(config.mirror, link) -class CentosInstaller(DistributionInstaller): +class Installer(DistributionInstaller): @classmethod def filesystem(cls) -> str: return "xfs" diff --git a/mkosi/distributions/debian.py b/mkosi/distributions/debian.py index d5d2d1406..9749c9ca0 100644 --- a/mkosi/distributions/debian.py +++ b/mkosi/distributions/debian.py @@ -15,7 +15,7 @@ from mkosi.state import MkosiState from mkosi.util import umask -class DebianInstaller(DistributionInstaller): +class Installer(DistributionInstaller): @classmethod def filesystem(cls) -> str: return "ext4" diff --git a/mkosi/distributions/fedora.py b/mkosi/distributions/fedora.py index d2645f3c9..5e58c1a60 100644 --- a/mkosi/distributions/fedora.py +++ b/mkosi/distributions/fedora.py @@ -10,7 +10,7 @@ from mkosi.log import die from mkosi.state import MkosiState -class FedoraInstaller(DistributionInstaller): +class Installer(DistributionInstaller): @classmethod def filesystem(cls) -> str: return "btrfs" diff --git a/mkosi/distributions/gentoo.py b/mkosi/distributions/gentoo.py index 16cfe9cc0..a286b9d5d 100644 --- a/mkosi/distributions/gentoo.py +++ b/mkosi/distributions/gentoo.py @@ -57,7 +57,7 @@ def invoke_emerge(state: MkosiState, packages: Sequence[str] = (), apivfs: bool ) -class GentooInstaller(DistributionInstaller): +class Installer(DistributionInstaller): @classmethod def filesystem(cls) -> str: return "btrfs" diff --git a/mkosi/distributions/mageia.py b/mkosi/distributions/mageia.py index 969af9b34..d7390881b 100644 --- a/mkosi/distributions/mageia.py +++ b/mkosi/distributions/mageia.py @@ -9,7 +9,7 @@ from mkosi.log import die from mkosi.state import MkosiState -class MageiaInstaller(DistributionInstaller): +class Installer(DistributionInstaller): @classmethod def filesystem(cls) -> str: return "ext4" diff --git a/mkosi/distributions/openmandriva.py b/mkosi/distributions/openmandriva.py index d6c39397d..abf9e4a32 100644 --- a/mkosi/distributions/openmandriva.py +++ b/mkosi/distributions/openmandriva.py @@ -9,7 +9,7 @@ from mkosi.log import die from mkosi.state import MkosiState -class OpenmandrivaInstaller(DistributionInstaller): +class Installer(DistributionInstaller): @classmethod def filesystem(cls) -> str: return "ext4" diff --git a/mkosi/distributions/opensuse.py b/mkosi/distributions/opensuse.py index e9f381069..d4fed462b 100644 --- a/mkosi/distributions/opensuse.py +++ b/mkosi/distributions/opensuse.py @@ -13,7 +13,7 @@ from mkosi.log import die from mkosi.state import MkosiState -class OpensuseInstaller(DistributionInstaller): +class Installer(DistributionInstaller): @classmethod def filesystem(cls) -> str: return "btrfs" diff --git a/mkosi/distributions/rocky.py b/mkosi/distributions/rocky.py index ad7cb58c1..988575184 100644 --- a/mkosi/distributions/rocky.py +++ b/mkosi/distributions/rocky.py @@ -1,11 +1,11 @@ # SPDX-License-Identifier: LGPL-2.1+ from mkosi.config import MkosiConfig -from mkosi.distributions.centos import CentosInstaller +from mkosi.distributions import centos from mkosi.installer.dnf import Repo -class RockyInstaller(CentosInstaller): +class Installer(centos.Installer): @staticmethod def gpgurls() -> tuple[str, ...]: return ("https://download.rockylinux.org/pub/rocky/RPM-GPG-KEY-Rocky-$releasever",) diff --git a/mkosi/distributions/ubuntu.py b/mkosi/distributions/ubuntu.py index 8d3c724f1..16f3f4cb4 100644 --- a/mkosi/distributions/ubuntu.py +++ b/mkosi/distributions/ubuntu.py @@ -1,11 +1,11 @@ # SPDX-License-Identifier: LGPL-2.1+ from mkosi.architecture import Architecture -from mkosi.distributions.debian import DebianInstaller +from mkosi.distributions import debian from mkosi.state import MkosiState -class UbuntuInstaller(DebianInstaller): +class Installer(debian.Installer): @classmethod def default_release(cls) -> str: return "lunar"