summaryrefslogtreecommitdiff
path: root/scalaworker
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-01-23 09:46:13 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-01-23 09:46:13 -0800
commit42189d826bc1544013c31bb591ed6a23ccf853b1 (patch)
tree62ce1fa36ed912403fa745b554107194ca25ca3a /scalaworker
parentac3266ca796b8ed2052804077820d2f39cde362d (diff)
downloadmill-42189d826bc1544013c31bb591ed6a23ccf853b1.tar.gz
mill-42189d826bc1544013c31bb591ed6a23ccf853b1.tar.bz2
mill-42189d826bc1544013c31bb591ed6a23ccf853b1.zip
update mill build to work with new isolated scalaworker
Diffstat (limited to 'scalaworker')
-rw-r--r--scalaworker/src/mill/scalaworker/ScalaWorker.scala37
1 files changed, 34 insertions, 3 deletions
diff --git a/scalaworker/src/mill/scalaworker/ScalaWorker.scala b/scalaworker/src/mill/scalaworker/ScalaWorker.scala
index df92cd0f..6c6cb504 100644
--- a/scalaworker/src/mill/scalaworker/ScalaWorker.scala
+++ b/scalaworker/src/mill/scalaworker/ScalaWorker.scala
@@ -7,15 +7,16 @@ import java.util.Optional
import java.util.zip.ZipInputStream
import ammonite.ops.{Path, exists, ls, mkdir}
+import ammonite.util.Colors
import mill.Agg
import mill.define.Worker
import mill.eval.PathRef
import mill.modules.Jvm
-import mill.scalalib.CompilationResult
+import mill.scalalib.{CompilationResult, TestRunner}
import xsbti.compile.{CompilerCache => _, FileAnalysisStore => _, ScalaInstance => _, _}
import mill.scalalib.Lib.grepJar
import mill.scalalib.TestRunner.Result
-import mill.util.Ctx
+import mill.util.{Ctx, PrintLogger}
import sbt.internal.inc._
import sbt.internal.util.{ConsoleOut, MainAppender}
import sbt.testing._
@@ -31,7 +32,37 @@ case class MockedLookup(am: File => Optional[CompileAnalysis]) extends PerClassp
Locate.definesClass(classpathEntry)
}
+object ScalaWorker{
+
+ def main(args: Array[String]): Unit = {
+ try{
+ val result = new ScalaWorker(null).apply(
+ frameworkName = args(0),
+ entireClasspath = Agg.from(args(1).split(" ").map(Path(_))),
+ testClassfilePath = Agg.from(args(2).split(" ").map(Path(_))),
+ args = args(3) match{ case "" => Nil case x => x.split(" ").toList }
+ )(new PrintLogger(
+ args(5) == "true",
+ if(args(5) == "true") Colors.Default
+ else Colors.BlackWhite,
+ System.out,
+ System.err,
+ System.err
+ ))
+ val outputPath = args(4)
+ ammonite.ops.write(Path(outputPath), upickle.default.write(result))
+ }catch{case e: Throwable =>
+ println(e)
+ e.printStackTrace()
+ }
+ // Tests are over, kill the JVM whether or not anyone's threads are still running
+ // Always return 0, even if tests fail. The caller can pick up the detailed test
+ // results from the outputPath
+ System.exit(0)
+ }
+
+}
class ScalaWorker(ctx0: mill.util.Ctx) extends mill.scalalib.ScalaWorkerApi{
@volatile var scalaClassloaderCache = Option.empty[(Long, ClassLoader)]
@volatile var scalaInstanceCache = Option.empty[(Long, ScalaInstance)]
@@ -167,7 +198,7 @@ class ScalaWorker(ctx0: mill.util.Ctx) extends mill.scalalib.ScalaWorkerApi{
entireClasspath: Agg[Path],
testClassfilePath: Agg[Path],
args: Seq[String])
- (implicit ctx: mill.util.Ctx): (String, Seq[Result]) = {
+ (implicit ctx: mill.util.Ctx.LogCtx): (String, Seq[Result]) = {
Jvm.inprocess(entireClasspath, classLoaderOverrideSbtTesting = true, cl => {
val framework = cl.loadClass(frameworkName)