Ensure returned resolution artifacts are unique

Should hopefully fix issues sometimes seen on CIs using sbt-coursier
This commit is contained in:
Alexandre Archambault 2016-04-09 17:29:51 +02:00
parent c09db18afd
commit 8de5425e4d
No known key found for this signature in database
GPG Key ID: 14640A6839C263A9
2 changed files with 42 additions and 2 deletions

View File

@ -885,8 +885,8 @@ final case class Resolution(
.getOrElse(Map.empty)
)
private def artifacts0(overrideClassifiers: Option[Seq[String]]): Seq[Artifact] =
for {
private def artifacts0(overrideClassifiers: Option[Seq[String]]): Seq[Artifact] = {
val res = for {
dep <- minDependencies.toSeq
(source, proj) <- projectCache
.get(dep.moduleVersion)
@ -895,6 +895,9 @@ final case class Resolution(
.artifacts(dep, proj, overrideClassifiers)
} yield artifact
res.distinct
}
def classifiersArtifacts(classifiers: Seq[String]): Seq[Artifact] =
artifacts0(Some(classifiers))

View File

@ -271,6 +271,43 @@ object CentralTests extends TestSuite {
)
}
}
'artifacts - {
'uniqueness - {
async {
val deps = Set(
Dependency(
Module("org.scala-lang", "scala-compiler"), "2.11.8"
),
Dependency(
Module("org.scala-js", "scalajs-compiler_2.11.8"), "0.6.8"
)
)
val res = await(resolve(deps))
assert(res.errors.isEmpty)
assert(res.conflicts.isEmpty)
assert(res.isDone)
val artifacts = res.artifacts
val map = artifacts.groupBy(a => a)
val nonUnique = map.filter {
case (_, l) => l.length > 1
}
if (nonUnique.nonEmpty)
println(
"Found non unique artifacts:\n" +
nonUnique.keys.toVector.map(" " + _).mkString("\n")
)
assert(nonUnique.isEmpty)
}
}
}
}
}