From cdd8484f399e432198efe17a1ab8db95b26aaeaf Mon Sep 17 00:00:00 2001 From: Peter Donald Date: Sun, 23 Dec 2001 02:55:22 +0000 Subject: [PATCH] Made ExecMetaData take a Properties object for environment data rather than native format. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270341 13f79535-47bb-0310-9956-ffa450edef68 --- .../myrmidon/framework/exec/ExecMetaData.java | 7 ++-- .../launchers/DefaultCommandLauncher.java | 7 ++-- .../framework/exec/launchers/ExecUtil.java | 10 ++++++ .../exec/launchers/MacCommandLauncher.java | 8 ++--- .../exec/launchers/ScriptCommandLauncher.java | 4 +-- .../exec/launchers/WinNTCommandLauncher.java | 4 +-- .../tools/ant/taskdefs/exec/Execute.java | 36 ++++--------------- .../tools/ant/taskdefs/exec/Execute.java | 36 ++++--------------- 8 files changed, 40 insertions(+), 72 deletions(-) diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/ExecMetaData.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/ExecMetaData.java index bb1a12471..33c2ac053 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/ExecMetaData.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/ExecMetaData.java @@ -8,6 +8,7 @@ package org.apache.myrmidon.framework.exec; import java.io.File; +import java.util.Properties; /** * This class holds meta data that is used to launch a native executable. @@ -40,7 +41,7 @@ public class ExecMetaData * process if isEnvironmentAdditive=true else it specifies * full environment. */ - private String[] m_environment; + private Properties m_environment; /** * If this variable is true then then the environment specified is @@ -57,7 +58,7 @@ public class ExecMetaData * a null environment and an additive environment. */ public ExecMetaData( final String[] command, - final String[] environment, + final Properties environment, final File workingDirectory, final boolean environmentAdditive ) { @@ -92,7 +93,7 @@ public class ExecMetaData return m_command; } - public String[] getEnvironment() + public Properties getEnvironment() { return m_environment; } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/DefaultCommandLauncher.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/DefaultCommandLauncher.java index e17d4380d..fcbdd2ef9 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/DefaultCommandLauncher.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/DefaultCommandLauncher.java @@ -64,8 +64,8 @@ public class DefaultCommandLauncher { if( ExecUtil.isCwd( metaData.getWorkingDirectory() ) ) { - return Runtime.getRuntime(). - exec( metaData.getCommand(), metaData.getEnvironment() ); + final String[] env = ExecUtil.toNativeEnvironment( metaData.getEnvironment() ); + return Runtime.getRuntime().exec( metaData.getCommand(), env ); } else if( null == c_execWithCWD ) { @@ -87,9 +87,10 @@ public class DefaultCommandLauncher private Process execJava13( final ExecMetaData metaData ) throws IOException, ExecException { + final String[] env = ExecUtil.toNativeEnvironment( metaData.getEnvironment() ); final Object[] args = {metaData.getCommand(), - metaData.getEnvironment(), + env, metaData.getWorkingDirectory()}; try { diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/ExecUtil.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/ExecUtil.java index 39587015b..acf5f01ef 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/ExecUtil.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/ExecUtil.java @@ -9,6 +9,9 @@ package org.apache.myrmidon.framework.exec.launchers; import java.io.File; import java.io.IOException; +import java.util.Properties; +import org.apache.myrmidon.framework.exec.Environment; +import org.apache.myrmidon.framework.exec.ExecException; import org.apache.myrmidon.framework.exec.ExecMetaData; /** @@ -74,6 +77,13 @@ class ExecUtil return file.getCanonicalFile().equals( getCwd() ); } + protected static String[] toNativeEnvironment( final Properties environment ) + throws ExecException + { + if( null == environment ) return null; + else { return Environment.toNativeFormat( environment ); } + } + /** * Return the current working directory of the JVM. * This value is initialized when this class is first loaded. diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/MacCommandLauncher.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/MacCommandLauncher.java index ec13ebc3f..ed4713591 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/MacCommandLauncher.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/MacCommandLauncher.java @@ -36,8 +36,8 @@ public class MacCommandLauncher final File directory = metaData.getWorkingDirectory().getCanonicalFile(); if( ExecUtil.isCwd( directory ) ) { - return Runtime.getRuntime(). - exec( metaData.getCommand(), metaData.getEnvironment() ); + final String[] env = ExecUtil.toNativeEnvironment( metaData.getEnvironment() ); + return Runtime.getRuntime().exec( metaData.getCommand(), env ); } //WARNING: This is an ugly hack and not thread safe in the slightest way @@ -46,8 +46,8 @@ public class MacCommandLauncher try { System.setProperty( "user.dir", directory.toString() ); - return Runtime.getRuntime(). - exec( metaData.getCommand(), metaData.getEnvironment() ); + final String[] env = ExecUtil.toNativeEnvironment( metaData.getEnvironment() ); + return Runtime.getRuntime().exec( metaData.getCommand(), env ); } finally { diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/ScriptCommandLauncher.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/ScriptCommandLauncher.java index bd5378ac0..9b585cd4c 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/ScriptCommandLauncher.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/ScriptCommandLauncher.java @@ -70,7 +70,7 @@ public class ScriptCommandLauncher prefix[ m_script.length ] = metaData.getWorkingDirectory().getCanonicalPath(); final ExecMetaData newMetaData = ExecUtil.prepend( metaData, prefix ); - return Runtime.getRuntime(). - exec( newMetaData.getCommand(), newMetaData.getEnvironment() ); + final String[] env = ExecUtil.toNativeEnvironment( metaData.getEnvironment() ); + return Runtime.getRuntime().exec( newMetaData.getCommand(), env ); } } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/WinNTCommandLauncher.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/WinNTCommandLauncher.java index 811b0c433..f83abeb74 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/WinNTCommandLauncher.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/WinNTCommandLauncher.java @@ -41,7 +41,7 @@ public class WinNTCommandLauncher prefix[ 5 ] = "&&"; final ExecMetaData newMetaData = ExecUtil.prepend( metaData, prefix ); - return Runtime.getRuntime(). - exec( newMetaData.getCommand(), newMetaData.getEnvironment() ); + final String[] env = ExecUtil.toNativeEnvironment( metaData.getEnvironment() ); + return Runtime.getRuntime().exec( newMetaData.getCommand(), env ); } } 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 8aa835c33..cf9fa8f7f 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 @@ -44,7 +44,7 @@ public class Execute private ExecMetaData m_metaData; private String[] m_command; - private Properties m_environment; + private Properties m_environment = new Properties(); private File m_workingDirectory = new File( "." ); private boolean m_newEnvironment; @@ -214,6 +214,10 @@ public class Execute public void setEnvironment( final Properties environment ) { + if( null == environment ) + { + throw new NullPointerException( "environment" ); + } m_environment = environment; } @@ -274,8 +278,8 @@ public class Execute try { final ExecMetaData metaData = - new ExecMetaData( m_command, getNativeEnvironment(), - m_workingDirectory, false ); + new ExecMetaData( m_command, m_environment, + m_workingDirectory, m_newEnvironment ); final CommandLauncher launcher = getLauncher(); final Process process = launcher.exec( metaData ); @@ -341,30 +345,4 @@ public class Execute } return launcher; } - - /** - * Returns the environment used to create a subprocess. - * - * @return the environment used to create a subprocess - */ - private String[] getNativeEnvironment() - throws ExecException - { - if( m_newEnvironment ) - { - return Environment.toNativeFormat( m_environment ); - } - else - { - try - { - Environment.addNativeEnvironment( m_environment ); - return Environment.toNativeFormat( m_environment ); - } - catch( final IOException ioe ) - { - throw new ExecException( ioe.getMessage(), ioe ); - } - } - } } 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 8aa835c33..cf9fa8f7f 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 @@ -44,7 +44,7 @@ public class Execute private ExecMetaData m_metaData; private String[] m_command; - private Properties m_environment; + private Properties m_environment = new Properties(); private File m_workingDirectory = new File( "." ); private boolean m_newEnvironment; @@ -214,6 +214,10 @@ public class Execute public void setEnvironment( final Properties environment ) { + if( null == environment ) + { + throw new NullPointerException( "environment" ); + } m_environment = environment; } @@ -274,8 +278,8 @@ public class Execute try { final ExecMetaData metaData = - new ExecMetaData( m_command, getNativeEnvironment(), - m_workingDirectory, false ); + new ExecMetaData( m_command, m_environment, + m_workingDirectory, m_newEnvironment ); final CommandLauncher launcher = getLauncher(); final Process process = launcher.exec( metaData ); @@ -341,30 +345,4 @@ public class Execute } return launcher; } - - /** - * Returns the environment used to create a subprocess. - * - * @return the environment used to create a subprocess - */ - private String[] getNativeEnvironment() - throws ExecException - { - if( m_newEnvironment ) - { - return Environment.toNativeFormat( m_environment ); - } - else - { - try - { - Environment.addNativeEnvironment( m_environment ); - return Environment.toNativeFormat( m_environment ); - } - catch( final IOException ioe ) - { - throw new ExecException( ioe.getMessage(), ioe ); - } - } - } }