diff options
author | mia <mia@mia.jetzt> | 2024-06-08 22:56:05 -0700 |
---|---|---|
committer | mia <mia@mia.jetzt> | 2024-06-08 22:56:05 -0700 |
commit | 8cf813ff033bbc98a7dd40db6ac11e2e35c7e997 (patch) | |
tree | a451059194cbd4ba90993ebdaced4749448ec4df /packages/aur.py | |
download | asylum-8cf813ff033bbc98a7dd40db6ac11e2e35c7e997.tar.gz asylum-8cf813ff033bbc98a7dd40db6ac11e2e35c7e997.zip |
initial commit
Diffstat (limited to 'packages/aur.py')
-rw-r--r-- | packages/aur.py | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/packages/aur.py b/packages/aur.py new file mode 100644 index 0000000..85658e1 --- /dev/null +++ b/packages/aur.py @@ -0,0 +1,121 @@ +import shlex +import subprocess + +from local import build_push + +from commia.prelude import * +from commia.util import check_continue, read_ini + +packages = read_ini("packages/aur.ini")["default"] +ini = Path("packages/aur.ini").read_text() +git_ignore = Path("packages/.gitignore").read_text() + +print("initializing new packages") + +for name, fix in packages.items(): + if not Path(f"packages/{name}").exists(): + print(f"cloning {name}") + run_check( + [ + "git", + "clone", + f"https://aur.archlinux.org/{name}.git", + f"packages/{name}", + ] + ) + if name.endswith("-git"): + for line in Path(f"packages/{name}/PKGBUILD").read_text().splitlines(): + if not line.startswith("pkgver="): + continue + ver = shlex.split(line[len("pkgver=") :])[0] + ini = ini.replace(f"{name} = ?", f"{name} = {ver}") + break + else: + if fix == "?": + commit = subprocess.check_output( + ["git", "rev-parse", "HEAD"], cwd=f"packages/{name}", text=True + ).strip() + ini = ini.replace(f"{name} = ?", f"{name} = {commit}") + else: + run_check(["git", "checkout", fix], cwd=f"packages/{name}") + if not name in git_ignore: + git_ignore += f"{name}\n" + Path("packages/.gitignore").write_text(git_ignore) + +Path("packages/aur.ini").write_text(ini) + +print("checking for new versions") + +queue = [] + +for name, current in packages.items(): + if name.endswith("-git"): + continue + print(f"checking {name}") + path = Path(f"packages/{name}") + run_check(["git", "fetch"], cwd=path) + head = subprocess.check_output( + ["git", "rev-parse", "HEAD"], cwd=path, text=True + ).strip() + origin = subprocess.check_output( + ["git", "rev-parse", "origin/HEAD"], cwd=path, text=True + ).strip() + if current == origin: + print("no updates") + continue + if head != origin: + print() + run_check(["git", "diff", current, origin, ":!.SRCINFO"], cwd=path) + print() + if not check_continue(): + continue + run_check(["git", "checkout", origin], cwd=path) + queue.append((name, current, origin)) + print("build queued") + + +for name, current in packages.items(): + if not name.endswith("-git"): + continue + print(f"checking {name}") + path = Path(f"packages/{name}") + # update git + run_check(["git", "fetch"], cwd=path) + head = subprocess.check_output( + ["git", "rev-parse", "HEAD"], cwd=path, text=True + ).strip() + origin = subprocess.check_output( + ["git", "rev-parse", "origin/HEAD"], cwd=path, text=True + ).strip() + if head != origin: + print() + run_check(["git", "diff", head, origin, ":!.SRCINFO"], cwd=path) + print() + if not check_continue(): + continue + run_check(["git", "checkout", origin], cwd=path) + # check for new version + run_check(["makepkg", "--noprepare", "--nobuild"], cwd=path) + ver = None + for line in Path(f"packages/{name}/PKGBUILD").read_text().splitlines(): + if not line.startswith("pkgver="): + continue + ver = shlex.split(line[len("pkgver=") :])[0] + break + else: + raise Exception("couldn't find pkgver!") + if current == ver: + print("no update") + continue + queue.append((name, current, ver)) + +if len(queue) == 0: + print("nothing to build") + exit() + +print("building new versions") + +for name, old, new in queue: + build_push(name) + ini = ini.replace(f"{name} = {old}", f"{name} = {new}") + Path("packages/aur.ini").write_text(ini) |