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 | |
parent | 5d7d42659c545571b7201efce0ba6a57ab4b0935 (diff) | |
download | mill-0768db2c44952ff97348f5b1aebfd423ca868b33.tar.gz mill-0768db2c44952ff97348f5b1aebfd423ca868b33.tar.bz2 mill-0768db2c44952ff97348f5b1aebfd423ca868b33.zip |
Properly propagate exit codes from server output to client
-rw-r--r-- | .travis.yml | 8 | ||||
-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 | ||||
-rw-r--r-- | main/src/mill/Main.scala | 4 | ||||
-rw-r--r-- | main/test/src/mill/util/ScriptTestSuite.scala | 2 |
6 files changed, 21 insertions, 9 deletions
diff --git a/.travis.yml b/.travis.yml index 83ff9b91..57a75bef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,10 +18,10 @@ matrix: env: CI_SCRIPT=ci/test-mill-built.sh - stage: build env: CI_SCRIPT=ci/test-mill-release.sh -# - stage: release -# env: CI_SCRIPT="ci/on-master.py ci/release.sh" -# - stage: release -# env: CI_SCRIPT="ci/on-master.py ci/publish-docs.sh" + - stage: release + env: CI_SCRIPT="ci/on-master.py ci/release.sh" + - stage: release + env: CI_SCRIPT="ci/on-master.py ci/publish-docs.sh" script: - git fetch --unshallow --tags 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{ diff --git a/main/src/mill/Main.scala b/main/src/mill/Main.scala index 482de0bf..d6a908d3 100644 --- a/main/src/mill/Main.scala +++ b/main/src/mill/Main.scala @@ -48,7 +48,7 @@ object ClientMain { .start() } def main(args: Array[String]): Unit = { - Client.WithLock(1) { lockBase => + val exitCode = Client.WithLock(1) { lockBase => val c = new Client( lockBase, () => initServer(lockBase), @@ -59,7 +59,7 @@ object ClientMain { ) c.run(args) } - System.exit(0) + System.exit(exitCode) } } object ServerMain extends mill.clientserver.ServerMain[Evaluator.State]{ diff --git a/main/test/src/mill/util/ScriptTestSuite.scala b/main/test/src/mill/util/ScriptTestSuite.scala index 1f89ab8d..6bc96540 100644 --- a/main/test/src/mill/util/ScriptTestSuite.scala +++ b/main/test/src/mill/util/ScriptTestSuite.scala @@ -21,7 +21,7 @@ abstract class ScriptTestSuite(fork: Boolean) extends TestSuite{ if (!fork) runner.runScript(workspacePath / "build.sc", s.toList) else{ try { - %%(home / "mill-release", s)(workspacePath) + %%(home / "mill-release", "-i", s)(workspacePath) true }catch{case e: Throwable => false} } |