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]