sbt/plugin/src/main/scala/coursier/InterProjectRepository.scala

55 lines
1.4 KiB
Scala
Raw Normal View History

2015-12-30 01:34:34 +01:00
package coursier
import scalaz.{ -\/, \/-, Monad, EitherT }
case class InterProjectSource(artifacts: Map[(Module, String), Map[String, Seq[Artifact]]]) extends Artifact.Source {
2015-12-30 01:34:35 +01:00
def artifacts(
dependency: Dependency,
project: Project,
overrideClassifiers: Option[Seq[String]]
): Seq[Artifact] =
overrideClassifiers match {
case None =>
artifacts
.get(dependency.moduleVersion)
.toSeq
.flatMap(_.get(dependency.configuration))
.flatten
case Some(_) =>
Nil
}
2015-12-30 01:34:34 +01:00
}
case class InterProjectRepository(projects: Seq[(Project, Seq[(String, Seq[Artifact])])]) extends Repository {
private val map = projects
2015-12-30 01:34:43 +01:00
.map { case (proj, _) => proj.moduleVersion -> proj }
2015-12-30 01:34:34 +01:00
.toMap
val source = InterProjectSource(
2015-12-30 01:34:43 +01:00
projects.map { case (proj, artifactsByConfig) =>
val artifacts = artifactsByConfig.toMap
val allArtifacts = proj.allConfigurations.map { case (config, extends0) =>
config -> (extends0 + config).toSeq.flatMap(artifacts.getOrElse(_, Nil))
2015-12-30 01:34:34 +01:00
}
proj.moduleVersion -> allArtifacts
}.toMap
)
def find[F[_]](
module: Module,
version: String,
fetch: Fetch.Content[F]
)(implicit
F: Monad[F]
): EitherT[F, String, (Artifact.Source, Project)] = {
val res = map.get((module, version)) match {
case Some(proj) =>
\/-((source, proj))
case None =>
2015-12-30 01:34:43 +01:00
-\/("Not found")
2015-12-30 01:34:34 +01:00
}
EitherT(F.point(res))
}
}