diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-02-24 15:48:48 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-02-24 17:13:04 -0800 |
commit | 5d7d42659c545571b7201efce0ba6a57ab4b0935 (patch) | |
tree | 365cc15d40ab00808b599d1e309af7d18f410efa /main | |
parent | 139afd965ea072f8216b56126fb08dc8a44ebac4 (diff) | |
download | mill-5d7d42659c545571b7201efce0ba6a57ab4b0935.tar.gz mill-5d7d42659c545571b7201efce0ba6a57ab4b0935.tar.bz2 mill-5d7d42659c545571b7201efce0ba6a57ab4b0935.zip |
better error messages when you run interactive commands without -i
Diffstat (limited to 'main')
-rw-r--r-- | main/src/mill/Main.scala | 5 | ||||
-rw-r--r-- | main/src/mill/modules/Jvm.scala | 41 |
2 files changed, 28 insertions, 18 deletions
diff --git a/main/src/mill/Main.scala b/main/src/mill/Main.scala index 4adb8d9c..482de0bf 100644 --- a/main/src/mill/Main.scala +++ b/main/src/mill/Main.scala @@ -1,12 +1,13 @@ package mill -import java.io.{InputStream, OutputStream, PrintStream} +import java.io.{InputStream, PrintStream} import ammonite.main.Cli._ import ammonite.ops._ import ammonite.util.Util import mill.clientserver.{Client, FileLocks} import mill.eval.Evaluator +import mill.util.DummyInputStream object ClientMain { @@ -73,7 +74,7 @@ object ServerMain extends mill.clientserver.ServerMain[Evaluator.State]{ stateCache, mainInteractive, watchInterrupted, - stdin, + DummyInputStream, stdout, stderr ) diff --git a/main/src/mill/modules/Jvm.scala b/main/src/mill/modules/Jvm.scala index fb2661e1..5e297072 100644 --- a/main/src/mill/modules/Jvm.scala +++ b/main/src/mill/modules/Jvm.scala @@ -1,6 +1,6 @@ package mill.modules -import java.io.FileOutputStream +import java.io.{ByteArrayInputStream, FileOutputStream} import java.lang.reflect.Modifier import java.net.URLClassLoader import java.nio.file.attribute.PosixFilePermission @@ -28,39 +28,48 @@ object Jvm { envArgs: Map[String, String] = Map.empty, mainArgs: Seq[String] = Seq.empty, workingDir: Path = null): Unit = { - - import ammonite.ops.ImplicitWd._ - val commandArgs = + baseInteractiveSubprocess( Vector("java") ++ jvmArgs ++ Vector("-cp", classPath.mkString(":"), mainClass) ++ - mainArgs - baseInteractiveSubprocess(commandArgs, envArgs, workingDir) + mainArgs, + envArgs, + workingDir + ) } + def baseInteractiveSubprocess(commandArgs: Seq[String], envArgs: Map[String, String], workingDir: Path) = { val builder = new java.lang.ProcessBuilder() - import collection.JavaConverters._ + for ((k, v) <- envArgs){ if (v != null) builder.environment().put(k, v) else builder.environment().remove(k) } builder.directory(workingDir.toIO) - val process = - builder + val process = if (System.in.isInstanceOf[ByteArrayInputStream]){ + + val process = builder .command(commandArgs:_*) .start() - val sources = Seq( - process.getInputStream -> System.out, - process.getErrorStream -> System.err, - System.in -> process.getOutputStream - ) + val sources = Seq( + process.getInputStream -> System.out, + process.getErrorStream -> System.err, + System.in -> process.getOutputStream + ) - for((std, dest) <- sources){ - new Thread(new ClientInputPumper(std, dest)).start() + for((std, dest) <- sources){ + new Thread(new ClientInputPumper(std, dest)).start() + } + process + }else{ + builder + .command(commandArgs:_*) + .inheritIO() + .start() } val exitCode = process.waitFor() |