]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Move more enums to config.py
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 21 Jul 2023 13:11:21 +0000 (15:11 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Sat, 22 Jul 2023 18:06:30 +0000 (20:06 +0200)
Also move is_xxx_distribution() functions into Distribution enum.

mkosi/__init__.py
mkosi/config.py
mkosi/manifest.py
mkosi/qemu.py
mkosi/util.py
tests/test_config.py
tests/test_parse_load_args.py
tests/test_util.py

index 84e4c390544613ff38fde6e0c9ce47ad7a13a027..98113ade9767bb3b6ff27b9246496eae5d4c0544 100644 (file)
@@ -23,11 +23,14 @@ from typing import Callable, ContextManager, Optional, TextIO, Union, cast
 
 from mkosi.btrfs import btrfs_maybe_snapshot_subvolume
 from mkosi.config import (
+    Compression,
     ConfigFeature,
     GenericVersion,
+    ManifestFormat,
     MkosiArgs,
     MkosiConfig,
     MkosiConfigParser,
+    OutputFormat,
     SecureBootSignTool,
     Verb,
 )
@@ -42,16 +45,11 @@ from mkosi.run import become_root, bwrap, chroot_cmd, init_mount_namespace, run,
 from mkosi.state import MkosiState
 from mkosi.types import PathString
 from mkosi.util import (
-    Compression,
     InvokingUser,
-    ManifestFormat,
-    OutputFormat,
     flatten,
     flock,
     format_bytes,
     format_rlimit,
-    is_apt_distribution,
-    is_portage_distribution,
     scopedenv,
     try_import,
 )
@@ -806,7 +804,7 @@ def gen_kernel_modules_initrd(state: MkosiState, kver: str) -> Path:
         # Debian/Ubuntu do not compress their kernel modules, so we compress the initramfs instead. Note that
         # this is not ideal since the compressed kernel modules will all be decompressed on boot which
         # requires significant memory.
-        if is_apt_distribution(state.config.distribution):
+        if state.config.distribution.is_apt_distribution():
             maybe_compress(state, Compression.zst, kmods, kmods)
 
     return kmods
@@ -865,9 +863,9 @@ def install_unified_kernel(state: MkosiState, roothash: Optional[str]) -> None:
                 "--format", "cpio",
                 "--package", "systemd",
                 "--package", "util-linux",
-                *(["--package", "udev"] if not is_portage_distribution(state.config.distribution) else []),
+                *(["--package", "udev"] if not state.config.distribution.is_portage_distribution() else []),
                 "--package", "kmod",
-                *(["--package", "dmsetup"] if is_apt_distribution(state.config.distribution) else []),
+                *(["--package", "dmsetup"] if state.config.distribution.is_apt_distribution() else []),
                 "--output", f"{state.config.output}-initrd",
                 *(["--image-version", state.config.image_version] if state.config.image_version else []),
                 "--make-initrd", "yes",
index ab7b7dc9ed1c3ba338e1588441cb867da49916e7..30f5044cb27a0e0b8094bd108b64612c57762e4f 100644 (file)
@@ -28,16 +28,11 @@ from mkosi.log import ARG_DEBUG, ARG_DEBUG_SHELL, Style, die
 from mkosi.pager import page
 from mkosi.run import run
 from mkosi.util import (
-    Compression,
     Distribution,
     InvokingUser,
-    ManifestFormat,
-    OutputFormat,
     chdir,
     detect_distribution,
     flatten,
-    is_apt_distribution,
-    is_dnf_distribution,
     qemu_check_kvm_support,
     qemu_check_vsock_support,
 )
@@ -94,6 +89,35 @@ class SecureBootSignTool(enum.Enum):
         return str(self.value).lower()
 
 
+class OutputFormat(str, enum.Enum):
+    directory = "directory"
+    tar = "tar"
+    cpio = "cpio"
+    disk = "disk"
+    none = "none"
+
+
+class ManifestFormat(str, enum.Enum):
+    json      = "json"       # the standard manifest in json format
+    changelog = "changelog"  # human-readable text file with package changelogs
+
+
+class Compression(enum.Enum):
+    none = None
+    zst = "zst"
+    xz = "xz"
+    bz2 = "bz2"
+    gz = "gz"
+    lz4 = "lz4"
+    lzma = "lzma"
+
+    def __str__(self) -> str:
+        return str(self.value).lower()
+
+    def __bool__(self) -> bool:
+        return bool(self.value)
+
+
 def parse_boolean(s: str) -> bool:
     "Parse 1/true/yes/y/t/on as true and 0/false/no/n/f/off/None as false"
     s_l = s.lower()
@@ -2149,8 +2173,8 @@ def load_config(args: argparse.Namespace) -> MkosiConfig:
         die("Sorry, the host machine does not support vsock")
 
     if args.repositories and not (
-        is_dnf_distribution(args.distribution) or
-        is_apt_distribution(args.distribution) or
+        args.distribution.is_dnf_distribution() or
+        args.distribution.is_apt_distribution() or
         args.distribution == Distribution.arch
     ):
         die("Sorry, the --repositories option is only supported on pacman, dnf and apt based distributions")
index 29578888da25c855cf1d73b19602755369b48d99..22cd74dfb694d10ea00e6359f3c8607826ea3443 100644 (file)
@@ -8,9 +8,9 @@ from subprocess import DEVNULL, PIPE
 from textwrap import dedent
 from typing import IO, Any, Optional
 
-from mkosi.config import MkosiConfig
+from mkosi.config import ManifestFormat, MkosiConfig
 from mkosi.run import run
-from mkosi.util import Distribution, ManifestFormat, PackageType
+from mkosi.util import Distribution, PackageType
 
 
 @dataclasses.dataclass
index 8632fbd383332b4fcde2a7e658e011244a3f047b..df83097f5edb3b807eb37b52532605729553e323 100644 (file)
@@ -17,14 +17,13 @@ from typing import Iterator, Optional
 
 from mkosi.architecture import Architecture
 from mkosi.btrfs import btrfs_maybe_snapshot_subvolume
-from mkosi.config import ConfigFeature, MkosiArgs, MkosiConfig
+from mkosi.config import ConfigFeature, MkosiArgs, MkosiConfig, OutputFormat
 from mkosi.log import die
 from mkosi.remove import unlink_try_hard
 from mkosi.run import MkosiAsyncioThread, run, spawn
 from mkosi.types import PathString
 from mkosi.util import (
     Distribution,
-    OutputFormat,
     format_bytes,
     qemu_check_kvm_support,
     qemu_check_vsock_support,
index 817ddd31f9d5fdefc5bb1fc34ef4c396803762e3..ab875d2693e46d4951638289f98f7d26e54e91d4 100644 (file)
@@ -61,21 +61,22 @@ class Distribution(enum.Enum):
     def is_centos_variant(self) -> bool:
         return self in (Distribution.centos, Distribution.alma, Distribution.rocky)
 
+    def is_dnf_distribution(self) -> bool:
+        return self in (
+            Distribution.fedora,
+            Distribution.mageia,
+            Distribution.centos,
+            Distribution.openmandriva,
+            Distribution.rocky,
+            Distribution.alma,
+        )
 
-class Compression(enum.Enum):
-    none = None
-    zst = "zst"
-    xz = "xz"
-    bz2 = "bz2"
-    gz = "gz"
-    lz4 = "lz4"
-    lzma = "lzma"
+    def is_apt_distribution(self) -> bool:
+        return self in (Distribution.debian, Distribution.ubuntu)
 
-    def __str__(self) -> str:
-        return str(self.value).lower()
 
-    def __bool__(self) -> bool:
-        return bool(self.value)
+    def is_portage_distribution(self) -> bool:
+        return self in (Distribution.gentoo,)
 
 
 def dictify(f: Callable[..., Iterator[tuple[T, V]]]) -> Callable[..., dict[T, V]]:
@@ -139,39 +140,6 @@ def detect_distribution() -> tuple[Optional[Distribution], Optional[str]]:
     return d, version_id
 
 
-def is_dnf_distribution(d: Distribution) -> bool:
-    return d in (
-        Distribution.fedora,
-        Distribution.mageia,
-        Distribution.centos,
-        Distribution.openmandriva,
-        Distribution.rocky,
-        Distribution.alma,
-    )
-
-
-def is_apt_distribution(d: Distribution) -> bool:
-    return d in (Distribution.debian, Distribution.ubuntu)
-
-
-def is_portage_distribution(d: Distribution) -> bool:
-    return d in (Distribution.gentoo,)
-
-
-class OutputFormat(str, enum.Enum):
-    directory = "directory"
-    tar = "tar"
-    cpio = "cpio"
-    disk = "disk"
-    none = "none"
-
-
-class ManifestFormat(str, enum.Enum):
-    json      = "json"       # the standard manifest in json format
-    changelog = "changelog"  # human-readable text file with package changelogs
-
-
-
 def format_rlimit(rlimit: int) -> str:
     limits = resource.getrlimit(rlimit)
     soft = "infinity" if limits[0] == resource.RLIM_INFINITY else str(limits[0])
index c9489bf1f0219c5760570b3144d4a176460ee78d..dd1b2f70ffde8587d3c506a3733f42c1715f8b1e 100644 (file)
@@ -4,7 +4,37 @@ import itertools
 
 import pytest
 
-from mkosi.config import GenericVersion
+from mkosi.config import Compression, GenericVersion
+
+
+def test_compression_enum_creation() -> None:
+    assert Compression(None) == Compression.none
+    assert Compression("zst") == Compression.zst
+    assert Compression("xz") == Compression.xz
+    assert Compression("bz2") == Compression.bz2
+    assert Compression("gz") == Compression.gz
+    assert Compression("lz4") == Compression.lz4
+    assert Compression("lzma") == Compression.lzma
+
+
+def test_compression_enum_bool() -> None:
+    assert bool(Compression.none) == False
+    assert bool(Compression.zst)  == True
+    assert bool(Compression.xz)   == True
+    assert bool(Compression.bz2)  == True
+    assert bool(Compression.gz)   == True
+    assert bool(Compression.lz4)  == True
+    assert bool(Compression.lzma) == True
+
+
+def test_compression_enum_str() -> None:
+    assert str(Compression.none) == "none"
+    assert str(Compression.zst)  == "zst"
+    assert str(Compression.xz)   == "xz"
+    assert str(Compression.bz2)  == "bz2"
+    assert str(Compression.gz)   == "gz"
+    assert str(Compression.lz4)  == "lz4"
+    assert str(Compression.lzma) == "lzma"
 
 
 def test_generic_version_systemd() -> None:
index d9f5b0de09aa06fa44e121294b0610f78d00e004..340b13779644bbe4c8619c158d8968060e9df621 100644 (file)
@@ -12,8 +12,8 @@ from typing import Iterator, List, Optional
 
 import pytest
 
-from mkosi.config import MkosiArgs, MkosiConfig, MkosiConfigParser, Verb
-from mkosi.util import Compression, Distribution
+from mkosi.config import Compression, MkosiArgs, MkosiConfig, MkosiConfigParser, Verb
+from mkosi.util import Distribution
 
 
 @contextmanager
index fa9717964e10a09d53f462c14e37f70ed68f79ff..ff7a22904e0083ade84bdecf4372a232a1ef0f1c 100644 (file)
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: LGPL-2.1+
 
-from mkosi.util import Compression, Distribution, PackageType
+from mkosi.util import Distribution, PackageType
 
 
 def test_distribution() -> None:
@@ -10,31 +10,3 @@ def test_distribution() -> None:
     assert str(Distribution.fedora) == "fedora"
 
 
-def test_compression_enum_creation() -> None:
-    assert Compression(None) == Compression.none
-    assert Compression("zst") == Compression.zst
-    assert Compression("xz") == Compression.xz
-    assert Compression("bz2") == Compression.bz2
-    assert Compression("gz") == Compression.gz
-    assert Compression("lz4") == Compression.lz4
-    assert Compression("lzma") == Compression.lzma
-
-
-def test_compression_enum_bool() -> None:
-    assert bool(Compression.none) == False
-    assert bool(Compression.zst)  == True
-    assert bool(Compression.xz)   == True
-    assert bool(Compression.bz2)  == True
-    assert bool(Compression.gz)   == True
-    assert bool(Compression.lz4)  == True
-    assert bool(Compression.lzma) == True
-
-
-def test_compression_enum_str() -> None:
-    assert str(Compression.none) == "none"
-    assert str(Compression.zst)  == "zst"
-    assert str(Compression.xz)   == "xz"
-    assert str(Compression.bz2)  == "bz2"
-    assert str(Compression.gz)   == "gz"
-    assert str(Compression.lz4)  == "lz4"
-    assert str(Compression.lzma) == "lzma"