]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Move Verb to config.py
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 21 Jul 2023 10:19:32 +0000 (12:19 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Sat, 22 Jul 2023 10:25:01 +0000 (12:25 +0200)
mkosi/__init__.py
mkosi/config.py
mkosi/util.py
tests/test_parse_load_args.py

index 92783e7102a71a633cce35aad903f61c80a9c2ff..520edd15b1f37bc1145aee7f8f2a0023c0c402bb 100644 (file)
@@ -29,6 +29,7 @@ from mkosi.config import (
     MkosiConfig,
     MkosiConfigParser,
     SecureBootSignTool,
+    Verb,
 )
 from mkosi.install import add_dropin_config_from_resource, copy_path
 from mkosi.log import Style, color_error, complete_step, die, log_step
@@ -45,7 +46,6 @@ from mkosi.util import (
     InvokingUser,
     ManifestFormat,
     OutputFormat,
-    Verb,
     flatten,
     flock,
     format_bytes,
@@ -56,9 +56,6 @@ from mkosi.util import (
     try_import,
 )
 
-MKOSI_COMMANDS_NEED_BUILD = (Verb.build, Verb.shell, Verb.boot, Verb.qemu, Verb.serve)
-MKOSI_COMMANDS_SUDO = (Verb.shell, Verb.boot)
-
 
 @contextlib.contextmanager
 def mount_image(state: MkosiState) -> Iterator[None]:
@@ -2128,7 +2125,7 @@ def expand_specifier(s: str) -> str:
 
 
 def needs_build(args: MkosiArgs, config: MkosiConfig) -> bool:
-    return args.verb in MKOSI_COMMANDS_NEED_BUILD and (args.force > 0 or not config.output_dir.joinpath(config.output_with_compression).exists())
+    return args.verb.needs_build() and (args.force > 0 or not config.output_dir.joinpath(config.output_with_compression).exists())
 
 
 @contextlib.contextmanager
@@ -2154,7 +2151,7 @@ def prepend_to_environ_path(config: MkosiConfig) -> Iterator[None]:
 
 
 def run_verb(args: MkosiArgs, presets: Sequence[MkosiConfig]) -> None:
-    if args.verb in MKOSI_COMMANDS_SUDO:
+    if args.verb.needs_sudo():
         check_root()
 
     if args.verb == Verb.genkey:
index b016080996bf08fa64734ead47dff6499036c0cc..ab7b7dc9ed1c3ba338e1588441cb867da49916e7 100644 (file)
@@ -33,7 +33,6 @@ from mkosi.util import (
     InvokingUser,
     ManifestFormat,
     OutputFormat,
-    Verb,
     chdir,
     detect_distribution,
     flatten,
@@ -45,13 +44,38 @@ from mkosi.util import (
 
 __version__ = "14"
 
-MKOSI_COMMANDS_CMDLINE = (Verb.build, Verb.shell, Verb.boot, Verb.qemu, Verb.ssh)
-
 ConfigParseCallback = Callable[[str, Optional[str], argparse.Namespace], Any]
 ConfigMatchCallback = Callable[[str, str, argparse.Namespace], bool]
 ConfigDefaultCallback = Callable[[argparse.Namespace], Any]
 
 
+class Verb(enum.Enum):
+    build   = "build"
+    clean   = "clean"
+    summary = "summary"
+    shell   = "shell"
+    boot    = "boot"
+    qemu    = "qemu"
+    ssh     = "ssh"
+    serve   = "serve"
+    bump    = "bump"
+    help    = "help"
+    genkey  = "genkey"
+
+    # Defining __str__ is required to get "print_help()" output to include the human readable (values) of Verb.
+    def __str__(self) -> str:
+        return self.value
+
+    def supports_cmdline(self) -> bool:
+        return self in (Verb.build, Verb.shell, Verb.boot, Verb.qemu, Verb.ssh)
+
+    def needs_build(self) -> bool:
+        return self in (Verb.build, Verb.shell, Verb.boot, Verb.qemu, Verb.serve)
+
+    def needs_sudo(self) -> bool:
+        return self in (Verb.shell, Verb.boot)
+
+
 class ConfigFeature(enum.Enum):
     auto = "auto"
     enabled = "enabled"
@@ -2072,8 +2096,8 @@ def load_args(args: argparse.Namespace) -> MkosiArgs:
 def load_config(args: argparse.Namespace) -> MkosiConfig:
     find_image_version(args)
 
-    if args.cmdline and args.verb not in MKOSI_COMMANDS_CMDLINE:
-        die(f"Parameters after verb are only accepted for {' '.join(verb.name for verb in MKOSI_COMMANDS_CMDLINE)}.")
+    if args.cmdline and not args.verb.supports_cmdline():
+        die(f"Arguments after verb are not supported for {args.verb}.")
 
     if shutil.which("bsdtar") and args.distribution == Distribution.openmandriva and args.tar_strip_selinux_context:
         die("Sorry, bsdtar on OpenMandriva is incompatible with --tar-strip-selinux-context")
index 3bdf0ed309e511c426e26917dfbc2b4609b140f6..7e2e3753aec8f88badcc88d3614fd3130456ddd2 100644 (file)
@@ -30,24 +30,6 @@ class PackageType(enum.Enum):
     ebuild = 5
 
 
-class Verb(enum.Enum):
-    build   = "build"
-    clean   = "clean"
-    summary = "summary"
-    shell   = "shell"
-    boot    = "boot"
-    qemu    = "qemu"
-    ssh     = "ssh"
-    serve   = "serve"
-    bump    = "bump"
-    help    = "help"
-    genkey  = "genkey"
-
-    # Defining __str__ is required to get "print_help()" output to include the human readable (values) of Verb.
-    def __str__(self) -> str:
-        return self.value
-
-
 class Distribution(enum.Enum):
     package_type: PackageType
 
index 9d045089feb4c0479b5d29f0f0560e64162f4ce9..d9f5b0de09aa06fa44e121294b0610f78d00e004 100644 (file)
@@ -12,8 +12,8 @@ from typing import Iterator, List, Optional
 
 import pytest
 
-from mkosi.config import MkosiArgs, MkosiConfig, MkosiConfigParser
-from mkosi.util import Compression, Distribution, Verb
+from mkosi.config import MkosiArgs, MkosiConfig, MkosiConfigParser, Verb
+from mkosi.util import Compression, Distribution
 
 
 @contextmanager