]> git.donarmstrong.com Git - wannabuild.git/blobdiff - lib/WB/QD.pm
WB::QD: replace not-for-us, auto-not-for-us by
[wannabuild.git] / lib / WB / QD.pm
index 8391fc3066d05f3547c35d01e78524b71f564b25..6a1a067ba9bb110c2f9b5702f3d3b99f4eabf226 100644 (file)
@@ -2,7 +2,12 @@ package WB::QD;
 
 use strict;
 use IO::Uncompress::AnyInflate qw(anyinflate);
-use Dpkg::Version qw(vercmp);
+use Dpkg::Version (); # import nothing
+if ( defined $Dpkg::Version::VERSION ) {
+    *vercmp = \&Dpkg::Version::version_compare;
+} else {
+    *vercmp = \&Dpkg::Version::vercmp;
+}
 use Dpkg::Arch qw(debarch_is);
 use Data::Dumper;
 
@@ -15,15 +20,15 @@ sub readsourcebins {
 
     my $pas = {};
     local($/) = "\n";
-    open(my $pas, '<', $pasfile);
-    while(<$pas>) {
+    open(my $pasf, '<', $pasfile);
+    while(<$pasf>) {
         chomp;
         s,\s*#.*,,;
         next unless $_;
         my ($p, $c) = split(/:\s*/);
         $pas->{$p} = { arch => [ split(/\s+/, $c) ], mode => substr($c, 0, 1) ne '!' };
     }
-    close $pas;
+    close $pasf;
 
     my $srcs = {};
     local($/) = ""; # read in paragraph mode
@@ -72,6 +77,8 @@ sub readsourcebins {
             /^Source:\s*(\S+)$/mi and $p->{'source'} = $1;
             /^Source:\s*(\S+)\s+\((\S+)\)$/mi and $p->{'source'} = $1 and $p->{'version'} = $2;
 
+            # consider packages as non-existant if it's all but outdated
+            next if $p->{'arch'} eq 'all' && $srcs->{$p->{'source'}} && $srcs->{$p->{'source'}}->{'version'} && vercmp($srcs->{$p->{'source'}}->{'version'}, $p->{'version'}) > 0;
             next unless $p->{'arch'} eq 'all' || $p->{'arch'} eq ${arch};
             $binary->{$p->{'binary'}} = { 'version' => $p->{'version'}, 'arch' => $p->{'arch'}} unless $binary->{$p->{'binary'}} and vercmp($binary->{$p->{'binary'}}->{'version'}, $p->{'version'}) < 0;
 
@@ -102,7 +109,7 @@ sub readsourcebins {
         $srcs->{$k}->{'status'} = 'installed' if $srcs->{$k}->{'arch'} && $srcs->{$k}->{'arch'} eq 'all';
         
         if (!$srcs->{$k}->{'for-us'} && $srcs->{$k}->{'status'} ne 'installed') {
-            $srcs->{$k}->{'status'} = 'auto-not-for-us';
+            $srcs->{$k}->{'status'} = 'arch-not-in-arch-list';
         }
         delete $srcs->{$k}->{'for-us'};
 
@@ -110,15 +117,21 @@ sub readsourcebins {
         #$p ||= $pas->{'%'.$k};
         #$srcs->{$k}->{'status'} = 'not-for-us' if pasignore($p, $arch);
         if (pasignore($pas->{'%'.$k}, $arch)) {
-            $srcs->{$k}->{'status'} = 'not-for-us';
+            $srcs->{$k}->{'status'} = 'packages-arch-specific';
             next;
         }
         for my $bin (@{$srcs->{$k}->{'binary'}}) {
+            $srcs->{$k}->{'pas'} = 1 if pasignore($pas->{$bin}, $arch);
             next if pasignore($pas->{$bin}, $arch);
             next if $binary->{$bin} and $binary->{$bin}->{'arch'} eq 'all';
             next SRCS;
         }
-        $srcs->{$k}->{'status'} = 'not-for-us';
+        if ($srcs->{$k}->{'pas'}) {
+            $srcs->{$k}->{'status'} = 'packages-arch-specific';
+        } else {
+            $srcs->{$k}->{'status'} = 'overwritten-by-arch-all';
+        }
+        delete $srcs->{$k}->{'pas'};
     }
     $srcs->{'_binary'} = $binary;
     local($/) = "\n";