summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-11-26 07:15:08 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2017-11-26 07:15:08 -0800
commit302008684d51e49f0ce70516f283f15d41ea3831 (patch)
treeade589eba2b10a08fff7eb057c6392d6b631232d
parent5557966d2e96c1711978a8b1606bd6c20d26030c (diff)
downloadmill-302008684d51e49f0ce70516f283f15d41ea3831.tar.gz
mill-302008684d51e49f0ce70516f283f15d41ea3831.tar.bz2
mill-302008684d51e49f0ce70516f283f15d41ea3831.zip
bring back ScalaModule#run, bring back TaskModule now with a new defaultCommandName member
-rw-r--r--core/src/main/scala/mill/Main.scala16
-rw-r--r--core/src/main/scala/mill/define/Applicative.scala1
-rw-r--r--core/src/main/scala/mill/define/Task.scala4
-rw-r--r--core/src/test/scala/mill/define/CrossTests.scala2
-rw-r--r--scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala15
5 files changed, 24 insertions, 14 deletions
diff --git a/core/src/main/scala/mill/Main.scala b/core/src/main/scala/mill/Main.scala
index 829b684c..873feed2 100644
--- a/core/src/main/scala/mill/Main.scala
+++ b/core/src/main/scala/mill/Main.scala
@@ -10,9 +10,8 @@ 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 {
-
def parseSelector(input: String) = {
import fastparse.all._
val segment = P( CharsWhileIn(('a' to 'z') ++ ('A' to 'Z') ++ ('0' to '9')).! ).map(
@@ -55,10 +54,10 @@ object Main {
remainingSelector match{
case Mirror.Segment.Cross(_) :: Nil => Left("Selector cannot start with a [cross] segment")
case Mirror.Segment.Label(last) :: Nil =>
- def target: Option[Task[Any]] =
+ def target =
hierarchy.targets
.find(_.label == last)
- .map{x => x.run(hierarchy.node(obj, remainingCrossSelectors))}
+ .map(x => Right(x.run(hierarchy.node(obj, remainingCrossSelectors))))
def invokeCommand[V](mirror: Mirror[T, V], name: String) = for{
cmd <- mirror.commands.find(_.name == name)
@@ -70,15 +69,18 @@ object Main {
case _ => Left(s"Command failed $last")
}
- def runCommand = for{
+ def runDefault = for{
(label, child) <- hierarchy.children
if label == last
- res <- invokeCommand(child, "run")
+ res <- child.node(obj, remainingCrossSelectors) match{
+ case taskMod: TaskModule => Some(invokeCommand(child, taskMod.defaultCommandName()))
+ case _ => None
+ }
} yield res
def command = invokeCommand(hierarchy, last)
- command orElse target.map(Right(_)) orElse runCommand.headOption match{
+ command orElse target orElse runDefault.headOption.flatten match{
case None => Left("Cannot resolve task " + renderSelector(
(Mirror.Segment.Label(last) :: revSelectorsSoFar).reverse)
)
diff --git a/core/src/main/scala/mill/define/Applicative.scala b/core/src/main/scala/mill/define/Applicative.scala
index 5c626455..4973dfd0 100644
--- a/core/src/main/scala/mill/define/Applicative.scala
+++ b/core/src/main/scala/mill/define/Applicative.scala
@@ -21,6 +21,7 @@ object Applicative {
def apply(): T = ???
}
type Id[+T] = T
+
trait Applyer[W[_], T[_], Z[_], Ctx]{
@compileTimeOnly("Target.ctx() can only be used with a T{...} block")
def ctx(): Ctx = ???
diff --git a/core/src/main/scala/mill/define/Task.scala b/core/src/main/scala/mill/define/Task.scala
index 0e7b4375..c54634db 100644
--- a/core/src/main/scala/mill/define/Task.scala
+++ b/core/src/main/scala/mill/define/Task.scala
@@ -141,7 +141,9 @@ class Source(path: ammonite.ops.Path) extends Task[PathRef]{
object Task {
-
+ trait TaskModule extends Module {
+ def defaultCommandName(): String
+ }
trait Module extends mill.define.Cacher[Target]{
def wrapCached[T](t: Target[T], enclosing: String): Target[T] = t
}
diff --git a/core/src/test/scala/mill/define/CrossTests.scala b/core/src/test/scala/mill/define/CrossTests.scala
index 07545d44..5c0f5c08 100644
--- a/core/src/test/scala/mill/define/CrossTests.scala
+++ b/core/src/test/scala/mill/define/CrossTests.scala
@@ -14,8 +14,6 @@ object CrossTests extends TestSuite{
Cross(List((List(1), "1"), (List(2), "2"), (List(3), "3")))
)
-
-
'double - assertEquals(
for{
a <- Cross(1, 2, 3)
diff --git a/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala b/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala
index 70bb1a35..a9c136d6 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
+import mill.define.Task.{Module, TaskModule}
import mill.eval.{Evaluator, PathRef}
import mill.modules.Jvm.{createAssembly, createJar}
import mill.util.OSet
@@ -166,9 +166,10 @@ object ScalaModule{
)
}
import ScalaModule._
-trait TestScalaModule extends ScalaModule {
+trait TestScalaModule extends ScalaModule with TaskModule {
+ override def defaultCommandName() = "test"
def testFramework: T[String]
- def run(args: String*) = T.command{
+ def test(args: String*) = T.command{
TestRunner(
testFramework(),
runDepClasspath().map(_.path) :+ compile().path,
@@ -177,7 +178,8 @@ trait TestScalaModule extends ScalaModule {
)
}
}
-trait ScalaModule extends Module{ outer =>
+trait ScalaModule extends Module with TaskModule{ outer =>
+ def defaultCommandName() = "run"
trait Tests extends TestScalaModule{
def scalaVersion = outer.scalaVersion()
override def projectDeps = Seq(outer)
@@ -276,6 +278,11 @@ 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,