diff --git a/src/main/org/apache/tools/ant/taskdefs/ExecTask.java b/src/main/org/apache/tools/ant/taskdefs/ExecTask.java index d949de471..c720f1d99 100644 --- a/src/main/org/apache/tools/ant/taskdefs/ExecTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/ExecTask.java @@ -59,6 +59,7 @@ import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Environment; +import org.apache.tools.ant.util.StringUtils; import java.io.File; import java.io.FileOutputStream; @@ -81,8 +82,6 @@ import java.io.FileNotFoundException; */ public class ExecTask extends Task { - private static String lSep = System.getProperty("line.separator"); - private String os; private File out; private File dir; @@ -98,16 +97,32 @@ public class ExecTask extends Task { private boolean failIfExecFails=true; private boolean append = false; - /** Controls whether the VM (1.3 and above) is used to execute the command */ + /** + * Controls whether the VM (1.3 and above) is used to execute the + * command + */ private boolean vmLauncher = true; /** * Timeout in milliseconds after which the process will be killed. + * + * @since Ant 1.5 */ public void setTimeout(Long value) { timeout = value; } + /** + * Timeout in milliseconds after which the process will be killed. + */ + public void setTimeout(Integer value) { + if (value == null) { + timeout = null; + } else { + setTimeout(new Long(value.intValue())); + } + } + /** * The command to execute. */ @@ -123,7 +138,8 @@ public class ExecTask extends Task { } /** - * Only execute the process if os.name is included in this string. + * Only execute the process if os.name is included in + * this string. */ public void setOs(String os) { this.os = os; @@ -185,7 +201,8 @@ public class ExecTask extends Task { /** * fill a property in with a result. * when no property is defined: failure to execute - * @since 1.5 + * + * @since Ant 1.5 */ public void setResultProperty(String resultProperty) { this.resultProperty=resultProperty; @@ -222,9 +239,14 @@ public class ExecTask extends Task { * Do the work. */ public void execute() throws BuildException { + File savedDir = dir; // possibly altered in prepareExec checkConfiguration(); if (isValidOs()) { - runExec(prepareExec()); + try { + runExec(prepareExec()); + } finally { + dir = savedDir; + } } } @@ -272,13 +294,13 @@ public class ExecTask extends Task { protected Execute prepareExec() throws BuildException { // default directory to the project's base directory if (dir == null) { - dir = project.getBaseDir(); + dir = project.getBaseDir(); } // show the command log(cmdl.toString(), Project.MSG_VERBOSE); Execute exe = new Execute(createHandler(), createWatchdog()); - exe.setAntRun(project); + exe.setAntRun(getProject()); exe.setWorkingDirectory(dir); exe.setVMLauncher(vmLauncher); String[] environment = env.getVariables(); @@ -294,7 +316,8 @@ public class ExecTask extends Task { } /** - * A Utility method for this classes and subclasses to run an Execute instance (an external command). + * A Utility method for this classes and subclasses to run an + * Execute instance (an external command). */ protected final void runExecute(Execute exe) throws IOException { int err = -1; // assume the worst @@ -307,7 +330,8 @@ public class ExecTask extends Task { maybeSetResultPropertyValue(err); if (err != 0) { if (failOnError) { - throw new BuildException(taskType + " returned: "+err, location); + throw new BuildException(taskType + " returned: "+err, + location); } else { log("Result: " + err, Project.MSG_ERR); } @@ -319,7 +343,7 @@ public class ExecTask extends Task { StringBuffer val = new StringBuffer(); while ((line = in.readLine()) != null) { if (val.length() != 0) { - val.append(lSep); + val.append(StringUtils.LINE_SEP); } val.append(line); } @@ -328,7 +352,8 @@ public class ExecTask extends Task { } /** - * Run the command using the given Execute instance. This may be overidden by subclasses + * Run the command using the given Execute instance. This may be + * overidden by subclasses */ protected void runExec(Execute exe) throws BuildException { exe.setCommandline(cmdl.getCommandline()); @@ -336,7 +361,8 @@ public class ExecTask extends Task { runExecute(exe); } catch (IOException e) { if (failIfExecFails) { - throw new BuildException("Execute failed: "+e.toString(),e, location); + throw new BuildException("Execute failed: "+e.toString(), e, + location); } else { log("Execute failed: "+e.toString(), Project.MSG_ERR); } @@ -356,9 +382,11 @@ public class ExecTask extends Task { log("Output redirected to " + out, Project.MSG_VERBOSE); return new PumpStreamHandler(fos); } catch (FileNotFoundException fne) { - throw new BuildException("Cannot write to "+out, fne, location); + throw new BuildException("Cannot write to "+out, fne, + location); } catch (IOException ioe) { - throw new BuildException("Cannot write to "+out, ioe, location); + throw new BuildException("Cannot write to "+out, ioe, + location); } } else if (outputprop != null) { baos = new ByteArrayOutputStream(); @@ -375,7 +403,7 @@ public class ExecTask extends Task { */ protected ExecuteWatchdog createWatchdog() throws BuildException { if (timeout == null) { - return null; + return null; } return new ExecuteWatchdog(timeout.longValue()); } @@ -386,10 +414,10 @@ public class ExecTask extends Task { protected void logFlush() { try { if (fos != null) { - fos.close(); + fos.close(); } if (baos != null) { - baos.close(); + baos.close(); } } catch (IOException io) {} } diff --git a/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java b/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java index 4156a7b05..6c78183ac 100644 --- a/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java +++ b/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java @@ -144,8 +144,8 @@ public class ExecuteOn extends ExecTask { */ public Commandline.Marker createSrcfile() { if (srcFilePos != null) { - throw new BuildException(taskType + " doesn\'t support multiple srcfile elements.", - location); + throw new BuildException(taskType + " doesn\'t support multiple " + + "srcfile elements.", location); } srcFilePos = cmdl.createMarker(); return srcFilePos; @@ -157,8 +157,8 @@ public class ExecuteOn extends ExecTask { */ public Commandline.Marker createTargetfile() { if (targetFilePos != null) { - throw new BuildException(taskType + " doesn\'t support multiple targetfile elements.", - location); + throw new BuildException(taskType + " doesn\'t support multiple " + + "targetfile elements.", location); } targetFilePos = cmdl.createMarker(); srcIsFirst = (srcFilePos != null); @@ -193,7 +193,7 @@ public class ExecuteOn extends ExecTask { if (mapperElement == null) { throw new BuildException("no mapper specified", location); } - if (mapperElement == null) { + if (destDir == null) { throw new BuildException("no dest attribute specified", location); }