summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorRobby <robby@santoslab.org>2018-03-19 10:13:03 -0500
committerLi Haoyi <haoyi.sg@gmail.com>2018-03-19 08:13:03 -0700
commite7ac7323693edbdc350ec36b578ba3e101657360 (patch)
tree34851720f0698eea29b659693ee836b9ddcb9dad /main
parent27112151475e17845fa2675e2710cba77e9a0ede (diff)
downloadmill-e7ac7323693edbdc350ec36b578ba3e101657360.tar.gz
mill-e7ac7323693edbdc350ec36b578ba3e101657360.tar.bz2
mill-e7ac7323693edbdc350ec36b578ba3e101657360.zip
Java 9 optimization by caching rt.jar (#239)
* Upgraded Ammonite to 1.0.5-7-f032887 that includes a Java 9 performance optimization for mill's client-server mode (lihaoyi/Ammonite#773). * Java 9 optimization for interactive mode by caching rt.jar. * Refactored based on @lihaoyi's comments on #239. * Removed client side rt.jar caching. * Propagatio of home path from Cli. * Propagation, propagation, propagation!
Diffstat (limited to 'main')
-rw-r--r--main/src/mill/Main.scala6
-rw-r--r--main/src/mill/main/MainRunner.scala1
-rw-r--r--main/src/mill/main/ReplApplyHandler.scala5
-rw-r--r--main/src/mill/main/RunScript.scala5
-rw-r--r--main/src/mill/modules/Jvm.scala3
-rw-r--r--main/test/src/mill/util/TestEvaluator.scala2
6 files changed, 15 insertions, 7 deletions
diff --git a/main/src/mill/Main.scala b/main/src/mill/Main.scala
index 6c10f6f2..a899c8c6 100644
--- a/main/src/mill/Main.scala
+++ b/main/src/mill/Main.scala
@@ -59,7 +59,7 @@ object Main {
val millArgSignature =
Cli.genericSignature.filter(a => !removed(a.name)) :+ interactiveSignature
- val millHome = home / ".mill" / "ammonite"
+ val millHome = mill.util.Ctx.defaultHome
Cli.groupArgs(
args.toList,
@@ -88,12 +88,14 @@ object Main {
stderr.println("Build repl needs to be run with the -i/--interactive flag")
(false, stateCache)
}else{
+ val tqs = "\"\"\""
val config =
if(!repl) cliConfig
else cliConfig.copy(
predefCode =
- """import $file.build, build._
+ s"""import $$file.build, build._
|implicit val replApplyHandler = mill.main.ReplApplyHandler(
+ | ammonite.ops.Path($tqs${cliConfig.home.toIO.getCanonicalPath.replaceAllLiterally("$", "$$")}$tqs),
| interp.colors(),
| repl.pprinter(),
| build.millSelf.get,
diff --git a/main/src/mill/main/MainRunner.scala b/main/src/mill/main/MainRunner.scala
index ff7bcbbd..efebd5a5 100644
--- a/main/src/mill/main/MainRunner.scala
+++ b/main/src/mill/main/MainRunner.scala
@@ -62,6 +62,7 @@ class MainRunner(val config: ammonite.main.Cli.Config,
printing = true,
mainCfg => {
val (result, interpWatched) = RunScript.runScript(
+ config.home,
mainCfg.wd,
scriptPath,
mainCfg.instantiateInterpreter(),
diff --git a/main/src/mill/main/ReplApplyHandler.scala b/main/src/mill/main/ReplApplyHandler.scala
index a2b042ad..9ce30142 100644
--- a/main/src/mill/main/ReplApplyHandler.scala
+++ b/main/src/mill/main/ReplApplyHandler.scala
@@ -1,6 +1,7 @@
package mill.main
+import ammonite.ops.Path
import mill.define.Applicative.ApplyHandler
import mill.define.Segment.Label
import mill.define._
@@ -9,13 +10,15 @@ import mill.util.Strict.Agg
import scala.collection.mutable
object ReplApplyHandler{
- def apply[T](colors: ammonite.util.Colors,
+ def apply[T](home: Path,
+ colors: ammonite.util.Colors,
pprinter0: pprint.PPrinter,
rootModule: mill.define.BaseModule,
discover: Discover[_]) = {
new ReplApplyHandler(
pprinter0,
new Evaluator(
+ home,
ammonite.ops.pwd / 'out,
ammonite.ops.pwd / 'out,
rootModule,
diff --git a/main/src/mill/main/RunScript.scala b/main/src/mill/main/RunScript.scala
index 553f5b69..4d8653fb 100644
--- a/main/src/mill/main/RunScript.scala
+++ b/main/src/mill/main/RunScript.scala
@@ -23,7 +23,8 @@ import scala.reflect.ClassTag
* subsystem
*/
object RunScript{
- def runScript(wd: Path,
+ def runScript(home: Path,
+ wd: Path,
path: Path,
instantiateInterpreter: => Either[(Res.Failing, Seq[(Path, Long)]), ammonite.interp.Interpreter],
scriptArgs: Seq[String],
@@ -52,7 +53,7 @@ object RunScript{
val evalRes =
for(s <- evalState)
- yield new Evaluator[Any](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)
val evaluated = for{
evaluator <- evalRes
diff --git a/main/src/mill/modules/Jvm.scala b/main/src/mill/modules/Jvm.scala
index d71cf75c..2ded95db 100644
--- a/main/src/mill/modules/Jvm.scala
+++ b/main/src/mill/modules/Jvm.scala
@@ -101,7 +101,8 @@ object Jvm {
def inprocess[T](classPath: Agg[Path],
classLoaderOverrideSbtTesting: Boolean,
- body: ClassLoader => T): T = {
+ body: ClassLoader => T)
+ (implicit ctx: Ctx.Home): T = {
val cl = if (classLoaderOverrideSbtTesting) {
val outerClassLoader = getClass.getClassLoader
new URLClassLoader(classPath.map(_.toIO.toURI.toURL).toArray, mill.util.ClassLoader.create(Seq(), null)){
diff --git a/main/test/src/mill/util/TestEvaluator.scala b/main/test/src/mill/util/TestEvaluator.scala
index 078254f1..ffff4b99 100644
--- a/main/test/src/mill/util/TestEvaluator.scala
+++ b/main/test/src/mill/util/TestEvaluator.scala
@@ -30,7 +30,7 @@ class TestEvaluator[T <: TestUtil.BaseModule](module: T)
// true,
// ammonite.util.Colors.Default, System.out, System.out, System.err, System.in
// )
- val evaluator = new Evaluator(outPath, TestEvaluator.externalOutPath, module, logger)
+ val evaluator = new Evaluator(Ctx.defaultHome, outPath, TestEvaluator.externalOutPath, module, logger)
def apply[T](t: Task[T]): Either[Result.Failing[T], (T, Int)] = {
val evaluated = evaluator.evaluate(Agg(t))