Skip to content

Commit e63b6cc

Browse files
authored
Merge pull request #444 from desbo/fix-backslash-escaping
Preserve backslashes in `expandMavenSettings`
2 parents 8ab867d + 649b6df commit e63b6cc

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

core/src/main/scala/sbt/librarymanagement/ResolverExtra.scala

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
*/
44
package sbt.librarymanagement
55

6-
import java.io.{ IOException, File }
6+
import java.io.{ File, IOException }
77
import java.net.{ URI, URL }
88
import scala.annotation.nowarn
99
import scala.xml.XML
1010
import org.xml.sax.SAXParseException
1111
import sbt.util.Logger
12+
1213
import java.net.URI
14+
import scala.util.matching.Regex
1315

1416
final class RawRepository(val resolver: AnyRef, name: String) extends Resolver(name) {
1517
override def toString = "Raw(" + resolver.toString + ")"
@@ -400,20 +402,29 @@ private[librarymanagement] abstract class ResolverFunctions {
400402
def defaultRetrievePattern =
401403
"[type]s/[organisation]/[module]/" + PluginPattern + "[artifact](-[revision])(-[classifier]).[ext]"
402404
final val PluginPattern = "(scala_[scalaVersion]/)(sbt_[sbtVersion]/)"
403-
private[librarymanagement] def expandMavenSettings(str: String): String = {
405+
406+
private[librarymanagement] def expandMavenSettings(
407+
str: String,
408+
envVars: Map[String, String] = sys.env,
409+
props: Map[String, String] = sys.props.toMap
410+
): String = {
404411
// Aren't regular expressions beautifully clear and concise.
405412
// This means "find all ${...}" blocks, with the first group of each being the text between curly brackets.
406-
val findQuoted = "\\$\\{([^\\}]*)\\}".r
413+
val findQuoted = "\\$\\{([^}]*)}".r
407414
val env = "env\\.(.*)".r
408415

409416
findQuoted.replaceAllIn(
410417
str,
411-
_.group(1) match {
412-
case env(variable) => sys.env.getOrElse(variable, "")
413-
case property => sys.props.getOrElse(property, "")
414-
}
418+
regexMatch =>
419+
Regex.quoteReplacement {
420+
regexMatch.group(1) match {
421+
case env(variable) => envVars.getOrElse(variable, "")
422+
case property => props.getOrElse(property, "")
423+
}
424+
}
415425
)
416426
}
427+
417428
private[this] def mavenLocalDir: File = {
418429
def loadHomeFromSettings(f: () => File): Option[File] =
419430
try {

core/src/test/scala/sbt/librarymanagement/ResolverExtraTest.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ object ResolverExtraTest extends BasicTestSuite {
3333
)
3434
}
3535

36+
test("expandMavenSettings should preserve backslashes in environment variable values") {
37+
val path = """C:\foo\bar\baz"""
38+
val env = Map("SOME_PATH" -> path)
39+
40+
assert(Resolver.expandMavenSettings("${env.SOME_PATH}", env) == path)
41+
}
42+
3643
// - Helper functions ----------------------------------------------------------------------------
3744
// -----------------------------------------------------------------------------------------------
3845
def assertExpansion(input: String, expected: String) =

0 commit comments

Comments
 (0)