]> err.no Git - dpkg/commitdiff
scripts/dpkg-scanpackages.pl: modify to use most recent version
authorWichert Akkerman <wakkerma@debian.org>
Sun, 10 Sep 2000 21:40:30 +0000 (21:40 +0000)
committerWichert Akkerman <wakkerma@debian.org>
Sun, 10 Sep 2000 21:40:30 +0000 (21:40 +0000)
    of a package of multiple versions are found

ChangeLog
scripts/dpkg-scanpackages.pl

index e8367055f8095e4ae37468a2bad3389779b16a35..02a10f667d2de975f31e00886f52204adc47b88a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sun Sep 10 23:31:02 CEST 2000 Wichert Akkerman <wakkerma@debian.org>
+
+  * scripts/dpkg-scanpackages.pl: modify to use most recent version
+    of a package of multiple versions are found
+
 Sat Sep  9 21:17:37 CEST 2000 Wichert Akkerman <wakkerma@debian.org>
 
   * debian/control: add dependency on binutils for dpkg-dev (needed for
index 853c7d5da7a4ce7f448d0f7120fa05b7f444c123..56bb37f4ffaf3bb9f4baa5211d691f04a344afa6 100755 (executable)
@@ -35,6 +35,14 @@ $#ARGV == 1 || $#ARGV == 2
 -d $binarydir or die "Binary dir $binarydir not found\n";
 -e $override or die "Override file $override not found\n";
 
+sub vercmp {
+       ($a,$b)=@_;
+       return $vercache{$a,$b} if defined($varcache{$a,$b});
+       system("dpkg --compare-versions $a le $b");
+       $varcache{$a,$a}=$?;
+       return $?;
+}
+
 # The extra slash causes symlinks to be followed.
 open(F,"find $binarydir/ -follow -name '*.deb' -print |")
     or die "Couldn't open pipe to find: $!\n";
@@ -72,10 +80,20 @@ while (<F>) {
     $p= $tv{'Package'}; delete $tv{'Package'};
 
     if (defined($p1{$p})) {
-        print(STDERR " ! Package $p (filename $fn) is repeat;\n".
-                     "   ignored that one and using data from $pfilename{$p} !\n")
-            || die $!;
-        next;
+       if (&vercmp($tv{'Version'}, $pv{$p,'Version'})) {
+           print(STDERR " ! Package $p (filename $fn) is repeat but newer version;\n".
+                   "   used that one and ignored data from $pfilename{$p} !\n")
+                   || die $!;
+           delete $p1{$p};
+           for $k (keys %k1) {
+               delete $pv{$p,$k};
+           }
+       } else {
+           print(STDERR " ! Package $p (filename $fn) is repeat;\n".
+                        "   ignored that one and using data from $pfilename{$p} !\n")
+               || die $!;
+           next;
+       }
     }
     print(STDERR " ! Package $p (filename $fn) has Filename field!\n") || die $!
         if defined($tv{'Filename'});