Well, reintroducing the "force" attribute seems like a bad idea since it has already been deprecated (but thanks for asking); its resurrection would probably just cause too much confusion.
Your solution: <call target="foo" unless="target::has-executed('foo')/> (BTW, all the new expression evaluation and function support is awesome. With these new capabilities I can finally remove a bunch of custom C# script-functions in our NAnt build files. Though, the fact that we could do something as shown above is just too cool...) Anyway, back to your solution. This may work, but it all depends on how the "call" task handles dependencies; here's an example: <target name="A" depends="B, C"/> <target name="B" depends="D, F"/> <target name="C" depends="D, E"/> <target name="D"/> <target name="E" /> <target name="F" /> Let's say that task "A" is triggered (via a "call" task, or something equivalent like the proposed "depends" tasks). There are five possible ways things can occur (unfortunately): 1. Task "A" executes regardless if it executed before and dependencies are ignored. = A 2. Task "A" executes but only if it has not so far; dependencies are ignored. = (A) 3. Task "A" executes regardless if it executed before and all its dependencies are force to execute as well (even duplicates) = D, F, B, D, E, C, A 4. Task "A" executes regardless if it executed before as well as all its dependencies but duplicates are prevented from executing more then once. = D, F, B, E, C, A 5. Task "A" executed only if it has not executed before as well as its dependencies = (D), (F), (B), (D), (E), (C), (A) which is identical to (D), (F), (B), (E), (C), (A) by the virtue that a target is only ever executed once. * Note: Targets in parentheses only get executed if the have not executed already; targets listed without parentheses are always forced to execute. For our builds we need number 5 to work and the proposed "depends" task would do just that and hopefully with less confusion since its name implies this sort of thing. Now my understanding of the "call" task is that it would do 3, but it may do 4, not sure as the documentation is a little ambiguous here. So, I don't think your solution would work unless we had a very simple dependency tree which we don't. However, if you like the idea of the proposed "depends" task I will volunteer to do all the work that is needed (or that you want me to do). We use NAnt so much I feel obliged to contribute; we also have a goal to be able to use an unmodified version. With the latest release we are almost there; changes to the "exec" task (see top of thread) and an "options" attribute for the "csc" task are still needed. James. ------------------------------------------------------- This SF.net email is sponsored by: IBM Linux Tutorials. Become an expert in LINUX or just sharpen your skills. Sign up for IBM's Free Linux Tutorials. Learn everything from the bash shell to sys admin. Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click _______________________________________________ nant-developers mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/nant-developers