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.run import root, rootm, user, userm, exists as user_exists
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
# SPDX-License-Identifier: GPL-3.0-or-later
import glob
from pathlib import Path
from pmb.core.arch import Arch
from pmb.helpers import logging
import os
@ -10,14 +11,31 @@ import pmb.config.workdir
import pmb.chroot
import pmb.config.pmaports
import pmb.config.workdir
import pmb.helpers.cli
import pmb.helpers.pmaports
import pmb.helpers.run
from pmb.meta import Cache
import pmb.helpers.mount
import pmb.parse.apkindex
from pmb.core import Chroot
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,
pkgs_local_mismatch=False, pkgs_online_mismatch=False, distfiles=False,
rust=False, netboot=False):
@ -51,7 +69,7 @@ def zap(confirm=True, dry=False, pkgs_local=False, http=False,
pmb.chroot.shutdown()
# Deletion patterns for folders inside get_context().config.work
patterns = list(Chroot.iter_patterns())
patterns = []
if pkgs_local:
patterns += ["packages"]
if http:
@ -63,6 +81,9 @@ def zap(confirm=True, dry=False, pkgs_local=False, http=False,
if netboot:
patterns += ["images_netboot"]
for chroot in Chroot.glob():
del_chroot(chroot, confirm, dry)
# Delete everything matching the patterns
for pattern in patterns:
logging.debug(f"Deleting {pattern}")