Include packages with priority important or higher.
[cascardo/debsrc.git] / debsort.pl
index 79004d5..5f48263 100644 (file)
@@ -25,6 +25,7 @@ my @packages = ();
 my %depends = ();
 my %priority = ();
 my %essential = ();
+my %size = ();
 
 sub add_depends {
        my ($package, $depends) = @_;
@@ -52,6 +53,9 @@ while (<PACKAGES>) {
        if (/^Essential: yes/) {
                $essential{$package} = "yes";
        }
+       if (/^Size: (.*)/) {
+               $size{$package} = $1;
+       }
 }
 
 close(PACKAGES);
@@ -62,6 +66,7 @@ my @sources = ();
 my %binaries = ();
 my %csource = ();
 my %bdeps = ();
+my %ssize = ();
 
 sub add_binaries {
        my ($package, $binaries) = @_;
@@ -86,6 +91,7 @@ sub add_bdeps {
        $bdeps{$package} = $bd;
 }
 
+my $files_start = 0;
 
 while (<SOURCES>) {
        if (/^Package: ([0-9a-z-+.]+)/) {
@@ -98,6 +104,17 @@ while (<SOURCES>) {
        if (/^Build-Depends: (.*)/) {
                add_bdeps($package, $1);
        }
+       if ($files_start) {
+               if (/^ [a-f0-9]+ ([0-9]+)/) {
+                       $ssize{$package} += $1;
+               } else {
+                       $files_start = 0;
+               }
+       }
+       if (/^Files:/) {
+               $files_start = 1;
+               $ssize{$package} = 0;
+       }
 }
 
 close(SOURCES);
@@ -111,29 +128,47 @@ my @vsource = ();
 for my $i (keys %essential) {
        push @visit, $i;
 }
+for my $i (@packages) {
+       if (defined($priority{$i}) and ($priority{$i} eq "required" ||
+           $priority{$i} eq "standard" || $priority{$i} eq "important")) {
+               push @visit, $i;
+       }
+}
 push @visit, "build-essential";
 
 while (@visit) {
        my $n = pop @visit;
-       next if grep /^$n$/, @pp;
+       next if grep /^\Q$n\E$/, @pp;
        push @pp, $n;
        my $source = $csource{$n};
-       if ($source and !grep /^$source$/, @vsource) {
+       if ($source and !grep /^\Q$source\E$/, @vsource) {
                push @vsource, $source;
                for my $b (@{$bdeps{$source}}) {
-                       if (!grep /^$b$/, @pp && !grep /^$b$/, @visit) {
+                       if (!grep /^\Q$b\E$/, @pp && !grep /^\Q$b\E$/, @visit) {
                                push @visit, $b;
                        }
                }
        }
        my $l = $depends{$n};
        for my $d (@$l) {
-               if (!grep /^$d$/, @pp && !grep /^$d$/, @visit) {
+               if (!grep /^\Q$d\E$/, @pp && !grep /^\Q$d\E$/, @visit) {
                        push @visit, $d;
                }
        }
 }
 
+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};
 }
+
+for my $i (@vsource) {
+       $ssize{$i} = 0 if (!defined($ssize{$i}));
+       print "$ssize{$i} S:$i\n";
+       $tsize += $ssize{$i};
+}
+
+print "$tsize Total\n";