summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/src/main/scala/mill/Main.scala36
-rw-r--r--core/src/main/scala/mill/define/Task.scala3
-rw-r--r--scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala17
-rw-r--r--scalaplugin/src/main/scala/mill/scalaplugin/TestRunner.scala5
4 files changed, 25 insertions, 36 deletions
diff --git a/core/src/main/scala/mill/Main.scala b/core/src/main/scala/mill/Main.scala
index 4012128a..cf840a51 100644
--- a/core/src/main/scala/mill/Main.scala
+++ b/core/src/main/scala/mill/Main.scala
@@ -10,7 +10,6 @@ import mill.eval.{Evaluator, Result}
import mill.util.OSet
import ammonite.main.Scripts.pathScoptRead
import ammonite.repl.Repl
-import mill.define.Task.TaskModule
object Main {
@@ -61,26 +60,25 @@ object Main {
.find(_.label == last)
.map{x => x.run(hierarchy.node(obj, remainingCrossSelectors))}
- def targetModule: Seq[Task[Any]] = for{
+ def invokeCommand[V](mirror: Mirror[T, V], name: String) = for{
+ cmd <- mirror.commands.find(_.name == name)
+ } yield cmd.invoke(
+ mirror.node(obj, remainingCrossSelectors),
+ ammonite.main.Scripts.groupArgs(rest.toList)
+ ) match {
+ case Router.Result.Success(v) => Right(v)
+ case _ => Left(s"Command failed $last")
+ }
+
+ def runCommand = for{
(label, child) <- hierarchy.children
if label == last
- node <- child.node(obj, remainingCrossSelectors) match{
- case x: TaskModule => Some(x)
- case _ => None
- }
- } yield node.self()
-
- def command =
- for(x <- hierarchy.commands.find(_.name == last))
- yield x.invoke(
- hierarchy.node(obj, remainingCrossSelectors),
- ammonite.main.Scripts.groupArgs(rest.toList)
- ) match {
- case Router.Result.Success(v) => Right(v)
- case _ => Left(s"Command failed $last")
- }
-
- command orElse target.map(Right(_)) orElse targetModule.headOption.map(Right(_)) match{
+ res <- invokeCommand(child, "run")
+ } yield res
+
+ def command = invokeCommand(hierarchy, last)
+
+ command orElse target.map(Right(_)) orElse runCommand.headOption match{
case None => Left("Cannot resolve task " + renderSelector(
(Mirror.Segment.Label(last) :: revSelectorsSoFar).reverse)
)
diff --git a/core/src/main/scala/mill/define/Task.scala b/core/src/main/scala/mill/define/Task.scala
index 91eb3793..0e7b4375 100644
--- a/core/src/main/scala/mill/define/Task.scala
+++ b/core/src/main/scala/mill/define/Task.scala
@@ -145,9 +145,6 @@ object Task {
trait Module extends mill.define.Cacher[Target]{
def wrapCached[T](t: Target[T], enclosing: String): Target[T] = t
}
- trait TaskModule extends Module {
- def self(): Task[_]
- }
class Task0[T](t: T) extends Task[T]{
lazy val t0 = t
diff --git a/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala b/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala
index 2e842a6e..70bb1a35 100644
--- a/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala
+++ b/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala
@@ -7,7 +7,7 @@ import java.util.Optional
import ammonite.ops._
import coursier.{Cache, Fetch, MavenRepository, Repository, Resolution}
import mill.define.Task
-import mill.define.Task.{Module, TaskModule}
+import mill.define.Task.Module
import mill.eval.{Evaluator, PathRef}
import mill.modules.Jvm.{createAssembly, createJar}
import mill.util.OSet
@@ -166,16 +166,16 @@ object ScalaModule{
)
}
import ScalaModule._
-trait TestScalaModule extends ScalaModule with TaskModule{
+trait TestScalaModule extends ScalaModule {
def testFramework: T[String]
- def run() = T.command{
+ def run(args: String*) = T.command{
TestRunner(
testFramework(),
runDepClasspath().map(_.path) :+ compile().path,
- Seq(compile().path)
+ Seq(compile().path),
+ args
)
}
- def self() = run()
}
trait ScalaModule extends Module{ outer =>
trait Tests extends TestScalaModule{
@@ -276,13 +276,6 @@ trait ScalaModule extends Module{ outer =>
PathRef(dest)
}
-
-
- def run(mainClass: String) = T.command{
- import ammonite.ops._, ImplicitWd._
- %('java, "-cp", (runDepClasspath().map(_.path) :+ compile().path).mkString(":"), mainClass)
- }
-
def console() = T.command{
import ammonite.ops._, ImplicitWd._
%('java,
diff --git a/scalaplugin/src/main/scala/mill/scalaplugin/TestRunner.scala b/scalaplugin/src/main/scala/mill/scalaplugin/TestRunner.scala
index d8577f9c..2d0495e4 100644
--- a/scalaplugin/src/main/scala/mill/scalaplugin/TestRunner.scala
+++ b/scalaplugin/src/main/scala/mill/scalaplugin/TestRunner.scala
@@ -40,7 +40,8 @@ object TestRunner {
def apply(frameworkName: String,
entireClasspath: Seq[Path],
- testClassfilePath: Seq[Path]): mill.eval.Result[Unit] = {
+ testClassfilePath: Seq[Path],
+ args: Seq[String]): mill.eval.Result[Unit] = {
val outerClassLoader = getClass.getClassLoader
val cl = new URLClassLoader(entireClasspath.map(_.toIO.toURI.toURL).toArray){
override def findClass(name: String) = {
@@ -58,7 +59,7 @@ object TestRunner {
val testClasses = runTests(cl, framework, testClassfilePath)
- val runner = framework.runner(Array(), Array(), cl)
+ val runner = framework.runner(args.toArray, args.toArray, cl)
val tasks = runner.tasks(
for((cls, fingerprint) <- testClasses.toArray)