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 < 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();