chroot: split deleting chroot into new function (MR 2252)

To allow for deleting just one chroot.

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
This commit is contained in:
Caleb Connolly 2024-06-13 22:45:50 +02:00 committed by Oliver Smith
parent 4ed813cf0e
commit fe34442bd1
No known key found for this signature in database
GPG key ID: 5AE7F5513E0885CB
2 changed files with 24 additions and 3 deletions

View file

@ -4,4 +4,4 @@ from pmb.chroot.init import init, init_keys, UsrMerge
from pmb.chroot.mount import mount, mount_native_into_foreign, remove_mnt_pmbootstrap from pmb.chroot.mount import mount, mount_native_into_foreign, remove_mnt_pmbootstrap
from pmb.chroot.run import root, rootm, user, userm, exists as user_exists from pmb.chroot.run import root, rootm, user, userm, exists as user_exists
from pmb.chroot.shutdown import shutdown from pmb.chroot.shutdown import shutdown
from pmb.chroot.zap import zap from pmb.chroot.zap import zap, del_chroot

View file

@ -1,6 +1,7 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import glob import glob
from pathlib import Path
from pmb.core.arch import Arch from pmb.core.arch import Arch
from pmb.helpers import logging from pmb.helpers import logging
import os import os
@ -10,14 +11,31 @@ import pmb.config.workdir
import pmb.chroot import pmb.chroot
import pmb.config.pmaports import pmb.config.pmaports
import pmb.config.workdir import pmb.config.workdir
import pmb.helpers.cli
import pmb.helpers.pmaports import pmb.helpers.pmaports
import pmb.helpers.run import pmb.helpers.run
from pmb.meta import Cache import pmb.helpers.mount
import pmb.parse.apkindex import pmb.parse.apkindex
from pmb.core import Chroot from pmb.core import Chroot
from pmb.core.context import get_context from pmb.core.context import get_context
def del_chroot(path: Path, confirm=True, dry=False):
if confirm and not pmb.helpers.cli.confirm(f"Remove {path}?"):
return
if dry:
return
# Safety first!
assert path.is_absolute()
assert path.is_relative_to(get_context().config.work)
# umount_all() will throw if any mount under path fails to unmount
pmb.helpers.mount.umount_all(path)
pmb.helpers.run.root(["rm", "-rf", path])
def zap(confirm=True, dry=False, pkgs_local=False, http=False, def zap(confirm=True, dry=False, pkgs_local=False, http=False,
pkgs_local_mismatch=False, pkgs_online_mismatch=False, distfiles=False, pkgs_local_mismatch=False, pkgs_online_mismatch=False, distfiles=False,
rust=False, netboot=False): rust=False, netboot=False):
@ -51,7 +69,7 @@ def zap(confirm=True, dry=False, pkgs_local=False, http=False,
pmb.chroot.shutdown() pmb.chroot.shutdown()
# Deletion patterns for folders inside get_context().config.work # Deletion patterns for folders inside get_context().config.work
patterns = list(Chroot.iter_patterns()) patterns = []
if pkgs_local: if pkgs_local:
patterns += ["packages"] patterns += ["packages"]
if http: if http:
@ -63,6 +81,9 @@ def zap(confirm=True, dry=False, pkgs_local=False, http=False,
if netboot: if netboot:
patterns += ["images_netboot"] patterns += ["images_netboot"]
for chroot in Chroot.glob():
del_chroot(chroot, confirm, dry)
# Delete everything matching the patterns # Delete everything matching the patterns
for pattern in patterns: for pattern in patterns:
logging.debug(f"Deleting {pattern}") logging.debug(f"Deleting {pattern}")