mirror of https://github.com/sbt/sbt.git
Merge pull request #167 from alexarchambault/topic/override-build-repos
Take into account sbt.override.build.repos flag, escape special characters in path
This commit is contained in:
commit
5f74d7982b
|
|
@ -19,6 +19,26 @@ object Cache {
|
|||
// Check SHA-1 if available, else be fine with no checksum
|
||||
val defaultChecksums = Seq(Some("SHA-1"), None)
|
||||
|
||||
private val unsafeChars: Set[Char] = " %$&+,:;=?@<>#".toSet
|
||||
|
||||
// Scala version of http://stackoverflow.com/questions/4571346/how-to-encode-url-to-avoid-special-characters-in-java/4605848#4605848
|
||||
// '/' was removed from the unsafe character list
|
||||
private def escape(input: String): String = {
|
||||
|
||||
def toHex(ch: Int) =
|
||||
(if (ch < 10) '0' + ch else 'A' + ch - 10).toChar
|
||||
|
||||
def isUnsafe(ch: Char) =
|
||||
ch > 128 || ch < 0 || unsafeChars(ch)
|
||||
|
||||
input.flatMap {
|
||||
case ch if isUnsafe(ch) =>
|
||||
"%" + toHex(ch / 16) + toHex(ch % 16)
|
||||
case other =>
|
||||
other.toString
|
||||
}
|
||||
}
|
||||
|
||||
private def withLocal(artifact: Artifact, cache: Seq[(String, File)]): Artifact = {
|
||||
def local(url: String) =
|
||||
if (url.startsWith("file:///"))
|
||||
|
|
@ -28,7 +48,7 @@ object Cache {
|
|||
else {
|
||||
val localPathOpt = cache.collectFirst {
|
||||
case (base, cacheDir) if url.startsWith(base) =>
|
||||
cacheDir + "/" + url.stripPrefix(base)
|
||||
cacheDir.toString + "/" + escape(url.stripPrefix(base))
|
||||
}
|
||||
|
||||
localPathOpt.getOrElse {
|
||||
|
|
|
|||
|
|
@ -23,15 +23,24 @@ import scalaz.concurrent.{ Task, Strategy }
|
|||
|
||||
object Tasks {
|
||||
|
||||
def coursierResolversTask: Def.Initialize[sbt.Task[Seq[Resolver]]] = Def.task {
|
||||
var resolvers = externalResolvers.value
|
||||
if (sbtPlugin.value)
|
||||
resolvers = Seq(
|
||||
sbtResolver.value,
|
||||
Classpaths.sbtPluginReleases
|
||||
) ++ resolvers
|
||||
resolvers
|
||||
}
|
||||
def coursierResolversTask: Def.Initialize[sbt.Task[Seq[Resolver]]] =
|
||||
(
|
||||
externalResolvers,
|
||||
sbtPlugin,
|
||||
sbtResolver,
|
||||
bootResolvers,
|
||||
overrideBuildResolvers
|
||||
).map { (extRes, isSbtPlugin, sbtRes, bootResOpt, overrideFlag) =>
|
||||
bootResOpt.filter(_ => overrideFlag).getOrElse {
|
||||
var resolvers = extRes
|
||||
if (isSbtPlugin)
|
||||
resolvers = Seq(
|
||||
sbtRes,
|
||||
Classpaths.sbtPluginReleases
|
||||
) ++ resolvers
|
||||
resolvers
|
||||
}
|
||||
}
|
||||
|
||||
def coursierProjectTask: Def.Initialize[sbt.Task[Project]] =
|
||||
(
|
||||
|
|
|
|||
Loading…
Reference in New Issue