#!/usr/bin/python import asyncio import json from argparse import ArgumentParser from fcntl import LOCK_EX, flock from pathlib import Path from sys import argv, exit from lib.dbwrite import generate_dbs async def main(repo, pkgbases) -> int: metadir = (Path(argv[0]).parent / "meta").resolve(strict=True) lockfile = (metadir / "dbscripts.lock").open(mode="w") flock(lockfile, LOCK_EX) # check that user has access to this repo if not (metadir / repo).is_dir(): raise RuntimeError(f"repo '{repo}' is not allowed") # load existing repo metadata meta = { repo: { p.stem: json.load((metadir / repo / p).open()) for p in (metadir / repo).glob("*.json") } } # remove packages from meta and corresponding json files for pkgbase in pkgbases: if pkgbase not in meta[repo]: raise RuntimeError(f"pkgbase '{pkgbase}' is not present in '{repo}' repo") del meta[repo][pkgbase] (metadir / repo / f"{pkgbase}.json").unlink() # rebuild DB file using `meta` object generate_dbs(meta) return 0 if __name__ == "__main__": parser = ArgumentParser(description="Remove pkgbase(s) from a repo") parser.add_argument("repo", help="repository name") parser.add_argument("pkgbase", help="pkgbase(s) to remove", nargs="+") args = parser.parse_args() exit(asyncio.run(main(args.repo, args.pkgbase)))