diff --git a/cli/src/main/scala/coursier/cli/Coursier.scala b/cli/src/main/scala/coursier/cli/Coursier.scala index dffa563b6..d4d00a449 100644 --- a/cli/src/main/scala/coursier/cli/Coursier.scala +++ b/cli/src/main/scala/coursier/cli/Coursier.scala @@ -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 diff --git a/core-js/src/main/scala/coursier/core/MavenRepository.scala b/core-js/src/main/scala/coursier/core/MavenRepository.scala index 7215df392..67cf122a7 100644 --- a/core-js/src/main/scala/coursier/core/MavenRepository.scala +++ b/core-js/src/main/scala/coursier/core/MavenRepository.scala @@ -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 diff --git a/core-jvm/src/main/scala/coursier/core/MavenRepository.scala b/core-jvm/src/main/scala/coursier/core/MavenRepository.scala index c9cc2d97c..5b39acf82 100644 --- a/core-jvm/src/main/scala/coursier/core/MavenRepository.scala +++ b/core-jvm/src/main/scala/coursier/core/MavenRepository.scala @@ -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) = { diff --git a/core/src/main/scala/coursier/core/Repository.scala b/core/src/main/scala/coursier/core/Repository.scala index ef35e01db..deb8eed92 100644 --- a/core/src/main/scala/coursier/core/Repository.scala +++ b/core/src/main/scala/coursier/core/Repository.scala @@ -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( } } -} \ No newline at end of file +} + +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 + } +} diff --git a/core/src/main/scala/coursier/package.scala b/core/src/main/scala/coursier/package.scala index dcbeeec53..7ba3175bb 100644 --- a/core/src/main/scala/coursier/package.scala +++ b/core/src/main/scala/coursier/package.scala @@ -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 diff --git a/core/src/test/scala/coursier/test/TestRepository.scala b/core/src/test/scala/coursier/test/TestRepository.scala index 80afb0bb6..8a91d6feb 100644 --- a/core/src/test/scala/coursier/test/TestRepository.scala +++ b/core/src/test/scala/coursier/test/TestRepository.scala @@ -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") )) diff --git a/files/src/main/scala/coursier/Files.scala b/files/src/main/scala/coursier/Files.scala index f19344080..46b337a9b 100644 --- a/files/src/main/scala/coursier/Files.scala +++ b/files/src/main/scala/coursier/Files.scala @@ -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