summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@derf.homelinux.org>2009-05-22 23:28:17 +0200
committerDaniel Friesel <derf@derf.homelinux.org>2009-05-22 23:28:17 +0200
commit0bf4415311a185d76926ae198188a8dbb0b7b9ff (patch)
tree88a04bc5b9e418db0917e897e0ec0f4d808fb2bb
parentd30fb6beaa1b4dff57a7c71a5978f58da0136a41 (diff)
apt-why: Implemented recursion
-rwxr-xr-xbin/apt-why35
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;