36 lines
1.4 KiB
Bash
Executable File
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
|