summaryrefslogtreecommitdiff
path: root/clientserver
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-02-24 17:52:48 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-02-24 20:13:37 -0800
commit0768db2c44952ff97348f5b1aebfd423ca868b33 (patch)
tree431b3f703d7f2e1a89ae2a15d93ee43914f0a6be /clientserver
parent5d7d42659c545571b7201efce0ba6a57ab4b0935 (diff)
downloadmill-0768db2c44952ff97348f5b1aebfd423ca868b33.tar.gz
mill-0768db2c44952ff97348f5b1aebfd423ca868b33.tar.bz2
mill-0768db2c44952ff97348f5b1aebfd423ca868b33.zip
Properly propagate exit codes from server output to client
Diffstat (limited to 'clientserver')
-rw-r--r--clientserver/src/mill/clientserver/Client.scala9
-rw-r--r--clientserver/src/mill/clientserver/ClientServer.scala1
-rw-r--r--clientserver/src/mill/clientserver/Server.scala6
3 files changed, 14 insertions, 2 deletions
diff --git a/clientserver/src/mill/clientserver/Client.scala b/clientserver/src/mill/clientserver/Client.scala
index 1a4b1539..5e1af0aa 100644
--- a/clientserver/src/mill/clientserver/Client.scala
+++ b/clientserver/src/mill/clientserver/Client.scala
@@ -33,7 +33,7 @@ class Client(lockBase: String,
stdin: InputStream,
stdout: OutputStream,
stderr: OutputStream) extends ClientServer(lockBase){
- def run(args: Array[String]) = {
+ def run(args: Array[String]): Int = {
val f = new FileOutputStream(runFile)
ClientServer.writeArgs(System.console() != null, args, f)
f.close()
@@ -55,5 +55,12 @@ class Client(lockBase: String,
locks.serverLock.await()
+ try{
+ new BufferedReader(
+ new InputStreamReader(
+ new FileInputStream(exitCodePath)
+ )
+ ).readLine().toInt
+ } catch{case e: Throwable => 1}
}
}
diff --git a/clientserver/src/mill/clientserver/ClientServer.scala b/clientserver/src/mill/clientserver/ClientServer.scala
index f775f8d6..a7de2ba3 100644
--- a/clientserver/src/mill/clientserver/ClientServer.scala
+++ b/clientserver/src/mill/clientserver/ClientServer.scala
@@ -7,6 +7,7 @@ import scala.annotation.tailrec
class ClientServer(lockBase: String){
val ioPath = lockBase + "/io"
+ val exitCodePath = lockBase + "/exitCode"
val logFile = new java.io.File(lockBase + "/log")
val runFile = new java.io.File(lockBase + "/run")
}
diff --git a/clientserver/src/mill/clientserver/Server.scala b/clientserver/src/mill/clientserver/Server.scala
index 52549f69..de8097fb 100644
--- a/clientserver/src/mill/clientserver/Server.scala
+++ b/clientserver/src/mill/clientserver/Server.scala
@@ -69,7 +69,7 @@ class Server[T](lockBase: String,
try {
val stdout = new PrintStream(new ProxyOutputStream(currentOutErr, 0), true)
val stderr = new PrintStream(new ProxyOutputStream(currentOutErr, 1), true)
- val (_, newStateCache) = sm.main0(
+ val (result, newStateCache) = sm.main0(
args,
sm.stateCache,
interactive,
@@ -79,6 +79,10 @@ class Server[T](lockBase: String,
)
sm.stateCache = newStateCache
+ java.nio.file.Files.write(
+ java.nio.file.Paths.get(exitCodePath),
+ (if (result) 0 else 1).toString.getBytes
+ )
} catch{case WatchInterrupted(sc: Option[T]) =>
sm.stateCache = sc
} finally{