ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Steve Cohen" <Ste...@ignitesports.com>
Subject FW: How to conditionally add params to an <antcall>
Date Fri, 08 Mar 2002 12:56:31 GMT



-----Original Message-----
From: Steve Cohen
Sent: Fri 3/8/2002 6:54 AM
To: Ant Users List; Ant Users List; ant-devel@jakarta.apache.org
Cc: 
Subject: RE: How to conditionally add params to an <antcall>

(sending this on to devel as well, since it is becoming a devel-like issue).

Thanks, Diane, you're the best.  I guess I'll implement something on these lines, since I
do use 1.5.

However, unfortunately, I oversimplified the problem.  My original problem was hard enough,
but this is worse.  What I'd really like to do is conditionally specify parameters within
the call to a task, not an antcall.


Thus:



  <stcheckout URL="STARTEAM:49201/Aproject/AView"
            username="auser"
            password="secret"
            rootlocalfolder="C:\dev\buildtest\co"
            forced="true" 
     <if isset lbl>
     label = "${lbl}"  
            </if>
    
  />

Well, that ain't gonna happen.  You can't nest conditionals within attribute blocks.  As the
author of the stcheckout task, I suppose I could rewrite it to accept nested conditional elements,
and I may yet do that.  

But here's a more ambitious idea, bacause I think this concept might be more generally useful:
 what if Ant had a way to specify that if the value of a task attribute were undefined, ANT
WOULDN'T PROCESS THE ATTRIBUTE, instead it would strip the attribute out of the task call.

So this then becomes something like this:

  <stcheckout URL="STARTEAM:49201/Aproject/AView"
            username="auser"
            password="secret"
            rootlocalfolder="C:\dev\buildtest\co"
            forced="true" 
     label = "$${lbl}"  
 
  />
meaning

"If ${lbl} is not defined no label attribute gets passed to the task."

I think this might offer vast potential to write more flexible scripts without having to copy
similar looking code into multiple if-then-else blocks.  Imagine the combinatorial mess if
two or three attributes in a task were needed to be made conditionally.  There are many tasks
that allow a large number of optional attributes.  This would make using them easier.

Steve

-----Original Message-----
From: Diane Holt [mailto:holtdl@yahoo.com]
Sent: Thu 3/7/2002 7:55 PM
To: Ant Users List
Cc: 
Subject: Re: How to conditionally add params to an <antcall>

--- "Tenchi-kun (Elliott)" <tenchi@cisco.com> wrote:
>   <target name="Target1.A" if="kung">
>     <antcall target="Target1">
>       <param name="foo" value="${foo}" />
>       <param name="kung" value="fu" />
>     </antcall>
>   </target>
>   <target name="Target1.B" unless="kung">
>     <antcall target="Target1">
>     <param name="foo" value="${foo}" />
>     </antcall>
>   </target>

The drawback to doing it this way is that there's no real connection
between the two targets (other than that they both test on the same
property). In other words, you'd need to call them both independently.

If you want to go with two targets, it'd probably be better to have one
target that depends on the alternative, which, if it runs, sets a property
that the dependent target tests on:
  <target name="callTarget1" depends="callT1WithKung"
          unless="antcall.done">
    <antcall target="target1">
      <param name="foo" value = "bar"/>
    </antcall>
  </target>
  <target name="callT1WithKung" if="keyProp">
    <antcall target="target1">
      <param name="foo" value = "bar"/>
      <param name="kung" value = "fu"/>
    </antcall>
    <property name="antcall.done" value="true"/>
  </target>

Alternatively, you could go with the ant-contrib <if> task:
  <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
  <target name="callTarget1">
    <if>
      <isset property="keyProp"/>
      <then>
        <antcall target="target1">
          <param name="foo" value = "bar"/>
          <param name="kung" value = "fu"/>
        </antcall>
      </then>
      <else>
        <antcall target="target1">
          <param name="foo" value = "bar"/>
        </antcall>
      </else>
    </if>
  </target>

Note: condition <isset> is only available with 1.5alpha; to use this
approach with 1.4.1 use <equals> with 'arg2="$$keyProp"' (and reverse the
logic).

I've just picked up all the ant-contrib tasks today and put them in a jar,
so if you'd like them, let me know.

Diane

=====
(holtdl@yahoo.com)



__________________________________________________
Do You Yahoo!?
Try FREE Yahoo! Mail - the world's greatest free email!
http://mail.yahoo.com/

--
To unsubscribe, e-mail:   <mailto:ant-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-user-help@jakarta.apache.org>






Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message