From 65ca49778eb6d1a1c08203ea8b1781f1912e509c Mon Sep 17 00:00:00 2001 From: Erdem Bayer Date: Sun, 24 Oct 2010 15:17:00 +0000 Subject: [PATCH] cli/graph: Add option to generate reverse dependency graph --- pisi/api.py | 25 +++++++++++++++++-------- pisi/cli/graph.py | 5 ++++- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/pisi/api.py b/pisi/api.py index 278b2ca9..9e4fc031 100644 --- a/pisi/api.py +++ b/pisi/api.py @@ -612,7 +612,7 @@ def get_package_requirements(packages): # ****** Danger Zone Below! Tressspassers' eyes will explode! ********** # -def package_graph(A, packagedb, ignore_installed = False): +def package_graph(A, packagedb, ignore_installed = False, reverse=False): """Construct a package relations graph. Graph will contain all dependencies of packages A, if ignore_installed @@ -638,13 +638,22 @@ def package_graph(A, packagedb, ignore_installed = False): for x in B: pkg = packagedb.get_package(x) #print pkg - for dep in pkg.runtimeDependencies(): - if ignore_installed: - if dep.satisfied_by_installed(): - continue - if not dep.package in G_f.vertices(): - Bp.add(str(dep.package)) - G_f.add_dep(x, dep) + if reverse: + for name,dep in packagedb.get_rev_deps(x): + if ignore_installed: + if dep.satisfied_by_installed(): + continue + if not name in G_f.vertices(): + Bp.add(name) + G_f.add_dep(name, dep) + else: + for dep in pkg.runtimeDependencies(): + if ignore_installed: + if dep.satisfied_by_installed(): + continue + if not dep.package in G_f.vertices(): + Bp.add(str(dep.package)) + G_f.add_dep(x, dep) B = Bp return G_f diff --git a/pisi/cli/graph.py b/pisi/cli/graph.py index a3e972cb..64557f1c 100644 --- a/pisi/cli/graph.py +++ b/pisi/cli/graph.py @@ -51,6 +51,9 @@ the package in graphviz format to 'pgraph.dot'. group.add_option("--ignore-installed", action="store_true", default=False, help=_("Do not show installed packages")) + group.add_option("-R", "--reverse", action="store_true", + default=False, + help=_("Draw reverse dependency graph")) group.add_option("-o", "--output", action="store", default='pgraph.dot', help=_("Dot output file")) @@ -88,5 +91,5 @@ the package in graphviz format to 'pgraph.dot'. a = pisi.api.list_installed() g = pisi.api.package_graph(a, packagedb, - ignore_installed = ctx.get_option('ignore_installed')) + ignore_installed = ctx.get_option('ignore_installed'), reverse = ctx.get_option('reverse')) g.write_graphviz(file(ctx.get_option('output'), 'w'))