diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-02-19 22:28:01 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-02-19 22:28:01 -0800 |
commit | 09b5b5639d4885e2d32b521d97b0870879cf86f6 (patch) | |
tree | f65482af6b7c3df83949990616d15d19f32d8bee /main/src/mill/main/MainRunner.scala | |
parent | 3e66c8630be00c01f2cb7720e988a94af338de18 (diff) | |
download | mill-09b5b5639d4885e2d32b521d97b0870879cf86f6.tar.gz mill-09b5b5639d4885e2d32b521d97b0870879cf86f6.tar.bz2 mill-09b5b5639d4885e2d32b521d97b0870879cf86f6.zip |
`--watch` now works in client-server mode, with the server probing the lockfile to see if the client is still alive
Diffstat (limited to 'main/src/mill/main/MainRunner.scala')
-rw-r--r-- | main/src/mill/main/MainRunner.scala | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/main/src/mill/main/MainRunner.scala b/main/src/mill/main/MainRunner.scala index 7087dbc7..f6aec9c8 100644 --- a/main/src/mill/main/MainRunner.scala +++ b/main/src/mill/main/MainRunner.scala @@ -7,26 +7,40 @@ import ammonite.ops.Path import ammonite.util._ import mill.define.Discover import mill.eval.{Evaluator, PathRef} +import mill.main.MainRunner.WatchInterrupted import mill.util.PrintLogger import mill.main.RunScript import upickle.Js - +object MainRunner{ + case class WatchInterrupted(mr: MainRunner) extends Exception +} /** * Customized version of [[ammonite.MainRunner]], allowing us to run Mill * `build.sc` scripts with mill-specific tweaks such as a custom * `scriptCodeWrapper` or with a persistent evaluator between runs. */ -class MainRunner(config: ammonite.main.Cli.Config, +class MainRunner(val config: ammonite.main.Cli.Config, outprintStream: PrintStream, errPrintStream: PrintStream, stdIn: InputStream, + interruptWatch: () => Boolean, var lastEvaluator: Option[(Seq[(Path, Long)], Evaluator[Any])] = None) extends ammonite.MainRunner( config, outprintStream, errPrintStream, stdIn, outprintStream, errPrintStream ){ + override def watchAndWait(watched: Seq[(Path, Long)]) = { + printInfo(s"Watching for changes to ${watched.length} files... (Ctrl-C to exit)") + def statAll() = watched.forall{ case (file, lastMTime) => + Interpreter.pathSignature(file) == lastMTime + } + while(statAll()) { + if (interruptWatch()) throw WatchInterrupted(this) + Thread.sleep(100) + } + } override def runScript(scriptPath: Path, scriptArgs: List[String]) = watchLoop( |