diff --git a/docs/manual/CoreTasks/sleep.html b/docs/manual/CoreTasks/sleep.html
new file mode 100644
index 000000000..0835696a4
--- /dev/null
+++ b/docs/manual/CoreTasks/sleep.html
@@ -0,0 +1,71 @@
+
+
+
+Sleep
+
+
+
+
+
+Description
+ A task for sleeping a short period of time, useful when a build or deployment
+ process requires an interval between tasks.
+
+Parameters
+
+
+ Attribute |
+ Description |
+ Required |
+
+
+ hours |
+ hours to to add to the sleep time |
+ No |
+
+
+ minutes |
+ minutes to add to the sleep time |
+ No |
+
+
+ seconds |
+ seconds to add to the sleep time |
+ No |
+
+
+ milliseconds |
+ milliseconds to add to the sleep time |
+ No |
+
+
+ failonerror |
+ flag controlling whether to break the build on an error.
+ |
+ No |
+
+
+The sleep time is the sum of specified values, hours, minutes seconds and milliseconds.
+ A negative value can be supplied to any of them provided the total sleep time
+ is positive
+Note that sleep times are always hints to be interpred by the OS how it feels
+ - small times may either be ignored or rounded up to a minimum timeslice. Note
+ also that the system clocks often have a fairly low granularity too, which complicates
+ measuring how long a sleep actually took.
+Examples
+ <sleep milliseconds="10"/>
+Sleep for about 10 mS.
+ <sleep seconds="2"/>
+Sleep for about 2 seconds.
+ <sleep minutes="-59" seconds="-58"/>
+Sleep for -one hour less 59:58, or two seconds again
+ <sleep />
+Sleep for no time at all. This may yield the CPU time to another thread or process.
+
+
+Copyright © 2000,2001 Apache Software Foundation. All rights
+Reserved.
+
+
+
+
diff --git a/src/etc/testcases/taskdefs/sleep.xml b/src/etc/testcases/taskdefs/sleep.xml
new file mode 100644
index 000000000..465b39862
--- /dev/null
+++ b/src/etc/testcases/taskdefs/sleep.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/Sleep.java b/src/main/org/apache/tools/ant/taskdefs/Sleep.java
new file mode 100644
index 000000000..94de42758
--- /dev/null
+++ b/src/main/org/apache/tools/ant/taskdefs/Sleep.java
@@ -0,0 +1,215 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if
+ * any, must include the following acknowlegement:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowlegement may appear in the software itself,
+ * if and wherever such third-party acknowlegements normally appear.
+ *
+ * 4. The names "The Jakarta Project", "Ant", and "Apache Software
+ * Foundation" must not be used to endorse or promote products derived
+ * from this software without prior written permission. For written
+ * permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ * nor may "Apache" appear in their names without prior written
+ * permission of the Apache Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+
+package org.apache.tools.ant.taskdefs;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.BuildException;
+
+/**
+ * A task to sleep for a period of time
+ *
+ * @author steve_l@iseran.com steve loughran
+ * @created 01 May 2001
+ */
+
+public class Sleep extends Task {
+ /**
+ * failure flag
+ */
+ private boolean failOnError = true;
+
+ /**
+ * Description of the Field
+ */
+ private int seconds = 0;
+ /**
+ * Description of the Field
+ */
+ private int hours = 0;
+ /**
+ * Description of the Field
+ */
+ private int minutes = 0;
+ /**
+ * Description of the Field
+ */
+ private int milliseconds = 0;
+
+
+
+ /**
+ * Creates new instance
+ */
+ public Sleep() {
+ }
+
+
+ /**
+ * Sets the Seconds attribute of the Sleep object
+ *
+ * @param seconds The new Seconds value
+ */
+ public void setSeconds(int seconds) {
+ this.seconds = seconds;
+ }
+
+
+ /**
+ * Sets the Hours attribute of the Sleep object
+ *
+ * @param hours The new Hours value
+ */
+ public void setHours(int hours) {
+ this.hours = hours;
+ }
+
+
+ /**
+ * Sets the Minutes attribute of the Sleep object
+ *
+ * @param minutes The new Minutes value
+ */
+ public void setMinutes(int minutes) {
+ this.minutes = minutes;
+ }
+
+
+ /**
+ * Sets the Milliseconds attribute of the Sleep object
+ *
+ * @param milliseconds The new Milliseconds value
+ */
+ public void setMilliseconds(int milliseconds) {
+ this.milliseconds = milliseconds;
+ }
+
+
+ /**
+ * sleep for a period of time
+ *
+ * @param millis time to sleep
+ */
+ public void doSleep(long millis) {
+ try {
+ Thread.currentThread().sleep(millis);
+ }
+ catch (InterruptedException ie) {
+ }
+ }
+
+
+ /**
+ * Sets the FailOnError attribute of the MimeMail object
+ *
+ * @param failOnError The new FailOnError value
+ */
+ public void setFailOnError(boolean failOnError) {
+ this.failOnError = failOnError;
+ }
+
+
+ /**
+ * return time to sleep
+ *
+ * @return sleep time. if below 0 then there is an error
+ */
+
+ private long getSleepTime() {
+ return ((((long) hours * 60) + minutes) * 60 + seconds) * 1000 + milliseconds;
+ }
+
+
+ /**
+ * verify parameters
+ *
+ * @throws BuildException if something is invalid
+ */
+ public void validate() {
+ long sleepTime = getSleepTime();
+ if (getSleepTime() < 0) {
+ throw new BuildException("Negative sleep periods are not supported");
+ }
+ }
+
+
+ /**
+ * Executes this build task. throws org.apache.tools.ant.BuildException
+ * if there is an error during task execution.
+ *
+ * @exception BuildException Description of Exception
+ */
+ public void execute()
+ throws BuildException {
+ try {
+ validate();
+ long sleepTime=getSleepTime();
+ log("sleeping for "+sleepTime+" milliseconds",
+ Project.MSG_VERBOSE);
+ doSleep(sleepTime);
+ }
+ catch (Exception e) {
+ if (failOnError) {
+ throw new BuildException(e);
+ }
+ else {
+ String text = e.toString();
+ log(text, Project.MSG_ERR);
+ }
+ }
+ }
+
+}
+
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/SleepTest.java b/src/testcases/org/apache/tools/ant/taskdefs/SleepTest.java
new file mode 100644
index 000000000..192e86beb
--- /dev/null
+++ b/src/testcases/org/apache/tools/ant/taskdefs/SleepTest.java
@@ -0,0 +1,146 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if
+ * any, must include the following acknowlegement:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowlegement may appear in the software itself,
+ * if and wherever such third-party acknowlegements normally appear.
+ *
+ * 4. The names "The Jakarta Project", "Ant", and "Apache Software
+ * Foundation" must not be used to endorse or promote products derived
+ * from this software without prior written permission. For written
+ * permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ * nor may "Apache" appear in their names without prior written
+ * permission of the Apache Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+
+package org.apache.tools.ant.taskdefs;
+
+/**
+ * @author steve_l@iseran.com steve loughran
+ * @created 01 May 2001
+ */
+public class SleepTest extends TaskdefsTest {
+
+
+ private final static String TASKDEFS_DIR = "src/etc/testcases/taskdefs/";
+ private final static boolean TRACE=false;
+
+ public SleepTest(String name) {
+ super(name);
+ }
+
+ public void setUp() {
+ configureProject(TASKDEFS_DIR + "sleep.xml");
+ }
+
+ public void test1() {
+ Timer timer=new Timer();
+ executeTarget("test1");
+ timer.stop();
+ if(TRACE) System.out.println(" test1 elapsed time="+timer.time());
+ assert(timer.time()>=0);
+ }
+
+ public void test2() {
+ Timer timer=new Timer();
+ executeTarget("test2");
+ timer.stop();
+ if(TRACE) System.out.println(" test2 elapsed time="+timer.time());
+ assert(timer.time()>=0);
+ }
+
+ public void test3() {
+ Timer timer=new Timer();
+ executeTarget("test3");
+ timer.stop();
+ if(TRACE) System.out.println(" test3 elapsed time="+timer.time());
+ assert(timer.time()>=2000);
+ }
+
+ public void test4() {
+ Timer timer=new Timer();
+ executeTarget("test3");
+ timer.stop();
+ if(TRACE) System.out.println(" test4 elapsed time="+timer.time());
+ assert(timer.time()>=2000 && timer.time()<60000);
+ }
+
+ public void test5() {
+ expectBuildException("test5",
+ "Negative sleep periods are not supported");
+ }
+
+ public void test6() {
+ Timer timer=new Timer();
+ executeTarget("test6");
+ timer.stop();
+ if(TRACE) System.out.println(" test6 elapsed time="+timer.time());
+ assert(timer.time()<2000);
+ }
+
+
+ /**
+ * inner timer class
+ */
+ private static class Timer {
+ long start=0;
+ long stop=0;
+
+ public Timer() {
+ start();
+ }
+
+ public void start() {
+ start=System.currentTimeMillis();
+ }
+
+ public void stop() {
+ stop=System.currentTimeMillis();
+ }
+
+ public long time() {
+ return stop-start;
+ }
+ }
+
+}
+