mirror of https://github.com/sbt/sbt.git
Merge pull request #105 from eed3si9n/wip/success
Use event logging to send success
This commit is contained in:
commit
aefbbae6ec
|
|
@ -0,0 +1,32 @@
|
|||
/**
|
||||
* This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]].
|
||||
*/
|
||||
|
||||
// DO NOT EDIT MANUALLY
|
||||
package sbt.internal.util
|
||||
final class SuccessEvent private (
|
||||
val message: String) extends Serializable {
|
||||
|
||||
|
||||
|
||||
override def equals(o: Any): Boolean = o match {
|
||||
case x: SuccessEvent => (this.message == x.message)
|
||||
case _ => false
|
||||
}
|
||||
override def hashCode: Int = {
|
||||
37 * (37 * (17 + "sbt.internal.util.SuccessEvent".##) + message.##)
|
||||
}
|
||||
override def toString: String = {
|
||||
"SuccessEvent(" + message + ")"
|
||||
}
|
||||
protected[this] def copy(message: String = message): SuccessEvent = {
|
||||
new SuccessEvent(message)
|
||||
}
|
||||
def withMessage(message: String): SuccessEvent = {
|
||||
copy(message = message)
|
||||
}
|
||||
}
|
||||
object SuccessEvent {
|
||||
|
||||
def apply(message: String): SuccessEvent = new SuccessEvent(message)
|
||||
}
|
||||
|
|
@ -8,4 +8,5 @@ trait JsonProtocol extends sjsonnew.BasicJsonProtocol
|
|||
with sbt.internal.util.codec.StringEventFormats
|
||||
with sbt.internal.util.codec.TraceEventFormats
|
||||
with sbt.internal.util.codec.AbstractEntryFormats
|
||||
with sbt.internal.util.codec.SuccessEventFormats
|
||||
object JsonProtocol extends JsonProtocol
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
/**
|
||||
* This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]].
|
||||
*/
|
||||
|
||||
// DO NOT EDIT MANUALLY
|
||||
package sbt.internal.util.codec
|
||||
import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError }
|
||||
trait SuccessEventFormats { self: sjsonnew.BasicJsonProtocol =>
|
||||
implicit lazy val SuccessEventFormat: JsonFormat[sbt.internal.util.SuccessEvent] = new JsonFormat[sbt.internal.util.SuccessEvent] {
|
||||
override def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.util.SuccessEvent = {
|
||||
jsOpt match {
|
||||
case Some(js) =>
|
||||
unbuilder.beginObject(js)
|
||||
val message = unbuilder.readField[String]("message")
|
||||
unbuilder.endObject()
|
||||
sbt.internal.util.SuccessEvent(message)
|
||||
case None =>
|
||||
deserializationError("Expected JsObject but found None")
|
||||
}
|
||||
}
|
||||
override def write[J](obj: sbt.internal.util.SuccessEvent, builder: Builder[J]): Unit = {
|
||||
builder.beginObject()
|
||||
builder.addField("message", obj.message)
|
||||
builder.endObject()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -21,3 +21,7 @@ type TraceEvent implements sbt.internal.util.AbstractEntry {
|
|||
channelName: String
|
||||
execId: String
|
||||
}
|
||||
|
||||
type SuccessEvent {
|
||||
message: String!
|
||||
}
|
||||
|
|
|
|||
|
|
@ -285,13 +285,6 @@ class ConsoleAppender private[ConsoleAppender] (
|
|||
appendMessage(level, message)
|
||||
}
|
||||
|
||||
// TODO:
|
||||
// success is called by ConsoleLogger.
|
||||
// This should turn into an event.
|
||||
private[sbt] def success(message: => String): Unit = {
|
||||
appendLog(SUCCESS_LABEL_COLOR, Level.SuccessLabel, SUCCESS_MESSAGE_COLOR, message)
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs the stack trace of `t`, possibly shortening it.
|
||||
*
|
||||
|
|
@ -371,6 +364,11 @@ class ConsoleAppender private[ConsoleAppender] (
|
|||
}
|
||||
}
|
||||
|
||||
// success is called by ConsoleLogger.
|
||||
private[sbt] def success(message: => String): Unit = {
|
||||
appendLog(SUCCESS_LABEL_COLOR, Level.SuccessLabel, SUCCESS_MESSAGE_COLOR, message)
|
||||
}
|
||||
|
||||
private def write(msg: String): Unit = {
|
||||
val cleanedMsg =
|
||||
if (!useFormat || !ansiCodesSupported) EscHelpers.removeEscapeSequences(msg)
|
||||
|
|
@ -380,27 +378,30 @@ class ConsoleAppender private[ConsoleAppender] (
|
|||
|
||||
private def appendMessage(level: Level.Value, msg: Message): Unit =
|
||||
msg match {
|
||||
case o: ObjectMessage => objectToLines(o.getParameter) foreach { appendLog(level, _) }
|
||||
case o: ReusableObjectMessage => objectToLines(o.getParameter) foreach { appendLog(level, _) }
|
||||
case o: ObjectMessage => appendMessageContent(level, o.getParameter)
|
||||
case o: ReusableObjectMessage => appendMessageContent(level, o.getParameter)
|
||||
case _ => appendLog(level, msg.getFormattedMessage)
|
||||
}
|
||||
|
||||
private def objectToLines(o: AnyRef): Vector[String] =
|
||||
private def appendMessageContent(level: Level.Value, o: AnyRef): Unit = {
|
||||
def appendEvent(oe: ObjectEvent[_]): Unit =
|
||||
{
|
||||
val contentType = oe.contentType
|
||||
LogExchange.stringCodec[AnyRef](contentType) match {
|
||||
case Some(codec) if contentType == "sbt.internal.util.SuccessEvent" =>
|
||||
codec.showLines(oe.message.asInstanceOf[AnyRef]).toVector foreach { success(_) }
|
||||
case Some(codec) =>
|
||||
codec.showLines(oe.message.asInstanceOf[AnyRef]).toVector foreach { appendLog(level, _) }
|
||||
case _ => appendLog(level, oe.message.toString)
|
||||
}
|
||||
}
|
||||
|
||||
o match {
|
||||
case x: StringEvent => Vector(x.message)
|
||||
case x: ObjectEvent[_] => objectEventToLines(x)
|
||||
case _ => Vector(o.toString)
|
||||
case x: StringEvent => Vector(x.message) foreach { appendLog(level, _) }
|
||||
case x: ObjectEvent[_] => appendEvent(x)
|
||||
case _ => Vector(o.toString) foreach { appendLog(level, _) }
|
||||
}
|
||||
|
||||
private def objectEventToLines(oe: ObjectEvent[_]): Vector[String] =
|
||||
{
|
||||
val contentType = oe.contentType
|
||||
LogExchange.stringCodec[AnyRef](contentType) match {
|
||||
case Some(codec) => codec.showLines(oe.message.asInstanceOf[AnyRef]).toVector
|
||||
case _ => Vector(oe.message.toString)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
final class SuppressedTraceContext(val traceLevel: Int, val useFormat: Boolean)
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import sjsonnew.JsonFormat
|
|||
import scala.reflect.runtime.universe.TypeTag
|
||||
import sbt.internal.util.codec.ThrowableShowLines._
|
||||
import sbt.internal.util.codec.TraceEventShowLines._
|
||||
import sbt.internal.util.codec.SuccessEventShowLines._
|
||||
import sbt.internal.util.codec.JsonProtocol._
|
||||
|
||||
/**
|
||||
|
|
@ -27,7 +28,11 @@ class ManagedLogger(
|
|||
new ObjectMessage(StringEvent(level.toString, message, channelName, execId))
|
||||
)
|
||||
}
|
||||
override def success(message: => String): Unit = xlogger.info(message)
|
||||
|
||||
// send special event for success since it's not a real log level
|
||||
override def success(message: => String): Unit = {
|
||||
infoEvent[SuccessEvent](SuccessEvent(message))
|
||||
}
|
||||
|
||||
def registerStringCodec[A: ShowLines: TypeTag]: Unit =
|
||||
{
|
||||
|
|
@ -38,6 +43,7 @@ class ManagedLogger(
|
|||
}
|
||||
registerStringCodec[Throwable]
|
||||
registerStringCodec[TraceEvent]
|
||||
registerStringCodec[SuccessEvent]
|
||||
final def debugEvent[A: JsonFormat: TypeTag](event: => A): Unit = logEvent(Level.Debug, event)
|
||||
final def infoEvent[A: JsonFormat: TypeTag](event: => A): Unit = logEvent(Level.Info, event)
|
||||
final def warnEvent[A: JsonFormat: TypeTag](event: => A): Unit = logEvent(Level.Warn, event)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
package sbt
|
||||
package internal.util.codec
|
||||
|
||||
import sbt.util.ShowLines
|
||||
import sbt.internal.util.SuccessEvent
|
||||
|
||||
trait SuccessEventShowLines {
|
||||
implicit val sbtSuccessEventShowLines: ShowLines[SuccessEvent] =
|
||||
ShowLines[SuccessEvent]( (e: SuccessEvent) => {
|
||||
Vector(e.message)
|
||||
})
|
||||
}
|
||||
|
||||
object SuccessEventShowLines extends SuccessEventShowLines
|
||||
Loading…
Reference in New Issue