mirror of https://github.com/sbt/sbt.git
Merge pull request #6693 from kijuky/apply-asciigraphwidth-to-dependencytree
Enable the asciiGraphWidth setting to the dependencyTree tasks. #5962
This commit is contained in:
commit
bc95ab25a2
|
|
@ -12,7 +12,6 @@ import sbt.util.Show
|
|||
import java.io.File
|
||||
|
||||
import Def.{ ScopedKey, compiled, flattenLocals }
|
||||
import sbt.internal.util.Terminal
|
||||
|
||||
import Predef.{ any2stringadd => _, _ }
|
||||
import sbt.io.IO
|
||||
|
|
@ -123,10 +122,4 @@ object Graph {
|
|||
|
||||
toAsciiLines(top, 0, Set.empty).mkString("\n")
|
||||
}
|
||||
|
||||
def defaultColumnSize: Int = {
|
||||
val termWidth = Terminal.console.getWidth
|
||||
if (termWidth > 20) termWidth - 8
|
||||
else 80 // ignore termWidth
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ package rendering
|
|||
import sbt.internal.util.Terminal.red
|
||||
|
||||
object AsciiTree {
|
||||
def asciiTree(graph: ModuleGraph): String = {
|
||||
def asciiTree(graph: ModuleGraph, graphWidth: Int): String = {
|
||||
val deps = graph.dependencyMap
|
||||
|
||||
// there should only be one root node (the project itself)
|
||||
|
|
@ -25,7 +25,7 @@ object AsciiTree {
|
|||
root,
|
||||
node => deps.getOrElse(node.id, Seq.empty[Module]),
|
||||
displayModule,
|
||||
Graph.defaultColumnSize
|
||||
graphWidth
|
||||
)
|
||||
}
|
||||
.mkString("\n")
|
||||
|
|
|
|||
|
|
@ -80,7 +80,13 @@ object DependencyTreeSettings {
|
|||
else GraphTransformations.ignoreScalaLibrary(sv, g)
|
||||
},
|
||||
dependencyTreeModuleGraphStore := (dependencyTreeModuleGraph0 storeAs dependencyTreeModuleGraphStore triggeredBy dependencyTreeModuleGraph0).value,
|
||||
) ++ renderingTaskSettings(dependencyTree, rendering.AsciiTree.asciiTree _)
|
||||
) ++ {
|
||||
renderingTaskSettings(dependencyTree) :+ {
|
||||
dependencyTree / asString := {
|
||||
rendering.AsciiTree.asciiTree(dependencyTreeModuleGraph0.value, asciiGraphWidth.value)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the maximum strength settings for DependencyTreePlugin.
|
||||
|
|
@ -130,11 +136,12 @@ object DependencyTreeSettings {
|
|||
case None =>
|
||||
graph.nodes.filter(m => m.id.organization == org && m.id.name == name).map(_.id)
|
||||
}
|
||||
val graphWidth = asciiGraphWidth.value
|
||||
val output =
|
||||
modules
|
||||
.map { module =>
|
||||
rendering.AsciiTree
|
||||
.asciiTree(GraphTransformations.reverseGraphStartingAt(graph, module))
|
||||
.asciiTree(GraphTransformations.reverseGraphStartingAt(graph, module), graphWidth)
|
||||
}
|
||||
.mkString("\n")
|
||||
|
||||
|
|
@ -142,7 +149,7 @@ object DependencyTreeSettings {
|
|||
output
|
||||
},
|
||||
) ++
|
||||
renderingAlternatives.flatMap((renderingTaskSettings _).tupled)
|
||||
renderingAlternatives.flatMap { case (key, renderer) => renderingTaskSettings(key, renderer) }
|
||||
|
||||
def renderingAlternatives: Seq[(TaskKey[Unit], ModuleGraph => String)] =
|
||||
Seq(
|
||||
|
|
@ -152,13 +159,17 @@ object DependencyTreeSettings {
|
|||
)
|
||||
|
||||
def renderingTaskSettings(key: TaskKey[Unit], renderer: ModuleGraph => String): Seq[Setting[_]] =
|
||||
renderingTaskSettings(key) :+ {
|
||||
key / asString := renderer(dependencyTreeModuleGraph0.value)
|
||||
}
|
||||
|
||||
def renderingTaskSettings(key: TaskKey[Unit]): Seq[Setting[_]] =
|
||||
Seq(
|
||||
key := {
|
||||
val s = streams.value
|
||||
val str = (key / asString).value
|
||||
s.log.info(str)
|
||||
},
|
||||
key / asString := renderer(dependencyTreeModuleGraph0.value),
|
||||
key / toFile := {
|
||||
val (targetFile, force) = targetFileAndForceParser.parsed
|
||||
writeToFile(key.key.label, (key / asString).value, targetFile, force, streams.value)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
[@kijuky]: https://github.com/kijuky
|
||||
|
||||
[5962]: https://github.com/sbt/sbt/issues/5962
|
||||
|
||||
### Fixes with compatibility implications
|
||||
|
||||
- The output of the dependencyTree will not be truncated at the console width.
|
||||
|
||||
### Improvements
|
||||
|
||||
- Enable the asciiGraphWidth setting in the dependencyTree tasks.
|
||||
|
||||
### Bug fixes
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
ThisBuild / version := "0.1.0-SNAPSHOT"
|
||||
ThisBuild / scalaVersion := "2.13.5"
|
||||
|
||||
name := "asciiGraphWidthSpecs"
|
||||
|
||||
lazy val whenIsDefault = (project in file("when-is-default"))
|
||||
.settings(
|
||||
libraryDependencies += "org.typelevel" %% "cats-effect" % "3.1.0",
|
||||
check := checkTask.value
|
||||
)
|
||||
lazy val whenIs20 = (project in file("when-is-20"))
|
||||
.settings(
|
||||
asciiGraphWidth := 20,
|
||||
libraryDependencies += "org.typelevel" %% "cats-effect" % "3.1.0",
|
||||
check := checkTask.value
|
||||
)
|
||||
|
||||
lazy val check = taskKey[Unit]("check")
|
||||
lazy val checkTask = Def.task {
|
||||
val context = thisProject.value
|
||||
val expected = IO.read(file(s"${context.base}/expected.txt"))
|
||||
val actual = (Compile / dependencyTree / asString).value
|
||||
require(actual == expected, s"${context.id} is failed.")
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
addDependencyTreePlugin
|
||||
|
|
@ -0,0 +1 @@
|
|||
> check
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
whenis20:whenis20_..
|
||||
+-org.typelevel:..
|
||||
+-org.typeleve..
|
||||
| +-org.typele..
|
||||
| +-org.type..
|
||||
| +-org.type..
|
||||
|
|
||||
+-org.typeleve..
|
||||
+-org.typele..
|
||||
+-org.type..
|
||||
+-org.ty..
|
||||
+-org.ty..
|
||||
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
whenisdefault:whenisdefault_2.13:0.1.0-SNAPSHOT [S]
|
||||
+-org.typelevel:cats-effect_2.13:3.1.0 [S]
|
||||
+-org.typelevel:cats-effect-kernel_2.13:3.1.0 [S]
|
||||
| +-org.typelevel:cats-core_2.13:2.6.0 [S]
|
||||
| +-org.typelevel:cats-kernel_2.13:2.6.0 [S]
|
||||
| +-org.typelevel:simulacrum-scalafix-annotations_2.13:0.5.4 [S]
|
||||
|
|
||||
+-org.typelevel:cats-effect-std_2.13:3.1.0 [S]
|
||||
+-org.typelevel:cats-effect-kernel_2.13:3.1.0 [S]
|
||||
+-org.typelevel:cats-core_2.13:2.6.0 [S]
|
||||
+-org.typelevel:cats-kernel_2.13:2.6.0 [S]
|
||||
+-org.typelevel:simulacrum-scalafix-annotations_2.13:0.5.4 [S]
|
||||
|
||||
Loading…
Reference in New Issue