summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java27
1 files changed, 26 insertions, 1 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
index 38e714771b..4a85e560e8 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
@@ -57,6 +57,7 @@ import java.security.AccessController;
import java.security.PrivilegedAction;
import java.text.MessageFormat;
import java.util.Arrays;
+import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -407,13 +408,37 @@ public abstract class FS {
* @return the one-line output of the command
*/
protected static String readPipe(File dir, String[] command, String encoding) {
+ return readPipe(dir, command, encoding, null);
+ }
+
+ /**
+ * Execute a command and return a single line of output as a String
+ *
+ * @param dir
+ * Working directory for the command
+ * @param command
+ * as component array
+ * @param encoding
+ * to be used to parse the command's output
+ * @param env
+ * Map of environment variables to be merged with those of the
+ * current process
+ * @return the one-line output of the command
+ * @since 4.0
+ */
+ protected static String readPipe(File dir, String[] command, String encoding, Map<String, String> env) {
final boolean debug = LOG.isDebugEnabled();
try {
if (debug) {
LOG.debug("readpipe " + Arrays.asList(command) + "," //$NON-NLS-1$ //$NON-NLS-2$
+ dir);
}
- final Process p = Runtime.getRuntime().exec(command, null, dir);
+ ProcessBuilder pb = new ProcessBuilder(command);
+ pb.directory(dir);
+ if (env != null) {
+ pb.environment().putAll(env);
+ }
+ final Process p = pb.start();
final BufferedReader lineRead = new BufferedReader(
new InputStreamReader(p.getInputStream(), encoding));
p.getOutputStream().close();