Move back CachePolicy to namespace coursier.core

This commit is contained in:
Alexandre Archambault 2015-07-04 15:19:37 +01:00
parent 6f68abc4d6
commit e2c654eb88
7 changed files with 46 additions and 47 deletions

View File

@ -4,7 +4,7 @@ package cli
import java.io.File
import caseapp._
import coursier.core.{MavenRepository, Parse, Repository}, Repository.CachePolicy
import coursier.core.{ MavenRepository, Parse, Repository, CachePolicy }
import scalaz.concurrent.Task

View File

@ -93,7 +93,7 @@ case class MavenRepository(
def fetch(
artifact: Artifact,
cachePolicy: Repository.CachePolicy
cachePolicy: CachePolicy
): EitherT[Task, String, String] = {
val url0 = root + artifact.url

View File

@ -19,7 +19,7 @@ case class MavenRepository(
def fetch(
artifact: Artifact,
cachePolicy: Repository.CachePolicy
cachePolicy: CachePolicy
): EitherT[Task, String, String] = {
def locally(eitherFile: String \/ File) = {

View File

@ -1,7 +1,5 @@
package coursier.core
import coursier.core.Repository.CachePolicy
import scalaz.{ -\/, \/-, \/, EitherT }
import scalaz.concurrent.Task
@ -11,7 +9,7 @@ trait Repository {
def find(
module: Module,
version: String,
cachePolicy: Repository.CachePolicy = Repository.CachePolicy.Default
cachePolicy: CachePolicy = CachePolicy.Default
): EitherT[Task, String, (Artifact.Source, Project)]
}
@ -72,43 +70,6 @@ object Repository {
}
}
sealed trait CachePolicy {
def apply[E,T](local: => Task[E \/ T])
(remote: => Task[E \/ T]): Task[E \/ T]
def saving[E,T](local: => Task[E \/ T])
(remote: => Task[E \/ T])
(save: => T => Task[Unit]): Task[E \/ T] =
apply(local)(CachePolicy.saving(remote)(save))
}
object CachePolicy {
def saving[E,T](remote: => Task[E \/ T])
(save: T => Task[Unit]): Task[E \/ T] = {
for {
res <- remote
_ <- res.fold(_ => Task.now(()), t => save(t))
} yield res
}
case object Default extends CachePolicy {
def apply[E,T](local: => Task[E \/ T])
(remote: => Task[E \/ T]): Task[E \/ T] =
local
.flatMap(res => if (res.isLeft) remote else Task.now(res))
}
case object LocalOnly extends CachePolicy {
def apply[E,T](local: => Task[E \/ T])
(remote: => Task[E \/ T]): Task[E \/ T] =
local
}
case object ForceDownload extends CachePolicy {
def apply[E,T](local: => Task[E \/ T])
(remote: => Task[E \/ T]): Task[E \/ T] =
remote
}
}
implicit class ArtifactExtensions(val underlying: Artifact) extends AnyVal {
def withDefaultChecksums: Artifact =
underlying.copy(extra = underlying.extra ++ Seq(
@ -370,4 +331,41 @@ abstract class BaseMavenRepository(
}
}
}
}
sealed trait CachePolicy {
def apply[E,T](local: => Task[E \/ T])
(remote: => Task[E \/ T]): Task[E \/ T]
def saving[E,T](local: => Task[E \/ T])
(remote: => Task[E \/ T])
(save: => T => Task[Unit]): Task[E \/ T] =
apply(local)(CachePolicy.saving(remote)(save))
}
object CachePolicy {
def saving[E,T](remote: => Task[E \/ T])
(save: T => Task[Unit]): Task[E \/ T] = {
for {
res <- remote
_ <- res.fold(_ => Task.now(()), t => save(t))
} yield res
}
case object Default extends CachePolicy {
def apply[E,T](local: => Task[E \/ T])
(remote: => Task[E \/ T]): Task[E \/ T] =
local
.flatMap(res => if (res.isLeft) remote else Task.now(res))
}
case object LocalOnly extends CachePolicy {
def apply[E,T](local: => Task[E \/ T])
(remote: => Task[E \/ T]): Task[E \/ T] =
local
}
case object ForceDownload extends CachePolicy {
def apply[E,T](local: => Task[E \/ T])
(remote: => Task[E \/ T]): Task[E \/ T] =
remote
}
}

View File

@ -52,6 +52,9 @@ package object coursier {
type Scope = core.Scope
val Scope: core.Scope.type = core.Scope
type CachePolicy = core.CachePolicy
val CachePolicy: core.CachePolicy.type = core.CachePolicy
type Repository = core.Repository
val Repository: core.Repository.type = core.Repository

View File

@ -11,7 +11,7 @@ class TestRepository(projects: Map[(Module, String), Project]) extends Repositor
val source = new core.Artifact.Source {
def artifacts(dependency: Dependency, project: Project) = ???
}
def find(module: Module, version: String, cachePolicy: Repository.CachePolicy) =
def find(module: Module, version: String, cachePolicy: CachePolicy) =
EitherT(Task.now(
projects.get((module, version)).map((source, _)).toRightDisjunction("Not found")
))

View File

@ -2,8 +2,6 @@ package coursier
import java.net.{ URI, URL }
import coursier.core.Repository.CachePolicy
import scala.annotation.tailrec
import scalaz.{ -\/, \/-, \/, EitherT }
import scalaz.concurrent.Task