summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-01-12 01:39:33 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-01-12 01:39:33 -0800
commitd2832203dfa4880afd1fe8f0a90d8db2e88e2dba (patch)
tree57792cc2493a9a15d749d1e5cb75ce1d84b8febd
parent865c8fc2c11ef5f364315be197226723a3a47821 (diff)
downloadmill-d2832203dfa4880afd1fe8f0a90d8db2e88e2dba.tar.gz
mill-d2832203dfa4880afd1fe8f0a90d8db2e88e2dba.tar.bz2
mill-d2832203dfa4880afd1fe8f0a90d8db2e88e2dba.zip
- Better error reporting in `ReplApplyHandler`
- Logger now prints a newline when transitioning to ticker-mode, to avoid over-writing anything on the current line - Consolidate `scalalib.Module` logic around `assemblyClasspath`
-rw-r--r--core/src/main/scala/mill/main/ReplApplyHandler.scala28
-rw-r--r--core/src/main/scala/mill/util/Logger.scala2
-rw-r--r--scalalib/src/main/scala/mill/scalalib/Module.scala8
3 files changed, 32 insertions, 6 deletions
diff --git a/core/src/main/scala/mill/main/ReplApplyHandler.scala b/core/src/main/scala/mill/main/ReplApplyHandler.scala
index 7ce00f67..d4236487 100644
--- a/core/src/main/scala/mill/main/ReplApplyHandler.scala
+++ b/core/src/main/scala/mill/main/ReplApplyHandler.scala
@@ -4,7 +4,7 @@ package mill.main
import mill.define.Applicative.ApplyHandler
import mill.define._
import mill.discover.{Discovered, Mirror}
-import mill.eval.Evaluator
+import mill.eval.{Evaluator, Result}
import mill.util.OSet
import scala.collection.mutable
@@ -34,7 +34,31 @@ class ReplApplyHandler(pprinter0: pprint.PPrinter, evaluator: Evaluator[_]) exte
// as the user enters more REPL commands and changes the classpath
val classLoaderSig = Evaluator.classLoaderSig
override def apply[V](t: Task[V]) = {
- evaluator.evaluate(OSet(t)).values.head.asInstanceOf[V]
+ val res = evaluator.evaluate(OSet(t))
+ res.values match{
+ case Seq(head: V) => head
+ case Nil =>
+ val msg = new mutable.StringBuilder()
+ msg.append(res.failing.keyCount + " targets failed\n")
+ for((k, vs) <- res.failing.items){
+ msg.append(k match{
+ case Left(t) => "Anonymous Task\n"
+ case Right(k) => k.segments.render + "\n"
+ })
+
+ for(v <- vs){
+ v match{
+ case Result.Failure(m) => msg.append(m + "\n")
+ case Result.Exception(t, outerStack) =>
+ msg.append(
+ t.toString + t.getStackTrace.dropRight(outerStack.length).map("\n " + _).mkString + "\n"
+ )
+
+ }
+ }
+ }
+ throw new Exception(msg.toString)
+ }
}
val generatedEval = new EvalGenerated(evaluator)
diff --git a/core/src/main/scala/mill/util/Logger.scala b/core/src/main/scala/mill/util/Logger.scala
index 1cec82ff..b42cc907 100644
--- a/core/src/main/scala/mill/util/Logger.scala
+++ b/core/src/main/scala/mill/util/Logger.scala
@@ -89,6 +89,8 @@ case class PrintLogger(colored: Boolean,
nav.clearLine(2)
nav.left(9999)
p.flush()
+ }else{
+ println()
}
lastLineTicker = true
infoStream.println(colors.info()(s))
diff --git a/scalalib/src/main/scala/mill/scalalib/Module.scala b/scalalib/src/main/scala/mill/scalalib/Module.scala
index 4437c08f..125fc288 100644
--- a/scalalib/src/main/scala/mill/scalalib/Module.scala
+++ b/scalalib/src/main/scala/mill/scalalib/Module.scala
@@ -36,7 +36,7 @@ trait TestModule extends Module with TaskModule {
jvmOptions = forkArgs(),
options = Seq(
testFramework(),
- (runDepClasspath().map(_.path) :+ compile().classes.path).distinct.mkString(" "),
+ assemblyClasspath().map(_.path).distinct.mkString(" "),
Seq(compile().classes.path).mkString(" "),
args.mkString(" "),
outputPath.toString,
@@ -53,7 +53,7 @@ trait TestModule extends Module with TaskModule {
def test(args: String*) = T.command{
val (doneMsg, results) = TestRunner(
testFramework(),
- runDepClasspath().map(_.path) :+ compile().classes.path,
+ assemblyClasspath().map(_.path),
Seq(compile().classes.path),
args
)
@@ -259,7 +259,7 @@ trait Module extends mill.Module with TaskModule { outer =>
def run(args: String*) = T.command{
subprocess(
mainClass().getOrElse(throw new RuntimeException("No mainClass provided!")),
- runDepClasspath().map(_.path) :+ compile().classes.path,
+ assemblyClasspath().map(_.path),
forkArgs(),
args,
workingDir = ammonite.ops.pwd)
@@ -268,7 +268,7 @@ trait Module extends mill.Module with TaskModule { outer =>
def runMain(mainClass: String, args: String*) = T.command{
subprocess(
mainClass,
- runDepClasspath().map(_.path) :+ compile().classes.path,
+ assemblyClasspath().map(_.path),
forkArgs(),
args,
workingDir = ammonite.ops.pwd