mirror of https://github.com/sbt/sbt.git
Refined artifacts API
This commit is contained in:
parent
c14e6ddb9d
commit
6e3caa6d19
|
|
@ -149,12 +149,12 @@ case class Coursier(scope: List[String],
|
||||||
(repo, deps) <- sorted
|
(repo, deps) <- sorted
|
||||||
dl = downloaders(repo)
|
dl = downloaders(repo)
|
||||||
dep <- deps
|
dep <- deps
|
||||||
|
(_, proj) = res.projectsCache(dep.moduleVersion)
|
||||||
} yield {
|
} yield {
|
||||||
dl.artifact(dep, cachePolicy = cachePolicy).run.map {
|
dl.artifacts(dep, proj, cachePolicy = cachePolicy).map { results =>
|
||||||
case -\/(err) =>
|
val errorCount = results.count{case -\/(_) => true; case _ => false}
|
||||||
println(s"Failed to get ${repr(dep)}: $err")
|
val resultsRepr = results.map(_.map(fileRepr).merge).map(" " + _).mkString("\n")
|
||||||
case \/-(f) =>
|
println(s"${repr(dep)} (${results.length} artifact(s)${if (errorCount > 0) s", $errorCount error(s)" else ""}):\n$resultsRepr")
|
||||||
println(s"${repr(dep)}:\n ${fileRepr(f)}")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,18 +21,14 @@ case class ArtifactDownloader(root: String, cache: File, logger: Option[Artifact
|
||||||
|
|
||||||
def artifact(module: Module,
|
def artifact(module: Module,
|
||||||
version: String,
|
version: String,
|
||||||
artifacts: Artifacts,
|
artifact: Artifacts.Artifact,
|
||||||
cachePolicy: CachePolicy): EitherT[Task, String, File] = {
|
cachePolicy: CachePolicy): EitherT[Task, String, File] = {
|
||||||
|
|
||||||
val (type0, classifier) = artifacts match {
|
|
||||||
case maven: Artifacts.Maven => (maven.`type`, maven.classifier)
|
|
||||||
}
|
|
||||||
|
|
||||||
val relPath =
|
val relPath =
|
||||||
module.organization.split('.').toSeq ++ Seq(
|
module.organization.split('.').toSeq ++ Seq(
|
||||||
module.name,
|
module.name,
|
||||||
version,
|
version,
|
||||||
s"${module.name}-$version${Some(classifier).filter(_.nonEmpty).map("-"+_).mkString}.$type0"
|
s"${module.name}-$version${Some(artifact.classifier).filter(_.nonEmpty).map("-"+_).mkString}.${artifact.`type`}"
|
||||||
)
|
)
|
||||||
|
|
||||||
val file = (cache /: relPath)(new File(_, _))
|
val file = (cache /: relPath)(new File(_, _))
|
||||||
|
|
@ -95,9 +91,23 @@ case class ArtifactDownloader(root: String, cache: File, logger: Option[Artifact
|
||||||
EitherT(cachePolicy(locally)(remote))
|
EitherT(cachePolicy(locally)(remote))
|
||||||
}
|
}
|
||||||
|
|
||||||
def artifact(dependency: Dependency,
|
def artifacts(dependency: Dependency,
|
||||||
cachePolicy: CachePolicy = CachePolicy.Default): EitherT[Task, String, File] =
|
project: Project,
|
||||||
artifact(dependency.module, dependency.version, dependency.artifacts, cachePolicy = cachePolicy)
|
cachePolicy: CachePolicy = CachePolicy.Default): Task[Seq[String \/ File]] = {
|
||||||
|
|
||||||
|
val artifacts0 =
|
||||||
|
dependency.artifacts match {
|
||||||
|
case s: Artifacts.Sufficient => s.artifacts
|
||||||
|
case p: Artifacts.WithProject => p.artifacts(project)
|
||||||
|
}
|
||||||
|
|
||||||
|
val tasks =
|
||||||
|
artifacts0 .map { artifact0 =>
|
||||||
|
artifact(dependency.module, dependency.version, artifact0, cachePolicy = cachePolicy).run
|
||||||
|
}
|
||||||
|
|
||||||
|
Task.gatherUnordered(tasks)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,8 +41,25 @@ case class Dependency(module: Module,
|
||||||
sealed trait Artifacts
|
sealed trait Artifacts
|
||||||
|
|
||||||
object Artifacts {
|
object Artifacts {
|
||||||
|
/**
|
||||||
|
* May become a bit more complicated with Ivy support,
|
||||||
|
* but should still point at one single artifact.
|
||||||
|
*/
|
||||||
|
case class Artifact(`type`: String,
|
||||||
|
classifier: String)
|
||||||
|
|
||||||
|
sealed trait WithProject extends Artifacts {
|
||||||
|
def artifacts(project: Project): Seq[Artifact]
|
||||||
|
}
|
||||||
|
|
||||||
|
sealed trait Sufficient extends Artifacts {
|
||||||
|
def artifacts: Seq[Artifact]
|
||||||
|
}
|
||||||
|
|
||||||
case class Maven(`type`: String,
|
case class Maven(`type`: String,
|
||||||
classifier: String) extends Artifacts
|
classifier: String) extends Sufficient {
|
||||||
|
def artifacts: Seq[Artifact] = Seq(Artifact(`type`, classifier))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case class Project(module: Module,
|
case class Project(module: Module,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue