diff options
Diffstat (limited to 'rpme')
-rw-r--r-- | rpme | 68 |
1 files changed, 0 insertions, 68 deletions
@@ -1,68 +0,0 @@ -#!/usr/bin/perl - -local $_ = join '', @ARGV; - -/-h/ || @ARGV == 0 and die "usage: rpme [-a] [--auto] <packages...>\n"; - -$matches = /-a/; -$auto = /-auto/; - -my $DIR = "/var/lib/urpmi"; - -@l = grep { !/^-/ } @ARGV; -if (!$matches) { - @m = map { chop; $_ } `rpm -q @l 2>&1`; - if ($?) { - $maymatch = "unknown package(s) " . join(", ", map { /package (\S+) is not installed/ ? $1 : () } @m) . "\n"; - $auto || @l > 1 and die $maymatch; - } -} -if ($matches || $maymatch) { - my $match = join "|", @l; - @m = grep { /$match/ } map { chop; $_ } `rpm -qa`; - - if ($maymatch) { - @m or die $maymatch; - print "Using $match as a substring, I found:\n@m\nRemove them all? (y/N) "; - <STDIN> =~ /y/i or exit 1; - } -} - -load_provides(); -my %toremove; @toremove{$_, @{$provides{$_} || []}} = () foreach @m; -my $changed = 1; while ($changed) { $changed = 0; - local *F; - open F, "rpm -e --test " . join(" ", keys %toremove) . " 2>&1 |"; - foreach (<F>) { - if (/package (\S+) is not installed/) { - delete $toremove{$1}; - } elsif (/is needed by (\S+)/ && ! exists $toremove{$1}) { - $toremove{$1} = 1; - $changed = 1; - } - } -} -my @toremove = keys %toremove or die "nothing to remove\n"; -if (@toremove > @l && !$auto) { - my $sum = 0; map { $sum += $_ } `rpm -q --queryformat "%{SIZE}\n" @toremove`; - print "To satisfy dependencies, the following packages are going to be removed"; - printf " (%d MB)", toMb($sum); - print ":\n@toremove\nIs it ok? (Y/n) "; - <STDIN> =~ /n/i and exit 0; -} -system("rpm", "-e", @toremove); - - -sub load_provides { - local *F; - open F, "$DIR/depslist" or return; - foreach (<F>) { - my ($p, $size, @l) = split; - $size{$p} = $size; - push @{$provides{$_}}, $p foreach @l; - } -} -sub toMb { - my $nb = $_[0] / 1024 / 1024; - int $nb + 0.5; -} |