ivy:retrieve sync="true" fails if first variable is optional
------------------------------------------------------------

                 Key: IVY-1142
                 URL: https://issues.apache.org/jira/browse/IVY-1142
             Project: Ivy
          Issue Type: Bug
          Components: Core
    Affects Versions: 2.1.0
         Environment: Not relevant
            Reporter: Andreas Axelsson


if the ivy.retrieve.pattern contains an optional parameter as the first 
parameter, the sync feature of ivy:retrieve will get a path with a trailing '(' 
causing it to find nothing to sync, leaving old files still in the retrieve 
path.

Example:
ivy.retrieve.pattern = lib/([type]/)/[artifact].[ext]
sync will try to match orphaned files against lib/( which obviously contains 
nothing.

The problem is in IvyPatternHelper.java getTokenRoot(), which only checks for 
'['.

I could see that nothing but the Resolver uses this function so it looks like 
it'll be pretty safe to just fix the check. I've attached a suggested fix 
below. I rarely touch java, so there might be simpler ways to do it, but at 
least it works.

diff -r 616a4e764dd1 src/java/org/apache/ivy/core/IvyPatternHelper.java
--- a/src/java/org/apache/ivy/core/IvyPatternHelper.java        Fri Nov 20 
11:38:53 2009 +0100
+++ b/src/java/org/apache/ivy/core/IvyPatternHelper.java        Fri Nov 20 
12:54:27 2009 +0100
@@ -472,7 +472,15 @@
     }

     public static String getTokenRoot(String pattern) {
-        int index = pattern.indexOf('[');
+        int[] delimiters = {'[', '('};
+        for (int index = 0; index < delimiters.length; ++index) {
+            pattern = getTokenRoot(pattern, delimiters[index]);
+        }
+        return pattern;
+    }
+
+    private static String getTokenRoot(String pattern, int delimiter) {
+        int index = pattern.indexOf(delimiter);
         if (index == -1) {
             return pattern;
         } else {


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to