Share

NAntContrib

Tracker: Feature Requests

5 DoWhile task - ID: 2795672
Last Update: Tracker Item Submitted ( mikeratzlaff )

Hi, I'm not really a coder, but I was able to hack something together and
figured that others might find it useful, so I thought I'd post it here.
If someone wants to add it to a dll or something to make it an official
task item, that would be great. I don't currently have the skills to do
so.

Here's the code:
<script language="C#">
<code>
<![CDATA[
[TaskName("dowhile")]
public class DoWhileTask : TaskContainer
{
#region Private Instance Fields

private string _booleanproperty;

#endregion Private Instance Fields

#region Public Instance Properties

[TaskAttribute("booleanproperty", Required=true)]
public string BooleanProperty
{
get { return _booleanproperty; }
set { _booleanproperty = value; }
}

#endregion Public Instance Properties

#region Protected Instance Properties

protected virtual bool BooleanTrue
{
get
{
bool ret = true;

if (BooleanProperty != null)
{
ret = Project.ExpandProperties(Project.Properties[BooleanProperty],
Location).ToUpper() == "TRUE";
}

return ret;
}
}

#endregion Protected Instance Properties

#region Override implementation of TaskContainer

protected override void ExecuteTask()
{
if (!Project.Properties.Contains(BooleanProperty))
{
Log(Level.Error, "Property '" + BooleanProperty + "' does not
exist.");
throw new BuildException("Property '" + BooleanProperty + "' does not
exist.");
}
while (BooleanTrue)
{
base.ExecuteTask();
}
}

#endregion Override implementation of TaskContainer

}
]]>
</code>
</script>
Feel free to improve upon it or whatever - like I said I'm not a coder and
don't really know what I'm doing, just hacked this together using source
from the if and foreach tasks as a guide.

It's function is very simple. You give it the name of a property, and it
will repeat the embedded tasks until that property evaluates to false. For
example:
<property name="DoWhile" value="True" />
<dowhile booleanproperty="DoWhile">
[put some tasks here]
<property name="DoWhile" value="False" if="[processing tasks are
complete]" />
</dowhile>

Here's a working copy-and-paste example:
<property name="i" value="0" />
<property name="while" value="${5 >= int::parse(i)}" />
<dowhile booleanproperty="while" if="${while}" >
<echo>${i}</echo>
<property name="i" value="${int::parse(i) + 1}" />
<property name="while" value="${5 >= int::parse(i)}" />
</dowhile>

ENJOY!


Mike Ratzlaff ( mikeratzlaff ) - 2009-05-23 01:35

5

Open

None

Nobody/Anonymous

None

None

Public


Comments

No follow-up comments have been posted.

Attached File

No Files Currently Attached

Change

No changes have been made to this artifact.