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) =>
|
2015-12-30 01:34:46 +01:00
|
|
|
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))
|
|
|
|
|
}
|
|
|
|
|
}
|