Thank you, Steve! The idea was to "unload" the heavy construct such as: <target name="selfCheck"> ... <if> <equals arg1="${doNotHaveCheckSums}" arg2="true" /> <then> <for param="fileToWorkOn"> <path> <fileset refid="extentionLibs" /> </path> <sequential> <checksum file="@{fileToWorkOn}" algorithm="MD5" /> <echo> Created checksum file for @{fileToWorkOn}. </echo>
</sequential> </for> </then> <else> <for param="fileToWorkOn"> <path> <fileset refid="extentionLibs" /> </path> <sequential> <checksum file="@{fileToWorkOn}" verifyProperty="doesCheckSumMatch" /> <fail message="Checksum verification failed for @{fileToWorkOn}."> <condition> <equals arg1="${doesCheckSumMatch}" arg2="false" /> </condition> </fail> </sequential> </for> </else> </if> <echo> "Self check done." </echo> </target> with: <target name="selfCheck"> ... <if> <equals arg1="${doNotHaveCheckSums}" arg2="true" /> <then> <foreach target="computeCheckSum" param="fileToWorkOn" inheritall="true"> <path> <fileset refid="extentionLibs" /> </path> </foreach> </then> <else> <foreach target="verifyCheckSum" param="fileToWorkOn" inheritall="true"> <path> <fileset refid="extentionLibs" /> </path> </foreach> </else> </if> <echo> "Self check done." </echo> </target> <target name="computeCheckSum" if="doNotHaveCheckSums"> <checksum file="${fileToWorkOn}" algorithm="MD5" /> <echo> Created checksum file for ${fileToWorkOn}. </echo> </target> <target name="verifyCheckSum" unless="doNotHaveCheckSums"> <checksum file="${fileToWorkOn}" verifyProperty="doesCheckSumMatch" /> <fail message="Checksum verification failed for ${fileToWorkOn}."> <condition> <equals arg1="${doesCheckSumMatch}" arg2="false" /> </condition> </fail> </target> In my mind the "if-then-else" block looks cleanly this way. On top, target contra to macrodef can be executed conditionally (if/unless) You are correct pointing out that if a target can't be invoked all by itself (answer to your Q: "do you ever execute ant using that as a target or is it a utility type thing?" is "No") it should be a target. Per Dominique's suggestion I replaced "foreach" with "for" thus loosing the ability to call a target within loops body. If I can figure out how to put macrodefs in place of a target, I might try to "unload" the body of the loop. Do you think it's worse the effort, Steve? PS.: Could you, please, elaborate on "In Ant 1.7, many support resources, which provides you even more ways to source data."? -----Original Message----- From: Steve Loughran [mailto:[EMAIL PROTECTED] Sent: Wednesday, January 17, 2007 06:02 To: Ant Users List Subject: Re: Invoking a target (Ant 1.7) in a loop (Ant-Contrib) Rebo, Alex wrote: > Hello! > > In attempt to compute checksums for all files in a directory I wrote this: > > <fileset id="myLibs" dir="${extention}"> > <include name="*.jar"/> > </fileset> > > ..... > > <target name="thisTargetName"> > <foreach target="computeCheckSum" param="fileToWorkOn" > inheritall="true"> > <path> > <fileset refid="myLibs" /> > </path> > </foreach> > </target> > > .... > > <target name="computeCheckSum"> > <checksum file="${fileToWorkOn}" algorithm="MD5" /> > <echo> > Created checksum file for ${fileToWorkOn}. > </echo> > </target> I want to ask an even sillier question. why not just hand the entire fileset to <checksum>? <checksum algorithm="MD5" > <fileset refid="myLibs" /> </checksum> No macros, no iteration; ant does the bulk work with depdnency logic. See example 7 and 8 in the checksum page in teh manual. Remember: most Ant tasks are designed to work in bulk, with filesets or paths as params. In Ant 1.7, many support resources, which provides you even more ways to source data. -Steve --------------------------------------------------------------------- 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]