summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rpm-find-leaves95
1 files changed, 46 insertions, 49 deletions
diff --git a/rpm-find-leaves b/rpm-find-leaves
index 58787184..6d32dfe2 100644
--- a/rpm-find-leaves
+++ b/rpm-find-leaves
@@ -1,15 +1,16 @@
#!/usr/bin/perl
+
+use strict;
+
use urpm;
use urpm::msg;
-sub main {
-
- my %options;
- $options{restrict_group} = 0;
- $options{group} = 'System/Libraries';
- $options{root} = '';
-
- my $usage = N("usage: %s [options]
+my %options;
+$options{restrict_group} = 0;
+$options{group} = 'System/Libraries';
+$options{root} = '';
+
+my $usage = N("usage: %s [options]
where [options] are from
", $0) . N(" -h|--help - print this help message.
") . N(" --root <path> - use the given root instead of /
@@ -17,46 +18,42 @@ where [options] are from
") . N(" defaults is %s.
", $options{group});
- my $group;
-
- while ($_ = shift @_) {
- /^--root$/ and do {
- $root=shift @_;
- $root and $options{root}=$root;
- next;
-
- };
- /^-g$/ and do {
- $options{restrict_group}=1;
- $group=shift @_;
- $group and $options{group}=$group;
- next;
- };
- die $usage;
- }
-
-
- my @packages;
- {
- my $db = URPM::DB::open($options{root}) or die;
- $db->traverse(sub {
- my ($p) = @_;
- $p->pack_header;
- push @packages, $p;
- });
- }
-
- foreach my $pkg (@packages) {
- next if $options{restrict_group} && $pkg->group !~ /$options{group}/i;
- $l{$pkg->name} = 1;
- push @{$provides{$_}}, $pkg->name foreach $pkg->provides_nosense;
- }
-
- foreach my $pkg (@packages) {
- delete @l{grep { $_ ne $pkg->name } @{$provides{$_} || []}} foreach $pkg->requires_nosense;
- }
-
- print "$_\n" foreach sort keys %l;
+while ($_ = shift) {
+ /^--root$/ and do {
+ my $root = shift;
+ $root and $options{root} = $root;
+ next;
+
+ };
+ /^-g$/ and do {
+ $options{restrict_group} = 1;
+ my $group = shift;
+ $group and $options{group} = $group;
+ next;
+ };
+ print $usage; exit 0;
+}
+
+my @packages;
+{
+ my $db = URPM::DB::open($options{root}) or die "Can't open RPM db\n";
+ $db->traverse(sub {
+ my ($p) = @_;
+ $p->pack_header;
+ push @packages, $p;
+ });
+}
+
+my %l;
+my %provides;
+foreach my $pkg (@packages) {
+ next if $options{restrict_group} && $pkg->group !~ /$options{group}/i;
+ $l{$pkg->name} = 1;
+ push @{$provides{$_}}, $pkg->name foreach $pkg->provides_nosense;
+}
+
+foreach my $pkg (@packages) {
+ delete @l{grep { $_ ne $pkg->name } @{$provides{$_} || []}} foreach $pkg->requires_nosense;
}
-main(@ARGV);
+print "$_\n" foreach sort keys %l;