From a96754b75c1fbf1959aeac59040588211f5327c2 Mon Sep 17 00:00:00 2001 From: Olivier Melois Date: Thu, 29 Mar 2018 21:03:27 +0100 Subject: Adds envVars propagation client -> server Since Mill now executes in a long-lived JVM, the builds do not have a chance to use environment variables as inputs. This propagates the environment variables from the client all the way down to the context available to the tasks as a `Map[String, String]` so that they can be used as inputs should the user choose to do so. https://github.com/lihaoyi/mill/issues/257 --- main/src/mill/Main.scala | 17 ++++++++++++----- main/src/mill/main/MainRunner.scala | 6 ++++-- main/src/mill/main/RunScript.scala | 6 ++++-- 3 files changed, 20 insertions(+), 9 deletions(-) (limited to 'main/src') diff --git a/main/src/mill/Main.scala b/main/src/mill/Main.scala index e026dfe0..c9ec00ca 100644 --- a/main/src/mill/Main.scala +++ b/main/src/mill/Main.scala @@ -2,6 +2,8 @@ package mill import java.io.{InputStream, PrintStream} +import scala.collection.JavaConverters._ + import ammonite.main.Cli._ import ammonite.ops._ import ammonite.util.Util @@ -16,13 +18,15 @@ object ServerMain extends mill.clientserver.ServerMain[Evaluator.State]{ mainInteractive: Boolean, stdin: InputStream, stdout: PrintStream, - stderr: PrintStream) = Main.main0( + stderr: PrintStream, + env : Map[String, String]) = Main.main0( args, stateCache, mainInteractive, DummyInputStream, stdout, - stderr + stderr, + env ) } object Main { @@ -38,7 +42,8 @@ object Main { ammonite.Main.isInteractive(), System.in, System.out, - System.err + System.err, + System.getenv().asScala.toMap ) System.exit(if(result) 0 else 1) } @@ -48,7 +53,8 @@ object Main { mainInteractive: Boolean, stdin: InputStream, stdout: PrintStream, - stderr: PrintStream): (Boolean, Option[Evaluator.State]) = { + stderr: PrintStream, + env: Map[String, String]): (Boolean, Option[Evaluator.State]) = { import ammonite.main.Cli val removed = Set("predef-code", "no-home-predef") @@ -116,7 +122,8 @@ object Main { val runner = new mill.main.MainRunner( config.copy(colored = Some(mainInteractive)), stdout, stderr, stdin, - stateCache + stateCache, + env ) if (mill.clientserver.ClientServer.isJava9OrAbove) { diff --git a/main/src/mill/main/MainRunner.scala b/main/src/mill/main/MainRunner.scala index efebd5a5..fed664fd 100644 --- a/main/src/mill/main/MainRunner.scala +++ b/main/src/mill/main/MainRunner.scala @@ -20,7 +20,8 @@ class MainRunner(val config: ammonite.main.Cli.Config, outprintStream: PrintStream, errPrintStream: PrintStream, stdIn: InputStream, - stateCache0: Option[Evaluator.State] = None) + stateCache0: Option[Evaluator.State] = None, + env : Map[String, String]) extends ammonite.MainRunner( config, outprintStream, errPrintStream, stdIn, outprintStream, errPrintStream @@ -75,7 +76,8 @@ class MainRunner(val config: ammonite.main.Cli.Config, errPrintStream, errPrintStream, stdIn - ) + ), + env ) result match{ diff --git a/main/src/mill/main/RunScript.scala b/main/src/mill/main/RunScript.scala index 77930cc8..75042dea 100644 --- a/main/src/mill/main/RunScript.scala +++ b/main/src/mill/main/RunScript.scala @@ -29,7 +29,8 @@ object RunScript{ instantiateInterpreter: => Either[(Res.Failing, Seq[(Path, Long)]), ammonite.interp.Interpreter], scriptArgs: Seq[String], stateCache: Option[Evaluator.State], - log: Logger) + log: Logger, + env : Map[String, String]) : (Res[(Evaluator[Any], Seq[PathRef], Either[String, Seq[Js.Value]])], Seq[(Path, Long)]) = { val (evalState, interpWatched) = stateCache match{ @@ -53,7 +54,8 @@ object RunScript{ val evalRes = for(s <- evalState) - yield new Evaluator[Any](home, wd / 'out, wd / 'out, s.rootModule, log, s.classLoaderSig, s.workerCache) + yield new Evaluator[Any](home, wd / 'out, wd / 'out, s.rootModule, log, + s.classLoaderSig, s.workerCache, env) val evaluated = for{ evaluator <- evalRes -- cgit v1.2.3