From 7f774319e61443749dd96ef1cf227d8cc0c6e1ed Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Tue, 7 Jul 2015 12:29:26 +0200 Subject: [PATCH] Better file URI handling Next step would be to make Artifact generic, and use java.net.URI / java.io.File instead of strings. --- .../src/main/scala/coursier/core/MavenRepository.scala | 2 +- core/src/main/scala/coursier/core/Repository.scala | 4 +++- files/src/main/scala/coursier/Cache.scala | 2 +- files/src/main/scala/coursier/Files.scala | 10 ++++++---- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/core-jvm/src/main/scala/coursier/core/MavenRepository.scala b/core-jvm/src/main/scala/coursier/core/MavenRepository.scala index 32b182b38..81e2bf9f3 100644 --- a/core-jvm/src/main/scala/coursier/core/MavenRepository.scala +++ b/core-jvm/src/main/scala/coursier/core/MavenRepository.scala @@ -15,7 +15,7 @@ case class MavenRepository( logger: Option[MavenRepository.Logger] = None ) extends BaseMavenRepository(root, ivyLike) { - val isLocal = root.startsWith("file:///") + val isLocal = root.startsWith("file:/") def fetch( artifact: Artifact, diff --git a/core/src/main/scala/coursier/core/Repository.scala b/core/src/main/scala/coursier/core/Repository.scala index 61455c96d..7283f244c 100644 --- a/core/src/main/scala/coursier/core/Repository.scala +++ b/core/src/main/scala/coursier/core/Repository.scala @@ -3,6 +3,8 @@ package coursier.core import scalaz.{ -\/, \/-, \/, EitherT } import scalaz.concurrent.Task +import java.io.File + import coursier.core.compatibility.encodeURIComponent trait Repository { @@ -21,7 +23,7 @@ object Repository { val sonatypeReleases = MavenRepository("https://oss.sonatype.org/content/repositories/releases/") val sonatypeSnapshots = MavenRepository("https://oss.sonatype.org/content/repositories/snapshots/") - lazy val ivy2Local = MavenRepository("file://" + sys.props("user.home") + "/.ivy2/local/", ivyLike = true) + lazy val ivy2Local = MavenRepository(new File(sys.props("user.home") + "/.ivy2/local/").toURI.toString, ivyLike = true) /** diff --git a/files/src/main/scala/coursier/Cache.scala b/files/src/main/scala/coursier/Cache.scala index df127b3dc..cc1cac06e 100644 --- a/files/src/main/scala/coursier/Cache.scala +++ b/files/src/main/scala/coursier/Cache.scala @@ -61,7 +61,7 @@ case class Cache(cache: File) { add("central", "https://repo1.maven.org/maven2/", ivyLike = false) def addIvy2Local(): Unit = - add("ivy2local", "file://" + sys.props("user.home") + "/.ivy2/local/", ivyLike = true) + add("ivy2local", new File(sys.props("user.home") + "/.ivy2/local/").toURI.toString, ivyLike = true) def init(ifEmpty: Boolean = true): Unit = if (!ifEmpty || !cache.exists()) { diff --git a/files/src/main/scala/coursier/Files.scala b/files/src/main/scala/coursier/Files.scala index 830b0e216..1bc4b8ed3 100644 --- a/files/src/main/scala/coursier/Files.scala +++ b/files/src/main/scala/coursier/Files.scala @@ -23,12 +23,14 @@ case class Files( def withLocal(artifact: Artifact): Artifact = { val isLocal = - artifact.url.startsWith("file://") && - artifact.checksumUrls.values.forall(_.startsWith("file://")) + artifact.url.startsWith("file:/") && + artifact.checksumUrls.values.forall(_.startsWith("file:/")) def local(url: String) = - if (url.startsWith("file://")) + if (url.startsWith("file:///")) url.stripPrefix("file://") + else if (url.startsWith("file:/")) + url.stripPrefix("file:") else cache.find{case (base, _) => url.startsWith(base)} match { case None => ??? @@ -139,7 +141,7 @@ case class Files( val tasks = - for ((f, url) <- pairs if url != ("file://" + f)) yield { + for ((f, url) <- pairs if url != ("file:" + f) && url != ("file://" + f)) yield { val file = new File(f) cachePolicy(locally(file))(remote(file, url)) .map(e => (file, url) -> e.map(_ => ()))