git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@276588 13f79535-47bb-0310-9956-ffa450edef68master
@@ -37,6 +37,9 @@ Other changes: | |||||
which will allow nonexistent files specified via <filelist>s to | which will allow nonexistent files specified via <filelist>s to | ||||
be passed to the executable. Bugzilla Report 29585. | be passed to the executable. Bugzilla Report 29585. | ||||
* <fail> has a status attribute that can be used to pass an exit | |||||
status back to the command line. | |||||
Changes from Ant 1.6.1 to current Ant 1.6 CVS version | Changes from Ant 1.6.1 to current Ant 1.6 CVS version | ||||
===================================================== | ===================================================== | ||||
@@ -36,6 +36,13 @@ or character data nested into the element.</p> | |||||
exist in the current project</td> | exist in the current project</td> | ||||
<td align="center" valign="top">No</td> | <td align="center" valign="top">No</td> | ||||
</tr> | </tr> | ||||
<tr> | |||||
<td valign="top">status</td> | |||||
<td valign="top">Exit using the specified status code; | |||||
assuming the generated Exception is not caught, the | |||||
JVM will exit with this status. <em>Since Ant 1.7</em></td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
</table> | </table> | ||||
<h3>Parameters specified as nested elements</h3> | <h3>Parameters specified as nested elements</h3> | ||||
@@ -0,0 +1,56 @@ | |||||
/* | |||||
* Copyright 2004 The Apache Software Foundation | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
* | |||||
*/ | |||||
package org.apache.tools.ant; | |||||
/** | |||||
* BuildException + exit status. | |||||
* | |||||
* @since Ant 1.7 | |||||
*/ | |||||
public class ExitStatusException extends BuildException { | |||||
/** Status code */ | |||||
private int status; | |||||
/** | |||||
* Constructs an <CODE>ExitStatusException</CODE>. | |||||
* @param status the associated status code | |||||
*/ | |||||
public ExitStatusException(int status) { | |||||
super(); | |||||
this.status = status; | |||||
} | |||||
/** | |||||
* Constructs an exit exception. | |||||
* @param msg the associated message | |||||
* @param status the associated status code | |||||
*/ | |||||
public ExitStatusException(String msg, int status) { | |||||
super(msg); | |||||
this.status = status; | |||||
} | |||||
/** | |||||
* Get the status code | |||||
* | |||||
* @return <CODE>int</CODE> | |||||
*/ | |||||
public int getStatus() { | |||||
return status; | |||||
} | |||||
} |
@@ -184,8 +184,15 @@ public class Main implements AntMain { | |||||
// expect the worst | // expect the worst | ||||
int exitCode = 1; | int exitCode = 1; | ||||
try { | try { | ||||
runBuild(coreLoader); | |||||
exitCode = 0; | |||||
try { | |||||
runBuild(coreLoader); | |||||
exitCode = 0; | |||||
} catch (ExitStatusException ese) { | |||||
exitCode = ese.getStatus(); | |||||
if (exitCode > 0) { | |||||
throw ese; | |||||
} | |||||
} | |||||
} catch (BuildException be) { | } catch (BuildException be) { | ||||
if (err != System.err) { | if (err != System.err) { | ||||
printMessage(be); | printMessage(be); | ||||
@@ -19,6 +19,7 @@ package org.apache.tools.ant.taskdefs; | |||||
import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
import org.apache.tools.ant.ExitStatusException; | |||||
import org.apache.tools.ant.taskdefs.condition.Condition; | import org.apache.tools.ant.taskdefs.condition.Condition; | ||||
import org.apache.tools.ant.taskdefs.condition.ConditionBase; | import org.apache.tools.ant.taskdefs.condition.ConditionBase; | ||||
@@ -58,6 +59,7 @@ public class Exit extends Task { | |||||
private String message; | private String message; | ||||
private String ifCondition, unlessCondition; | private String ifCondition, unlessCondition; | ||||
private NestedCondition nestedCondition; | private NestedCondition nestedCondition; | ||||
private Integer status; | |||||
/** | /** | ||||
* A message giving further information on why the build exited. | * A message giving further information on why the build exited. | ||||
@@ -85,6 +87,14 @@ public class Exit extends Task { | |||||
unlessCondition = c; | unlessCondition = c; | ||||
} | } | ||||
/** | |||||
* Set the status code to associate with the thrown Exception. | |||||
* @param i the <CODE>int</CODE> status | |||||
*/ | |||||
public void setStatus(int i) { | |||||
status = new Integer(i); | |||||
} | |||||
/** | /** | ||||
* Throw a <CODE>BuildException</CODE> to exit (fail) the build. | * Throw a <CODE>BuildException</CODE> to exit (fail) the build. | ||||
* If specified, evaluate conditions: | * If specified, evaluate conditions: | ||||
@@ -126,7 +136,8 @@ public class Exit extends Task { | |||||
} | } | ||||
} | } | ||||
} | } | ||||
throw new BuildException(text); | |||||
throw ((status == null) ? new BuildException(text) | |||||
: new ExitStatusException(text, status.intValue())); | |||||
} | } | ||||
} | } | ||||