refs #17: color errors red in tree output

This commit is contained in:
Johannes Rudolph 2012-10-22 10:03:47 +02:00
parent cb3fc03dbc
commit 83ac2e62ab
1 changed files with 16 additions and 5 deletions

View File

@ -21,16 +21,18 @@ import java.io.File
import collection.mutable.HashMap
import collection.mutable.MultiMap
import collection.mutable.{Set => MSet}
import sbt.Graph
import sbt.{ConsoleLogger, Graph}
import xml.{Document, XML, Node}
import com.github.mdr.ascii.layout
import layout._
import sbinary.{CollectionTypes, Format, DefaultProtocol}
import sbinary.{Format, DefaultProtocol}
object IvyGraphMLDependencies extends App {
case class Module(organisation: String, name: String, version: String, error: Option[String] = None) {
def id: String = organisation+":"+name+":"+version
def hadError: Boolean = error.isDefined
override def hashCode(): Int = id.hashCode
override def equals(p1: Any): Boolean = p1 match {
case m: Module => id == m.id
@ -97,14 +99,17 @@ object IvyGraphMLDependencies extends App {
// there should only be one root node (the project itself)
val roots = graph.nodes.filter(n => !graph.edges.exists(_._2 == n)).sortBy(_.id)
roots.map { root =>
Graph.toAscii[Module](root, node => deps.getOrElse(node, Seq.empty[Module]), x => x.id + x.error.map(" (error: "+_+")").getOrElse(""))
Graph.toAscii[Module](root, node => deps.getOrElse(node, Seq.empty[Module]), displayModule)
}.mkString("\n")
}
def displayModule(module: Module): String =
red(module.id + module.error.map(" (error: "+_+")").getOrElse(""), module.hadError)
private def buildAsciiGraph(moduleGraph: ModuleGraph): layout.Graph[String] = {
def renderVertex(module: Module): String = {
def renderVertex(module: Module): String =
module.name + "\n" + module.organisation + "\n" + module.version
}
val vertices = moduleGraph.nodes.map(renderVertex).toList
val edges = moduleGraph.edges.toList.map { case (from, to) (renderVertex(from), renderVertex(to)) }
layout.Graph(vertices, edges)
@ -143,6 +148,12 @@ object IvyGraphMLDependencies extends App {
private def buildDoc(ivyReportFile: String) = ConstructingParser.fromSource(io.Source.fromFile(ivyReportFile), false).document
def red(str: String, doRed: Boolean): String =
if (ConsoleLogger.formatEnabled && doRed)
Console.RED + str + Console.RESET
else
str
def die(msg: String): Nothing = {
println(msg)
sys.exit(1)