From 745894efc581e379ada1d8d7b6e62dcacd80b4a1 Mon Sep 17 00:00:00 2001 From: eugene yokota Date: Tue, 21 May 2019 04:03:27 -0400 Subject: [PATCH] Handle whitespace in file resolver path (#68) Fixes https://github.com/coursier/coursier/issues/1175 --- .../main/scala/lmcoursier/internal/Resolvers.scala | 11 ++++++++--- .../sbt-test/shared-2/whitespace-resolver/build.sbt | 3 +++ .../whitespace-resolver/project/plugins.sbt | 13 +++++++++++++ .../src/sbt-test/shared-2/whitespace-resolver/test | 1 + 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 modules/sbt-coursier/src/sbt-test/shared-2/whitespace-resolver/build.sbt create mode 100644 modules/sbt-coursier/src/sbt-test/shared-2/whitespace-resolver/project/plugins.sbt create mode 100644 modules/sbt-coursier/src/sbt-test/shared-2/whitespace-resolver/test diff --git a/modules/lm-coursier/src/main/scala/lmcoursier/internal/Resolvers.scala b/modules/lm-coursier/src/main/scala/lmcoursier/internal/Resolvers.scala index f1cd08cb7..5cf5466c4 100644 --- a/modules/lm-coursier/src/main/scala/lmcoursier/internal/Resolvers.scala +++ b/modules/lm-coursier/src/main/scala/lmcoursier/internal/Resolvers.scala @@ -52,6 +52,11 @@ object Resolvers { None } + // this handles whitespace in path + private def pathToUriString(path: String): String = { + "file://" + path.replaceAllLiterally(" ", "%20") + } + def repository( resolver: Resolver, ivyProperties: Map[String, String], @@ -72,8 +77,8 @@ object Resolvers { case None => val repo = IvyRepository.parse( - "file://" + r.patterns.artifactPatterns.head, - metadataPatternOpt = Some("file://" + r.patterns.ivyPatterns.head), + pathToUriString(r.patterns.artifactPatterns.head), + metadataPatternOpt = Some(pathToUriString(r.patterns.ivyPatterns.head)), changing = Some(true), properties = ivyProperties, dropInfoAttributes = true, @@ -90,7 +95,7 @@ object Resolvers { Some(repo) case Some(mavenCompatibleBase) => - mavenRepositoryOpt("file://" + mavenCompatibleBase, log, authentication) + mavenRepositoryOpt(pathToUriString(mavenCompatibleBase), log, authentication) } case r: URLRepository if patternMatchGuard(r.patterns) => diff --git a/modules/sbt-coursier/src/sbt-test/shared-2/whitespace-resolver/build.sbt b/modules/sbt-coursier/src/sbt-test/shared-2/whitespace-resolver/build.sbt new file mode 100644 index 000000000..6c57785e5 --- /dev/null +++ b/modules/sbt-coursier/src/sbt-test/shared-2/whitespace-resolver/build.sbt @@ -0,0 +1,3 @@ +scalaVersion := "2.11.8" + +resolvers += Resolver.file("space-repo", file(raw"/tmp/space the final frontier/repo"))(Resolver.ivyStylePatterns) diff --git a/modules/sbt-coursier/src/sbt-test/shared-2/whitespace-resolver/project/plugins.sbt b/modules/sbt-coursier/src/sbt-test/shared-2/whitespace-resolver/project/plugins.sbt new file mode 100644 index 000000000..71a44ffd3 --- /dev/null +++ b/modules/sbt-coursier/src/sbt-test/shared-2/whitespace-resolver/project/plugins.sbt @@ -0,0 +1,13 @@ +addSbtPlugin { + + val name = sys.props.getOrElse( + "plugin.name", + sys.error("plugin.name Java property not set") + ) + val version = sys.props.getOrElse( + "plugin.version", + sys.error("plugin.version Java property not set") + ) + + "io.get-coursier" % name % version +} \ No newline at end of file diff --git a/modules/sbt-coursier/src/sbt-test/shared-2/whitespace-resolver/test b/modules/sbt-coursier/src/sbt-test/shared-2/whitespace-resolver/test new file mode 100644 index 000000000..103bd8d2f --- /dev/null +++ b/modules/sbt-coursier/src/sbt-test/shared-2/whitespace-resolver/test @@ -0,0 +1 @@ +> update