#!/usr/bin/env python3
import os
import re
import subprocess
from argparse import ArgumentParser
def parse_args():
parser = ArgumentParser()
parser.add_argument('-p', '--packages', nargs='+', default=[], required=True)
parser.add_argument('-e', '--excluded-packages', nargs='+', default=[])
return parser.parse_args()
def guix(args):
return subprocess.run(["guix_dev", *args], check=True, capture_output=True).stdout.decode()
def guix_build(args):
return subprocess.run(["build", *args], check=True, capture_output=True).stdout.decode()
def guix_refresh(pkgs):
refreshed = guix(["refresh", "--list-dependent", *pkgs]).strip().split("\n")
dependents = re.sub("Building the following.*dependent packages are rebuilt: ", "", refreshed[-1])
return dependents.strip().split(" ")
def filter_excluded(pkgs, excluded):
filtered = set()
for p in pkgs:
if p.split("@")[0] in excluded:
print(f"Excluding {p}")
continue
filtered.add(p)
return filtered
def main():
args = parse_args()
excluded = set(args.excluded_packages)
pkgs = set(args.packages)
if pkgs:
pkgs.update(guix_refresh(pkgs))
pkgs = filter_excluded(pkgs, excluded)
print(f"Building {' '.join(pkgs)}")
os.execvp("build", args=["-k", "-K", *pkgs])
if __name__ == "__main__":
main()