ant-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "jaikiran pai (JIRA)" <>
Subject [jira] [Assigned] (IVY-1562) Ivy files cannot reference parent module locations of files with a literal "%2F" in them
Date Mon, 03 Jul 2017 09:28:00 GMT


jaikiran pai reassigned IVY-1562:

    Assignee: jaikiran pai

> Ivy files cannot reference parent module locations of files with a literal "%2F" in them
> ----------------------------------------------------------------------------------------
>                 Key: IVY-1562
>                 URL:
>             Project: Ivy
>          Issue Type: Bug
>    Affects Versions: 2.4.0
>            Reporter: Mark R
>            Assignee: jaikiran pai
> The Jenkins [Pipeline Multibranch Plugin|]
creates a Jenkins workspace directory structure for each branch in a repository. If the repository
branch name contains a '/' it is encoded as '%2F'.
> It seems the extends element under the info element is not handling the encoding correctly.
Consider the following:
> Workspace:
> /feature%2Ftesting/ivy.xml
> /feature%2Ftesting/folder1/myparentmodule-ivy.xml
> {code:java}
> <ivy-module version="2.0">
>     <info organisation="myorg" module="mymodule" revision="1.0.0">
>         <extends organisation="myorg" module="myparentmodule" revision="1.0.0" location="file:/.../feature%2Ftesting/folder1/myparentmodule-ivy.xml"/>
>     </info>
>     ...
> {code}
> If I hard code the location to be file:/.../feature%2Ftesting/folder1/myparentmodule-ivy.xml
> I get this exception (location in build file is calling an ivy retrieve):
> {noformat}
> ...\feature%2Ftesting\my-build-file.xml:427: syntax errors in ivy file: java.text.ParseException:
Problem occurred while parsing ivy file: Unable to parse included ivy file for myorg#myparentmodule;1.0.0
in file:/C:/.../feature%252Ftesting/remote/ivy.xml
>         at org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorParser$Parser.parse(
>         at org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorParser.parseDescriptor(
>         at org.apache.ivy.plugins.parser.AbstractModuleDescriptorParser.parseDescriptor(
>         at org.apache.ivy.core.resolve.ResolveEngine.resolve(
>         at org.apache.ivy.Ivy.resolve(
>         at org.apache.ivy.ant.IvyResolve.doExecute(
>         at org.apache.ivy.ant.IvyTask.execute(
>         at org.apache.ivy.ant.IvyPostResolveTask.ensureResolved(
>         at org.apache.ivy.ant.IvyPostResolveTask.prepareAndCheck(
>         at org.apache.ivy.ant.IvyRetrieve.doExecute(
>         at org.apache.ivy.ant.IvyTask.execute(
>         at
>         at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>         at java.lang.reflect.Method.invoke(Unknown Source)
>         at
>         at
>         at
>         at
>         at
>         at
>         at
>         at
>         at
>         at
>         at
>         at
> {noformat}
> This happens because the %2F is translated into a slash (/) which then when treated as
a file in windows becomes a backslash (\).
> I should be able to get it to work by instead encoding the % by setting location=file:/.../feature%252Ftesting/folder1/myparentmodule-ivy.xml.
However, I get the same exception.
> The reason seems to come from the encoding getting lost at XmlModuleDescriptorParser.parseParentModuleOnFilesystem.
Running through the debugger:
> input: 
> {noformat}
> file:/.../feature%252Ftesting/folder1/myparentmodule-ivy.xml
> {noformat}
> results in parser.parseDescriptor getting called with file.toURL = 
> {noformat}
> file:/.../feature%2Ftesting/folder1/myparentmodule-ivy.xml
> {noformat}
> Instead of 
> {noformat}
> file:/.../feature%252Ftesting/folder1/myparentmodule-ivy.xml
> {noformat}
> Observe that the %252F become %2F. This results in the same exception as above. A FileNotFoundException
is thrown because the FileURLConnection class translates the %2F to be the system slash (\)
and so it tries the folder 'feature\testing'. Were the %252F not lost it would correctly decode
to use the literal value of '%2F' and try the folder 'feature%2Ftesting'
> Note trying %25252F does not work as an exception is thrown ("Parent module doesn't exist
on the filesystem...")
> Here is the code in question:

This message was sent by Atlassian JIRA

View raw message