This is information that will hopefully clarify and give some insight
into how depends works in NAnt.

 

There is are a few posts out there on the net that talk about the
difference between <call target>  and  <target depends>.  What I find
that is missing are some subtle nuances when it comes to when to use
depends and when it actually has the effect you desire.

 

To review.  

<call target> will always exercise the Target.  

<target depends> will only call the targets listed in the depends if it
has not already been called.

 

The <target depends> statement is a little misleading though.  The more
accurate description is: will only call the taget(s) listed if the
calling target has not already called it through its depends.  

 

The below example has two starting targets.  call.me and let.me.  These
two are designed to call two targets and those two targets each need to
have some global target to be run only once.  it is to set properties
that they both use.  (code reduction).  The difference is call.me first
calls the child targets where the let.me uses depends to call the child
targets.  Each child target spec1 and spec2 use depends to call the
global target.  

 

 

<project>

  <target name="call.me">

    <echo message="call.me" />

    <call target="spec1" />

    <call target="spec2" />

  </target>

  <target name="let.me" depends="spec1, spec2">

    <echo message="let.me" />

  </target>

  

  <target name="global">

    <echo message="global" />

  </target>

  <target name="spec1" depends="global">

    <echo message="spec1" />

  </target>

  <target name="spec2" depends="global">

    <echo message="spec2" />

  </target>

</project>

 


When I exercise call.me I got the following output.  You will notice
that global was called twice even though I had depends listed for both
children.  This did not do what I wanted.

 

C:\temp\NAnt>nant -buildfile:test-depends.build call.me

NAnt 0.90 (Build 0.90.3780.0; release; 5/8/2010)

Copyright (C) 2001-2010 Gerry Shaw

http://nant.sourceforge.net

 

Buildfile: file:///C:/temp/NAnt/test-depends.build

Target framework: Microsoft .NET Framework 3.5

Target(s) specified: call.me

 

call.me:

     [echo] call.me

global:

     [echo] global

spec1:

     [echo] spec1

global:

     [echo] global

spec2:

     [echo] spec2

BUILD SUCCEEDED

Total time: 1.4 seconds.

 

 

When I call let.me I get the blow output.  I only get global called
once.  It is also the very first thing to be called even prior to the
let.me target.  

let.me depends on spec1 

spec1 depends on global

global does not depend on anything so it is exercised. 

The call returns to spec 1 

no more depends so it is exercised

the call returns to let.me

it still depends on spec2

spec2 checks to see if global has been called and it has already and
then this restriction is fulfilled

spec2 is exercised

the call returns to let.me 

no more depends

let.me is exercised.

 

C:\temp\NAnt>nant -buildfile:test-depends.build let.me

NAnt 0.90 (Build 0.90.3780.0; release; 5/8/2010)

Copyright (C) 2001-2010 Gerry Shaw

http://nant.sourceforge.net

 

Buildfile: file:///C:/temp/NAnt/test-depends.build

Target framework: Microsoft .NET Framework 3.5

Target(s) specified: let.me

 

global:

     [echo] global

spec1:

     [echo] spec1

spec2:

     [echo] spec2

let.me:

     [echo] let.me

BUILD SUCCEEDED

 

Total time: 1.2 seconds.

 

 

Hope you found this helpful.

 

Scott

 

Scott Pennington

Senior Software Engineer

Prosper Marketplace, Inc. 

111 Sutter Street, 22nd Floor

San Francisco CA 94104

www.prosper.com <http://www.prosper.com/> 

 

 
CONFIDENTIALITY STATEMENT: This email message, together with all attachments, 
is intended only for the individual or entity to which it is addressed and may 
contain legally privileged or confidential information. Any dissemination, 
distribution or copying of this communication by persons or entities other than 
the intended recipient, is strictly prohibited, and may be unlawful.  If you 
have received this communication in error please contact the sender immediately 
and delete the transmitted material and all copies from your system, or if 
received in hard copy format, return the material to us via the United States 
Postal Service. Thank you.

------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security
threats, fraudulent activity, and more. Splunk takes this data and makes
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2dcopy2
_______________________________________________
NAnt-users mailing list
NAnt-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nant-users

Reply via email to