From 76c1b685163fbb0a3f3c7909ac41f4cf5952996f Mon Sep 17 00:00:00 2001 From: kijuky <40358+kijuky@users.noreply.github.com> Date: Tue, 19 Oct 2021 01:36:04 +0900 Subject: [PATCH 1/2] Enable the asciiGraphWidth setting to the dependencyTree tasks. #5962 --- .../scala/sbt/internal/SettingGraph.scala | 7 ------ .../internal/graph/rendering/AsciiTree.scala | 4 ++-- .../sbt/plugins/DependencyTreeSettings.scala | 11 +++++++-- ...nable-asciiGraphWidth-in-dependencyTree.md | 13 ++++++++++ .../asciiGraphWidth/build.sbt | 24 +++++++++++++++++++ .../asciiGraphWidth/project/plugins.sbt | 1 + .../dependency-graph/asciiGraphWidth/test | 1 + .../asciiGraphWidth/when-is-20/expected.txt | 13 ++++++++++ .../when-is-default/expected.txt | 13 ++++++++++ 9 files changed, 76 insertions(+), 11 deletions(-) create mode 100644 notes/1.6.0/enable-asciiGraphWidth-in-dependencyTree.md create mode 100644 sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/build.sbt create mode 100644 sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/project/plugins.sbt create mode 100644 sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/test create mode 100644 sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/when-is-20/expected.txt create mode 100644 sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/when-is-default/expected.txt diff --git a/main/src/main/scala/sbt/internal/SettingGraph.scala b/main/src/main/scala/sbt/internal/SettingGraph.scala index fdf5f30ec..15669675c 100644 --- a/main/src/main/scala/sbt/internal/SettingGraph.scala +++ b/main/src/main/scala/sbt/internal/SettingGraph.scala @@ -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 - } } diff --git a/main/src/main/scala/sbt/internal/graph/rendering/AsciiTree.scala b/main/src/main/scala/sbt/internal/graph/rendering/AsciiTree.scala index 9fdf85cf7..5c474bf6f 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/AsciiTree.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/AsciiTree.scala @@ -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") diff --git a/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala b/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala index 2c20525e9..8bb53036b 100644 --- a/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala +++ b/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala @@ -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, null) :+ { + 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") diff --git a/notes/1.6.0/enable-asciiGraphWidth-in-dependencyTree.md b/notes/1.6.0/enable-asciiGraphWidth-in-dependencyTree.md new file mode 100644 index 000000000..93fd60d1f --- /dev/null +++ b/notes/1.6.0/enable-asciiGraphWidth-in-dependencyTree.md @@ -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 diff --git a/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/build.sbt b/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/build.sbt new file mode 100644 index 000000000..aa4780397 --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/build.sbt @@ -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.") +} diff --git a/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/project/plugins.sbt b/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/project/plugins.sbt new file mode 100644 index 000000000..93c66d2a9 --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/project/plugins.sbt @@ -0,0 +1 @@ +addDependencyTreePlugin diff --git a/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/test b/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/test new file mode 100644 index 000000000..15675b169 --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/test @@ -0,0 +1 @@ +> check diff --git a/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/when-is-20/expected.txt b/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/when-is-20/expected.txt new file mode 100644 index 000000000..bad2b603a --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/when-is-20/expected.txt @@ -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.. + \ No newline at end of file diff --git a/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/when-is-default/expected.txt b/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/when-is-default/expected.txt new file mode 100644 index 000000000..284feffc8 --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/when-is-default/expected.txt @@ -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] + \ No newline at end of file From 890ecdc5568f16c3da8a6b2b5cda8683d7412c1c Mon Sep 17 00:00:00 2001 From: kijuky <40358+kijuky@users.noreply.github.com> Date: Tue, 19 Oct 2021 13:51:15 +0900 Subject: [PATCH 2/2] Overloaded without passing null. --- .../scala/sbt/plugins/DependencyTreeSettings.scala | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala b/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala index 8bb53036b..2ffe91128 100644 --- a/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala +++ b/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala @@ -81,7 +81,7 @@ object DependencyTreeSettings { }, dependencyTreeModuleGraphStore := (dependencyTreeModuleGraph0 storeAs dependencyTreeModuleGraphStore triggeredBy dependencyTreeModuleGraph0).value, ) ++ { - renderingTaskSettings(dependencyTree, null) :+ { + renderingTaskSettings(dependencyTree) :+ { dependencyTree / asString := { rendering.AsciiTree.asciiTree(dependencyTreeModuleGraph0.value, asciiGraphWidth.value) } @@ -149,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( @@ -159,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)