use warnings;
open(PACKAGES, "<Packages");
-open(SOURCES, "<Sources");
my @packages = ();
my %depends = ();
my %priority = ();
my %essential = ();
+my %size = ();
sub add_depends {
my ($package, $depends) = @_;
if (/^Essential: yes/) {
$essential{$package} = "yes";
}
+ if (/^Size: (.*)/) {
+ $size{$package} = $1;
+ }
}
close(PACKAGES);
+
+open(SOURCES, "<Sources");
+
+my @sources = ();
+my %binaries = ();
+my %csource = ();
+my %bdeps = ();
+
+sub add_binaries {
+ my ($package, $binaries) = @_;
+ my $bb = [];
+ my @vbb = split(", ", $binaries);
+ for my $i (@vbb) {
+ $i =~ qr,([0-9a-z-+.]+),;
+ push @$bb, $1;
+ $csource{$i} = $package;
+ }
+ $binaries{$package} = $bb;
+}
+
+sub add_bdeps {
+ my ($package, $bdeps) = @_;
+ my $bd = [];
+ my @vbd = split(", ", $bdeps);
+ for my $i (@vbd) {
+ $i =~ qr,([0-9a-z-+.]+),;
+ push @$bd, $1;
+ }
+ $bdeps{$package} = $bd;
+}
+
+
+while (<SOURCES>) {
+ if (/^Package: ([0-9a-z-+.]+)/) {
+ $package = $1;
+ push @packages, $package;
+ }
+ if (/^Binary: (.*)/) {
+ add_binaries($package, $1);
+ }
+ if (/^Build-Depends: (.*)/) {
+ add_bdeps($package, $1);
+ }
+}
+
close(SOURCES);
my @pp = ();
my @visit = ();
+my @vsource = ();
+
for my $i (keys %essential) {
push @visit, $i;
}
my $n = pop @visit;
next if grep /^$n$/, @pp;
push @pp, $n;
+ my $source = $csource{$n};
+ if ($source and !grep /^$source$/, @vsource) {
+ push @vsource, $source;
+ for my $b (@{$bdeps{$source}}) {
+ if (!grep /^$b$/, @pp && !grep /^$b$/, @visit) {
+ push @visit, $b;
+ }
+ }
+ }
my $l = $depends{$n};
for my $d (@$l) {
if (!grep /^$d$/, @pp && !grep /^$d$/, @visit) {
}
}
+my $tsize = 0;
for my $i (@pp) {
- print "$i\n";
+ $size{$i} = 0 if (!defined($size{$i}));
+ print "$size{$i} $i\n";
+ $tsize += $size{$i};
}
+
+print "$tsize Total\n";