[ 
https://issues.apache.org/jira/browse/IVY-1142?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12781331#action_12781331
 ] 

Andreas Axelsson commented on IVY-1142:
---------------------------------------

Thanks, it's working fine!

I see that your code avoids stripping at left parenthesis when there are no 
variables in the path, which was a better solution than mine. Perhaps it should 
be detected only if the brackets are actually enclosed by the parenthesis, but 
it'd have to be checked against how the pattern substitution code deals with 
the same case I guess. Not that using () in foldernames is a best practice 
IMHO, but someone might want it.

The following root will be correct now: ([optional] being empty)
/foo/([optional]/)bar -> /foo/
/foo/[module]/bar -> /foo/
/foo/(subdir)/bar -> /foo/(subdir)/bar

This won't:
/(foo)/[module]/bar -> /


> ivy:retrieve sync="true" does nothing 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
>            Assignee: Maarten Coene
>             Fix For: trunk
>
>         Attachments: IVY-1142.patch
>
>
> 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 
> the first '[', but in the pattern above it needs to check for the first '('.
> 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.
> {noformat}
> 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 {
> {noformat}

-- 
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