antoine     2003/04/22 15:12:53

  Modified:    src/main/org/apache/tools/ant/taskdefs Java.java
               docs/manual/CoreTasks java.html
               src/etc/testcases/taskdefs java.xml
               src/testcases/org/apache/tools/ant/taskdefs JavaTest.java
  Log:
  allow to set a property with the exit code of java bugrep 19099 submitted by 
Donal Quinlan (donal at savvion dot com)
  
  Revision  Changes    Path
  1.58      +24 -0     ant/src/main/org/apache/tools/ant/taskdefs/Java.java
  
  Index: Java.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Java.java,v
  retrieving revision 1.57
  retrieving revision 1.58
  diff -u -r1.57 -r1.58
  --- Java.java 7 Mar 2003 11:23:01 -0000       1.57
  +++ Java.java 22 Apr 2003 22:12:53 -0000      1.58
  @@ -75,6 +75,7 @@
    * @author Stefano Mazzocchi 
    *         <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a>
    * @author Stefan Bodewig
  + * @author <a href="mailto:[EMAIL PROTECTED]">Donal Quinlan</a>
    *
    * @since Ant 1.1
    *
  @@ -91,6 +92,7 @@
       private boolean append = false;
       private Long timeout = null;
       private Redirector redirector = new Redirector(this);
  +    private String resultProperty;
       /**
        * Do the execution.
        */
  @@ -106,6 +108,7 @@
                       log("Java Result: " + err, Project.MSG_ERR);
                   }
               }
  +            maybeSetResultPropertyValue(err);
           } finally {
               dir = savedDir;
           }
  @@ -241,6 +244,27 @@
           return cmdl.createArgument();
       }
   
  +    /**
  +     * The name of a property in which the return code of the
  +     * command should be stored. Only of interest if failonerror=false.
  +     *
  +     * @since Ant 1.6
  +     */
  +    public void setResultProperty(String resultProperty) {
  +        this.resultProperty = resultProperty;
  +    }
  +    
  +    /**
  +     * helper method to set result property to the 
  +     * passed in value if appropriate
  +     */
  +    protected void maybeSetResultPropertyValue(int result) {
  +        String res = Integer.toString(result);
  +        if (resultProperty != null) {
  +            project.setNewProperty(resultProperty, res);
  +        }
  +    }
  +    
       /**
        * If true, execute in a new VM.
        */
  
  
  
  1.17      +18 -1     ant/docs/manual/CoreTasks/java.html
  
  Index: java.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/CoreTasks/java.html,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- java.html 9 Feb 2003 22:10:57 -0000       1.16
  +++ java.html 22 Apr 2003 22:12:53 -0000      1.17
  @@ -84,6 +84,13 @@
       <td align="center" valign="top">No</td>
     </tr>
     <tr>
  +    <td valign="top">resultproperty</td>
  +    <td valign="top">The name of a property in which the return code of the 
  +      command should be stored. Only of interest if failonerror=false
  +      and if fork=true.</td>
  +    <td align="center" valign="top">No</td>
  +  </tr>
  +  <tr>
       <td valign="top">dir</td>
       <td valign="top">The directory to invoke the VM in.  (ignored if
         fork is disabled)</td>
  @@ -179,6 +186,16 @@
   forked VM via nested <i>env</i> elements. See the description in the
   section about <a href="exec.html#env">exec</a></p>
   <p>Settings will be ignored if fork is disabled.</p>
  + 
  +<h3>Errors and return codes</h3>
  +By default the return code of a &lt;java&gt; is ignored. Alternatively, you 
can set <code>resultproperty</code> to the name
  +of a property and have it assigned to the result code (barring immutability,
  +of course).
  +When you set <code>failonerror="true"</code>, the only possible value for 
<code>resultproperty</code> is 0. Any non zero response is treated as an
  +error and would mean the build exits.
  +<p> Similarly, if <code>failonerror="false"</code> and 
<code>fork="false"</code>
  +, then <code>&lt;java&gt;</code> <b>must</b> return 0 otherwise the build 
will exit, as the class was run by the build jvm.</p>
  +
   <h3>Examples</h3>
   <pre>  
          &lt;java classname=&quot;test.Main&quot;&gt;
  @@ -218,7 +235,7 @@
   JVM, as it takes different parameters for other JVMs,
   That JVM can be started from &lt;exec&gt; if required.
   <hr>
  -<p align="center">Copyright &copy; 2000-2002 Apache Software Foundation. All 
rights
  +<p align="center">Copyright &copy; 2000-2003 Apache Software Foundation. All 
rights
   Reserved.</p>
   
   </body>
  
  
  
  1.5       +21 -0     ant/src/etc/testcases/taskdefs/java.xml
  
  Index: java.xml
  ===================================================================
  RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/java.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- java.xml  24 Jul 2002 15:43:28 -0000      1.4
  +++ java.xml  22 Apr 2003 22:12:53 -0000      1.5
  @@ -89,5 +89,26 @@
       </java>
     </target>
     
  +  <target name="testResultPropertyZero">
  +    <java classname="${app}"
  +        classpath="${tests-classpath.value}"
  +        resultproperty="exitcode"
  +        >
  +    </java>
  +    <echo message="exitcode = ${exitcode}"/>
  +  </target>
  +  
  +  <target name="testResultPropertyNonZero">
  +    <java classname="${app}"
  +        classpath="${tests-classpath.value}"
  +        resultproperty="exitcode"
  +        failonerror="false"
  +        fork="true"
  +        >
  +        <arg value="-1"/>
  +    </java>
  +    <echo message="exitcode = ${exitcode}"/>
  +  </target>
  +  
     <target name="foo" />
   </project>
  
  
  
  1.10      +11 -1     
ant/src/testcases/org/apache/tools/ant/taskdefs/JavaTest.java
  
  Index: JavaTest.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/JavaTest.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- JavaTest.java     10 Feb 2003 14:14:45 -0000      1.9
  +++ JavaTest.java     22 Apr 2003 22:12:53 -0000      1.10
  @@ -62,7 +62,8 @@
    * stress out java task
    * @author steve loughran
    * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Bailliez</a> 
  - */
  + * @author <a href="mailto:[EMAIL PROTECTED]">Donal Quinlan</a>
  + * */
   public class JavaTest extends BuildFileTest {
       
       private boolean runFatalTests=false;
  @@ -166,6 +167,15 @@
               "Java returned:");        
       }   
           
  +    public void testResultPropertyZero() {
  +        executeTarget("testResultPropertyZero");
  +        assertEquals("0",project.getProperty("exitcode"));
  +    }
  +    
  +    public void testResultPropertyNonZero() {
  +        executeTarget("testResultPropertyNonZero");
  +        assertEquals("-1",project.getProperty("exitcode"));
  +    }
       
       /**
        * entry point class with no dependencies other
  
  
  

Reply via email to