From: Daan De Meyer Date: Fri, 24 Feb 2023 12:49:48 +0000 (+0100) Subject: Simplify --remove-files X-Git-Tag: v15~314^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=657eb179be740f812ee28e20d11bf786e2ec0e5c;p=thirdparty%2Fmkosi.git Simplify --remove-files --- diff --git a/mkosi/__init__.py b/mkosi/__init__.py index cf4ea45d9..484cd6ce3 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -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): diff --git a/mkosi/backend.py b/mkosi/backend.py index a1024bf8c..4e6f2d2fb 100644 --- a/mkosi/backend.py +++ b/mkosi/backend.py @@ -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]