Files

36 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# SPDX-License-Identifier: GPL-3.0-or-later
set -euo pipefail
(( EUID == 0 )) || exit 1
project=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." && pwd -P)
python3 - "$project/build" <<'PY'
import re
import shutil
import sys
from pathlib import Path
work = Path(sys.argv[1])
if work.is_symlink():
raise ValueError("Build directory must not be a symlink")
targets = [work / name for name in ("controller", "chroots", "tmp")]
inputs = work / "input"
for target in [*targets, inputs]:
if target.is_symlink():
raise ValueError("Environment directory must not be a symlink: " + str(target))
for line in Path("/proc/self/mountinfo").read_text().splitlines():
value = re.sub(r"\\([0-7]{3})", lambda match: chr(int(match[1], 8)), line.split()[4])
mountpoint = Path(value)
if any(mountpoint == target or mountpoint.is_relative_to(target) for target in [*targets, inputs]):
raise ValueError("Environment contains an active mount: " + str(mountpoint))
if inputs.exists():
targets.extend(path for path in inputs.iterdir() if path.name != "modules")
for target in targets:
if target.is_symlink() or target.is_file():
target.unlink()
elif target.exists():
shutil.rmtree(target)
for relative in ("controller-bootstrap.complete", "records/build-root.sha256"):
(work / relative).unlink(missing_ok=True)
print("Build environment removed. Run tools/plasma-next setup to recreate it.")
PY