Codebase list rust-libslirp / b4000f3
Follow the black CS for python Sylvestre Ledru 4 years ago
1 changed file(s) with 75 addition(s) and 55 deletion(s). Raw diff Collapse all Expand all
77 import yaml
88
99 if len(sys.argv) != 3:
10 print("""Generates dot files to show the migration deps
10 print(
11 """Generates dot files to show the migration deps
1112 Usage: %s excuses.dot excuses_arch.dot
1213
1314 Expects excuses.yaml in the current dir
14 """ % sys.argv[0])
15 """
16 % sys.argv[0]
17 )
1518 sys.exit(0)
1619
1720 print("parsing excuses.yaml...", file=sys.stderr)
1821 with open("excuses.yaml") as fp:
19 y = yaml.load(fp)
22 y = yaml.load(fp)
2023
2124 excuses = {}
2225 for e in y["sources"]:
23 excuses[e["source"]] = e
26 excuses[e["source"]] = e
2427
2528 print("generating dot files...", file=sys.stderr)
2629 rust_excuses = open(sys.argv[1], "w")
2831
2932 already_seen = set()
3033
34
3135 def edge_dep(name, dep):
32 return " ".join(['"%s"' % name, "->", '"%s"' % dep])
36 return " ".join(['"%s"' % name, "->", '"%s"' % dep])
37
3338
3439 def edge_dep_label(name, dep, label):
35 return " ".join(['"%s"' % name, "->", '"%s"' % dep, '[label="%s"]' % label])
40 return " ".join(['"%s"' % name, "->", '"%s"' % dep, '[label="%s"]' % label])
41
3642
3743 def print_all(*args, **kwargs):
38 print(*args, **kwargs, file=rust_excuses)
39 print(*args, **kwargs, file=rust_excuses_arch)
44 print(*args, **kwargs, file=rust_excuses)
45 print(*args, **kwargs, file=rust_excuses_arch)
46
4047
4148 is_in_debian_cache = {}
49
50
4251 def is_in_debian(src):
43 global is_in_debian_cache
44 if src not in is_in_debian_cache:
45 n = subprocess.check_output("apt-cache showsrc %s 2>/dev/null | grep ^Package: | wc -l" % src, shell=True)
46 is_in_debian_cache[src] = int(n.strip())
47 x = is_in_debian_cache[src]
48 return x
52 global is_in_debian_cache
53 if src not in is_in_debian_cache:
54 n = subprocess.check_output(
55 "apt-cache showsrc %s 2>/dev/null | grep ^Package: | wc -l" % src,
56 shell=True,
57 )
58 is_in_debian_cache[src] = int(n.strip())
59 x = is_in_debian_cache[src]
60 return x
61
4962
5063 def traverse(name, arch="", d=0):
51 if name in already_seen:
52 return
53 already_seen.add(name)
54 dependencies = excuses.get(name, {}).get("dependencies", {})
64 if name in already_seen:
65 return
66 already_seen.add(name)
67 dependencies = excuses.get(name, {}).get("dependencies", {})
5568
56 edges = set()
57 for arch, deps in dependencies.get("unsatisfiable-dependencies", {}).items():
58 for dep in deps:
59 vers = ""
60 if dep.startswith("librust-"):
61 try:
62 results = re.match(r"librust-(\S+?)(-[.0-9]+)?(\+\S*)?-dev", dep)
63 dep = "rust-" + results.group(1)
64 if results.group(2):
65 vers = results.group(2)
66 except:
67 print(dep, file=sys.stderr)
68 raise
69 edges.add(edge_dep_label(name, dep, vers))
70 print(edge_dep_label(name, dep, "%s/%s" % (vers, arch) if vers else arch), file=rust_excuses_arch)
71 if dep not in already_seen:
72 if is_in_debian(dep):
73 print_all('"%s" [fillcolor="#ffcc66",style=filled]' % dep)
74 else:
75 print_all('"%s" [fillcolor="#ff6666",style=filled]' % dep)
76 for edge in edges:
77 print(edge, file=rust_excuses)
69 edges = set()
70 for arch, deps in dependencies.get("unsatisfiable-dependencies", {}).items():
71 for dep in deps:
72 vers = ""
73 if dep.startswith("librust-"):
74 try:
75 results = re.match(r"librust-(\S+?)(-[.0-9]+)?(\+\S*)?-dev", dep)
76 dep = "rust-" + results.group(1)
77 if results.group(2):
78 vers = results.group(2)
79 except Exception:
80 print(dep, file=sys.stderr)
81 raise
82 edges.add(edge_dep_label(name, dep, vers))
83 print(
84 edge_dep_label(name, dep, "%s/%s" % (vers, arch) if vers else arch),
85 file=rust_excuses_arch,
86 )
87 if dep not in already_seen:
88 if is_in_debian(dep):
89 print_all('"%s" [fillcolor="#ffcc66",style=filled]' % dep)
90 else:
91 print_all('"%s" [fillcolor="#ff6666",style=filled]' % dep)
92 for edge in edges:
93 print(edge, file=rust_excuses)
7894
79 for dep in dependencies.get("migrate-after", []) + dependencies.get("blocked-by", []):
80 if "/" in dep:
81 dep, arch = dep.split("/")
82 print(edge_dep_label(name, dep, arch), file=rust_excuses_arch)
83 else:
84 print_all(edge_dep(name, dep))
85 traverse(dep, arch, d+1)
95 for dep in dependencies.get("migrate-after", []) + dependencies.get(
96 "blocked-by", []
97 ):
98 if "/" in dep:
99 dep, arch = dep.split("/")
100 print(edge_dep_label(name, dep, arch), file=rust_excuses_arch)
101 else:
102 print_all(edge_dep(name, dep))
103 traverse(dep, arch, d + 1)
86104
87 if not dependencies:
88 age = excuses.get(name, {}).get("policy_info", {}).get("age", {})
89 if age.get("verdict", "") == "REJECTED_TEMPORARILY":
90 print_all('"%s" [fillcolor="#66ff99",style=filled]' % name)
105 if not dependencies:
106 age = excuses.get(name, {}).get("policy_info", {}).get("age", {})
107 if age.get("verdict", "") == "REJECTED_TEMPORARILY":
108 print_all('"%s" [fillcolor="#66ff99",style=filled]' % name)
91109
92 #import code
93 #code.interact(local=locals())
110
111 # import code
112 # code.interact(local=locals())
113
94114
95115 print_all("digraph {")
96116 for s in excuses.keys():
97 if s.startswith("rust-"):
98 traverse(s)
117 if s.startswith("rust-"):
118 traverse(s)
99119 print_all("}")