Add fetchLocalFirst, fix in the way local repo are handled

This commit is contained in:
Alexandre Archambault 2015-11-23 22:55:30 +01:00
parent 07b22c6322
commit 700bf84296
3 changed files with 39 additions and 10 deletions

View File

@ -192,7 +192,7 @@ class Helper(
filter = Some(dep => keepOptional || !dep.optional)
)
val fetchQuiet = coursier.fetch(repositories)
val fetchQuiet = coursier.fetchLocalFirst(repositories)
val fetch0 =
if (verbose0 == 0) fetchQuiet
else {

View File

@ -1,3 +1,4 @@
import scalaz.{ -\/, \/- }
import scalaz.concurrent.Task
/**
@ -109,4 +110,27 @@ package object coursier {
)
}
def fetchLocalFirst(
repositories: Seq[core.Repository]
)(implicit
cachePolicy: CachePolicy
): ResolutionProcess.Fetch[Task] = {
modVers =>
Task.gatherUnordered(
modVers
.map {case (module, version) =>
def attempt(cachePolicy: CachePolicy) =
Repository.find(repositories, module, version)(cachePolicy)
.run
.map((module, version) -> _)
attempt(CachePolicy.LocalOnly).flatMap {
case v @ (_, \/-(_)) => Task.now(v)
case (_, -\/(_)) => attempt(cachePolicy)
}
}
)
}
}

View File

@ -38,7 +38,7 @@ case class Files(
cacheDir + "/" + url.stripPrefix(base)
}
if (artifact.extra.contains("local") || isLocal)
if (artifact.extra.contains("local"))
artifact
else
artifact.copy(extra = artifact.extra + ("local" ->
@ -141,14 +141,19 @@ case class Files(
val tasks =
for ((f, url) <- pairs if url != ("file:" + f) && url != ("file://" + f)) yield {
val file = new File(f)
cachePolicy[FileError \/ File](
_.isLeft )(
locally(file) )(
_ => remote(file, url)
).map(e => (file, url) -> e.map(_ => ()))
}
for ((f, url) <- pairs) yield
if (url != ("file:" + f) && url != ("file://" + f)) {
assert(!f.startsWith("file:/"), s"Wrong file detection: $f, $url")
val file = new File(f)
cachePolicy[FileError \/ File](
_.isLeft)(
locally(file))(
_ => remote(file, url)
).map(e => (file, url) -> e.map(_ => ()))
} else {
val file = new File(f)
Task.now(((file, url), \/-(())))
}
Nondeterminism[Task].gather(tasks)
}