diff --git a/.gitignore b/.gitignore index 64bdc20..bdf6477 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ /build /src/*/* !/src/*/debian + +/excuses.yaml +/rust-excuses*.* diff --git a/dev/rust-excuses.mk b/dev/rust-excuses.mk new file mode 100755 index 0000000..177fdf7 --- /dev/null +++ b/dev/rust-excuses.mk @@ -0,0 +1,26 @@ +#!/usr/bin/make -f +# Output a nice graph of why stuff isn't yet in Debian Testing. +# +# Usage: +# $ dev/rust-excuses.mk refresh all + +DST = rust-excuses.png rust-excuses-arch.png +DOWNLOAD = wget -N --no-use-server-timestamps https://release.debian.org/britney/excuses.yaml + +all: $(DST) + +clean: + rm -rf $(DST) $(DST:%.png=%.dot) excuses.yaml + +excuses.yaml: + $(DOWNLOAD) + +rust-excuses.dot rust-excuses-arch.dot: excuses.yaml dev/rust-excuses.py + dev/rust-excuses.py rust-excuses.dot rust-excuses-arch.dot + +%.png: %.dot + dot -Tpng "$<" > "$@" + +refresh: + $(DOWNLOAD) +.PHONY: refresh diff --git a/dev/rust-excuses.py b/dev/rust-excuses.py new file mode 100755 index 0000000..98b192a --- /dev/null +++ b/dev/rust-excuses.py @@ -0,0 +1,40 @@ +#!/usr/bin/python3 + +import sys +import yaml + +print("parsing excuses.yaml...", file=sys.stderr) +with open("excuses.yaml") as fp: + y = yaml.load(fp) + +excuses = {} +for e in y["sources"]: + excuses[e["source"]] = e + +rust_excuses = open(sys.argv[1], "w") +rust_excuses_arch = open(sys.argv[2], "w") + +already_seen = set() + +def print_all(*args, **kwargs): + print(*args, **kwargs, file=rust_excuses) + print(*args, **kwargs, file=rust_excuses_arch) + +def traverse(name, arch="", d=0): + if name in already_seen: + return + already_seen.add(name) + for dep in excuses.get(name, {}).get("dependencies", {}).get("migrate-after", []): + if "/" in dep: + dep, arch = dep.split("/") + print('"%s"' % name, "->", '"%s"' % dep, '[label="%s"]' % arch, + file=rust_excuses_arch) + else: + print_all('"%s"' % name, "->", '"%s"' % dep) + traverse(dep, arch, d+1) + +print_all("digraph {") +for s in excuses.keys(): + if s.startswith("rust-"): + traverse(s) +print_all("}")