#!/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')