diff options
author | Daniel Friesel <derf@derf.homelinux.org> | 2009-05-22 23:28:17 +0200 |
---|---|---|
committer | Daniel Friesel <derf@derf.homelinux.org> | 2009-05-22 23:28:17 +0200 |
commit | 0bf4415311a185d76926ae198188a8dbb0b7b9ff (patch) | |
tree | 88a04bc5b9e418db0917e897e0ec0f4d808fb2bb | |
parent | d30fb6beaa1b4dff57a7c71a5978f58da0136a41 (diff) |
apt-why: Implemented recursion
-rwxr-xr-x | bin/apt-why | 35 |
1 files changed, 30 insertions, 5 deletions
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 <derf@derf.homelinux.org> +## Copyright © 2008-2009 by Daniel Friesel <derf@derf.homelinux.org> ## License: WTFPL <http://sam.zoy.org/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; |