# HG changeset patch # User Artem Tikhomirov # Date 1296499339 -3600 # Node ID 0170f95ca91576c1bf7f9ab1f80dde30ba879b45 # Parent dd4d2d0e42cd0db4571bf34b8f3d8a0a22cace2a On Windows, if hg.exe is wrapped into batch file, need to use cmd.exe to let it run diff -r dd4d2d0e42cd -r 0170f95ca915 test/org/tmatesoft/hg/test/ExecHelper.java --- a/test/org/tmatesoft/hg/test/ExecHelper.java Sat Jan 29 04:17:13 2011 +0100 +++ b/test/org/tmatesoft/hg/test/ExecHelper.java Mon Jan 31 19:42:19 2011 +0100 @@ -20,7 +20,10 @@ import java.io.IOException; import java.io.InputStreamReader; import java.nio.CharBuffer; +import java.util.ArrayList; +import java.util.Arrays; import java.util.LinkedList; +import java.util.StringTokenizer; /** * @@ -38,8 +41,28 @@ } public void run(String... cmd) throws IOException, InterruptedException { - Process p = new ProcessBuilder(cmd).directory(dir).redirectErrorStream(true).start(); -// Process p = Runtime.getRuntime().exec(cmd, null, dir); + ProcessBuilder pb = null; + if (System.getProperty("os.name").startsWith("Windows")) { + StringTokenizer st = new StringTokenizer(System.getenv("PATH"), ";"); + while (st.hasMoreTokens()) { + File pe = new File(st.nextToken()); + if (new File(pe, cmd[0] + ".exe").exists()) { + break; + } + if (new File(pe, cmd[0] + ".bat").exists() || new File(pe, cmd[0] + ".cmd").exists()) { + ArrayList command = new ArrayList(); + command.add("cmd.exe"); + command.add("/C"); + command.addAll(Arrays.asList(cmd)); + pb = new ProcessBuilder(command); + break; + } + } + } + if (pb == null) { + pb = new ProcessBuilder(cmd); + } + Process p = pb.directory(dir).redirectErrorStream(true).start(); InputStreamReader stdOut = new InputStreamReader(p.getInputStream()); LinkedList l = new LinkedList(); int r = -1;