in multiversion/src/main/scala/multiversion/outputs/ArtifactOutput.scala [70:136]
def buildThirdPartyDoc(
target: String,
index: ResolutionIndex,
outputIndex: collection.Map[String, ArtifactOutput]
): Doc = {
val name = target.replace(':', '_').stripPrefix("//")
val targetConfigs = index.thirdparty.depsByTargets.getOrElse(target, Nil)
val jarsAndLabels = targetConfigs.flatMap { cfg =>
val dependency = cfg.toCoursierDependency(index.thirdparty.scala)
val reconciledDependency = index.reconciledDependency(dependency)
outputIndex
.get(reconciledDependency.bazelLabel)
.map(o =>
(
o.mavenLabel,
o.dependency,
o.label + cfg.suffix,
if (o.hasSources) Some(o.mavenSourcesLabel) else None,
)
)
}
val (jars, dependencies, depLabels, sourceJars) =
if (jarsAndLabels.nonEmpty) {
unzip4(jarsAndLabels)
} else {
// Some resolutions produce no artifacts because they configure a classifier that
// doesn't exist. In this case, we return the dependencies that were resolved
// alongside this non-existent artifact.
unzip4(index.unevictedArtifacts.collect {
case ResolvedDependency(config, dependency, _, _, _) if config.targets.contains(target) =>
(dependency.mavenLabel, dependency, "_" + dependency.bazelLabel, None: Option[String])
})
}
val sourceJarOpt = sourceJars.flatten.headOption
val overriddingTargets = for {
config <- targetConfigs
dependency <- config.dependencies
if index.thirdparty.overriddingTargets.contains(dependency)
} yield dependency
val allLabels = (overriddingTargets ++ depLabels).distinct
val depTags = dependencies.distinct.flatMap(tags)
sourceJarOpt match {
case Some(sourceJar) =>
TargetOutput(
kind = "scala_import",
"name" -> Docs.literal(name),
"jars" -> Docs.array(jars: _*),
"deps" -> Docs.array(allLabels: _*),
"exports" -> Docs.array(allLabels: _*),
"srcjar" -> Docs.literal(sourceJar),
"tags" -> Docs.array(depTags: _*),
"visibility" -> Docs.array("//visibility:public")
).toDoc
case _ =>
TargetOutput(
kind = "scala_import",
"name" -> Docs.literal(name),
"jars" -> Docs.array(jars: _*),
"deps" -> Docs.array(allLabels: _*),
"exports" -> Docs.array(allLabels: _*),
"tags" -> Docs.array(depTags: _*),
"visibility" -> Docs.array("//visibility:public")
).toDoc
}
}