From: Scott H. <sk...@us...> - 2003-12-08 20:18:26
|
Update of /cvsroot/nant/nant/src/NAnt.Core In directory sc8-pr-cvs1:/tmp/cvs-serv20394/src/NAnt.Core Modified Files: Project.cs Target.cs Log Message: Fixed command line target arguments so they don't execute already executed dependencies. This also affects the behavior of the <nant> task to work the same way. See email for more details. Index: Project.cs =================================================================== RCS file: /cvsroot/nant/nant/src/NAnt.Core/Project.cs,v retrieving revision 1.59 retrieving revision 1.60 diff -C2 -d -r1.59 -r1.60 *** Project.cs 30 Nov 2003 08:39:29 -0000 1.59 --- Project.cs 8 Dec 2003 20:18:20 -0000 1.60 *************** *** 731,735 **** } else { foreach (string targetName in BuildTargets) { ! Execute(targetName); } } --- 731,736 ---- } else { foreach (string targetName in BuildTargets) { ! //do not force dependencies of build targets. ! Execute(targetName, false); } } *************** *** 744,747 **** --- 745,760 ---- /// </remarks> public void Execute(string targetName) { + Execute(targetName, true); + } + + /// <summary> + /// Executes a specific target. + /// </summary> + /// <param name="targetName">The name of the target to execute.</param> + /// <param name="forceDependencies">Whether dependencies should be forced to execute</param> + /// <remarks> + /// Global tasks are not executed. + /// </remarks> + public void Execute(string targetName, bool forceDependencies) { // Sort the dependency tree, and run everything from the // beginning until we hit our targetName. *************** *** 755,762 **** do { currentTarget = (Target) sortedTargets[currentIndex++]; ! currentTarget.Execute(); } while (!currentTarget.Name.Equals(targetName)); } - /// <summary> /// Executes the default target and wraps in error handling and time --- 768,777 ---- do { currentTarget = (Target) sortedTargets[currentIndex++]; ! //only execute targets that have not been executed already, if we are not forcing. ! if(forceDependencies || !currentTarget.Executed) { ! currentTarget.Execute(); ! } } while (!currentTarget.Name.Equals(targetName)); } /// <summary> /// Executes the default target and wraps in error handling and time Index: Target.cs =================================================================== RCS file: /cvsroot/nant/nant/src/NAnt.Core/Target.cs,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** Target.cs 20 Oct 2003 02:26:42 -0000 1.19 --- Target.cs 8 Dec 2003 20:18:21 -0000 1.20 *************** *** 39,42 **** --- 39,43 ---- private string _unlessCondition = null; private StringCollection _dependencies = new StringCollection(); + private bool _executed = false; #endregion Private Instance Fields *************** *** 55,58 **** --- 56,68 ---- /// <summary> + /// This indicates whether the target has already executed. + /// </summary> + public bool Executed { + get { + return _executed; + } + } + + /// <summary> /// The name of the target. /// </summary> *************** *** 222,225 **** --- 232,236 ---- } } finally { + _executed = true; Project.OnTargetFinished(this, new BuildEventArgs(this)); } |