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