Don't warn on inconsistent versions in different configurations

(This is a port of sbt/sbt#2258)

sbt was reporting warning abouts inconsistent versions of dependencies
even if these dependencies didn't have the same configuration (as in
`provided` vs `compile`).

This commit fixes this problem by comparing the dependencies by
organization, artifact name and configuration.
This commit is contained in:
Martin Duhem 2015-11-11 15:12:05 +01:00
parent 6528019ec6
commit 4831da8f4b
2 changed files with 10 additions and 2 deletions

View File

@ -529,14 +529,18 @@ private[sbt] object IvySbt {
{
import IvyRetrieve.toModuleID
val dds = moduleID.getDependencies
inconsistentDuplicateWarning(dds map { dd => toModuleID(dd.getDependencyRevisionId) })
val deps = dds flatMap { dd =>
val module = toModuleID(dd.getDependencyRevisionId)
dd.getModuleConfigurations map (c => module.copy(configurations = Some(c)))
}
inconsistentDuplicateWarning(deps)
}
def inconsistentDuplicateWarning(dependencies: Seq[ModuleID]): List[String] =
{
val warningHeader = "Multiple dependencies with the same organization/name but different versions. To avoid conflict, pick one version:"
val out: mutable.ListBuffer[String] = mutable.ListBuffer()
(dependencies groupBy { dep => (dep.organization, dep.name) }) foreach {
(dependencies groupBy { dep => (dep.organization, dep.name, dep.configurations) }) foreach {
case (k, vs) if vs.size > 1 =>
val v0 = vs.head
(vs find { _.revision != v0.revision }) foreach { v =>

View File

@ -13,6 +13,10 @@ class InconsistentDuplicateSpec extends UnitSpec {
)
}
it should "not be warned if in different configurations" in {
IvySbt.inconsistentDuplicateWarning(Seq(akkaActor214, akkaActor230Test)) shouldBe Nil
}
"Duplicate with same version" should "not be warned" in {
IvySbt.inconsistentDuplicateWarning(Seq(akkaActor230Test, akkaActor230)) shouldBe Nil
}