Mercurial > hg4j
comparison test/org/tmatesoft/hg/test/ExecHelper.java @ 110:0170f95ca915
On Windows, if hg.exe is wrapped into batch file, need to use cmd.exe to let it run
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Mon, 31 Jan 2011 19:42:19 +0100 |
| parents | a3a2e5deb320 |
| children | 32e794c599d7 |
comparison
equal
deleted
inserted
replaced
| 109:dd4d2d0e42cd | 110:0170f95ca915 |
|---|---|
| 18 | 18 |
| 19 import java.io.File; | 19 import java.io.File; |
| 20 import java.io.IOException; | 20 import java.io.IOException; |
| 21 import java.io.InputStreamReader; | 21 import java.io.InputStreamReader; |
| 22 import java.nio.CharBuffer; | 22 import java.nio.CharBuffer; |
| 23 import java.util.ArrayList; | |
| 24 import java.util.Arrays; | |
| 23 import java.util.LinkedList; | 25 import java.util.LinkedList; |
| 26 import java.util.StringTokenizer; | |
| 24 | 27 |
| 25 /** | 28 /** |
| 26 * | 29 * |
| 27 * @author Artem Tikhomirov | 30 * @author Artem Tikhomirov |
| 28 * @author TMate Software Ltd. | 31 * @author TMate Software Ltd. |
| 36 parser = outParser; | 39 parser = outParser; |
| 37 dir = workingDir; | 40 dir = workingDir; |
| 38 } | 41 } |
| 39 | 42 |
| 40 public void run(String... cmd) throws IOException, InterruptedException { | 43 public void run(String... cmd) throws IOException, InterruptedException { |
| 41 Process p = new ProcessBuilder(cmd).directory(dir).redirectErrorStream(true).start(); | 44 ProcessBuilder pb = null; |
| 42 // Process p = Runtime.getRuntime().exec(cmd, null, dir); | 45 if (System.getProperty("os.name").startsWith("Windows")) { |
| 46 StringTokenizer st = new StringTokenizer(System.getenv("PATH"), ";"); | |
| 47 while (st.hasMoreTokens()) { | |
| 48 File pe = new File(st.nextToken()); | |
| 49 if (new File(pe, cmd[0] + ".exe").exists()) { | |
| 50 break; | |
| 51 } | |
| 52 if (new File(pe, cmd[0] + ".bat").exists() || new File(pe, cmd[0] + ".cmd").exists()) { | |
| 53 ArrayList<String> command = new ArrayList<String>(); | |
| 54 command.add("cmd.exe"); | |
| 55 command.add("/C"); | |
| 56 command.addAll(Arrays.asList(cmd)); | |
| 57 pb = new ProcessBuilder(command); | |
| 58 break; | |
| 59 } | |
| 60 } | |
| 61 } | |
| 62 if (pb == null) { | |
| 63 pb = new ProcessBuilder(cmd); | |
| 64 } | |
| 65 Process p = pb.directory(dir).redirectErrorStream(true).start(); | |
| 43 InputStreamReader stdOut = new InputStreamReader(p.getInputStream()); | 66 InputStreamReader stdOut = new InputStreamReader(p.getInputStream()); |
| 44 LinkedList<CharBuffer> l = new LinkedList<CharBuffer>(); | 67 LinkedList<CharBuffer> l = new LinkedList<CharBuffer>(); |
| 45 int r = -1; | 68 int r = -1; |
| 46 CharBuffer b = null; | 69 CharBuffer b = null; |
| 47 do { | 70 do { |
