summaryrefslogtreecommitdiff
path: root/main/src
diff options
context:
space:
mode:
authorOlivier Melois <olivierm@cakesolutions.net>2018-03-29 21:03:27 +0100
committerOlivier Melois <olivierm@cakesolutions.net>2018-03-29 21:12:55 +0100
commita96754b75c1fbf1959aeac59040588211f5327c2 (patch)
tree75e2d6c69c2e28d4500505da002ea387f2771027 /main/src
parent41ca6c22894e863f5042cd8f49f5c3c6d52acc23 (diff)
downloadmill-a96754b75c1fbf1959aeac59040588211f5327c2.tar.gz
mill-a96754b75c1fbf1959aeac59040588211f5327c2.tar.bz2
mill-a96754b75c1fbf1959aeac59040588211f5327c2.zip
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
Diffstat (limited to 'main/src')
-rw-r--r--main/src/mill/Main.scala17
-rw-r--r--main/src/mill/main/MainRunner.scala6
-rw-r--r--main/src/mill/main/RunScript.scala6
3 files changed, 20 insertions, 9 deletions
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