]> source.dussan.org Git - jgit.git/commitdiff
FS: Extend readPipe() to optionally take additional environment 44/48144/5
authorSebastian Schuberth <sschuberth@gmail.com>
Tue, 19 May 2015 08:25:48 +0000 (10:25 +0200)
committerMatthias Sohn <matthias.sohn@sap.com>
Thu, 21 May 2015 21:42:13 +0000 (23:42 +0200)
Change-Id: I4db7763826e4ada92074317d4d1c9a32299f3af8
Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java

index 38e714771b9c5a1cda5ffe944a74fc6e844b1616..4a85e560e8da25fba8c79b89beeb145792addfa4 100644 (file)
@@ -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();