From 0768db2c44952ff97348f5b1aebfd423ca868b33 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sat, 24 Feb 2018 17:52:48 -0800 Subject: Properly propagate exit codes from server output to client --- clientserver/src/mill/clientserver/Client.scala | 9 ++++++++- clientserver/src/mill/clientserver/ClientServer.scala | 1 + clientserver/src/mill/clientserver/Server.scala | 6 +++++- 3 files changed, 14 insertions(+), 2 deletions(-) (limited to 'clientserver/src') 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{ -- cgit v1.2.3