]> git.vpit.fr Git - perl/modules/CPANPLUS-Dist-Gentoo.git/blobdiff - lib/CPANPLUS/Dist/Gentoo/Atom.pm
Fix $atom1 cmp $atom2
[perl/modules/CPANPLUS-Dist-Gentoo.git] / lib / CPANPLUS / Dist / Gentoo / Atom.pm
index fcfa685cae2495be626b37007c6c9e9474d14b78..dfddd4254c407b04bed9735b223d47d02a508d3e 100644 (file)
@@ -192,20 +192,21 @@ sub _spaceship {
 sub _cmp {
  my ($a1, $a2, $r) = @_;
 
- my $s1 = $a1->qualified_name;
- my $v1 = $a1->version;
- $s1   .= "-$v1" if defined $v1;
+ if (defined $a2) {
+  my $p1 = $a1->qualified_name;
 
- my $s2;
- if (Scalar::Util::blessed($a2) and $a2->isa(__PACKAGE__)) {
-  $s2    = $a2->qualified_name;
-  my $v2 = $a2->version;
-  $s2   .= "-$v2" if defined $v2;
- } else {
-  $s2 = $a2;
+  unless (Scalar::Util::blessed($a2) && $a2->isa(__PACKAGE__)) {
+   $a2 = eval { __PACKAGE__->new(atom => $a2) };
+   Carp::confess("Can't compare an atom against something that's not an atom or an atom string ($@)") if $@;
+  }
+  my $p2 = $a2->qualified_name;
+
+  if (my $c = $p1 cmp $p2) {
+   return $r ? -$c : $c;
+  }
  }
 
- $s1 cmp $s2;
+ $a1 <=> $a2;
 }
 
 sub _stringify {