From 6b669be21d78b1791fe9802bbb2c60df2a1d6b2d Mon Sep 17 00:00:00 2001 From: Peter Donald Date: Fri, 21 Dec 2001 13:18:30 +0000 Subject: [PATCH] Converted the old MacCommandLauncher to new setup. There is no need to extend ProxyCommandLauncher as it did not offer any benefit (because the 2 arg version of Runtime.exec was always called) git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270280 13f79535-47bb-0310-9956-ffa450edef68 --- .../exec/launchers/MacCommandLauncher.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/MacCommandLauncher.java 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 new file mode 100644 index 000000000..239090297 --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/MacCommandLauncher.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) The Apache Software Foundation. All rights reserved. + * + * This software is published under the terms of the Apache Software License + * version 1.1, a copy of which has been included with this distribution in + * the LICENSE.txt file. + */ +package org.apache.myrmidon.framework.exec.launchers; + +import java.io.File; +import java.io.IOException; +import org.apache.myrmidon.api.TaskException; +import org.apache.myrmidon.framework.exec.CommandLauncher; +import org.apache.myrmidon.framework.exec.ExecMetaData; + +/** + * A command launcher for Mac that uses a dodgy mechanism to change working + * directory before launching commands. This class changes the value of the + * System property "user.dir" before the command is executed and then resets + * it after the command is executed. This can have really unhealthy side-effects + * if there are multiple threads in JVM and should be used with extreme caution. + * + * @author Peter Donald + * @author Thomas Haas + * @version $Revision$ $Date$ + */ +public class MacCommandLauncher + implements CommandLauncher +{ + /** + * Execute the specified native command. + */ + public Process exec( final ExecMetaData metaData ) + throws IOException, TaskException + { + final File directory = metaData.getWorkingDirectory().getCanonicalFile(); + if( ExecUtil.isCwd( directory ) ) + { + return Runtime.getRuntime(). + exec( metaData.getCommand(), metaData.getEnvironment() ); + } + + //WARNING: This is an ugly hack and not thread safe in the slightest way + //It can have really really undersirable side-effects if multiple threads + //are running in the JVM + try + { + System.setProperty( "user.dir", directory.toString() ); + return Runtime.getRuntime(). + exec( metaData.getCommand(), metaData.getEnvironment() ); + } + finally + { + System.setProperty( "user.dir", ExecUtil.getCwd().toString() ); + } + } +}