]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Simplify --remove-files
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 24 Feb 2023 12:49:48 +0000 (13:49 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 24 Feb 2023 14:30:30 +0000 (15:30 +0100)
mkosi/__init__.py
mkosi/backend.py

index cf4ea45d965c09e27b0a0b9301621647f38b9ace..484cd6ce3df94c19ae51a6161fbcf9f04ae0dda0 100644 (file)
@@ -7,7 +7,6 @@ import crypt
 import dataclasses
 import datetime
 import errno
-import glob
 import hashlib
 import http.server
 import itertools
@@ -358,10 +357,9 @@ def remove_files(state: MkosiState) -> None:
         return
 
     with complete_step("Removing files…"):
-        # Note: Path('/foo') / '/bar' == '/bar'. We need to strip the slash.
-        # https://bugs.python.org/issue44452
-        paths = [state.root / str(p).lstrip("/") for p in state.config.remove_files]
-        remove_glob(*paths)
+        for pattern in state.config.remove_files:
+            for p in state.root.glob(pattern.lstrip("/")):
+                unlink_try_hard(p)
 
 
 def install_distribution(state: MkosiState, cached: bool) -> None:
@@ -1375,16 +1373,6 @@ def parse_base_packages(value: str) -> Union[str, bool]:
     return parse_boolean(value)
 
 
-def parse_remove_files(value: str) -> list[str]:
-    """Normalize paths as relative to / to ensure we don't go outside of our root."""
-
-    # os.path.normpath() leaves leading '//' untouched, even though it normalizes '///'.
-    # This follows POSIX specification, see
-    # https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13.
-    # Let's use lstrip() to handle zero or more leading slashes correctly.
-    return ["/" + os.path.normpath(p).lstrip("/") for p in value.split(",") if p]
-
-
 def parse_ssh_agent(value: str) -> Optional[Path]:
     """Will return None or a path to a socket."""
 
@@ -1721,7 +1709,6 @@ def create_parser() -> ArgumentParserMkosi:
         action=CommaDelimitedListAction,
         default=[],
         help="Remove files from built image",
-        type=parse_remove_files,
         metavar="GLOB",
     )
     group.add_argument(
@@ -2113,13 +2100,6 @@ def parse_args_file_group(
     return create_parser().parse_args(config_files + argv)
 
 
-def remove_glob(*patterns: Path) -> None:
-    pathgen = (glob.glob(str(pattern)) for pattern in patterns)
-    paths: set[str] = set(sum(pathgen, []))  # uniquify
-    for path in paths:
-        unlink_try_hard(Path(path))
-
-
 def empty_directory(path: Path) -> None:
     try:
         for f in os.listdir(path):
index a1024bf8cef2213efe8ddb29b0520562c94a915b..4e6f2d2fb93aa284ce7109af73338ad32ab999bc 100644 (file)
@@ -285,7 +285,7 @@ class MkosiConfig:
     extra_trees: list[Path]
     skeleton_trees: list[Path]
     clean_package_metadata: Union[bool, str]
-    remove_files: list[Path]
+    remove_files: list[str]
     environment: dict[str, str]
     build_sources: Path
     build_dir: Optional[Path]