mirror of https://github.com/sbt/sbt.git
70 lines
2.0 KiB
Scala
70 lines
2.0 KiB
Scala
|
|
package coursier
|
||
|
|
|
||
|
|
import sbt.{Classpaths, Resolver, Def}
|
||
|
|
import Structure._
|
||
|
|
import Keys._
|
||
|
|
import sbt.Keys._
|
||
|
|
|
||
|
|
object Tasks {
|
||
|
|
|
||
|
|
def coursierResolversTask: Def.Initialize[sbt.Task[Seq[Resolver]]] = Def.task {
|
||
|
|
var l = externalResolvers.value
|
||
|
|
if (sbtPlugin.value)
|
||
|
|
l = Seq(
|
||
|
|
sbtResolver.value,
|
||
|
|
Classpaths.sbtPluginReleases
|
||
|
|
) ++ l
|
||
|
|
l
|
||
|
|
}
|
||
|
|
|
||
|
|
def coursierProjectTask: Def.Initialize[sbt.Task[(Project, Seq[(String, Seq[Artifact])])]] =
|
||
|
|
(
|
||
|
|
sbt.Keys.state,
|
||
|
|
sbt.Keys.thisProjectRef
|
||
|
|
).flatMap { (state, projectRef) =>
|
||
|
|
|
||
|
|
// should projectID.configurations be used instead?
|
||
|
|
val configurations = ivyConfigurations.in(projectRef).get(state)
|
||
|
|
|
||
|
|
// exportedProducts looks like what we want, but depends on the update task, which
|
||
|
|
// make the whole thing run into cycles...
|
||
|
|
val artifacts = configurations.map { cfg =>
|
||
|
|
cfg.name -> Option(classDirectory.in(projectRef).in(cfg).getOrElse(state, null))
|
||
|
|
}.collect { case (name, Some(classDir)) =>
|
||
|
|
name -> Seq(
|
||
|
|
Artifact(
|
||
|
|
classDir.toURI.toString,
|
||
|
|
Map.empty,
|
||
|
|
Map.empty,
|
||
|
|
Attributes(),
|
||
|
|
changing = true
|
||
|
|
)
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
val allDependenciesTask = allDependencies.in(projectRef).get(state)
|
||
|
|
|
||
|
|
for {
|
||
|
|
allDependencies <- allDependenciesTask
|
||
|
|
} yield {
|
||
|
|
|
||
|
|
val proj = FromSbt.project(
|
||
|
|
projectID.in(projectRef).get(state),
|
||
|
|
allDependencies,
|
||
|
|
configurations.map { cfg => cfg.name -> cfg.extendsConfigs.map(_.name) }.toMap,
|
||
|
|
scalaVersion.in(projectRef).get(state),
|
||
|
|
scalaBinaryVersion.in(projectRef).get(state)
|
||
|
|
)
|
||
|
|
|
||
|
|
(proj, artifacts)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
def coursierProjectsTask: Def.Initialize[sbt.Task[Seq[(Project, Seq[(String, Seq[Artifact])])]]] =
|
||
|
|
sbt.Keys.state.flatMap { state =>
|
||
|
|
val projects = structure(state).allProjectRefs
|
||
|
|
coursierProject.forAllProjects(state, projects).map(_.values.toVector)
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|