From 0bf4415311a185d76926ae198188a8dbb0b7b9ff Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Fri, 22 May 2009 23:28:17 +0200 Subject: apt-why: Implemented recursion --- bin/apt-why | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) (limited to 'bin') diff --git a/bin/apt-why b/bin/apt-why index ac88135..aa011c6 100755 --- a/bin/apt-why +++ b/bin/apt-why @@ -1,5 +1,5 @@ #!/usr/bin/env perl -## Copyright (C) 2008 by Daniel Friesel +## Copyright © 2008-2009 by Daniel Friesel ## License: WTFPL use strict; use warnings; @@ -13,13 +13,38 @@ GetOptions( "not" => \$not, ); my $packagename = shift or die("No packagename given"); -my $package = $cache->{$packagename}; +my @known; -unless($package) { - print STDERR "E: Package not found: $packagename\n"; - exit(100); +sub revdeps { + my $name = shift; + my $package = $cache->{$name}; + my @return; + my $rdeps = $package->{RevDependsList}; + foreach (@$rdeps) { + if ( + $cache->{$_->{ParentPkg}{Name}}->{CurrentState} eq 'Installed' + and $_->{DepType} !~ /^(Conflicts|Replaces|Obsoletes)$/ + ) { + next if ($_->{ParentPkg}{Name} ~~ @known); + push(@return, $_->{ParentPkg}{Name}); + } + } + push(@known, @return); + return(@return); +} + +sub recurse { + my $name = shift; + my $level = (shift) + 1; + printf("%s%s\n", " " x ($level-1), $name); + return if ($level >= 5); + recurse($_, $level) foreach revdeps($name); } +recurse($packagename, 0); + +__END__ + sub revdeps { my $rdepsref = shift; my $depsref; -- cgit v1.2.3