]> git.vpit.fr Git - perl/modules/CPANPLUS-Dist-Gentoo.git/commitdiff
Correctly handle leading zeros in version components
authorVincent Pit <vince@profvince.com>
Sat, 5 Feb 2011 19:10:09 +0000 (20:10 +0100)
committerVincent Pit <vince@profvince.com>
Sat, 5 Feb 2011 20:42:52 +0000 (21:42 +0100)
Again, thanks Torsten Veller for bringing this to my attention.

lib/CPANPLUS/Dist/Gentoo/Version.pm
t/20-version.t

index e1f76742748fd777436c47b9af84068a81e76366..d76bcb47df96ef041db48f4deb8253c3dfbf60dc 100644 (file)
@@ -126,13 +126,26 @@ sub _spaceship {
   my @a = @{ $v1->version };
   my @b = @{ $v2->version };
 
-  while (@a and @b) {
+  {
    my $x = shift @a;
    my $y = shift @b;
    my $c = $x <=> $y;
    return $c if $c;
   }
 
+  while (@a and @b) {
+   my $x = shift @a;
+   my $y = shift @b;
+   my $c;
+   if ($x =~ /^0/ or $y =~ /^0/) {
+    s/0+\z// for $x, $y;
+    $c = $x cmp $y;
+   } else {
+    $c = $x <=> $y;
+   }
+   return $c if $c;
+  }
+
   return  1 if @a;
   return -1 if @b;
  }
index 14ea3297868e538f66473229204a3a2474405537..bd48d7570f6df9b95edc1212b79e3da4976f5205 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 3 + (2 + 2 * 3) * (52 + 4 * 7);
+use Test::More tests => 3 + (2 + 2 * 3) * (66 + 4 * 7);
 
 use CPANPLUS::Dist::Gentoo::Version;
 
@@ -21,25 +21,41 @@ like $@, qr/Couldn't\s+parse\s+version\s+string/, "'dongs' < V->new(1)";
 my @tests = (
  [ 0, 0 =>  0 ],
  [ 1, 0 =>  1 ],
- [ 0, 1 => -1 ],
  [ 1, 1 =>  0 ],
 
+ [ '00',  '0'  => 0 ],
+ [ '01',  '1'  => 0 ],
+ [ '001', '1'  => 0 ],
+ [ '001', '01' => 0 ],
+
  [ '1.0',   1       =>  1 ], # Yes, 1.0 > 1. Deal with it
  [ '1.0',   '1.0'   =>  0 ],
  [ '1.1',   1       =>  1 ],
  [ '1.1',   '1.0'   =>  1 ],
- [ '1.0',   '1.1'   => -1 ],
- [ '1.0.0', 1       =>  1 ], # Ditto
- [ '1.0.0', '1.0'   =>  1 ], # Tritto
- [ '1.0.0', '1.0.0' =>  0 ],
- [ '1.0.1', '1.1'   => -1 ],
- [ '1.0.1', '1.0.0' =>  1 ],
-
- [ '1a',   1      =>  1 ],
- [ '1.0a', 1      =>  1 ],
- [ '1.0',  '1a'   =>  1 ], # Same
- [ '1a',   '1b'   => -1 ],
- [ '1.1a', '1.0b' =>  1 ],
+ [ '1.1',   '1.1'   =>  0 ],
+ [ '1.1',   '1.10'  => -1 ],
+ [ '1.1',   '1.01'  =>  1 ],
+ [ '1.1',   '1.010' =>  1 ],
+ [ '1.01',  '1.010' =>  0 ],
+
+ [ '1.0.0',  1         =>  1 ], # Ditto
+ [ '1.0.0',  '1.0'     =>  1 ], # Tritto
+ [ '1.0.0',  '1.0.0'   =>  0 ],
+ [ '1.0.1',  '1.1'     => -1 ],
+ [ '1.0.1',  '1.0.0'   =>  1 ],
+ [ '1.0.1',  '1.0.1'   =>  0 ],
+ [ '1.0.1',  '1.0.10'  => -1 ],
+ [ '1.0.1',  '1.0.01'  =>  1 ],
+ [ '1.0.1',  '1.0.010' =>  1 ],
+ [ '1.0.01', '1.0.010' =>  0 ],
+
+ [ '1a',    1        =>  1 ],
+ [ '1.0a',  1        =>  1 ],
+ [ '1.0',   '1a'     =>  1 ], # Same
+ [ '1a',    '1b'     => -1 ],
+ [ '1.1a',  '1.0b'   =>  1 ],
+ [ '1.1a',  '1.01a'  =>  1 ],
+ [ '1.01a', '1.010a' =>  0 ],
 
  map( {
   [ '1.0',        "1.0_${_}"  =>  1 ],