#!/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 "^x264" """).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) max_d = 200 print(succs) all_n = set(G.nodes()) n = set() for pkg in pkgs: n.add(pkg) succs = set(G.successors(pkg)) cnt = 0; while (cnt < max_d and len(succs) > 0): cnt += 1 p = succs.pop() try: n.add(p) succs |= set(G.successors(p)) except KeyError: pass preds = set(G.predecessors(pkg)) cnt = 0; while (cnt < max_d and len(preds) > 0): cnt += 1 p = preds.pop() try: n.add(p) preds |= set(G.predecessors(p)) except KeyError: pass G.remove_nodes_from(all_n - n) G.write("graph.dot") G.draw("graph.svg",prog='dot')