summaryrefslogtreecommitdiffstats
path: root/rpm-find-leaves
diff options
context:
space:
mode:
Diffstat (limited to 'rpm-find-leaves')
-rw-r--r--rpm-find-leaves36
1 files changed, 13 insertions, 23 deletions
diff --git a/rpm-find-leaves b/rpm-find-leaves
index 781422b7..32d9668c 100644
--- a/rpm-find-leaves
+++ b/rpm-find-leaves
@@ -1,32 +1,22 @@
#!/usr/bin/perl
-use lib "../rpmtools";
-
-local $_ = join '', @ARGV;
-
-/-h/ and die "usage: rpm-find-leaves [--show-unknown]\n";
-
-$show_unknown = /-show-unknown/;
+@ARGV and die "usage: rpm-find-leaves\n";
use rpmtools;
-$f = "/var/lib/urpmi/depslist.ordered";
-open F, $f or die "read_depslist: can't open file $f\n";
-$o = new rpmtools;
-$o->read_depslist(\*F);
-
-chop, $l{$_} = 1 foreach `rpm -qa --queryformat "%{name}\n"`;
+$db = rpmtools::db_open('');
+rpmtools::db_traverse($db, [ qw(name version release provides requires) ], sub {
+ push @packages, $_[0];
+});
+rpmtools::db_close($db);
-%m = %l;
-
-foreach (@{$o->{depslist}}) {
- delete $m{$_->{name}} or next;
- delete $l{$o->{depslist}[$_]{name}} foreach split ' ', $_->{deps};
+foreach my $pkg (@packages) {
+ $l{$pkg->{name}} = 1;
+ push @{$provides{$_}}, $pkg->{name} foreach @{$pkg->{provides} || []};
}
-!$m{$_} and print "$_\n" foreach sort keys %l;
-
-if ($show_unknown) {
- print "\n";
- print "$_\n" foreach sort keys %m;
+foreach my $pkg (@packages) {
+ delete @l{grep { $_ ne $pkg->{name} } @{$provides{$_} || []}} foreach @{$pkg->{requires} || []};
}
+
+print "$_\n" foreach sort keys %l;