mirror of https://github.com/sbt/sbt.git
Various API changes
This commit is contained in:
parent
7a10915ccf
commit
dc2e2278b0
|
|
@ -97,7 +97,7 @@ case class Coursier(scope: List[String],
|
|||
filter = Some(dep => (keepOptional || !dep.optional) && scopes(dep.scope))
|
||||
)
|
||||
|
||||
val fetchQuiet = Repository.fetchSeveralFrom(repositories)
|
||||
val fetchQuiet = coursier.fetch(repositories)
|
||||
val fetch0 =
|
||||
if (verbose0 == 0) fetchQuiet
|
||||
else {
|
||||
|
|
@ -109,7 +109,8 @@ case class Coursier(scope: List[String],
|
|||
print.flatMap(_ => fetchQuiet(modVers))
|
||||
}
|
||||
|
||||
val res = ResolutionProcess(startRes)
|
||||
val res = startRes
|
||||
.process
|
||||
.run(fetch0, maxIterations)
|
||||
.run
|
||||
|
||||
|
|
|
|||
|
|
@ -62,15 +62,6 @@ object Repository {
|
|||
}
|
||||
}
|
||||
|
||||
def fetchFrom(repositories: Seq[Repository]): ModuleVersion => EitherT[Task, Seq[String], (Artifact.Source, Project)] =
|
||||
modVersion => find(repositories, modVersion._1, modVersion._2)
|
||||
|
||||
def fetchSeveralFrom(repositories: Seq[Repository]): Seq[ModuleVersion] => Task[Seq[(ModuleVersion, Seq[String] \/ (Artifact.Source, Project))]] = {
|
||||
val fetchOne = fetchFrom(repositories)
|
||||
modVers =>
|
||||
Task.gatherUnordered(modVers.map(modVer => fetchOne(modVer).run.map(modVer -> _)))
|
||||
}
|
||||
|
||||
sealed trait CachePolicy {
|
||||
def apply[E,T](local: => Task[E \/ T])
|
||||
(remote: => Task[E \/ T]): Task[E \/ T]
|
||||
|
|
|
|||
|
|
@ -11,13 +11,27 @@ sealed trait ResolutionProcess {
|
|||
(implicit F: Monad[F]): F[Resolution] = {
|
||||
|
||||
if (maxIterations == 0) F.point(current)
|
||||
else
|
||||
else {
|
||||
val maxIterations0 = if (maxIterations > 0) maxIterations - 1 else maxIterations
|
||||
|
||||
this match {
|
||||
case Done(res) => F.point(res)
|
||||
case missing0 @ Missing(missing, _, _) =>
|
||||
F.bind(fetch(missing))(result => missing0.next(result).run(fetch, if (maxIterations > 0) maxIterations - 1 else maxIterations))
|
||||
case cont @ Continue(_, _) => cont.nextNoCont.run(fetch)
|
||||
F.bind(fetch(missing))(result => missing0.next(result).run(fetch, maxIterations0))
|
||||
case cont @ Continue(_, _) => cont.nextNoCont.run(fetch, maxIterations0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def next[F[_]](fetch: ResolutionProcess.Fetch[F])
|
||||
(implicit F: Monad[F]): F[ResolutionProcess] = {
|
||||
|
||||
this match {
|
||||
case Done(res) => F.point(this)
|
||||
case missing0 @ Missing(missing, _, _) =>
|
||||
F.map(fetch(missing))(result => missing0.next(result))
|
||||
case cont @ Continue(_, _) => cont.nextNoCont.next(fetch)
|
||||
}
|
||||
}
|
||||
|
||||
def current: Resolution
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import scalaz.concurrent.Task
|
||||
|
||||
/**
|
||||
* Pulls definitions from coursier.core, with default arguments.
|
||||
* Pulls definitions from coursier.core, sometimes with default arguments.
|
||||
*/
|
||||
package object coursier {
|
||||
|
||||
|
|
@ -23,34 +24,10 @@ package object coursier {
|
|||
}
|
||||
|
||||
type Project = core.Project
|
||||
object Project {
|
||||
def apply(module: Module,
|
||||
version: String,
|
||||
dependencies: Seq[Dependency] = Seq.empty,
|
||||
parent: Option[ModuleVersion] = None,
|
||||
dependencyManagement: Seq[Dependency] = Seq.empty,
|
||||
properties: Map[String, String] = Map.empty,
|
||||
profiles: Seq[Profile] = Seq.empty,
|
||||
versions: Option[core.Versions] = None): Project =
|
||||
core.Project(module, version, dependencies, parent, dependencyManagement, properties, profiles, versions)
|
||||
}
|
||||
val Project: core.Project.type = core.Project
|
||||
|
||||
type Profile = core.Profile
|
||||
object Profile {
|
||||
type Activation = core.Activation
|
||||
object Activation {
|
||||
def apply(properties: Seq[(String, Option[String])] = Nil): Activation =
|
||||
core.Activation(properties)
|
||||
}
|
||||
|
||||
def apply(id: String,
|
||||
activeByDefault: Option[Boolean] = None,
|
||||
activation: Activation = Activation(),
|
||||
dependencies: Seq[Dependency] = Nil,
|
||||
dependencyManagement: Seq[Dependency] = Nil,
|
||||
properties: Map[String, String] = Map.empty) =
|
||||
core.Profile(id, activeByDefault, activation, dependencies, dependencyManagement, properties)
|
||||
}
|
||||
val Profile: core.Profile.type = core.Profile
|
||||
|
||||
type Module = core.Module
|
||||
object Module {
|
||||
|
|
@ -63,6 +40,9 @@ package object coursier {
|
|||
type Scope = core.Scope
|
||||
val Scope: core.Scope.type = core.Scope
|
||||
|
||||
type Repository = core.Repository
|
||||
val Repository: core.Repository.type = core.Repository
|
||||
|
||||
type Resolution = core.Resolution
|
||||
object Resolution {
|
||||
val empty = apply()
|
||||
|
|
@ -72,20 +52,30 @@ package object coursier {
|
|||
projectCache: Map[ModuleVersion, (Artifact.Source, Project)] = Map.empty,
|
||||
errorCache: Map[ModuleVersion, Seq[String]] = Map.empty,
|
||||
filter: Option[Dependency => Boolean] = None,
|
||||
profileActivation: Option[(String, Profile.Activation, Map[String, String]) => Boolean] = None): Resolution =
|
||||
profileActivation: Option[(String, core.Activation, Map[String, String]) => Boolean] = None): Resolution =
|
||||
core.Resolution(rootDependencies, dependencies, conflicts, projectCache, errorCache, filter, profileActivation)
|
||||
}
|
||||
|
||||
type Artifact = core.Artifact
|
||||
object Artifact {
|
||||
def apply(url: String,
|
||||
extra: Map[String, String] = Map.empty,
|
||||
attributes: Attributes = Attributes()): Artifact =
|
||||
core.Artifact(url, extra, attributes)
|
||||
|
||||
type Source = core.Artifact.Source
|
||||
}
|
||||
val Artifact: core.Artifact.type = core.Artifact
|
||||
|
||||
type ResolutionProcess = core.ResolutionProcess
|
||||
val ResolutionProcess: core.ResolutionProcess.type = core.ResolutionProcess
|
||||
|
||||
implicit class ResolutionExtensions(val underlying: Resolution) extends AnyVal {
|
||||
def process: ResolutionProcess = ResolutionProcess(underlying)
|
||||
}
|
||||
|
||||
def fetch(repositories: Seq[core.Repository]): ResolutionProcess.Fetch[Task] = {
|
||||
modVers =>
|
||||
Task.gatherUnordered(
|
||||
modVers
|
||||
.map(modVer =>
|
||||
Repository.find(repositories, modVer._1, modVer._2)
|
||||
.run
|
||||
.map(modVer -> _)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,8 +16,9 @@ object CentralTests extends TestSuite {
|
|||
def resolve(deps: Set[Dependency], filter: Option[Dependency => Boolean] = None, extraRepo: Option[Repository] = None) = {
|
||||
val repositories0 = extraRepo.toSeq ++ repositories
|
||||
|
||||
ResolutionProcess(Resolution(deps, filter = filter))
|
||||
.run(Repository.fetchSeveralFrom(repositories0))
|
||||
Resolution(deps, filter = filter)
|
||||
.process
|
||||
.run(fetch(repositories0))
|
||||
.runF
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import utest._
|
|||
import scalaz._
|
||||
|
||||
import coursier.core.Xml
|
||||
import coursier.Profile.Activation
|
||||
import coursier.core.compatibility._
|
||||
|
||||
object PomParsingTests extends TestSuite {
|
||||
|
|
@ -34,7 +33,7 @@ object PomParsingTests extends TestSuite {
|
|||
</profile>
|
||||
"""
|
||||
|
||||
val expected = \/-(Profile("profile1", None, Activation(Nil), Nil, Nil, Map.empty))
|
||||
val expected = \/-(Profile("profile1", None, Profile.Activation(Nil), Nil, Nil, Map.empty))
|
||||
|
||||
val result = Xml.profile(xmlParse(profileNode).right.get)
|
||||
|
||||
|
|
@ -49,7 +48,7 @@ object PomParsingTests extends TestSuite {
|
|||
</profile>
|
||||
"""
|
||||
|
||||
val expected = \/-(Profile("", Some(true), Activation(Nil), Nil, Nil, Map.empty))
|
||||
val expected = \/-(Profile("", Some(true), Profile.Activation(Nil), Nil, Nil, Map.empty))
|
||||
|
||||
val result = Xml.profile(xmlParse(profileNode).right.get)
|
||||
|
||||
|
|
@ -65,7 +64,7 @@ object PomParsingTests extends TestSuite {
|
|||
</profile>
|
||||
"""
|
||||
|
||||
val expected = \/-(Profile("profile1", Some(true), Activation(Nil), Nil, Nil, Map.empty))
|
||||
val expected = \/-(Profile("profile1", Some(true), Profile.Activation(Nil), Nil, Nil, Map.empty))
|
||||
|
||||
val result = Xml.profile(xmlParse(profileNode).right.get)
|
||||
|
||||
|
|
@ -88,7 +87,7 @@ object PomParsingTests extends TestSuite {
|
|||
val expected = \/-(Profile(
|
||||
"profile1",
|
||||
None,
|
||||
Activation(Nil),
|
||||
Profile.Activation(Nil),
|
||||
Seq(
|
||||
Dependency(Module("comp", "lib"), "0.2")),
|
||||
Nil,
|
||||
|
|
@ -119,7 +118,7 @@ object PomParsingTests extends TestSuite {
|
|||
val expected = \/-(Profile(
|
||||
"profile1",
|
||||
None,
|
||||
Activation(Nil),
|
||||
Profile.Activation(Nil),
|
||||
Nil,
|
||||
Seq(
|
||||
Dependency(Module("comp", "lib"), "0.2", scope = Scope.Test)),
|
||||
|
|
@ -143,7 +142,7 @@ object PomParsingTests extends TestSuite {
|
|||
val expected = \/-(Profile(
|
||||
"profile1",
|
||||
None,
|
||||
Activation(Nil),
|
||||
Profile.Activation(Nil),
|
||||
Nil,
|
||||
Nil,
|
||||
Map("first.prop" -> "value1")
|
||||
|
|
|
|||
|
|
@ -10,8 +10,9 @@ import coursier.test.compatibility._
|
|||
object ResolutionTests extends TestSuite {
|
||||
|
||||
def resolve0(deps: Set[Dependency], filter: Option[Dependency => Boolean] = None) = {
|
||||
ResolutionProcess(Resolution(deps, filter = filter))
|
||||
.run(Repository.fetchSeveralFrom(repositories))
|
||||
Resolution(deps, filter = filter)
|
||||
.process
|
||||
.run(fetch(repositories))
|
||||
.runF
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,4 +6,31 @@ package object test {
|
|||
def withCompileScope: Dependency = underlying.copy(scope = Scope.Compile)
|
||||
}
|
||||
|
||||
object Profile {
|
||||
type Activation = core.Activation
|
||||
object Activation {
|
||||
def apply(properties: Seq[(String, Option[String])] = Nil): Activation =
|
||||
core.Activation(properties)
|
||||
}
|
||||
|
||||
def apply(id: String,
|
||||
activeByDefault: Option[Boolean] = None,
|
||||
activation: Activation = Activation(),
|
||||
dependencies: Seq[Dependency] = Nil,
|
||||
dependencyManagement: Seq[Dependency] = Nil,
|
||||
properties: Map[String, String] = Map.empty) =
|
||||
core.Profile(id, activeByDefault, activation, dependencies, dependencyManagement, properties)
|
||||
}
|
||||
|
||||
object Project {
|
||||
def apply(module: Module,
|
||||
version: String,
|
||||
dependencies: Seq[Dependency] = Seq.empty,
|
||||
parent: Option[ModuleVersion] = None,
|
||||
dependencyManagement: Seq[Dependency] = Seq.empty,
|
||||
properties: Map[String, String] = Map.empty,
|
||||
profiles: Seq[Profile] = Seq.empty,
|
||||
versions: Option[core.Versions] = None): Project =
|
||||
core.Project(module, version, dependencies, parent, dependencyManagement, properties, profiles, versions)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -133,8 +133,9 @@ class Backend($: BackendScope[Unit, State]) {
|
|||
filter = Some(dep => (s.options.followOptional || !dep.optional) && (s.options.keepTest || dep.scope != Scope.Test))
|
||||
)
|
||||
|
||||
ResolutionProcess(res)
|
||||
.run(Repository.fetchSeveralFrom(s.repositories.map(r => r.copy(fetch = r.fetch.copy(logger = Some(logger))))), 100)
|
||||
res
|
||||
.process
|
||||
.run(fetch(s.repositories.map(r => r.copy(fetch = r.fetch.copy(logger = Some(logger))))), 100)
|
||||
}
|
||||
|
||||
// For reasons that are unclear to me, not delaying this when using the runNow execution context
|
||||
|
|
|
|||
Loading…
Reference in New Issue