summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-02-20 08:21:01 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-02-20 08:21:01 -0800
commit8f609234d0b48aba9f1e68e068c4ac275dfe3529 (patch)
tree7be077d0d4b33a0cb6f285ea328eb952c3b626d7
parent41f87cb6df7e8d64bed6c7ae29897cfcf8217fa8 (diff)
downloadmill-8f609234d0b48aba9f1e68e068c4ac275dfe3529.tar.gz
mill-8f609234d0b48aba9f1e68e068c4ac275dfe3529.tar.bz2
mill-8f609234d0b48aba9f1e68e068c4ac275dfe3529.zip
Properly propagate interactiveness to the server main0
-rw-r--r--main/src/mill/Main.scala11
-rw-r--r--main/src/mill/ServerClient.scala24
2 files changed, 22 insertions, 13 deletions
diff --git a/main/src/mill/Main.scala b/main/src/mill/Main.scala
index a0ef9120..7bc08c61 100644
--- a/main/src/mill/Main.scala
+++ b/main/src/mill/Main.scala
@@ -9,18 +9,13 @@ import ammonite.util.Util
import mill.main.MainRunner
object Main {
- case class Config(home: ammonite.ops.Path = pwd/'out/'ammonite,
- colored: Option[Boolean] = None,
- help: Boolean = false,
- repl: Boolean = false,
- watch: Boolean = false)
-
def main(args: Array[String]): Unit = {
- val (result, _) = main0(args, None, () => false)
+ val (result, _) = main0(args, None, ammonite.Main.isInteractive(), () => false)
System.exit(if(result) 0 else 1)
}
def main0(args: Array[String],
mainRunner: Option[(Cli.Config, MainRunner)],
+ mainInteractive: Boolean,
watchInterrupted: () => Boolean): (Boolean, Option[(Cli.Config, MainRunner)]) = {
import ammonite.main.Cli
@@ -65,7 +60,7 @@ object Main {
)
val runner = new mill.main.MainRunner(
- config.copy(home = pwd / "out" / ".ammonite"),
+ config.copy(home = pwd / "out" / ".ammonite", colored = Some(mainInteractive)),
System.out, System.err, System.in,
watchInterrupted,
mainRunner match{
diff --git a/main/src/mill/ServerClient.scala b/main/src/mill/ServerClient.scala
index 5e15314a..4feddeae 100644
--- a/main/src/mill/ServerClient.scala
+++ b/main/src/mill/ServerClient.scala
@@ -30,6 +30,7 @@ object Client{
def main(args: Array[String]): Unit = {
WithLock(1) { lockBase =>
+ val start = System.currentTimeMillis()
val inFile = new java.io.File(lockBase + "/stdin")
val outErrFile = new java.io.File(lockBase + "/stdouterr")
val metaFile = new java.io.File(lockBase + "/stdmeta")
@@ -43,12 +44,16 @@ object Client{
metaFile.createNewFile()
val f = new FileOutputStream(tmpRunFile)
+ f.write(if (System.console() != null) 1 else 0)
+ f.write(args.length)
var i = 0
while (i < args.length){
+ f.write(args(i).length)
f.write(args(i).getBytes)
- f.write('\n')
i += 1
}
+ f.flush()
+
tmpRunFile.renameTo(runFile)
val in = new FileOutputStream(inFile)
@@ -78,6 +83,7 @@ object Client{
.redirectError(outErrFile)
.start()
}
+
val buffer = new Array[Byte](1024)
val metaBuffer = new Array[Byte](1024)
while({
@@ -141,9 +147,9 @@ class ProxyInputStream(x: => java.io.InputStream) extends java.io.InputStream{
override def read(b: Array[Byte]) = x.read(b)
}
object Server{
- def main(args: Array[String]): Unit = {
+ def main(args0: Array[String]): Unit = {
import java.nio.file.{Paths, Files}
- val lockBase = Paths.get(args(0))
+ val lockBase = Paths.get(args0(0))
val runFile = lockBase.resolve("run")
var lastRun = System.currentTimeMillis()
val pidFile = lockBase.resolve("pid")
@@ -165,12 +171,20 @@ object Server{
currentIn = Files.newInputStream(lockBase.resolve("stdin"))
currentOutErr = Files.newOutputStream(lockBase.resolve("stdouterr"))
currentMeta = Files.newOutputStream(lockBase.resolve("stdmeta"))
- val args = new String(Files.readAllBytes(runFile)).split('\n')
+ val argStream = Files.newInputStream(lockBase.resolve("run"))
+ val interactive = argStream.read() != 0
+ val argsLength = argStream.read()
+ val args = Array.fill(argsLength){
+ val n = argStream.read()
+ val arr = new Array[Byte](n)
+ argStream.read(arr)
+ new String(arr)
+ }
try {
-
val (_, mr) = mill.Main.main0(
args,
mainRunner,
+ interactive,
() => {
channel.tryLock() match{
case null =>