|
3 | 3 | */ |
4 | 4 | package sbt.librarymanagement |
5 | 5 |
|
6 | | -import java.io.{ IOException, File } |
| 6 | +import java.io.{ File, IOException } |
7 | 7 | import java.net.{ URI, URL } |
8 | 8 | import scala.annotation.nowarn |
9 | 9 | import scala.xml.XML |
10 | 10 | import org.xml.sax.SAXParseException |
11 | 11 | import sbt.util.Logger |
| 12 | + |
12 | 13 | import java.net.URI |
| 14 | +import scala.util.matching.Regex |
13 | 15 |
|
14 | 16 | final class RawRepository(val resolver: AnyRef, name: String) extends Resolver(name) { |
15 | 17 | override def toString = "Raw(" + resolver.toString + ")" |
@@ -400,20 +402,29 @@ private[librarymanagement] abstract class ResolverFunctions { |
400 | 402 | def defaultRetrievePattern = |
401 | 403 | "[type]s/[organisation]/[module]/" + PluginPattern + "[artifact](-[revision])(-[classifier]).[ext]" |
402 | 404 | 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 = { |
404 | 411 | // Aren't regular expressions beautifully clear and concise. |
405 | 412 | // 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 |
407 | 414 | val env = "env\\.(.*)".r |
408 | 415 |
|
409 | 416 | findQuoted.replaceAllIn( |
410 | 417 | 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 | + } |
415 | 425 | ) |
416 | 426 | } |
| 427 | + |
417 | 428 | private[this] def mavenLocalDir: File = { |
418 | 429 | def loadHomeFromSettings(f: () => File): Option[File] = |
419 | 430 | try { |
|
0 commit comments