mirror of https://github.com/sbt/sbt.git
Improve the eviction warning presentation.
Fixes sbt/sbt#2699 Before: [warn] There may be incompatibilities among your library dependencies. [warn] Here are some of the libraries that were evicted: [warn] * com.google.code.findbugs:jsr305:2.0.1 -> 3.0.0 [warn] Run 'evicted' to see detailed eviction warnings After: [warn] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible: [warn] [warn] * com.typesafe.akka:akka-actor_2.12:2.5.0 is selected over 2.4.17 [warn] +- de.heikoseeberger:akka-log4j_2.12:1.4.0 (depends on 2.5.0) [warn] +- com.typesafe.akka:akka-parsing_2.12:10.0.6 (depends on 2.4.17) [warn] +- com.typesafe.akka:akka-stream_2.12:2.4.17 () (depends on 2.4.17) [warn] [warn] Run 'evicted' to see detailed eviction warnings
This commit is contained in:
parent
182a07402a
commit
182b50a12b
|
|
@ -143,17 +143,24 @@ final class EvictionPair private[sbt] (
|
|||
object EvictionPair {
|
||||
implicit val evictionPairLines: ShowLines[EvictionPair] = ShowLines { a: EvictionPair =>
|
||||
val revs = a.evicteds map { _.module.revision }
|
||||
val revsStr = if (revs.size <= 1) revs.mkString else "(" + revs.mkString(", ") + ")"
|
||||
val winnerRev = (a.winner map { r =>
|
||||
val callers: String =
|
||||
if (a.showCallers)
|
||||
r.callers match {
|
||||
case Seq() => ""
|
||||
case cs => (cs map { _.caller.toString }).mkString(" (caller: ", ", ", ")")
|
||||
} else ""
|
||||
r.module.revision + callers
|
||||
}) map { " -> " + _ } getOrElse ""
|
||||
Seq(s"\t* ${a.organization}:${a.name}:${revsStr}$winnerRev")
|
||||
val revsStr = if (revs.size <= 1) revs.mkString else "{" + revs.mkString(", ") + "}"
|
||||
val seen: mutable.Set[ModuleID] = mutable.Set()
|
||||
val callers: List[String] = (a.evicteds.toList ::: a.winner.toList) flatMap { r =>
|
||||
val rev = r.module.revision
|
||||
r.callers.toList flatMap { caller =>
|
||||
if (seen(caller.caller)) Nil
|
||||
else {
|
||||
seen += caller.caller
|
||||
List(f"\t +- ${caller}%-50s (depends on $rev)")
|
||||
}
|
||||
}
|
||||
}
|
||||
val winnerRev = a.winner match {
|
||||
case Some(r) => s":${r.module.revision} is selected over ${revsStr}"
|
||||
case _ => " is evicted completely"
|
||||
}
|
||||
val title = s"\t* ${a.organization}:${a.name}$winnerRev"
|
||||
title :: (if (a.showCallers) callers.reverse else Nil) ::: List("")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -285,13 +292,13 @@ object EvictionWarning {
|
|||
}
|
||||
|
||||
if (a.directEvictions.nonEmpty || a.transitiveEvictions.nonEmpty) {
|
||||
out += "There may be incompatibilities among your library dependencies."
|
||||
out += "Here are some of the libraries that were evicted:"
|
||||
out += "Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:"
|
||||
out += ""
|
||||
out ++= (a.directEvictions flatMap { _.lines })
|
||||
out ++= (a.transitiveEvictions flatMap { _.lines })
|
||||
}
|
||||
|
||||
if (a.allEvictions.nonEmpty && a.reportedEvictions.nonEmpty && !a.options.showCallers) {
|
||||
if (a.allEvictions.nonEmpty && a.reportedEvictions.nonEmpty) {
|
||||
out += "Run 'evicted' to see detailed eviction warnings"
|
||||
}
|
||||
|
||||
|
|
@ -312,6 +319,6 @@ object EvictionWarning {
|
|||
}
|
||||
}
|
||||
if (out.isEmpty) Nil
|
||||
else List("Here are other libraries that were evicted:") ::: out.toList
|
||||
else List("Here are other depedency conflicts that were resolved:", "") ::: out.toList
|
||||
} else Nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -90,7 +90,8 @@ class EvictionWarningSpec extends BaseIvySpecification {
|
|||
EvictionWarning(m, defaultOptions.withShowCallers(false), report, log).lines shouldBe
|
||||
List(
|
||||
"Scala version was updated by one of library dependencies:",
|
||||
"\t* org.scala-lang:scala-library:2.10.2 -> 2.10.3",
|
||||
"\t* org.scala-lang:scala-library:2.10.3 is selected over 2.10.2",
|
||||
"",
|
||||
"To force scalaVersion, add the following:",
|
||||
"\tivyScala := ivyScala.value map { _.copy(overrideScalaVersion = true) }",
|
||||
"Run 'evicted' to see detailed eviction warnings"
|
||||
|
|
@ -103,9 +104,13 @@ class EvictionWarningSpec extends BaseIvySpecification {
|
|||
EvictionWarning(m, defaultOptions, report, log).lines shouldBe
|
||||
List(
|
||||
"Scala version was updated by one of library dependencies:",
|
||||
"\t* org.scala-lang:scala-library:2.10.2 -> 2.10.3 (caller: com.typesafe.akka:akka-actor_2.10:2.3.0, com.example:foo:0.1.0)",
|
||||
"\t* org.scala-lang:scala-library:2.10.3 is selected over 2.10.2",
|
||||
"\t +- com.typesafe.akka:akka-actor_2.10:2.3.0 (depends on 2.10.3)",
|
||||
"\t +- com.example:foo:0.1.0 (depends on 2.10.2)",
|
||||
"",
|
||||
"To force scalaVersion, add the following:",
|
||||
"\tivyScala := ivyScala.value map { _.copy(overrideScalaVersion = true) }"
|
||||
"\tivyScala := ivyScala.value map { _.copy(overrideScalaVersion = true) }",
|
||||
"Run 'evicted' to see detailed eviction warnings"
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -145,9 +150,12 @@ class EvictionWarningSpec extends BaseIvySpecification {
|
|||
val report = ivyUpdate(m)
|
||||
EvictionWarning(m, defaultOptions, report, log).lines shouldBe
|
||||
List(
|
||||
"There may be incompatibilities among your library dependencies.",
|
||||
"Here are some of the libraries that were evicted:",
|
||||
"\t* commons-io:commons-io:1.4 -> 2.4 (caller: com.example:foo:0.1.0)"
|
||||
"Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:",
|
||||
"",
|
||||
"\t* commons-io:commons-io:2.4 is selected over 1.4",
|
||||
"\t +- com.example:foo:0.1.0 (depends on 1.4)",
|
||||
"",
|
||||
"Run 'evicted' to see detailed eviction warnings"
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -156,9 +164,12 @@ class EvictionWarningSpec extends BaseIvySpecification {
|
|||
val report = ivyUpdate(m)
|
||||
EvictionWarning(m, defaultOptions.withShowCallers(true), report, log).lines shouldBe
|
||||
List(
|
||||
"There may be incompatibilities among your library dependencies.",
|
||||
"Here are some of the libraries that were evicted:",
|
||||
"\t* commons-io:commons-io:1.4 -> 2.4 (caller: com.example:foo:0.1.0)"
|
||||
"Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:",
|
||||
"",
|
||||
"\t* commons-io:commons-io:2.4 is selected over 1.4",
|
||||
"\t +- com.example:foo:0.1.0 (depends on 1.4)",
|
||||
"",
|
||||
"Run 'evicted' to see detailed eviction warnings"
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -208,9 +219,12 @@ class EvictionWarningSpec extends BaseIvySpecification {
|
|||
val report = ivyUpdate(m)
|
||||
EvictionWarning(m, defaultOptions, report, log).lines shouldBe
|
||||
List(
|
||||
"There may be incompatibilities among your library dependencies.",
|
||||
"Here are some of the libraries that were evicted:",
|
||||
"\t* com.typesafe.akka:akka-actor_2.10:2.1.4 -> 2.3.4 (caller: com.example:foo:0.1.0)"
|
||||
"Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:",
|
||||
"",
|
||||
"\t* com.typesafe.akka:akka-actor_2.10:2.3.4 is selected over 2.1.4",
|
||||
"\t +- com.example:foo:0.1.0 (depends on 2.1.4)",
|
||||
"",
|
||||
"Run 'evicted' to see detailed eviction warnings"
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -241,9 +255,14 @@ class EvictionWarningSpec extends BaseIvySpecification {
|
|||
val report = ivyUpdate(m)
|
||||
EvictionWarning(m, defaultOptions, report, log).lines shouldBe
|
||||
List(
|
||||
"There may be incompatibilities among your library dependencies.",
|
||||
"Here are some of the libraries that were evicted:",
|
||||
"\t* com.typesafe.akka:akka-actor_2.10:2.1.4 -> 2.3.4 (caller: com.typesafe.akka:akka-remote_2.10:2.3.4, org.w3:banana-sesame_2.10:0.4, org.w3:banana-rdf_2.10:0.4)"
|
||||
"Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:",
|
||||
"",
|
||||
"\t* com.typesafe.akka:akka-actor_2.10:2.3.4 is selected over 2.1.4",
|
||||
"\t +- com.typesafe.akka:akka-remote_2.10:2.3.4 (depends on 2.3.4)",
|
||||
"\t +- org.w3:banana-rdf_2.10:0.4 (depends on 2.1.4)",
|
||||
"\t +- org.w3:banana-sesame_2.10:0.4 (depends on 2.1.4)",
|
||||
"",
|
||||
"Run 'evicted' to see detailed eviction warnings"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue