mirror of https://github.com/sbt/sbt.git
error handling adjustments, including showing failing task in red (for #29)
This commit is contained in:
parent
2432642571
commit
e5443141b1
|
|
@ -8,6 +8,7 @@ package sbt
|
|||
import Keys.{streams, Streams, TaskStreams}
|
||||
import Keys.{dummyState, dummyStreamsManager, parseResult, resolvedScoped, streamsManager, taskDefinitionKey}
|
||||
import Scope.{GlobalScope, ThisScope}
|
||||
import scala.Console.{RED, RESET}
|
||||
|
||||
object EvaluateTask
|
||||
{
|
||||
|
|
@ -48,7 +49,11 @@ object EvaluateTask
|
|||
getStreams(key, streams).log.trace(ex)
|
||||
log.error("Incomplete tasks (run 'last <task>' for the full log):")
|
||||
for( (key, msg, ex) <- keyed if(msg.isDefined || ex.isDefined) )
|
||||
getStreams(key, streams).log.error(" " + Project.display(key) + ": " + (msg.toList ++ ex.toList).mkString("\n\t"))
|
||||
{
|
||||
val msgString = (msg.toList ++ ex.toList.map(ErrorHandling.reducedToString)).mkString("\n\t")
|
||||
val keyString = if(log.ansiCodesSupported) RED + key.key.label + RESET else key.key.label
|
||||
getStreams(key, streams).log.error(" " + Scope.display(key.scope, keyString) + ": " + msgString)
|
||||
}
|
||||
for(u <- un)
|
||||
log.debug(u.toString)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ package sbt
|
|||
import scala.collection.JavaConversions._
|
||||
import Function.tupled
|
||||
import java.net.URI
|
||||
import java.lang.reflect.InvocationTargetException
|
||||
import Path._
|
||||
|
||||
import java.io.File
|
||||
|
|
@ -380,15 +381,20 @@ object BuiltinCommands
|
|||
{
|
||||
case _: Incomplete => () // already handled by evaluateTask
|
||||
case _: NoMessageException => ()
|
||||
case _: MessageOnlyException =>
|
||||
log.error(e.toString)
|
||||
case _ =>
|
||||
log.trace(e)
|
||||
log.error(e.toString)
|
||||
log.error("Use 'last' for the full log.")
|
||||
case ite: InvocationTargetException =>
|
||||
val cause = ite.getCause
|
||||
if(cause == null || cause == ite) logFullException(ite, log) else handleException(cause, s, log)
|
||||
case _: MessageOnlyException => log.error(e.toString)
|
||||
case _ => logFullException(e, log)
|
||||
}
|
||||
s.fail
|
||||
}
|
||||
def logFullException(e: Throwable, log: Logger)
|
||||
{
|
||||
log.trace(e)
|
||||
log.error(ErrorHandling reducedToString e)
|
||||
log.error("Use 'last' for the full log.")
|
||||
}
|
||||
|
||||
def addAlias(s: State, name: String, value: String): State =
|
||||
if(Command validID name) {
|
||||
|
|
|
|||
|
|
@ -21,6 +21,15 @@ object ErrorHandling
|
|||
def convert[T](f: => T): Either[Exception, T] =
|
||||
try { Right(f) }
|
||||
catch { case e: Exception => Left(e) }
|
||||
|
||||
def reducedToString(e: Throwable): String =
|
||||
if(e.getClass == classOf[RuntimeException])
|
||||
{
|
||||
val msg = e.getMessage
|
||||
if(msg == null || msg.isEmpty) e.toString else msg
|
||||
}
|
||||
else
|
||||
e.toString
|
||||
}
|
||||
final class TranslatedException private[sbt](msg: String, cause: Throwable) extends RuntimeException(msg, cause)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue