Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- use strict;
- use warnings;
- use utf8;
- my %INSTALLED = ();
- my %RECOMMENDS = ();
- my %SUGGESTS = ();
- my %SKIP = ();
- my %ESSENTIAL = ();
- my $line;
- my %hash;
- open( PIPE, '-|', 'dpkg-query', '-W',
- '-f=${Package}/${Status}/${Recommends}/${Suggests}/${Replaces}/${Provides}/${Essential}\n' )
- or die "could'nt open pipe: $!";
- while ( $line = <PIPE> ) {
- chomp $line;
- $line =~ s/\(.+?\)//g;
- $line =~ s/\s+//g;
- $line =~ s/\:\w+//g;
- my @input = split( '/', $line );
- next if ( $input[1] ne 'installokinstalled' );
- $INSTALLED{ $input[0] } = 1;
- $RECOMMENDS{ $input[0] } = $input[2] if ( $input[2] );
- $SUGGESTS{ $input[0] } = $input[3] if ( $input[3] );
- if ( $input[4] ) {
- my @list = split (',', $input[4]);
- my $i; foreach $i (@list) { $SKIP{ $i } = 1; };
- }
- if ( $input[5] ) {
- my @list = split (',', $input[5]);
- my $i; foreach $i (@list) { $SKIP{ $i } = 1; };
- }
- $ESSENTIAL{$input[0]} = 1 if ($input[6] eq 'yes');
- }
- sub get_items {
- my $string = shift;
- return unless $string;
- my %ret = ();
- my @packages = split ',', $string;
- my $package;
- foreach $package (@packages) {
- my @items = split '\|', $package;
- my $ret = 1;
- my $item;
- foreach $item (@items) {
- $ret = 0 if ($INSTALLED{$item} or $SKIP{$item});
- }
- $ret{$package} = 1 if $ret;
- }
- return join( ' ', keys %ret );
- }
- my $package;
- foreach $package ( sort keys %INSTALLED ) {
- my $recommends = get_items( $RECOMMENDS{$package} );
- my $suggests = get_items( $SUGGESTS{$package} );
- next unless ( $recommends or $suggests );
- print "PACKAGE: $package";
- print " (ESSENTIAL)" if ($ESSENTIAL{$package});
- print "\n";
- print "RECOMMENDS: " . $recommends . "\n" if ($recommends);
- print "SUGGESTS: " . $suggests . "\n" if ($suggests);
- print "\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment