from mkosi.mounts import mount_overlay, mount_passwd, mount_tools, scandir_recursive
from mkosi.pager import page
from mkosi.qemu import copy_ephemeral, machine_cid, run_qemu
-from mkosi.remove import unlink_try_hard
from mkosi.run import become_root, bwrap, chroot_cmd, init_mount_namespace, run
from mkosi.state import MkosiState
-from mkosi.tree import copy_tree, move_tree
+from mkosi.tree import copy_tree, move_tree, rmtree
from mkosi.types import PathString
from mkosi.util import (
InvokingUser,
with complete_step(f"Cleaning {toolp.name} metadata…"):
for path in paths:
- unlink_try_hard(path)
+ rmtree(path)
def clean_dnf_metadata(root: Path, always: bool) -> None:
with complete_step("Removing files…"):
for pattern in state.config.remove_files:
for p in state.root.glob(pattern.lstrip("/")):
- unlink_try_hard(p)
+ rmtree(p)
def install_distribution(state: MkosiState) -> None:
def empty_directory(path: Path) -> None:
try:
for f in os.listdir(path):
- unlink_try_hard(path / f)
+ rmtree(path / f)
except FileNotFoundError:
pass
if config.output_dir.exists():
for p in config.output_dir.iterdir():
if p.name.startswith(prefix):
- unlink_try_hard(p)
+ rmtree(p)
if remove_build_cache:
if config.cache_dir:
for p in cache_tree_paths(config):
if p.exists():
with complete_step(f"Removing cache entry {p}…"):
- unlink_try_hard(p)
+ rmtree(p)
if config.build_dir and config.build_dir.exists() and any(config.build_dir.iterdir()):
with complete_step("Clearing out build directory…"):
final, build, manifest = cache_tree_paths(state.config)
with complete_step("Installing cache copies"):
- unlink_try_hard(final)
+ rmtree(final)
# We only use the cache-overlay directory for caching if we have a base tree, otherwise we just
# cache the root directory.
move_tree(state.config, state.root, final)
if need_build_packages(state.config) and (state.workspace / "build-overlay").exists():
- unlink_try_hard(build)
+ rmtree(build)
move_tree(state.config, state.workspace / "build-overlay", build)
manifest.write_text(json.dumps(state.config.cache_manifest()))
from mkosi.distributions import DistributionInstaller
from mkosi.distributions.fedora import Repo, invoke_dnf, setup_dnf
from mkosi.log import complete_step, die
-from mkosi.remove import unlink_try_hard
from mkosi.state import MkosiState
+from mkosi.tree import rmtree
def move_rpm_db(root: Path) -> None:
if newdb.exists() and not newdb.is_symlink():
with complete_step("Moving rpm database /usr/lib/sysimage/rpm → /var/lib/rpm"):
- unlink_try_hard(olddb)
+ rmtree(olddb)
shutil.move(newdb, olddb)
newdb.symlink_to(os.path.relpath(olddb, start=newdb.parent))
from mkosi.architecture import Architecture
from mkosi.distributions import DistributionInstaller
from mkosi.log import die
-from mkosi.remove import unlink_try_hard
from mkosi.run import bwrap
from mkosi.state import MkosiState
+from mkosi.tree import rmtree
from mkosi.util import sort_packages
rpmdb = root / "usr/lib/sysimage/rpm"
if not rpmdb.exists():
rpmdb = root / "var/lib/rpm"
- unlink_try_hard(rpmdb)
+ rmtree(rpmdb)
shutil.move(rpmdb_home, rpmdb)
rpmdb_home.symlink_to(os.path.relpath(rpmdb, start=rpmdb_home.parent))
from mkosi.architecture import Architecture
from mkosi.distributions import DistributionInstaller
from mkosi.log import ARG_DEBUG, complete_step, die
-from mkosi.remove import unlink_try_hard
from mkosi.run import bwrap, chroot_cmd, run
from mkosi.state import MkosiState
-from mkosi.tree import copy_tree
+from mkosi.tree import copy_tree, rmtree
from mkosi.types import PathString
run(cmd)
if stage3_tar.stat().st_mtime > old:
- unlink_try_hard(stage3)
+ rmtree(stage3)
stage3.mkdir(exist_ok=True)
from mkosi.architecture import Architecture
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.tree import copy_tree
+from mkosi.tree import copy_tree, rmtree
from mkosi.types import PathString
from mkosi.util import (
Distribution,
copy_tree(config, src, tmp)
yield tmp
finally:
- unlink_try_hard(tmp)
+ rmtree(tmp)
def run_qemu(args: MkosiArgs, config: MkosiConfig) -> None:
+++ /dev/null
-# SPDX-License-Identifier: LGPL-2.1+
-
-import shutil
-from pathlib import Path
-from typing import Optional
-
-
-def unlink_try_hard(path: Optional[Path]) -> None:
- if path is None:
- return
-
- path = Path(path)
- try:
- path.unlink()
- return
- except FileNotFoundError:
- return
- except Exception:
- pass
-
- shutil.rmtree(path)
run(copy)
+def rmtree(path: Path) -> None:
+ run(["rm", "-rf", "--", path])
+
+
def move_tree(config: MkosiConfig, src: Path, dst: Path) -> None:
if src == dst:
return
raise e
copy_tree(config, src, dst)
- run(["rm", "-rf", src])
+ rmtree(src)