mirror of https://github.com/sbt/sbt.git
Merge pull request #221 from alexarchambault/topic/sbt-maven-compatible-repo
Take into account isMavenCompatible flag in SBT pattern based repositories
This commit is contained in:
commit
c09db18afd
|
|
@ -133,6 +133,35 @@ object FromSbt {
|
|||
)
|
||||
}
|
||||
|
||||
private def mavenCompatibleBaseOpt(patterns: sbt.Patterns): Option[String] =
|
||||
if (patterns.isMavenCompatible) {
|
||||
val baseIvyPattern = patterns.ivyPatterns.head.takeWhile(c => c != '[' && c != '(')
|
||||
val baseArtifactPattern = patterns.ivyPatterns.head.takeWhile(c => c != '[' && c != '(')
|
||||
|
||||
if (baseIvyPattern == baseArtifactPattern)
|
||||
Some(baseIvyPattern)
|
||||
else
|
||||
None
|
||||
} else
|
||||
None
|
||||
|
||||
private def mavenRepositoryOpt(root: String, log: sbt.Logger): Option[MavenRepository] =
|
||||
try {
|
||||
Cache.url(root) // ensure root is a URL whose protocol can be handled here
|
||||
val root0 = if (root.endsWith("/")) root else root + "/"
|
||||
Some(MavenRepository(root0, sbtAttrStub = true))
|
||||
} catch {
|
||||
case e: MalformedURLException =>
|
||||
log.warn(
|
||||
"Error parsing Maven repository base " +
|
||||
root +
|
||||
Option(e.getMessage).map(" (" + _ + ")").mkString +
|
||||
", ignoring it"
|
||||
)
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
def repository(
|
||||
resolver: Resolver,
|
||||
ivyProperties: Map[String, String],
|
||||
|
|
@ -140,45 +169,45 @@ object FromSbt {
|
|||
): Option[Repository] =
|
||||
resolver match {
|
||||
case sbt.MavenRepository(_, root) =>
|
||||
try {
|
||||
Cache.url(root) // ensure root is a URL whose protocol can be handled here
|
||||
val root0 = if (root.endsWith("/")) root else root + "/"
|
||||
Some(MavenRepository(root0, sbtAttrStub = true))
|
||||
} catch {
|
||||
case e: MalformedURLException =>
|
||||
log.warn(
|
||||
"Error parsing Maven repository base " +
|
||||
root +
|
||||
Option(e.getMessage).map(" (" + _ + ")").mkString +
|
||||
", ignoring it"
|
||||
)
|
||||
|
||||
None
|
||||
}
|
||||
mavenRepositoryOpt(root, log)
|
||||
|
||||
case sbt.FileRepository(_, _, patterns)
|
||||
if patterns.ivyPatterns.lengthCompare(1) == 0 &&
|
||||
patterns.artifactPatterns.lengthCompare(1) == 0 =>
|
||||
|
||||
Some(IvyRepository(
|
||||
"file://" + patterns.artifactPatterns.head,
|
||||
metadataPatternOpt = Some("file://" + patterns.ivyPatterns.head),
|
||||
changing = Some(true),
|
||||
properties = ivyProperties,
|
||||
dropInfoAttributes = true
|
||||
))
|
||||
val mavenCompatibleBaseOpt0 = mavenCompatibleBaseOpt(patterns)
|
||||
|
||||
mavenCompatibleBaseOpt0 match {
|
||||
case None =>
|
||||
Some(IvyRepository(
|
||||
"file://" + patterns.artifactPatterns.head,
|
||||
metadataPatternOpt = Some("file://" + patterns.ivyPatterns.head),
|
||||
changing = Some(true),
|
||||
properties = ivyProperties,
|
||||
dropInfoAttributes = true
|
||||
))
|
||||
case Some(mavenCompatibleBase) =>
|
||||
mavenRepositoryOpt("file://" + mavenCompatibleBase, log)
|
||||
}
|
||||
|
||||
case sbt.URLRepository(_, patterns)
|
||||
if patterns.ivyPatterns.lengthCompare(1) == 0 &&
|
||||
patterns.artifactPatterns.lengthCompare(1) == 0 =>
|
||||
|
||||
Some(IvyRepository(
|
||||
patterns.artifactPatterns.head,
|
||||
metadataPatternOpt = Some(patterns.ivyPatterns.head),
|
||||
changing = None,
|
||||
properties = ivyProperties,
|
||||
dropInfoAttributes = true
|
||||
))
|
||||
val mavenCompatibleBaseOpt0 = mavenCompatibleBaseOpt(patterns)
|
||||
|
||||
mavenCompatibleBaseOpt0 match {
|
||||
case None =>
|
||||
Some(IvyRepository(
|
||||
patterns.artifactPatterns.head,
|
||||
metadataPatternOpt = Some(patterns.ivyPatterns.head),
|
||||
changing = None,
|
||||
properties = ivyProperties,
|
||||
dropInfoAttributes = true
|
||||
))
|
||||
case Some(mavenCompatibleBase) =>
|
||||
mavenRepositoryOpt(mavenCompatibleBase, log)
|
||||
}
|
||||
|
||||
case other =>
|
||||
log.warn(s"Unrecognized repository ${other.name}, ignoring it")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
scalaVersion := "2.11.8"
|
||||
|
||||
resolvers += Resolver.url(
|
||||
"webjars-bintray",
|
||||
new URL("https://dl.bintray.com/scalaz/releases/")
|
||||
)(
|
||||
// patterns should be ignored - and the repo be considered a maven one - because
|
||||
// isMavenCompatible is true
|
||||
Patterns(
|
||||
Resolver.ivyStylePatterns.ivyPatterns,
|
||||
Resolver.ivyStylePatterns.artifactPatterns,
|
||||
isMavenCompatible = true
|
||||
)
|
||||
)
|
||||
|
||||
libraryDependencies += "org.scalaz.stream" %% "scalaz-stream" % "0.7.1"
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
val pluginVersion = sys.props.getOrElse(
|
||||
"plugin.version",
|
||||
throw new RuntimeException(
|
||||
"""|The system property 'plugin.version' is not defined.
|
||||
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
|
||||
)
|
||||
)
|
||||
|
||||
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
import java.io.File
|
||||
import java.nio.file.Files
|
||||
|
||||
import scalaz.stream._
|
||||
import scalaz.concurrent.Task
|
||||
|
||||
object Main extends App {
|
||||
|
||||
val pch = Process.constant((i:Int) => Task.now(())).take(3)
|
||||
val count = Process.constant(1).toSource.to(pch).runLog.run.size
|
||||
assert(count == 3)
|
||||
|
||||
Files.write(new File("output").toPath, "OK".getBytes("UTF-8"))
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
$ delete output
|
||||
> run
|
||||
$ exists output
|
||||
Loading…
Reference in New Issue