[Rt-commit] rt branch, 4.0-trunk, updated. rt-3.9.7-1179-gb69e66b

Ruslan Zakirov ruz at bestpractical.com
Tue Jan 4 19:24:18 EST 2011


The branch, 4.0-trunk has been updated
       via  b69e66b857bf1ddefd3c5cc9c26b69bf105da3b8 (commit)
       via  f2fc189767d8bb10a0767b3f1ca09c21d5488966 (commit)
      from  1df0f3237571a1344e0c84eccba346bd7c7c2847 (commit)

Summary of changes:
 lib/RT/Handle.pm        |   25 ++++++++++++++++++-------
 t/api/versions_sorter.t |   22 ++++++++++++++++++++++
 2 files changed, 40 insertions(+), 7 deletions(-)
 create mode 100644 t/api/versions_sorter.t

- Log -----------------------------------------------------------------
commit f2fc189767d8bb10a0767b3f1ca09c21d5488966
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Wed Jan 5 03:22:41 2011 +0300

    tests for ::Handle::cmp_versions

diff --git a/t/api/versions_sorter.t b/t/api/versions_sorter.t
new file mode 100644
index 0000000..28307bf
--- /dev/null
+++ b/t/api/versions_sorter.t
@@ -0,0 +1,22 @@
+#!/usr/bin/perl -w
+
+use RT::Test nodata => 1, tests => 264;
+
+use strict;
+use warnings;
+
+sub is_right_sorting {
+    my @order = @_;
+    my @tmp = sort { int(rand(3)) - 1 } @order;
+
+    is_deeply(
+        [ sort RT::Handle::cmp_version @tmp ],
+        \@order,
+        'test sorting of ('. join(' ', @tmp) .')'
+    );
+}
+
+is_right_sorting(qw(1 2 3));
+is_right_sorting(qw(1.1 1.2 1.3 2.0 2.1));
+is_right_sorting(qw(4.0.0a1 4.0.0alpha2 4.0.0b1 4.0.0beta2 4.0.0pre1 4.0.0pre2 4.0.0rc1 4.0.0rc2 4.0.0));
+

commit b69e66b857bf1ddefd3c5cc9c26b69bf105da3b8
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Wed Jan 5 03:23:11 2011 +0300

    properly sort alphaX, betaX, preX and rcX versions

diff --git a/lib/RT/Handle.pm b/lib/RT/Handle.pm
index 2f618a2..b3847be 100644
--- a/lib/RT/Handle.pm
+++ b/lib/RT/Handle.pm
@@ -549,18 +549,29 @@ sub GetVersionFile {
     return defined $version? $version{ $version } : undef;
 }
 
+{ my %word = (
+    a     => -4,
+    alpha => -4,
+    b     => -3,
+    beta  => -3,
+    pre   => -2,
+    rc    => -1,
+    head  => 9999,
+);
 sub cmp_version($$) {
     my ($a, $b) = (@_);
-    $b =~ s/HEAD$/9999/;
-    my @a = split /[^0-9]+/, $a;
-    my @b = split /[^0-9]+/, $b;
+    my @a = grep defined, map { /^[0-9]+$/? $_ : /^[a-zA-Z]+$/? $word{$_}|| -10 : undef }
+        split /([^0-9]+)/, $a;
+    my @b = grep defined, map { /^[0-9]+$/? $_ : /^[a-zA-Z]+$/? $word{$_}|| -10 : undef }
+        split /([^0-9]+)/, $b;
+    @a > @b
+        ? push @b, (0) x (@a- at b)
+        : push @a, (0) x (@b- at a);
     for ( my $i = 0; $i < @a; $i++ ) {
-        return 1 unless defined $b[$i];
         return $a[$i] <=> $b[$i] if $a[$i] <=> $b[$i];
     }
-    return 0 if @a == @b;
-    return -1;
-}
+    return 0;
+}}
 
 
 =head2 InsertInitialData

-----------------------------------------------------------------------


More information about the Rt-commit mailing list