ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matt Benson <gudnabr...@yahoo.com>
Subject Re: Macrodef and parallel in a recursive situation
Date Mon, 20 Oct 2003 16:07:27 GMT
Gotcha--I missed that the first time around.  If you
want to restrict the scope of a property set by a
task, you essentially reserve that property in the
local context, then invoke the task.  This should work
although I like my way better... ;)

I think it is okay to force the user to explicitly
send local values for ant and antcall, but that's just
me... I wouldn't think it would be too hard to do it
the other way either, but what if you need to send the
global version?

0.02
-Matt

--- peter reilly <peter.reilly@corvil.com> wrote:
> This is basicly what the local implementation
> does.
> 
> The only problem is for ant/antcall, a new project
> is created and the local properties would need
> to be copied to this, keeping in mind all the
> rules about user/normal/inherited and nested param
> elements.
> 
> Peter
> On Monday 20 October 2003 16:16, Matt Benson wrote:
> > Jose makes a good point about tasks that set
> > properties.  Without having delved into the
> > PropertyHelper* classes, could local properties be
> > handled some other way?  What about a Scope
> > TaskContainer subclass that would push an element
> onto
> > a stack.  Then any property queries would descend
> into
> > the stack... then a task that set a property could
> > have that property restricted by nesting it in a
> set
> > of <scope> tags...
> >
> > -Matt
> >
> >
> > --- Jose Alberto Fernandez
> <jalberto@cellectivity.com>
> >
> > wrote:
> > > > From: Christopher Lenz [mailto:cmlenz@gmx.de]
> > > >
> > > > Hi Peter,
> > > >
> > > > this looks really cool, but I'd suggest adding
> an
> > >
> > > attribute like
> > >
> > > > scope="local|global" to the <property> task
> > >
> > > instead of adding
> > >
> > > > a completely
> > > > new task.
> > >
> > > I disagree here. The issue is not <property> by
> > > itself. This local
> > > properties need to work with every <task> that
> may
> > > set a property:
> > > <condition>, <available>, <uptodate>,
> <property>,
> > > and a million more
> > > obscure ones. The main use for <local> is when
> it is
> > > called without
> > > the value attribute, because in that case this
> other
> > > tasks will
> > > set the local property and not the global one.
> > >
> > > Jose Alberto
> > >
> > > > -chris
> > > >
> > > > peter reilly wrote:
> > > > > I have written the code to support local
> > >
> > > properties.
> > >
> > > > > While I was doing this, I realized that the
> > >
> > > attributes
> > >
> > > > > of a macrodef could/should be local
> properties
> > >
> > > as well,
> > >
> > > > removing some
> > > >
> > > > > of the issues seen last week (use of
> attribute
> > >
> > > in a bsf script and
> > >
> > > > > support of parallel/recursive).
> > > > >
> > > > > The following shows it in using a new task
> > >
> > > called local.
> > >
> > > > > <project name="local">
> > > > >   <property name="prop1" value="a global
> > >
> > > value"/>
> > >
> > > > >   <target name="test1">
> > > > >     <local name="prop1" value="a local
> value"/>
> > > > >     <echo>prop1 is "${prop1}"</echo>
> > > > >   </target>
> > > > >   <target name="test2" depends="test1">
> > > > >     <echo>prop1 is "${prop1}"</echo>
> > > > >   </target>
> > > > > </project>
> > > > >
> > > > > This ant test2 generates the following:
> > > > >
> > > > > test1:
> > > > > prop1 is "a local value"
> > > > >
> > > > > test2:
> > > > > prop1 is "a global value"
> > > > >
> > > > > Each taskcontainer sets up a new local
> scope:
> > > > >
> > > > >   <target name="sequential">
> > > > >     <local name="prop2" value="in target"/>
> > > > >     <sequential>
> > > > >       <local name="prop2" value="in
> > >
> > > sequential"/>
> > >
> > > > >       <echo>prop2 is "${prop2}"</echo>
> > > > >     </sequential>
> > > > >     <echo>prop2 is "${prop2}"</echo>
> > > > >   </target>
> > > > >
> > > > > will generate the following:
> > > > > sequential:
> > > > > prop2 is "in sequential"
> > > > > prop2 is "in target"
> > > > >
> > > > > 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.
> > > > >
> > > > >   <target name="notset">
> > > > >     <local name="prop3"/>
> > > > >     <echo>prop3 is "${prop3}"</echo>
> > > > >     <property name="prop3" value="is set"/>
> > > > >     <property name="prop3" value="is set
> > >
> > > again"/>
> > >
> > > > >     <echo>prop3 is "${prop3}"</echo>
> > > > >   </target>
> > > > >
> > > > > will generate the following:
> > > > > notset:
> > > > > prop3 is "${prop3}"
> > > > > prop3 is "is set"
> > > > >
> > > > > prop3 is still a local variable and will not
> be
> > >
> > > seen outside the
> > >
> > > > > target.
> > > > >
> > > > > The local properties are thread local so the
> > >
> > > following
> > >
> > > > works as expected:
> > > > >   <target name="parallel">
> > > > >     <local name="prop4"/>
> > > > >     <parallel>
> > > > >       <sequential>
> > > > >         <property name="prop4"
> value="thread1"/>
> > > > >         <echo>t1: prop4 is "${prop4}"</echo>
> > > > >       </sequential>
> > > > >       <sequential>
> > > > >         <property name="prop4"
> value="thread2"/>
> > > > >         <echo>t2: prop4 is "${prop4}"</echo>
> > > > >       </sequential>
> > > > >       <sequential>
> > > > >         <property name="prop4"
> value="thread3"/>
> > > > >         <echo>t3: prop4 is "${prop4}"</echo>
> > > > >       </sequential>
> > > > >     </parallel>
> > > > >   </target>
> > > > >
> > > > > parallel:
> 
=== message truncated ===


__________________________________
Do you Yahoo!?
The New Yahoo! Shopping - with improved product search
http://shopping.yahoo.com

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Mime
View raw message