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]

Reply via email to