From: Samir Benmendil Date: Sun, 6 Jan 2013 19:55:45 +0000 (+0100) Subject: add graph.py X-Git-Url: https://git.rmz.io/dotfiles.git/commitdiff_plain/c0a505168c231d28a2d2b1be23aabb13f4df942e add graph.py --- diff --git a/bin/graph.py b/bin/graph.py new file mode 100755 index 0000000..4521a5c --- /dev/null +++ b/bin/graph.py @@ -0,0 +1,40 @@ +#!/usr/bin/python2 +# attempt to create a graph showing package dependencies +# in a nice graph + +from __future__ import print_function +import os +#import sys +import collections +import argparse +import logging +import re +from time import sleep +import pygraphviz as pgv + +pkgs = os.popen("""LANGUAGE=C pacman -Ssq "^libpng$" """).read().strip().split("\n") +print(pkgs) +pkglist = os.popen("LANGUAGE=C pacman -Si").read().strip().split("\n\n") +G = pgv.AGraph(directed=True) +p = re.compile(r"[<>=].*") +for pkg in pkglist: + lines = pkg.splitlines() + repo = lines[0][17:] + name = lines[1][17:] + depends = lines[8][17:].split() + for dep in depends: + if dep != "None": + dep = p.sub("",dep) + G.add_edge(dep,name) + +all_n = set(G.nodes()) +n = set(pkgs) +for pkg in pkgs: + n |= set(G.successors(pkg)) + n |= set(G.predecessors(pkg)) + +G.remove_nodes_from(all_n - n) + + +G.write("graph.dot") +#G.draw("graph.svg",prog='dot')