]> git.rmz.io Git - dotfiles.git/blob - bin/graph.py
remove debug print
[dotfiles.git] / bin / graph.py
1 #!/usr/bin/python2
2 # attempt to create a graph showing package dependencies
3 # in a nice graph
4
5 from __future__ import print_function
6 import os
7 #import sys
8 import collections
9 import argparse
10 import logging
11 import re
12 from time import sleep
13 import pygraphviz as pgv
14
15 pkgs = os.popen("""LANGUAGE=C pacman -Ssq "^x264" """).read().strip().split("\n")
16 print(pkgs)
17 pkglist = os.popen("LANGUAGE=C pacman -Si").read().strip().split("\n\n")
18 G = pgv.AGraph(directed=True)
19 p = re.compile(r"[<>=].*")
20 for pkg in pkglist:
21 lines = pkg.splitlines()
22 repo = lines[0][17:]
23 name = lines[1][17:]
24 depends = lines[8][17:].split()
25 for dep in depends:
26 if dep != "None":
27 dep = p.sub("",dep)
28 G.add_edge(dep,name)
29
30 max_d = 200
31 print(succs)
32 all_n = set(G.nodes())
33 n = set()
34 for pkg in pkgs:
35 n.add(pkg)
36 succs = set(G.successors(pkg))
37 cnt = 0;
38 while (cnt < max_d and len(succs) > 0):
39 cnt += 1
40 p = succs.pop()
41 try:
42 n.add(p)
43 succs |= set(G.successors(p))
44 except KeyError:
45 pass
46
47 preds = set(G.predecessors(pkg))
48 cnt = 0;
49 while (cnt < max_d and len(preds) > 0):
50 cnt += 1
51 p = preds.pop()
52 try:
53 n.add(p)
54 preds |= set(G.predecessors(p))
55 except KeyError:
56 pass
57
58 G.remove_nodes_from(all_n - n)
59
60
61 G.write("graph.dot")
62 G.draw("graph.svg",prog='dot')