ant-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mitch Gitman (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (IVY-1363) ivy:buildlist task confused by extends feature using two parents
Date Sun, 15 Jul 2012 17:11:33 GMT

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

Mitch Gitman commented on IVY-1363:
-----------------------------------

A follow-up to my previous comment. 

Just to illustrate how the pattern matching works in a normal scenario, consider a call to
this method in RepositoryResolver:
    protected ResolvedResource findResourceUsingPattern(ModuleRevisionId mrid, String pattern,
            Artifact artifact, ResourceMDParser rmdparser, Date date)

Imagine these more typcial arguments:
mrid=org.apache.ant#ant;1.8.4
pattern=C:\Users\me\.ivy2\local\ integration\[organisation]\[module]\[revision]\[artifact]-[revision].[ext]
artifact=org.apache.ant#ant;1.8.4!ant.jar

Then you get to this line:
                String resourceName = IvyPatternHelper.substitute(pattern, mrid, artifact);

The value returned for resourceName is:
C:\Users\me\.ivy2\local\integration\org.apache.ant\ant\1.8.4\ant-1.8.4.jar

The indicator that this resolve failed is that there's no file at that path; the above file
does not exist.

But in the case of how RepositoryResolver is being used for module inheritance, the undesired
path, master-parent/ivy.xml, DOES exist, when the path you really want is bootstrap-parent/ivy.xml.
So the whole idea of pattern-matching is not an appropriate strategy, at least for unpublished
parent Ivy modules, especially considering that the patterns being passed in are not even
true patterns with substitute-able elements like [organisation] and [module]; they're just
fully hard-coded paths (whether absolute or relative) like …/master-parent/ivy.xml and …/bootstrap-parent/ivy.xml
that contain nothing to be substituted and thus completely ignore the mrid and artifact arguments
to RepositoryResolver.findResourceUsingPattern.

This is an indication to me that, for at least for locating unpublished parents, URLResolver
(being based on RepositoryResolver and AbstractPatternsBasedResolver) is the entirely wrong
Ivy resolver to be using. I'm still not sure about published parents.
                
> ivy:buildlist task confused by extends feature using two parents
> ----------------------------------------------------------------
>
>                 Key: IVY-1363
>                 URL: https://issues.apache.org/jira/browse/IVY-1363
>             Project: Ivy
>          Issue Type: Bug
>          Components: Ant, Core
>    Affects Versions: 2.3.0-RC1
>         Environment: Ant 1.7.1 (but should be the same with Ant 1.8.3)
>            Reporter: Mitch Gitman
>              Labels: testcase
>         Attachments: BuildlistAndExtendsIntegrationTest.zip
>
>
> I'm finding that the ivy:buildlist Ant task is erroring when it encounters more than
one parent Ivy module that's pulled in through the /ivy-module/info/extends element. This
problem is new to Ivy 2.3.0-rc1; I did not encounter it with Ivy 2.2.0. There is no relationship
or interaction between the two different parent Ivy modules, i.e. no nesting of parents.
> In my test case, which I explain shortly, when I point the ivy:buildlist Ant task at
a project stack that includes a mix of both parents and their children, I see this error:
> ...\multimodule-build\build.xml:28: impossible to parse ivy file for ...\testTwoParents\germany\build.xml:
ivyfile=...\testTwoParents\germany\ivy.xml exception=java.text.ParseException: Problem occurred
while parsing ivy file: inconsistent module descriptor file found in 'file:/.../testTwoParents/master-parent/ivy.xml':
bad module name: expected='bootstrap-parent' found='master-parent';  in file:/.../testTwoParents/germany/ivy.xml
> What's happening is, the germany module extends bootstrap-parent, but somehow the relative
path to master-parent/ivy.xml is supplanting the relative path to bootstrap-parent/ivy.xml.
It appears buildlist doesn't know how to deal with more than one parent.
> This is what occurs when the haltOnError attribute is set to "true" on ivy:buildlist.
If I set haltOnError="false" in my test case, the exception goes away, but I see the following
build order:
> 1. germany
> 2. ireland
> 3. bootstrap-parent
> 4. master-parent
> 5. croatia
> What's wrong about this build order is that germany depends on ireland and ireland depends
on bootstrap-parent, so the order of the first three entries is reversed. If I removed the
dependency of ireland on bootstrap-parent, the order would be the same. This misordering is
clearly related to the presence of more than one parent because comparable tests using (A)
the extends feature with a single parent and (B) no extends feature at all get the order right.
Plus, I see this unexpected output when haltOnError="false":
> [ivy:buildlist] 	=> adding it at the beginning of the path
> [ivy:buildlist] 	=> adding it at the beginning of the path
> TEST CASE INSTRUCTIONS:
> I've attached a ZIP containing three standalone test cases, each consisting of a suite
of Ant projects that together comprise a multimodule build whose build order is to be determined
by the ivy:buildlist task:
> * testNoParents: The extends feature is not used.
> * testOneParent: The extends feature is used to pull in content from a single parent
Ivy module.
> * testTwoParents: The extends feature is used where one Ivy module pulls in content from
one parent and two other Ivy modules pull in content from a different parent.
> The testNoParents and testOneParent tests are the control groups. The testTwoParents
test is where things fail.
> When running Ant from one of these test cases, you need to specify the location of the
Ivy 2.3.0-rc1 installation using one of the following:
> * an IVY_DIR environment variable
> * an env.IVY_DIR user property, i.e. -Denv.IVY_DIR=...
> * an ivy.dir user property, i.e. -Divy.dir=...
> To run the build in any of these suites, go to the multimodule-build directory, and execute
"ant" or "ant init"—while specifying the Ivy installation location. You can also run "ant
cleancache" to clear out the Ivy cache. However, you shouldn't need to do this regularly because
each of these test cases uses its own dedicated Ivy cache.
> NOTE: This issue is broached in the email thread "extends & buildlist on 2.3.0-rc1
… it gets worse" on the ivy-user and ant-dev mailing lists.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

Mime
View raw message