diff options
Diffstat (limited to 'main/src/main')
-rw-r--r-- | main/src/main/MainRunner.scala | 6 | ||||
-rw-r--r-- | main/src/main/MillServerMain.scala | 12 | ||||
-rw-r--r-- | main/src/main/ReplApplyHandler.scala | 20 | ||||
-rw-r--r-- | main/src/main/RunScript.scala | 7 |
4 files changed, 33 insertions, 12 deletions
diff --git a/main/src/main/MainRunner.scala b/main/src/main/MainRunner.scala index e08905a6..c773087c 100644 --- a/main/src/main/MainRunner.scala +++ b/main/src/main/MainRunner.scala @@ -25,7 +25,8 @@ class MainRunner(val config: ammonite.main.Cli.Config, env : Map[String, String], setIdle: Boolean => Unit, debugLog: Boolean, - keepGoing: Boolean) + keepGoing: Boolean, + systemProperties: Map[String, String]) extends ammonite.MainRunner( config, outprintStream, errPrintStream, stdIn, outprintStream, errPrintStream @@ -85,7 +86,8 @@ class MainRunner(val config: ammonite.main.Cli.Config, debugEnabled = debugLog ), env, - keepGoing = keepGoing + keepGoing = keepGoing, + systemProperties ) result match{ diff --git a/main/src/main/MillServerMain.scala b/main/src/main/MillServerMain.scala index 862daaf7..500c3e8f 100644 --- a/main/src/main/MillServerMain.scala +++ b/main/src/main/MillServerMain.scala @@ -21,7 +21,8 @@ trait MillServerMain[T]{ stdout: PrintStream, stderr: PrintStream, env : Map[String, String], - setIdle: Boolean => Unit): (Boolean, Option[T]) + setIdle: Boolean => Unit, + systemProperties: Map[String, String]): (Boolean, Option[T]) } object MillServerMain extends mill.main.MillServerMain[Evaluator.State]{ @@ -44,6 +45,7 @@ object MillServerMain extends mill.main.MillServerMain[Evaluator.State]{ mill.main.client.Locks.files(args0(0)) ).run() } + def main0(args: Array[String], stateCache: Option[Evaluator.State], mainInteractive: Boolean, @@ -51,7 +53,8 @@ object MillServerMain extends mill.main.MillServerMain[Evaluator.State]{ stdout: PrintStream, stderr: PrintStream, env : Map[String, String], - setIdle: Boolean => Unit) = { + setIdle: Boolean => Unit, + systemProperties: Map[String, String]) = { MillMain.main0( args, stateCache, @@ -60,7 +63,8 @@ object MillServerMain extends mill.main.MillServerMain[Evaluator.State]{ stdout, stderr, env, - setIdle = setIdle + setIdle = setIdle, + systemProperties ) } } @@ -132,6 +136,7 @@ class Server[T](lockBase: String, } val args = Util.parseArgs(argStream) val env = Util.parseMap(argStream) + val systemProperties = Util.parseMap(argStream) argStream.close() @volatile var done = false @@ -147,6 +152,7 @@ class Server[T](lockBase: String, stderr, env.asScala.toMap, idle = _, + systemProperties.asScala.toMap ) sm.stateCache = newStateCache diff --git a/main/src/main/ReplApplyHandler.scala b/main/src/main/ReplApplyHandler.scala index 6f1e060d..7f959929 100644 --- a/main/src/main/ReplApplyHandler.scala +++ b/main/src/main/ReplApplyHandler.scala @@ -1,14 +1,13 @@ package mill.main +import scala.collection.mutable +import mill.api.Strict.Agg import mill.define.Applicative.ApplyHandler import mill.define.Segment.Label import mill.define._ import mill.eval.{Evaluator, Result} -import mill.api.Strict.Agg - -import scala.collection.mutable object ReplApplyHandler{ def apply[T](home: os.Path, disableTicker: Boolean, @@ -17,7 +16,8 @@ object ReplApplyHandler{ rootModule: mill.define.BaseModule, discover: Discover[_], debugLog: Boolean, - keepGoing: Boolean) = { + keepGoing: Boolean, + systemProperties: Map[String, String]): ReplApplyHandler = { new ReplApplyHandler( pprinter0, new Evaluator( @@ -36,7 +36,8 @@ object ReplApplyHandler{ debugEnabled = debugLog ), failFast = !keepGoing - ) + ), + systemProperties ) } def pprintCross(c: mill.define.Cross[_], evaluator: Evaluator) = { @@ -113,8 +114,15 @@ object ReplApplyHandler{ } } + class ReplApplyHandler(pprinter0: pprint.PPrinter, - val evaluator: Evaluator) extends ApplyHandler[Task] { + val evaluator: Evaluator, + systemProperties: Map[String, String]) extends ApplyHandler[Task] { + + systemProperties.foreach {case (k,v) => + System.setProperty(k,v) + } + // Evaluate classLoaderSig only once in the REPL to avoid busting caches // as the user enters more REPL commands and changes the classpath val classLoaderSig = Evaluator.classLoaderSig diff --git a/main/src/main/RunScript.scala b/main/src/main/RunScript.scala index ea8e554f..ab53aa1a 100644 --- a/main/src/main/RunScript.scala +++ b/main/src/main/RunScript.scala @@ -30,9 +30,14 @@ object RunScript{ stateCache: Option[Evaluator.State], log: Logger, env : Map[String, String], - keepGoing: Boolean) + keepGoing: Boolean, + systemProperties: Map[String, String]) : (Res[(Evaluator, Seq[PathRef], Either[String, Seq[ujson.Value]])], Seq[(os.Path, Long)]) = { + systemProperties.foreach {case (k,v) => + System.setProperty(k, v) + } + val (evalState, interpWatched) = stateCache match{ case Some(s) if watchedSigUnchanged(s.watched) => Res.Success(s) -> s.watched case _ => |