diff --git a/WHATSNEW b/WHATSNEW index 5f68498c0..0e24f311b 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -186,6 +186,8 @@ Other changes: * "rawblobs" attribute added to SQL task. +* Add new retry task container. + Changes from Ant 1.6.5 to Ant 1.7.0 =================================== diff --git a/src/main/org/apache/tools/ant/taskdefs/Retry.java b/src/main/org/apache/tools/ant/taskdefs/Retry.java index bf297a42b..93ee85e47 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Retry.java +++ b/src/main/org/apache/tools/ant/taskdefs/Retry.java @@ -24,6 +24,7 @@ import org.apache.tools.ant.TaskContainer; /** * Retries the nested task a set number of times + * @since Ant 1.7.1 */ public class Retry extends Task implements TaskContainer { @@ -31,19 +32,23 @@ public class Retry extends Task implements TaskContainer { * task to execute n times */ private Task nestedTask; - + /** * set retryCount to 1 by default */ private int retryCount = 1; - + /** * set the task */ - public void addTask(Task t) { + public synchronized void addTask(Task t) { + if (nestedTask != null) { + throw new BuildException("The retry task container accepts a single nested task" + + " (which may be a sequential task container)"); + } nestedTask = t; } - + /** * set the number of times to retry the task * @param n @@ -51,32 +56,30 @@ public class Retry extends Task implements TaskContainer { public void setRetryCount(int n) { retryCount = n; } - + /** * perform the work */ public void execute() throws BuildException { StringBuffer errorMessages = new StringBuffer(); - for(int i=0; i<=retryCount; i++) { + String br = getProject().getProperty("line.separator"); + for (int i = 0; i <= retryCount; i++) { try { nestedTask.perform(); break; } catch (Exception e) { - if (i= retryCount) { StringBuffer exceptionMessage = new StringBuffer(); exceptionMessage.append("Task [").append(nestedTask.getTaskName()); exceptionMessage.append("] failed after [").append(retryCount); - exceptionMessage.append("] attempts, giving up."); - exceptionMessage.append(getProject().getProperty("line.separator")); - exceptionMessage.append("Error messages:").append(getProject().getProperty("line.separator")); + exceptionMessage.append("] attempts; giving up.").append(br); + exceptionMessage.append("Error messages:").append(br); exceptionMessage.append(errorMessages); throw new BuildException(exceptionMessage.toString(), getLocation()); } + log("Attempt [" + i + "]: error occurred; retrying...", e, Project.MSG_INFO); + errorMessages.append(br); } } } diff --git a/src/tests/antunit/taskdefs/retry-test.xml b/src/tests/antunit/taskdefs/retry-test.xml index ee52aea9e..333faf2bd 100644 --- a/src/tests/antunit/taskdefs/retry-test.xml +++ b/src/tests/antunit/taskdefs/retry-test.xml @@ -7,12 +7,12 @@ - + - + @@ -21,7 +21,7 @@ - +