diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/Execute.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/Execute.java index 6f32e9aa3..bb586fc1b 100644 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/Execute.java +++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/Execute.java @@ -9,7 +9,6 @@ package org.apache.tools.ant.taskdefs.exec; import java.io.File; import java.io.IOException; -import java.util.ArrayList; import java.util.Locale; import java.util.Properties; import org.apache.avalon.excalibur.io.FileUtil; @@ -165,7 +164,8 @@ public class Execute * @param watchdog a watchdog for the subprocess or null to to * disable a timeout for the subprocess. */ - public Execute( ExecuteStreamHandler streamHandler, ExecuteWatchdog watchdog ) + public Execute( final ExecuteStreamHandler streamHandler, + final ExecuteWatchdog watchdog ) { m_streamHandler = streamHandler; m_watchdog = watchdog; @@ -179,15 +179,16 @@ public class Execute * @param cmdline The command to execute. * @throws TaskException if the command does not return 0. */ - public static void runCommand( Task task, String[] cmdline ) + public static void runCommand( final Task task, final String[] cmdline ) throws TaskException { try { task.log( Commandline.toString( cmdline ), Project.MSG_VERBOSE ); - Execute exe = new Execute( new LogStreamHandler( task, - Project.MSG_INFO, - Project.MSG_ERR ) ); + final Execute exe = + new Execute( new LogStreamHandler( task, + Project.MSG_INFO, + Project.MSG_ERR ) ); exe.setCommandline( cmdline ); int retval = exe.execute(); if( retval != 0 ) @@ -195,9 +196,9 @@ public class Execute throw new TaskException( cmdline[ 0 ] + " failed with return code " + retval ); } } - catch( IOException exc ) + catch( final IOException ioe ) { - throw new TaskException( "Could not launch " + cmdline[ 0 ] + ": " + exc ); + throw new TaskException( "Could not launch " + cmdline[ 0 ] + ": " + ioe ); } } @@ -254,10 +255,10 @@ public class Execute * * @return the environment used to create a subprocess */ - public String[] getEnvironment() + private String[] getEnvironment() throws TaskException { - if( m_environment == null || m_newEnvironment ) + if( m_newEnvironment ) { return Environment.toNativeFormat( m_environment ); } @@ -284,27 +285,26 @@ public class Execute public int execute() throws IOException, TaskException { - CommandLauncher launcher = c_launcher != null ? c_launcher : c_shellLauncher; - if( !m_useVMLauncher ) - { - launcher = c_shellLauncher; - } final ExecMetaData metaData = new ExecMetaData( m_command, getEnvironment(), m_workingDirectory, false ); + + final CommandLauncher launcher = getLauncher(); final Process process = launcher.exec( metaData ); + try { m_streamHandler.setProcessInputStream( process.getOutputStream() ); m_streamHandler.setProcessOutputStream( process.getInputStream() ); m_streamHandler.setProcessErrorStream( process.getErrorStream() ); } - catch( IOException e ) + catch( final IOException ioe ) { process.destroy(); - throw e; + throw ioe; } + m_streamHandler.start(); // add the process to the list of those to destroy if the VM exits @@ -312,19 +312,42 @@ public class Execute c_processDestroyer.add( process ); if( m_watchdog != null ) + { m_watchdog.start( process ); - waitFor( process ); + } + try + { + process.waitFor(); + } + catch( final InterruptedException ie ) + { + //shu\ould never happen + } // remove the process to the list of those to destroy if the VM exits // c_processDestroyer.remove( process ); if( m_watchdog != null ) + { m_watchdog.stop(); + } m_streamHandler.stop(); if( m_watchdog != null ) + { m_watchdog.checkException(); - return m_exitValue; + } + return process.exitValue();; + } + + private CommandLauncher getLauncher() + { + CommandLauncher launcher = c_launcher; + if( !m_useVMLauncher ) + { + launcher = c_shellLauncher; + } + return launcher; } /** @@ -337,21 +360,4 @@ public class Execute { return m_watchdog != null && m_watchdog.killedProcess(); } - - private void setExitValue( final int value ) - { - m_exitValue = value; - } - - protected void waitFor( Process process ) - { - try - { - process.waitFor(); - setExitValue( process.exitValue() ); - } - catch( InterruptedException e ) - { - } - } } diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/Execute.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/Execute.java index 6f32e9aa3..bb586fc1b 100644 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/Execute.java +++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/Execute.java @@ -9,7 +9,6 @@ package org.apache.tools.ant.taskdefs.exec; import java.io.File; import java.io.IOException; -import java.util.ArrayList; import java.util.Locale; import java.util.Properties; import org.apache.avalon.excalibur.io.FileUtil; @@ -165,7 +164,8 @@ public class Execute * @param watchdog a watchdog for the subprocess or null to to * disable a timeout for the subprocess. */ - public Execute( ExecuteStreamHandler streamHandler, ExecuteWatchdog watchdog ) + public Execute( final ExecuteStreamHandler streamHandler, + final ExecuteWatchdog watchdog ) { m_streamHandler = streamHandler; m_watchdog = watchdog; @@ -179,15 +179,16 @@ public class Execute * @param cmdline The command to execute. * @throws TaskException if the command does not return 0. */ - public static void runCommand( Task task, String[] cmdline ) + public static void runCommand( final Task task, final String[] cmdline ) throws TaskException { try { task.log( Commandline.toString( cmdline ), Project.MSG_VERBOSE ); - Execute exe = new Execute( new LogStreamHandler( task, - Project.MSG_INFO, - Project.MSG_ERR ) ); + final Execute exe = + new Execute( new LogStreamHandler( task, + Project.MSG_INFO, + Project.MSG_ERR ) ); exe.setCommandline( cmdline ); int retval = exe.execute(); if( retval != 0 ) @@ -195,9 +196,9 @@ public class Execute throw new TaskException( cmdline[ 0 ] + " failed with return code " + retval ); } } - catch( IOException exc ) + catch( final IOException ioe ) { - throw new TaskException( "Could not launch " + cmdline[ 0 ] + ": " + exc ); + throw new TaskException( "Could not launch " + cmdline[ 0 ] + ": " + ioe ); } } @@ -254,10 +255,10 @@ public class Execute * * @return the environment used to create a subprocess */ - public String[] getEnvironment() + private String[] getEnvironment() throws TaskException { - if( m_environment == null || m_newEnvironment ) + if( m_newEnvironment ) { return Environment.toNativeFormat( m_environment ); } @@ -284,27 +285,26 @@ public class Execute public int execute() throws IOException, TaskException { - CommandLauncher launcher = c_launcher != null ? c_launcher : c_shellLauncher; - if( !m_useVMLauncher ) - { - launcher = c_shellLauncher; - } final ExecMetaData metaData = new ExecMetaData( m_command, getEnvironment(), m_workingDirectory, false ); + + final CommandLauncher launcher = getLauncher(); final Process process = launcher.exec( metaData ); + try { m_streamHandler.setProcessInputStream( process.getOutputStream() ); m_streamHandler.setProcessOutputStream( process.getInputStream() ); m_streamHandler.setProcessErrorStream( process.getErrorStream() ); } - catch( IOException e ) + catch( final IOException ioe ) { process.destroy(); - throw e; + throw ioe; } + m_streamHandler.start(); // add the process to the list of those to destroy if the VM exits @@ -312,19 +312,42 @@ public class Execute c_processDestroyer.add( process ); if( m_watchdog != null ) + { m_watchdog.start( process ); - waitFor( process ); + } + try + { + process.waitFor(); + } + catch( final InterruptedException ie ) + { + //shu\ould never happen + } // remove the process to the list of those to destroy if the VM exits // c_processDestroyer.remove( process ); if( m_watchdog != null ) + { m_watchdog.stop(); + } m_streamHandler.stop(); if( m_watchdog != null ) + { m_watchdog.checkException(); - return m_exitValue; + } + return process.exitValue();; + } + + private CommandLauncher getLauncher() + { + CommandLauncher launcher = c_launcher; + if( !m_useVMLauncher ) + { + launcher = c_shellLauncher; + } + return launcher; } /** @@ -337,21 +360,4 @@ public class Execute { return m_watchdog != null && m_watchdog.killedProcess(); } - - private void setExitValue( final int value ) - { - m_exitValue = value; - } - - protected void waitFor( Process process ) - { - try - { - process.waitFor(); - setExitValue( process.exitValue() ); - } - catch( InterruptedException e ) - { - } - } }