I agree that <property> doesn't work well with <macro> and some other
use cases.
I'm +1 on <local> if we can keep it separated from <property>, so the
behavior of <property> doesn't change. I think it may be a good idea to
even throw an exception if some name is used with both local and property.
I wouldn't mind even a <var> that is local + modifiable.
I don't like the second example where local seems to be used to declare
filepath that is later defined as a property.
Another approach is to use namespaces for properties - IMO that's a cleaner
solution, but has the disadvantage that overloads <property> behavior.
( a local:foo property name will imply a local lifecycle, a att:foo could
be used for a modifiable property, etc ). I know this isn't very popular :-)
Costin
peter reilly wrote:
> On Wednesday 22 October 2003 15:04, Stefan Bodewig wrote:
>> On 22 Oct 2003, Stefan Bodewig <[EMAIL PROTECTED]> wrote:
>> > I haven't made up my mind on the feature itself
>>
>> OK, re-reading the description first, I don't like the
>>
>> ,----
>>
>> | The value part of <local> is optional, and the local
>> | property may be set by a subsequent <property>, <property>
>> | will only set it if the value is not set.
>>
>> `----
>>
>> part. This means that whenever I find a <property> task I'll have to
>> search all possible scopes for a <local> element and can't rely on it
>> being global.
>>
>> What is the benefit of making <property> adhere to the scoping set up
>> by <local>?
>
> The point is that all tasks including <property> see the local
> properties as normal properties.
>
> It means that the macro attributes are now seen as normal
> properties by the tasks that are contained within the sequential
> nested element.
>
> The <local> makes a property of the same kind as the macro attribute.
>
> A common use case for this is when converting an antcall to a macro:
> I had a target that was used as an antcall target, it used a property
> "suite.pattern" to contain a regex what was used a number of times
> in the target and as an ant call was done to invoke the target, this
> was not seen outside the target. On conversion to a macrodef, the
> property "suite.pattern" is now a global property and the macrodef
> may fail unexpectly.
>
> With local the macro now looks like this:
> <!--
> macro to generate test suites registing
> @param gen.dir the dir to place the register_suites.h and .cpp
> files @param unit.dir the dir that the unit_*.cpp files are located
> -->
> <macrodef name="gen-register-suites">
> <attribute name="gen.dir"/>
> <attribute name="unit.dir"/>
> <sequential>
> <local name="suite.pattern" value="^ *SUITE\(.*,\s*(.*)\s*\)"/>
> <mkdir dir="${gen.dir}"/>
> ...
> </sequential>
> </macrodef>
>
> Another common use case is use of a local to pass information from one
> task to another without messing up global properties or similar properties
> used in other targets (say in a complicated build with a number of imports
> and lots of targets).
>
> <local name="filepath"/>
> <pathconvert property="filepath" targetos="unix"
> refid="files.path"/>
> <echo>the files in "files.path" are ${filepath}</echo>
>
> However I can see the problem of looking at a script and not knowing if
> the property is local or global.
>
> The last patch allowed [sub]ant[call] to inherit the local properties.
>
> I propose to change the local so that this inheriatance is removed and
> also that macro instances do not inherit the local properites - i.e.
> the local properties are staticlly scoped in the build script.
>
> So currently the following is the case:
> <property name="p" value="global"/>
>
> <macrodef name="inner">
> <sequential>
> <echo>p is ${p}</echo>
> </sequential>
> </macrodef>
>
> <macrodef name="outer">
> <attribute name="p"/>
> <sequential>
> <inner/>
> </sequential>
> </macrodef>
>
> <outer p="from macro"/>
>
> Will generate "p is from macro" which is probally not expected as
> inner was not explicilty passed the property by outer and inner
> may be in another file or in an antlib.xml.
>
> Peter
>
>>
>> I don't have any strong objections against the rest or the
>> implementation.
>>
>> So +0.5 (which can be turned into a +0.9 by explaining why <property>
>> should care about scopes 8-).
>>
>> 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]