From b8b6357fe6083cbc7e1855a28d4acc14692e7e6b Mon Sep 17 00:00:00 2001 From: Sebastian Schuberth Date: Tue, 19 May 2015 10:25:48 +0200 Subject: [PATCH] FS: Extend readPipe() to optionally take additional environment Change-Id: I4db7763826e4ada92074317d4d1c9a32299f3af8 Signed-off-by: Sebastian Schuberth Signed-off-by: Matthias Sohn --- .../src/org/eclipse/jgit/util/FS.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) 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 38e714771..4a85e560e 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.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 @@ protected static File searchPath(final String path, final String... lookFor) { * @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 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();