--- Stefan Bodewig <[EMAIL PROTECTED]> wrote:

> Hi,
> 
> before becoming lucky by picking the best two weeks
> of Northrhine
> Westfalia's school holidays as our family vacation
> time I committed a
> change to the <ant> task that added an
> alowNativeBasedir attribute.
> 
> When this attribute has been set to true, the
> basedir of the called
> project will be the same that it would be when
> invoked from the
> command line (i.e. the dir attribute and the
> inheritall properties are
> ignored for this).
> 
> Not only is this what one might have expected to be
> the default
> behavior of the Ant task, it is also part of my
> attempt to fix
>
<https://issues.apache.org/bugzilla/show_bug.cgi?id=30569>.
> 
> Dominique stumbled over the commit and commented on
> the bugzilla
> issue.  Like him I prefer to keep any discussion on
> this list (I never
> intended to discuss the change in bugzilla but was
> keeping a record of
> the changes I made).
> 
> <ant>'s dir attribute is also used to actually
> locate the build file,
> so in certain situations it may be valid to set both
> attributes on the
> same task.
> 
> Currently I'm stuck with implementing
> allowNativeBasedir (or whatever
> its final name may be) in situations that involve
> more than one layer
> of <ant> tasks - which is what we have in the
> bugreport: a build
> invoked via <ant> in turn uses <subant> and the
> later doesn't set the
> expected basedirs for the (grand)child builds.
> 
> Let's say we have:
> 
> A.xml:
> <project basedir="A" name="A">
>   <ant dir="foo" antfile="B.xml"/>
> </project>
> 
> B.xml:
> <project basedir="B" name="B">
>   <ant allowNativeBasedir="true" antfile="C.xml"/>
> </project>
> 
> then project B will have a basedir of "foo" when run
> via project A
> (which is fine since it is documented that way). 
> The problem is, so
> will have project C because of the way we
> implemented "basedir
> inheritance".
> 
> When project B is created we set "basedir" as an
> "inherited property",
> i.e. a property somewhere between a "user property"
> and a "normal
> property".  Even with inheritall="false", <ant> will
> invoke
> copyInheritedProperties() to copy over all inherited
> properties from
> project B to project C - and in the presence of the
> property "basedir"
> project C will ignore the basedir attribute of the
> build file.
> 
> We can't simply change copyInheritedProperties'
> signature in order to
> say "but skip basedir" because it would break
> PropertyHelper's public
> API (and this is an explicit extension point).  At
> the same time
> PropertyHelper doesn't provide an API to iterate
> over inherited
> properties so we can't emulate copy... from within
> the Ant task.
> 
> Right now I see these options:
> 
> * break the PropertyHelper API (we may have already
> done so for 1.8.0,
>   I'm not sure)
> 

I think the public API is preserved but deprecations
have been marked.  Since the API was documented as
being unreliable and in-flux, and because the only
well-known consumer of the API
(AntXtras/wascallywabbit) has failed to respond to
promptings for opinions on the subject, I'd call it
fair game.

-Matt

> * break ProjectHelper's API so we can tell it to
> ignore the basedir
>   property and read the attribute - yet another
> explicit extension
>   point of Ant.
> 
> * Have the Ant task peek into the build file and
> read the basedir
>   attribute itself - and perform the same logic of
> ProjectHelper2.
> 
> I don't like either approach.  Any other idea?
> 
> Not making basedir an inherited property while still
> retaining the
> (sometimes strange but documented) behaviour of
> <ant> doesn't look
> attractive either.
> 
> Stefan
> 
>
---------------------------------------------------------------------
> To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> For additional commands, e-mail:
> [EMAIL PROTECTED]
> 
> 



      

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to