You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2021/06/26 20:57:40 UTC

[maven] 02/03: [MNG-6964] Maven version sorting is internally inconsistent.

This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch maven-3.8.x
in repository https://gitbox.apache.org/repos/asf/maven.git

commit ce27f0ec6184cdee40609817a2796c768d0df261
Author: Dennis Lundberg <de...@apache.org>
AuthorDate: Wed Jul 22 11:24:26 2020 +0200

    [MNG-6964] Maven version sorting is internally inconsistent.
---
 .../maven/artifact/versioning/ComparableVersion.java      | 12 ++++++++++--
 .../maven/artifact/versioning/ComparableVersionTest.java  | 15 +++++++++++++++
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
index 811bab2..23eb846 100644
--- a/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
@@ -530,8 +530,16 @@ public class ComparableVersion
                 {
                     return 0; // 1-0 = 1- (normalize) = 1
                 }
-                Item first = get( 0 );
-                return first.compareTo( null );
+                // Compare the entire list of items with null - not just the first one, MNG-6964
+                for ( Item i : this )
+                {
+                    int result = i.compareTo( null );
+                    if ( result != 0 )
+                    {
+                        return result;
+                    }
+                }
+                return 0;
             }
             switch ( item.getType() )
             {
diff --git a/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java b/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java
index 70fc1d8..97fb46d 100644
--- a/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java
+++ b/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java
@@ -295,6 +295,21 @@ public class ComparableVersionTest
         checkVersionsArrayEqual( arr );
     }
 
+    /**
+     * Test <a href="https://issues.apache.org/jira/browse/MNG-6964">MNG-6964</a> edge cases
+     * for qualifiers that start with "-0.", which was showing A == C and B == C but A &lt; B.
+     */
+    public void testMng6964()
+    {
+        String a = "1-0.alpha";
+        String b = "1-0.beta";
+        String c = "1";
+
+        checkVersionsOrder( a, c ); // Now a < c, but before MNG-6964 they were equal
+        checkVersionsOrder( b, c ); // Now b < c, but before MNG-6964 they were equal
+        checkVersionsOrder( a, b ); // Should still be true
+    }
+
     public void testLocaleIndependent()
     {
         Locale orig = Locale.getDefault();