diff options
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) |