]> git.deb.at Git - deb/packages.git/blobdiff - lib/Deb/Versions.pm
Use AptPkg::Version if available
[deb/packages.git] / lib / Deb / Versions.pm
index fcc8e31170a754b170047073b31aefde6c18b592..35f0cb5d5665e2a20dbc7a5104654f2a10832686 100644 (file)
@@ -1,6 +1,5 @@
 #
 # Deb::Versions
-# $Id$
 #
 # Copyright 2003, 2004 Frank Lichtenheld <frank@lichtenheld.de>
 #
@@ -16,7 +15,7 @@
 #
 #    You should have received a copy of the GNU General Public License
 #    along with this program; if not, write to the Free Software
-#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #
 
 =head1 NAME
@@ -71,11 +70,28 @@ our @EXPORT = qw( version_cmp version_sort suites_cmp suites_sort );
 
 our $VERSION = v1.0.0;
 
-sub version_cmp {
+BEGIN {
+    eval {
+       use AptPkg::Config '$_config';
+       use AptPkg::System '$_system';
+       use AptPkg::Version;
+
+       $_config->init;
+       $_system = $_config->system;
+       my $apt_ver = $_system->versioning;
+       *version_cmp = sub { return $apt_ver->compare(@_) };
+    };
+    unless( *version_cmp ){
+       *version_cmp = \&version_cmp_pp;
+    }
+}
+
+my $re = qr/^(?:(\d+):)?([\w.+:~-]+?)(?:-([\w+.~]+))?$/;
+sub version_cmp_pp {
+    return 0 if $_[0] eq $_[1];
     my ( $ver1, $ver2 ) = @_;
 
     my ( $e1, $e2, $u1, $u2, $d1, $d2 );
-    my $re = qr/^(?:(\d+):)?([\w.+:~-]+?)(?:-([\w+.~]+))?$/;
     if ( $ver1 =~ $re ) {
        ( $e1, $u1, $d1 ) = ( $1, $2, $3 );
        $e1 ||= 0;
@@ -153,10 +169,16 @@ sub _lcmp {
     return length( $v1 ) <=> length( $v2 );
 }
 
-our @SUITES_SORT = qw( woody oldstable sarge stable stable-proposed-updates
-                      etch etch-m68k testing testing-proposed-updates lenny
-                      sid unstable experimental
-                      warty hoary breezy breezy dapper edgy feisty gutsy );
+our @SUITES_SORT = qw(  woody
+                       sarge
+                       oldstable
+                       etch etch-m68k
+                       stable stable-proposed-updates
+                       lenny
+                       testing testing-proposed-updates
+                       squeeze
+                       sid unstable experimental
+                       warty hoary breezy dapper edgy feisty gutsy hardy intrepid jaunty);
 our @ARCHIVE_SORT = qw( non-US security updates volatile backports );
 our @PRIORITY_SORT = qw( required important standard optional extra );
 my $i = 1000;
@@ -177,11 +199,11 @@ sub suites_cmp {
        $cmp_b = $suites_sort{$1} - $archive_sort{$2}
        if $s_b =~ m;^(.+?)[/-](.*)$;o;
     }
-    return ($cmp_a <=> $cmp_b);
+    return ($cmp_b <=> $cmp_a);
 }
 
 sub suites_sort {
-    return sort { suites_cmp( $b, $a ) } @_;
+    return sort { suites_cmp( $a, $b ) } @_;
 }
 
 sub priority_cmp {