xtc/tools/uninstall.py

36 lines
1.2 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""Remove only this source version's inventory; never recurse directories."""
import argparse
from pathlib import Path
import stat
from install_layout import arguments, inventory, layout, staged
def main():
parser = argparse.ArgumentParser(description=__doc__)
arguments(parser)
parser.add_argument('--root', help='legacy alias for --prefix')
args = parser.parse_args()
if args.root:
args.prefix = args.root
files = [staged(path, args.destdir) for path, _ in inventory(Path(__file__).resolve().parent.parent, layout(args))]
for path in files:
try:
mode = path.lstat().st_mode
except FileNotFoundError:
continue
if not (stat.S_ISREG(mode) or stat.S_ISLNK(mode)):
raise ValueError(f'Refusing non-file: {path}')
for path in files:
path.unlink(missing_ok=True)
# Only try the immediate owned directories, never walk up to / or DESTDIR.
parents = {p.parent for p in files}
for parent in sorted(parents, key=lambda p: len(p.parts), reverse=True):
try:
parent.rmdir()
except OSError:
pass
if __name__ == '__main__':
main()