diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-02-24 17:52:48 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-02-24 20:13:37 -0800 |
commit | 0768db2c44952ff97348f5b1aebfd423ca868b33 (patch) | |
tree | 431b3f703d7f2e1a89ae2a15d93ee43914f0a6be /clientserver/src | |
parent | 5d7d42659c545571b7201efce0ba6a57ab4b0935 (diff) | |
download | mill-0768db2c44952ff97348f5b1aebfd423ca868b33.tar.gz mill-0768db2c44952ff97348f5b1aebfd423ca868b33.tar.bz2 mill-0768db2c44952ff97348f5b1aebfd423ca868b33.zip |
Properly propagate exit codes from server output to client
Diffstat (limited to 'clientserver/src')
-rw-r--r-- | clientserver/src/mill/clientserver/Client.scala | 9 | ||||
-rw-r--r-- | clientserver/src/mill/clientserver/ClientServer.scala | 1 | ||||
-rw-r--r-- | clientserver/src/mill/clientserver/Server.scala | 6 |
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{ |