From 3a8a08a2a20f7995bbb3d26710ab60d6fe12c6c9 Mon Sep 17 00:00:00 2001 From: Johannes Rudolph Date: Tue, 25 Jun 2013 15:11:24 +0200 Subject: [PATCH] fix #32: provide Graph for all sbt versions and don't rely on jline terminal width being > 0 --- notes/0.7.4.markdown | 1 + .../SbtDependencyGraphCompat.scala} | 12 ++++++------ .../SbtDependencyGraphCompat.scala} | 12 ++++++------ .../net/virtualvoid/sbt/graph}/Graph.scala | 16 +++++++++++++--- .../sbt/graph/IvyGraphMLDependencies.scala | 2 +- .../scala/net/virtualvoid/sbt/graph/Plugin.scala | 4 ++-- 6 files changed, 29 insertions(+), 18 deletions(-) create mode 100644 notes/0.7.4.markdown rename src/main/scala-sbt-0.11/{net/virtualvoid/sbt/graph/Compat.scala => sbt/SbtDependencyGraphCompat.scala} (82%) rename src/main/scala-sbt-0.12/{net/virtualvoid/sbt/graph/Compat.scala => sbt/SbtDependencyGraphCompat.scala} (84%) rename src/main/{scala-sbt-0.11 => scala/net/virtualvoid/sbt/graph}/Graph.scala (73%) diff --git a/notes/0.7.4.markdown b/notes/0.7.4.markdown new file mode 100644 index 000000000..ac535986a --- /dev/null +++ b/notes/0.7.4.markdown @@ -0,0 +1 @@ +This is a maintenance release fixing an exception when generating graphs without a terminal [#32](https://github.com/jrudolph/sbt-dependency-graph/issues/32). diff --git a/src/main/scala-sbt-0.11/net/virtualvoid/sbt/graph/Compat.scala b/src/main/scala-sbt-0.11/sbt/SbtDependencyGraphCompat.scala similarity index 82% rename from src/main/scala-sbt-0.11/net/virtualvoid/sbt/graph/Compat.scala rename to src/main/scala-sbt-0.11/sbt/SbtDependencyGraphCompat.scala index 7b1a7e0f9..6a4bc3535 100644 --- a/src/main/scala-sbt-0.11/net/virtualvoid/sbt/graph/Compat.scala +++ b/src/main/scala-sbt-0.11/sbt/SbtDependencyGraphCompat.scala @@ -1,11 +1,9 @@ -package net.virtualvoid.sbt.graph +package sbt -import sbt._ +import net.virtualvoid.sbt.graph.Plugin._ import Keys._ -import Plugin.ignoreMissingUpdate - -object Compat { +object SbtDependencyGraphCompat { /** * This is copied directly from sbt/main/Defaults.java and then changed to update the UpdateConfiguration * to ignore missing artifacts. @@ -20,4 +18,6 @@ object Compat { import complete.DefaultParsers._ lazy val StringBasic = NotSpaceClass.*.string -} \ No newline at end of file + + def getTerminalWidth: Int = jline.Terminal.getTerminal.getTerminalWidth +} diff --git a/src/main/scala-sbt-0.12/net/virtualvoid/sbt/graph/Compat.scala b/src/main/scala-sbt-0.12/sbt/SbtDependencyGraphCompat.scala similarity index 84% rename from src/main/scala-sbt-0.12/net/virtualvoid/sbt/graph/Compat.scala rename to src/main/scala-sbt-0.12/sbt/SbtDependencyGraphCompat.scala index 5bc770217..72826e3f5 100644 --- a/src/main/scala-sbt-0.12/net/virtualvoid/sbt/graph/Compat.scala +++ b/src/main/scala-sbt-0.12/sbt/SbtDependencyGraphCompat.scala @@ -1,11 +1,9 @@ -package net.virtualvoid.sbt.graph +package sbt -import sbt._ +import net.virtualvoid.sbt.graph.Plugin._ import Keys._ -import Plugin.ignoreMissingUpdate - -object Compat { +object SbtDependencyGraphCompat { /** * This is copied directly from sbt/main/Defaults.java and then changed to update the UpdateConfiguration * to ignore missing artifacts. @@ -19,4 +17,6 @@ object Compat { Classpaths.cachedUpdate(cacheDirectory / "update", Project.display(ref), module, missingOkConfig, Some(si), skip = skip, force = isRoot, depsUpdated = depsUpdated, log = s.log) } tag(Tags.Update, Tags.Network) -} \ No newline at end of file + + def getTerminalWidth: Int = JLine.usingTerminal(_.getTerminalWidth) +} diff --git a/src/main/scala-sbt-0.11/Graph.scala b/src/main/scala/net/virtualvoid/sbt/graph/Graph.scala similarity index 73% rename from src/main/scala-sbt-0.11/Graph.scala rename to src/main/scala/net/virtualvoid/sbt/graph/Graph.scala index ce4b8da7f..c8cd76a48 100644 --- a/src/main/scala-sbt-0.11/Graph.scala +++ b/src/main/scala/net/virtualvoid/sbt/graph/Graph.scala @@ -3,7 +3,9 @@ * * Copied from sbt 0.12 source code */ -package sbt +package net.virtualvoid.sbt.graph + +import sbt.SbtDependencyGraphCompat object Graph { @@ -12,8 +14,10 @@ object Graph // [info] | +-baz // [info] | // [info] +-quux - def toAscii[A](top: A, children: A => Seq[A], display: A => String): String = { - val maxColumn = jline.Terminal.getTerminal.getTerminalWidth - 8 + def toAscii[A](top: A, + children: A => Seq[A], + display: A => String, + maxColumn: Int = defaultColumnSize): String = { val twoSpaces = " " + " " // prevent accidentally being converted into a tab def limitLine(s: String): String = if (s.length > maxColumn) s.slice(0, maxColumn - 2) + ".." @@ -40,4 +44,10 @@ object Graph toAsciiLines(top, 0).mkString("\n") } + + def defaultColumnSize: Int = { + val termWidth = SbtDependencyGraphCompat.getTerminalWidth + if (termWidth > 20) termWidth - 8 + else 80 // ignore termWidth + } } diff --git a/src/main/scala/net/virtualvoid/sbt/graph/IvyGraphMLDependencies.scala b/src/main/scala/net/virtualvoid/sbt/graph/IvyGraphMLDependencies.scala index f9aa49eaa..ab80dced7 100644 --- a/src/main/scala/net/virtualvoid/sbt/graph/IvyGraphMLDependencies.scala +++ b/src/main/scala/net/virtualvoid/sbt/graph/IvyGraphMLDependencies.scala @@ -21,7 +21,7 @@ import java.io.File import collection.mutable.HashMap import collection.mutable.MultiMap import collection.mutable.{Set => MSet} -import sbt.{ConsoleLogger, Graph} +import sbt.ConsoleLogger import xml.{NodeSeq, Document, XML, Node} import com.github.mdr.ascii.layout import layout._ diff --git a/src/main/scala/net/virtualvoid/sbt/graph/Plugin.scala b/src/main/scala/net/virtualvoid/sbt/graph/Plugin.scala index a54005acf..4ca5fd38a 100755 --- a/src/main/scala/net/virtualvoid/sbt/graph/Plugin.scala +++ b/src/main/scala/net/virtualvoid/sbt/graph/Plugin.scala @@ -79,7 +79,7 @@ object Plugin extends sbt.Plugin { (c: String) => file("%s/cache/%s-%s-%s.xml" format (home, projectID.organization, crossName(ivyModule), c)) } }, - Compat.ignoreMissingUpdateT, + SbtDependencyGraphCompat.ignoreMissingUpdateT, filterScalaLibrary in Global := true ) ++ Seq(Compile, Test, Runtime, Provided, Optional).flatMap(ivyReportForConfig) @@ -181,7 +181,7 @@ object Plugin extends sbt.Plugin { val graph = loadFromContext(moduleGraphStore, ctx, state) getOrElse ModuleGraph(Nil, Nil) import complete.DefaultParsers._ - import Compat._ + import SbtDependencyGraphCompat._ def moduleFrom(modules: Seq[ModuleId]) = modules.map { m =>