From 321f70b17f3d8478e381f65220ec9ece28e8fa76 Mon Sep 17 00:00:00 2001 From: Johannes Rudolph Date: Mon, 16 Jul 2018 11:57:50 +0200 Subject: [PATCH] Update to sbt 1.1.6 + new plugin versions + new dependency versions + freshly autoformatted --- build.sbt | 10 ++- project/build.properties | 2 +- project/plugins.sbt | 4 +- .../sbt/graph/rendering/AsciiGraph.scala | 3 +- .../DependencyGraphSbtCompat.scala | 32 ++++----- .../DependencyGraphSbtCompat.scala | 3 +- .../sbt/graph/DependencyGraphKeys.scala | 69 ++++++++++++------- .../sbt/graph/DependencyGraphSettings.scala | 23 +++---- .../sbt/graph/backend/IvyReport.scala | 3 +- .../sbt/graph/backend/SbtUpdateReport.scala | 3 +- .../net/virtualvoid/sbt/graph/model.scala | 20 +++--- .../virtualvoid/sbt/graph/rendering/DOT.scala | 12 ++-- .../sbt/graph/rendering/Statistics.scala | 12 ++-- .../sbt/graph/util/AsciiTreeLayout.scala | 9 +-- .../testDotFileGeneration/build.sbt | 5 +- 15 files changed, 119 insertions(+), 91 deletions(-) diff --git a/build.sbt b/build.sbt index 411b401b2..817aaeeda 100644 --- a/build.sbt +++ b/build.sbt @@ -1,8 +1,6 @@ -ScriptedPlugin.scriptedSettings -ScriptedPlugin.scriptedLaunchOpts += s"-Dproject.version=${version.value}" +scriptedLaunchOpts += s"-Dproject.version=${version.value}" libraryDependencies ++= { - println(s"Evaluated ${sbtVersion in pluginCrossBuild value}") if ((sbtVersion in pluginCrossBuild).value startsWith "0.13") Seq("com.github.mdr" %% "ascii-graphs" % "0.0.3") else @@ -10,15 +8,15 @@ libraryDependencies ++= { } -libraryDependencies += "org.specs2" %% "specs2-core" % "3.9.5" % Test +libraryDependencies += "org.specs2" %% "specs2-core" % "3.10.0" % Test libraryDependencies += Defaults.sbtPluginExtra( - "com.dwijnand" % "sbt-compat" % "1.1.0", + "com.dwijnand" % "sbt-compat" % "1.2.6", (sbtBinaryVersion in pluginCrossBuild).value, (scalaBinaryVersion in update).value ) -crossSbtVersions := Seq("1.0.2", "0.13.16") +crossSbtVersions := Seq("1.1.6", "0.13.16") scalacOptions ++= Seq( "-deprecation", diff --git a/project/build.properties b/project/build.properties index c091b86ca..d6e35076c 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=0.13.16 +sbt.version=1.1.6 diff --git a/project/plugins.sbt b/project/plugins.sbt index 576698340..cb24a862c 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,4 +1,4 @@ -libraryDependencies += "org.scala-sbt" % "scripted-plugin" % sbtVersion.value +libraryDependencies += "org.scala-sbt" %% "scripted-plugin" % sbtVersion.value -addSbtPlugin("com.typesafe.sbt" % "sbt-scalariform" % "1.2.1") +addSbtPlugin("org.scalariform" % "sbt-scalariform" % "1.8.2") addSbtPlugin("com.dwijnand" % "sbt-dynver" % "2.0.0") diff --git a/src/main/scala-sbt-0.13/net/virtualvoid/sbt/graph/rendering/AsciiGraph.scala b/src/main/scala-sbt-0.13/net/virtualvoid/sbt/graph/rendering/AsciiGraph.scala index 701fdce7d..f1c83ec18 100644 --- a/src/main/scala-sbt-0.13/net/virtualvoid/sbt/graph/rendering/AsciiGraph.scala +++ b/src/main/scala-sbt-0.13/net/virtualvoid/sbt/graph/rendering/AsciiGraph.scala @@ -55,6 +55,5 @@ object AsciiGraph { log.info("\n") log.info("Note: The graph was estimated to be too big to display (> 15 nodes). Use `sbt 'dependency-graph --force'` (with the single quotes) to force graph display.") } - } - ) + }) } diff --git a/src/main/scala-sbt-0.13/sbt/dependencygraph/DependencyGraphSbtCompat.scala b/src/main/scala-sbt-0.13/sbt/dependencygraph/DependencyGraphSbtCompat.scala index cb65aa82c..9408ed050 100644 --- a/src/main/scala-sbt-0.13/sbt/dependencygraph/DependencyGraphSbtCompat.scala +++ b/src/main/scala-sbt-0.13/sbt/dependencygraph/DependencyGraphSbtCompat.scala @@ -22,9 +22,9 @@ object DependencyGraphSbtCompat { } /** - * This is copied directly from https://github.com/sbt/sbt/blob/2952a2b9b672c5402b824ad2d2076243eb643598/main/src/main/scala/sbt/Defaults.scala#L1471-L1523 - * and then changed to update the UpdateConfiguration to ignore missing artifacts. - */ + * This is copied directly from https://github.com/sbt/sbt/blob/2952a2b9b672c5402b824ad2d2076243eb643598/main/src/main/scala/sbt/Defaults.scala#L1471-L1523 + * and then changed to update the UpdateConfiguration to ignore missing artifacts. + */ def updateTask(task: TaskKey[_]): Initialize[Task[UpdateReport]] = Def.task { val depsUpdated = transitiveUpdate.value.exists(!_.stats.cached) val isRoot = executionRoots.value contains resolvedScoped.value @@ -32,8 +32,8 @@ object DependencyGraphSbtCompat { val s = streams.value val fullUpdateOutput = s.cacheDirectory / "out" val forceUpdateByTime = forceUpdate match { - case None => false - case Some(period) => + case None ⇒ false + case Some(period) ⇒ val elapsedDuration = new FiniteDuration(System.currentTimeMillis() - fullUpdateOutput.lastModified(), TimeUnit.MILLISECONDS) fullUpdateOutput.exists() && elapsedDuration > period } @@ -42,17 +42,17 @@ object DependencyGraphSbtCompat { // Only substitute unmanaged jars for managed jars when the major.minor parts of the versions the same for: // the resolved Scala version and the scalaHome version: compatible (weakly- no qualifier checked) // the resolved Scala version and the declared scalaVersion: assume the user intended scalaHome to override anything with scalaVersion - def subUnmanaged(subVersion: String, jars: Seq[File]) = (sv: String) => + def subUnmanaged(subVersion: String, jars: Seq[File]) = (sv: String) ⇒ (partialVersion(sv), partialVersion(subVersion), partialVersion(scalaVersion.value)) match { - case (Some(res), Some(sh), _) if res == sh => jars - case (Some(res), _, Some(decl)) if res == decl => jars - case _ => Nil + case (Some(res), Some(sh), _) if res == sh ⇒ jars + case (Some(res), _, Some(decl)) if res == decl ⇒ jars + case _ ⇒ Nil } - val subScalaJars: String => Seq[File] = Defaults.unmanagedScalaInstanceOnly.value match { - case Some(si) => subUnmanaged(si.version, si.jars) - case None => sv => if (scalaProvider.version == sv) scalaProvider.jars else Nil + val subScalaJars: String ⇒ Seq[File] = Defaults.unmanagedScalaInstanceOnly.value match { + case Some(si) ⇒ subUnmanaged(si.version, si.jars) + case None ⇒ sv ⇒ if (scalaProvider.version == sv) scalaProvider.jars else Nil } - val transform: UpdateReport => UpdateReport = r => sbt.Classpaths.substituteScalaFiles(scalaOrganization.value, r)(subScalaJars) + val transform: UpdateReport ⇒ UpdateReport = r ⇒ sbt.Classpaths.substituteScalaFiles(scalaOrganization.value, r)(subScalaJars) val uwConfig = (unresolvedWarningConfiguration in update).value val show = Reference.display(thisProjectRef.value) val st = state.value @@ -66,9 +66,9 @@ object DependencyGraphSbtCompat { // This code bumps up the sbt.UpdateConfiguration.logging to Full when logLevel is Debug. import UpdateLogging.{ Full, DownloadOnly, Default } val uc = (logLevel in update).?.value orElse st.get(logLevel.key) match { - case Some(Level.Debug) if uc0.logging == Default => uc0.copy(logging = Full) - case Some(x) if uc0.logging == Default => uc0.copy(logging = DownloadOnly) - case _ => uc0 + case Some(Level.Debug) if uc0.logging == Default ⇒ uc0.copy(logging = Full) + case Some(x) if uc0.logging == Default ⇒ uc0.copy(logging = DownloadOnly) + case _ ⇒ uc0 } val ewo = if (executionRoots.value exists { _.key == evicted.key }) EvictionWarningOptions.empty diff --git a/src/main/scala-sbt-1.0/sbt/dependencygraph/DependencyGraphSbtCompat.scala b/src/main/scala-sbt-1.0/sbt/dependencygraph/DependencyGraphSbtCompat.scala index 4e08319db..06a466a31 100644 --- a/src/main/scala-sbt-1.0/sbt/dependencygraph/DependencyGraphSbtCompat.scala +++ b/src/main/scala-sbt-1.0/sbt/dependencygraph/DependencyGraphSbtCompat.scala @@ -58,7 +58,6 @@ object DependencyGraphSbtCompat { ewo = evictionOptions, mavenStyle = publishMavenStyle.value, compatWarning = compatibilityWarningOptions.value, - log = s.log - ) + log = s.log) } } diff --git a/src/main/scala/net/virtualvoid/sbt/graph/DependencyGraphKeys.scala b/src/main/scala/net/virtualvoid/sbt/graph/DependencyGraphKeys.scala index ace01d160..ef19a0a6d 100644 --- a/src/main/scala/net/virtualvoid/sbt/graph/DependencyGraphKeys.scala +++ b/src/main/scala/net/virtualvoid/sbt/graph/DependencyGraphKeys.scala @@ -19,53 +19,76 @@ package net.virtualvoid.sbt.graph import sbt._ trait DependencyGraphKeys { - val dependencyGraphMLFile = SettingKey[File]("dependency-graph-ml-file", + val dependencyGraphMLFile = SettingKey[File]( + "dependency-graph-ml-file", "The location the graphml file should be generated at") - val dependencyGraphML = TaskKey[File]("dependency-graph-ml", + val dependencyGraphML = TaskKey[File]( + "dependency-graph-ml", "Creates a graphml file containing the dependency-graph for a project") - val dependencyDotFile = SettingKey[File]("dependency-dot-file", + val dependencyDotFile = SettingKey[File]( + "dependency-dot-file", "The location the dot file should be generated at") - val dependencyDotNodeLabel = SettingKey[(String, String, String) ⇒ String]("dependency-dot-node-label", + val dependencyDotNodeLabel = SettingKey[(String, String, String) ⇒ String]( + "dependency-dot-node-label", "Returns a formated string of a dependency. Takes organisation, name and version as parameters") - val dependencyDotHeader = SettingKey[String]("dependency-dot-header", + val dependencyDotHeader = SettingKey[String]( + "dependency-dot-header", "The header of the dot file. (e.g. to set your preferred node shapes)") - val dependencyDot = TaskKey[File]("dependency-dot", + val dependencyDot = TaskKey[File]( + "dependency-dot", "Creates a dot file containing the dependency-graph for a project") - val dependencyDotString = TaskKey[String]("dependency-dot-string", + val dependencyDotString = TaskKey[String]( + "dependency-dot-string", "Creates a String containing the dependency-graph for a project in dot format") - val dependencyBrowseGraphTarget = SettingKey[File]("dependency-browse-graph-target", + val dependencyBrowseGraphTarget = SettingKey[File]( + "dependency-browse-graph-target", "The location dependency browse graph files should be put.") - val dependencyBrowseGraphHTML = TaskKey[URI]("dependency-browse-graph-html", + val dependencyBrowseGraphHTML = TaskKey[URI]( + "dependency-browse-graph-html", "Creates an HTML page that can be used to view the graph.") - val dependencyBrowseGraph = TaskKey[URI]("dependency-browse-graph", + val dependencyBrowseGraph = TaskKey[URI]( + "dependency-browse-graph", "Opens an HTML page that can be used to view the graph.") - val moduleGraph = TaskKey[ModuleGraph]("module-graph", + val moduleGraph = TaskKey[ModuleGraph]( + "module-graph", "The dependency graph for a project") - val moduleGraphIvyReport = TaskKey[ModuleGraph]("module-graph-ivy-report", + val moduleGraphIvyReport = TaskKey[ModuleGraph]( + "module-graph-ivy-report", "The dependency graph for a project as generated from an Ivy Report XML") - val moduleGraphSbt = TaskKey[ModuleGraph]("module-graph-sbt", + val moduleGraphSbt = TaskKey[ModuleGraph]( + "module-graph-sbt", "The dependency graph for a project as generated from SBT data structures.") - val asciiGraph = TaskKey[String]("dependency-graph-string", + val asciiGraph = TaskKey[String]( + "dependency-graph-string", "Returns a string containing the ascii representation of the dependency graph for a project") - val dependencyGraph = InputKey[Unit]("dependency-graph", + val dependencyGraph = InputKey[Unit]( + "dependency-graph", "Prints the ascii graph to the console") - val asciiTree = TaskKey[String]("dependency-tree-string", + val asciiTree = TaskKey[String]( + "dependency-tree-string", "Returns a string containing an ascii tree representation of the dependency graph for a project") - val dependencyTree = TaskKey[Unit]("dependency-tree", + val dependencyTree = TaskKey[Unit]( + "dependency-tree", "Prints an ascii tree of all the dependencies to the console") - val dependencyList = TaskKey[Unit]("dependency-list", + val dependencyList = TaskKey[Unit]( + "dependency-list", "Prints a list of all dependencies to the console") - val dependencyStats = TaskKey[Unit]("dependency-stats", + val dependencyStats = TaskKey[Unit]( + "dependency-stats", "Prints statistics for all dependencies to the console") - val ivyReportFunction = TaskKey[String ⇒ File]("ivy-report-function", + val ivyReportFunction = TaskKey[String ⇒ File]( + "ivy-report-function", "A function which returns the file containing the ivy report from the ivy cache for a given configuration") - val ivyReport = TaskKey[File]("ivy-report", + val ivyReport = TaskKey[File]( + "ivy-report", "A task which returns the location of the ivy report file for a given configuration (default `compile`).") val ignoreMissingUpdate = Keys.update in ivyReport - val filterScalaLibrary = SettingKey[Boolean]("filter-scala-library", + val filterScalaLibrary = SettingKey[Boolean]( + "filter-scala-library", "Specifies if scala dependency should be filtered in dependency-* output") - val licenseInfo = TaskKey[Unit]("dependency-license-info", + val licenseInfo = TaskKey[Unit]( + "dependency-license-info", "Aggregates and shows information about the licenses of dependencies") // internal diff --git a/src/main/scala/net/virtualvoid/sbt/graph/DependencyGraphSettings.scala b/src/main/scala/net/virtualvoid/sbt/graph/DependencyGraphSettings.scala index 15b443775..f2b3bf3bc 100644 --- a/src/main/scala/net/virtualvoid/sbt/graph/DependencyGraphSettings.scala +++ b/src/main/scala/net/virtualvoid/sbt/graph/DependencyGraphSettings.scala @@ -160,20 +160,19 @@ object DependencyGraphSettings { } val artifactIdParser: Def.Initialize[State ⇒ Parser[ModuleId]] = - resolvedScoped { ctx ⇒ - (state: State) ⇒ - val graph = loadFromContext(moduleGraphStore, ctx, state) getOrElse ModuleGraph(Nil, Nil) + resolvedScoped { ctx ⇒ (state: State) ⇒ + val graph = loadFromContext(moduleGraphStore, ctx, state) getOrElse ModuleGraph(Nil, Nil) - import sbt.complete.DefaultParsers._ - graph.nodes.map(_.id).map { - case id @ ModuleId(org, name, version) ⇒ - (Space ~ token(org) ~ token(Space ~ name) ~ token(Space ~ version)).map(_ ⇒ id) - }.reduceOption(_ | _).getOrElse { - (Space ~> token(StringBasic, "organization") ~ Space ~ token(StringBasic, "module") ~ Space ~ token(StringBasic, "version")).map { - case ((((org, _), mod), _), version) ⇒ - ModuleId(org, mod, version) - } + import sbt.complete.DefaultParsers._ + graph.nodes.map(_.id).map { + case id @ ModuleId(org, name, version) ⇒ + (Space ~ token(org) ~ token(Space ~ name) ~ token(Space ~ version)).map(_ ⇒ id) + }.reduceOption(_ | _).getOrElse { + (Space ~> token(StringBasic, "organization") ~ Space ~ token(StringBasic, "module") ~ Space ~ token(StringBasic, "version")).map { + case ((((org, _), mod), _), version) ⇒ + ModuleId(org, mod, version) } + } } // This is to support 0.13.8's InlineConfigurationWithExcludes while not forcing 0.13.8 diff --git a/src/main/scala/net/virtualvoid/sbt/graph/backend/IvyReport.scala b/src/main/scala/net/virtualvoid/sbt/graph/backend/IvyReport.scala index 129dde6d9..426a68a3e 100644 --- a/src/main/scala/net/virtualvoid/sbt/graph/backend/IvyReport.scala +++ b/src/main/scala/net/virtualvoid/sbt/graph/backend/IvyReport.scala @@ -36,7 +36,8 @@ object IvyReport { revision ← mod \ "revision" rev = revision.attribute("name").get.text moduleId = moduleIdFromElement(mod, rev) - module = Module(moduleId, + module = Module( + moduleId, (revision \ "license").headOption.flatMap(_.attribute("name")).map(_.text), evictedByVersion = (revision \ "evicted-by").headOption.flatMap(_.attribute("rev").map(_.text)), error = revision.attribute("error").map(_.text)) diff --git a/src/main/scala/net/virtualvoid/sbt/graph/backend/SbtUpdateReport.scala b/src/main/scala/net/virtualvoid/sbt/graph/backend/SbtUpdateReport.scala index 3c8af89f6..42778efc5 100644 --- a/src/main/scala/net/virtualvoid/sbt/graph/backend/SbtUpdateReport.scala +++ b/src/main/scala/net/virtualvoid/sbt/graph/backend/SbtUpdateReport.scala @@ -38,7 +38,8 @@ object SbtUpdateReport { def moduleEdge(chosenVersion: Option[String])(report: ModuleReport): (Module, Seq[Edge]) = { val evictedByVersion = if (report.evicted) chosenVersion else None val jarFile = report.artifacts.find(_._1.`type` == "jar").orElse(report.artifacts.find(_._1.extension == "jar")).map(_._2) - (Module( + ( + Module( id = report.module, license = report.licenses.headOption.map(_._1), evictedByVersion = evictedByVersion, diff --git a/src/main/scala/net/virtualvoid/sbt/graph/model.scala b/src/main/scala/net/virtualvoid/sbt/graph/model.scala index 96ce95258..cbfc43294 100644 --- a/src/main/scala/net/virtualvoid/sbt/graph/model.scala +++ b/src/main/scala/net/virtualvoid/sbt/graph/model.scala @@ -22,17 +22,19 @@ import sbinary.Format import scala.collection.mutable.{ HashMap, MultiMap, Set } -case class ModuleId(organisation: String, - name: String, - version: String) { +case class ModuleId( + organisation: String, + name: String, + version: String) { def idString: String = organisation + ":" + name + ":" + version } -case class Module(id: ModuleId, - license: Option[String] = None, - extraInfo: String = "", - evictedByVersion: Option[String] = None, - jarFile: Option[File] = None, - error: Option[String] = None) { +case class Module( + id: ModuleId, + license: Option[String] = None, + extraInfo: String = "", + evictedByVersion: Option[String] = None, + jarFile: Option[File] = None, + error: Option[String] = None) { def hadError: Boolean = error.isDefined def isUsed: Boolean = !isEvicted def isEvicted: Boolean = evictedByVersion.isDefined diff --git a/src/main/scala/net/virtualvoid/sbt/graph/rendering/DOT.scala b/src/main/scala/net/virtualvoid/sbt/graph/rendering/DOT.scala index 368cf9e2d..dd63bacb3 100644 --- a/src/main/scala/net/virtualvoid/sbt/graph/rendering/DOT.scala +++ b/src/main/scala/net/virtualvoid/sbt/graph/rendering/DOT.scala @@ -20,15 +20,17 @@ package rendering object DOT { val EvictedStyle = "stroke-dasharray: 5,5" - def dotGraph(graph: ModuleGraph, - dotHead: String, - nodeFormation: (String, String, String) ⇒ String, - labelRendering: HTMLLabelRendering): String = { + def dotGraph( + graph: ModuleGraph, + dotHead: String, + nodeFormation: (String, String, String) ⇒ String, + labelRendering: HTMLLabelRendering): String = { val nodes = { for (n ← graph.nodes) yield { val style = if (n.isEvicted) EvictedStyle else "" val label = nodeFormation(n.id.organisation, n.id.name, n.id.version) - """ "%s"[%s style="%s"]""".format(n.id.idString, + """ "%s"[%s style="%s"]""".format( + n.id.idString, labelRendering.renderLabel(label), style) } diff --git a/src/main/scala/net/virtualvoid/sbt/graph/rendering/Statistics.scala b/src/main/scala/net/virtualvoid/sbt/graph/rendering/Statistics.scala index 5a82e922b..a9d10fdba 100644 --- a/src/main/scala/net/virtualvoid/sbt/graph/rendering/Statistics.scala +++ b/src/main/scala/net/virtualvoid/sbt/graph/rendering/Statistics.scala @@ -20,12 +20,12 @@ package rendering object Statistics { def renderModuleStatsList(graph: ModuleGraph): String = { case class ModuleStats( - id: ModuleId, - numDirectDependencies: Int, - numTransitiveDependencies: Int, - selfSize: Option[Long], - transitiveSize: Long, - transitiveDependencyStats: Map[ModuleId, ModuleStats]) { + id: ModuleId, + numDirectDependencies: Int, + numTransitiveDependencies: Int, + selfSize: Option[Long], + transitiveSize: Long, + transitiveDependencyStats: Map[ModuleId, ModuleStats]) { def transitiveStatsWithSelf: Map[ModuleId, ModuleStats] = transitiveDependencyStats + (id -> this) } diff --git a/src/main/scala/net/virtualvoid/sbt/graph/util/AsciiTreeLayout.scala b/src/main/scala/net/virtualvoid/sbt/graph/util/AsciiTreeLayout.scala index dc26c98c0..746dab6df 100644 --- a/src/main/scala/net/virtualvoid/sbt/graph/util/AsciiTreeLayout.scala +++ b/src/main/scala/net/virtualvoid/sbt/graph/util/AsciiTreeLayout.scala @@ -13,10 +13,11 @@ object AsciiTreeLayout { // [info] | +-baz // [info] | // [info] +-quux - def toAscii[A](top: A, - children: A ⇒ Seq[A], - display: A ⇒ String, - maxColumn: Int = defaultColumnSize): String = { + 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) + ".." diff --git a/src/sbt-test/sbt-dependency-graph/testDotFileGeneration/build.sbt b/src/sbt-test/sbt-dependency-graph/testDotFileGeneration/build.sbt index 22edf69e4..bb8469447 100644 --- a/src/sbt-test/sbt-dependency-graph/testDotFileGeneration/build.sbt +++ b/src/sbt-test/sbt-dependency-graph/testDotFileGeneration/build.sbt @@ -5,7 +5,10 @@ import net.virtualvoid.sbt.graph.DependencyGraphKeys.dependencyDot import scala.collection.mutable.ListBuffer def defaultSettings = - Seq(scalaVersion := "2.9.2") + Seq( + scalaVersion := "2.9.2", + version := "0.1-SNAPSHOT" + ) lazy val justATransiviteDependencyEndpointProject = Project("just-a-transitive-dependency-endpoint", file("a"))