From d2832203dfa4880afd1fe8f0a90d8db2e88e2dba Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Fri, 12 Jan 2018 01:39:33 -0800 Subject: - 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` --- .../main/scala/mill/main/ReplApplyHandler.scala | 28 ++++++++++++++++++++-- core/src/main/scala/mill/util/Logger.scala | 2 ++ 2 files changed, 28 insertions(+), 2 deletions(-) (limited to 'core/src/main') 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)) -- cgit v1.2.3