You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by ja...@apache.org on 2018/02/26 11:06:16 UTC

ant-ivy git commit: Support parsing multiple ranges for Maven versions

Repository: ant-ivy
Updated Branches:
  refs/heads/master 046623755 -> 86eacb6b5


Support parsing multiple ranges for Maven versions


Project: http://git-wip-us.apache.org/repos/asf/ant-ivy/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant-ivy/commit/86eacb6b
Tree: http://git-wip-us.apache.org/repos/asf/ant-ivy/tree/86eacb6b
Diff: http://git-wip-us.apache.org/repos/asf/ant-ivy/diff/86eacb6b

Branch: refs/heads/master
Commit: 86eacb6b576208fd7a6d6a37ba624892a1c9ccd6
Parents: 0466237
Author: Jaikiran Pai <ja...@apache.org>
Authored: Mon Feb 26 16:35:42 2018 +0530
Committer: Jaikiran Pai <ja...@apache.org>
Committed: Mon Feb 26 16:35:42 2018 +0530

----------------------------------------------------------------------
 .../parser/m2/MavenVersionRangeParser.java      | 23 ++++++++++--
 .../parser/m2/MavenVersionRangeParserTest.java  | 37 ++++++++++++++++++++
 2 files changed, 57 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/86eacb6b/src/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParser.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParser.java b/src/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParser.java
index f67b338..0f13745 100644
--- a/src/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParser.java
+++ b/src/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParser.java
@@ -17,6 +17,7 @@
 
 package org.apache.ivy.plugins.parser.m2;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.StringTokenizer;
@@ -121,8 +122,24 @@ class MavenVersionRangeParser {
                 return new BasicRange(lowerBound, !lowerBoundVal.startsWith("("), upperBound, !upperBoundVal.endsWith(")"));
             }
             if (versionParts.length > 2) {
-                // TODO: we do not yet support multi-range format (which is a valid range in maven
-                return null;
+                // each range part can itself be a range, which is valid in maven
+                final Collection<Range> ranges = new ArrayList<>();
+                for (int i = 0; i < versionParts.length; i = (i + 2 < versionParts.length) ? i + 2 : i + 1) {
+                    final String partOne = versionParts[i];
+                    final String partTwo;
+                    if (i + 1 < versionParts.length) {
+                        partTwo = versionParts[i + 1];
+                    } else {
+                        partTwo = "";
+                    }
+                    final Range rangePart = parse(partOne + "," + partTwo);
+                    if (rangePart == null) {
+                        continue;
+                    }
+                    ranges.add(rangePart);
+
+                }
+                return (ranges == null || ranges.isEmpty()) ? null : new MultiSetRange(ranges);
             }
             return null;
         } catch (NumberFormatException nfe) {
@@ -177,7 +194,7 @@ class MavenVersionRangeParser {
         }
     }
 
-    private final class MultiSetRange implements Range {
+    private static final class MultiSetRange implements Range {
 
         private final Collection<Range> ranges;
 

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/86eacb6b/test/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParserTest.java
----------------------------------------------------------------------
diff --git a/test/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParserTest.java b/test/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParserTest.java
index bf60f3d..1ac141a 100644
--- a/test/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParserTest.java
+++ b/test/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParserTest.java
@@ -136,4 +136,41 @@ public class MavenVersionRangeParserTest {
         assertFalse("'>' range wasn't expected to match", MavenVersionRangeParser.rangeAccepts(range, "11"));
         assertFalse("'>' range wasn't expected to match", MavenVersionRangeParser.rangeAccepts(range, "11.0"));
     }
+
+    /**
+     * Tests the {@link MavenVersionRangeParser#rangeAccepts(String, String)} works correctly when a range of the form
+     * {@code (,1.0],[1.2,)} is used to compare against some value.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testMultiRange() throws Exception {
+        final String range = "(,1.0],[1.2,)"; // x <= 1.0 or x >= 1.2
+        assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.0"));
+        assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "1"));
+        assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "0.9"));
+        assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "0.9.5"));
+        assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "22"));
+        assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.2"));
+        assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.2.0"));
+
+        assertFalse("Range with multiple sets wasn't expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.1"));
+        assertFalse("Range with multiple sets wasn't expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.0.1"));
+    }
+
+    /**
+     * Tests the {@link MavenVersionRangeParser#rangeAccepts(String, String)} works correctly when a range of the form
+     * {@code (,1.1),(1.1,)} is used to compare against some value.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testMultiRangeSpecificValue() throws Exception {
+        final String range = "(,1.1),(1.1,)"; // x != 1.1
+        assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.0"));
+        assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.0.1"));
+        assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.2"));
+
+        assertFalse("Range with multiple sets wasn't expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.1"));
+    }
 }