summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-02-24 15:48:48 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-02-24 17:13:04 -0800
commit5d7d42659c545571b7201efce0ba6a57ab4b0935 (patch)
tree365cc15d40ab00808b599d1e309af7d18f410efa /main
parent139afd965ea072f8216b56126fb08dc8a44ebac4 (diff)
downloadmill-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.scala5
-rw-r--r--main/src/mill/modules/Jvm.scala41
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()