mirror of https://github.com/sbt/sbt.git
Merge branch '1.1.x' into wip/merge-1.1.x
This commit is contained in:
commit
c0a0b7db0c
13
build.sbt
13
build.sbt
|
|
@ -2,7 +2,12 @@ import Dependencies._
|
||||||
import Path._
|
import Path._
|
||||||
import com.typesafe.tools.mima.core._, ProblemFilters._
|
import com.typesafe.tools.mima.core._, ProblemFilters._
|
||||||
|
|
||||||
def commonSettings: Seq[Setting[_]] = Def settings (
|
val _ = {
|
||||||
|
//https://github.com/sbt/contraband/issues/122
|
||||||
|
sys.props += ("line.separator" -> "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
def commonSettings: Seq[Setting[_]] = Def.settings(
|
||||||
scalaVersion := scala212,
|
scalaVersion := scala212,
|
||||||
// publishArtifact in packageDoc := false,
|
// publishArtifact in packageDoc := false,
|
||||||
resolvers += Resolver.typesafeIvyRepo("releases"),
|
resolvers += Resolver.typesafeIvyRepo("releases"),
|
||||||
|
|
@ -31,7 +36,7 @@ def commonSettings: Seq[Setting[_]] = Def settings (
|
||||||
val mimaSettings = Def settings (
|
val mimaSettings = Def settings (
|
||||||
mimaPreviousArtifacts := Set(
|
mimaPreviousArtifacts := Set(
|
||||||
"1.0.0", "1.0.1", "1.0.2", "1.0.3", "1.0.4",
|
"1.0.0", "1.0.1", "1.0.2", "1.0.3", "1.0.4",
|
||||||
"1.1.0", "1.1.1", "1.1.2", "1.1.3",
|
"1.1.0", "1.1.1", "1.1.2", "1.1.3", "1.1.4",
|
||||||
) map (version =>
|
) map (version =>
|
||||||
organization.value %% moduleName.value % version
|
organization.value %% moduleName.value % version
|
||||||
cross (if (crossPaths.value) CrossVersion.binary else CrossVersion.disabled)
|
cross (if (crossPaths.value) CrossVersion.binary else CrossVersion.disabled)
|
||||||
|
|
@ -54,7 +59,7 @@ lazy val lmRoot = (project in file("."))
|
||||||
git.baseVersion := "1.2.0",
|
git.baseVersion := "1.2.0",
|
||||||
version := {
|
version := {
|
||||||
val v = version.value
|
val v = version.value
|
||||||
if (v contains "SNAPSHOT") git.baseVersion.value
|
if (v contains "SNAPSHOT") git.baseVersion.value + "-SNAPSHOT"
|
||||||
else v
|
else v
|
||||||
}
|
}
|
||||||
)),
|
)),
|
||||||
|
|
@ -215,7 +220,7 @@ lazy val lmIvy = (project in file("ivy"))
|
||||||
.settings(
|
.settings(
|
||||||
commonSettings,
|
commonSettings,
|
||||||
name := "librarymanagement-ivy",
|
name := "librarymanagement-ivy",
|
||||||
libraryDependencies ++= Seq(ivy, scalaTest % Test, scalaCheck % Test),
|
libraryDependencies ++= Seq(ivy),
|
||||||
managedSourceDirectories in Compile +=
|
managedSourceDirectories in Compile +=
|
||||||
baseDirectory.value / "src" / "main" / "contraband-scala",
|
baseDirectory.value / "src" / "main" / "contraband-scala",
|
||||||
sourceManaged in (Compile, generateContrabands) := baseDirectory.value / "src" / "main" / "contraband-scala",
|
sourceManaged in (Compile, generateContrabands) := baseDirectory.value / "src" / "main" / "contraband-scala",
|
||||||
|
|
|
||||||
|
|
@ -3,5 +3,5 @@ package sbt.librarymanagement
|
||||||
import gigahorse._, support.okhttp.Gigahorse
|
import gigahorse._, support.okhttp.Gigahorse
|
||||||
|
|
||||||
object Http {
|
object Http {
|
||||||
lazy val http: HttpClient = Gigahorse.http(Gigahorse.config)
|
lazy val http: HttpClient = Gigahorse.http(gigahorse.Config())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import java.net.URL
|
||||||
import java.util.Collections
|
import java.util.Collections
|
||||||
|
|
||||||
import org.apache.ivy.core.module.descriptor.DependencyDescriptor
|
import org.apache.ivy.core.module.descriptor.DependencyDescriptor
|
||||||
import org.apache.ivy.core.resolve.ResolveData
|
import org.apache.ivy.core.resolve.{ DownloadOptions, ResolveData }
|
||||||
import org.apache.ivy.core.settings.IvySettings
|
import org.apache.ivy.core.settings.IvySettings
|
||||||
import org.apache.ivy.plugins.repository.{ RepositoryCopyProgressListener, Resource, TransferEvent }
|
import org.apache.ivy.plugins.repository.{ RepositoryCopyProgressListener, Resource, TransferEvent }
|
||||||
import org.apache.ivy.plugins.resolver.{
|
import org.apache.ivy.plugins.resolver.{
|
||||||
|
|
@ -30,6 +30,7 @@ import java.io.{ File, IOException }
|
||||||
|
|
||||||
import org.apache.ivy.util.{ ChecksumHelper, FileUtil, Message }
|
import org.apache.ivy.util.{ ChecksumHelper, FileUtil, Message }
|
||||||
import org.apache.ivy.core.module.descriptor.{ Artifact => IArtifact }
|
import org.apache.ivy.core.module.descriptor.{ Artifact => IArtifact }
|
||||||
|
import org.apache.ivy.core.report.DownloadReport
|
||||||
import sbt.io.IO
|
import sbt.io.IO
|
||||||
import sbt.util.Logger
|
import sbt.util.Logger
|
||||||
import sbt.librarymanagement._
|
import sbt.librarymanagement._
|
||||||
|
|
@ -181,7 +182,7 @@ private[sbt] object ConvertResolver {
|
||||||
resolver
|
resolver
|
||||||
}
|
}
|
||||||
case repo: SshRepository => {
|
case repo: SshRepository => {
|
||||||
val resolver = new SshResolver with DescriptorRequired {
|
val resolver = new SshResolver with DescriptorRequired with ThreadSafeSshBasedResolver {
|
||||||
override val managedChecksumsEnabled: Boolean = managedChecksums
|
override val managedChecksumsEnabled: Boolean = managedChecksums
|
||||||
override def getResource(resource: Resource, dest: File): Long = get(resource, dest)
|
override def getResource(resource: Resource, dest: File): Long = get(resource, dest)
|
||||||
}
|
}
|
||||||
|
|
@ -190,7 +191,7 @@ private[sbt] object ConvertResolver {
|
||||||
resolver
|
resolver
|
||||||
}
|
}
|
||||||
case repo: SftpRepository => {
|
case repo: SftpRepository => {
|
||||||
val resolver = new SFTPResolver
|
val resolver = new SFTPResolver with ThreadSafeSshBasedResolver
|
||||||
initializeSSHResolver(resolver, repo, settings)
|
initializeSSHResolver(resolver, repo, settings)
|
||||||
resolver
|
resolver
|
||||||
}
|
}
|
||||||
|
|
@ -405,4 +406,15 @@ private[sbt] object ConvertResolver {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private sealed trait ThreadSafeSshBasedResolver
|
||||||
|
extends org.apache.ivy.plugins.resolver.AbstractSshBasedResolver {
|
||||||
|
//uncomment to test non-threadsafe behavior
|
||||||
|
// private def lock = new Object
|
||||||
|
private val lock = org.apache.ivy.plugins.repository.ssh.SshCache.getInstance
|
||||||
|
override def download(artifacts: Array[IArtifact], options: DownloadOptions): DownloadReport =
|
||||||
|
lock.synchronized {
|
||||||
|
super.download(artifacts, options)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -214,7 +214,7 @@ object GigahorseUrlHandler {
|
||||||
|
|
||||||
private val EmptyBuffer: Array[Byte] = new Array[Byte](0)
|
private val EmptyBuffer: Array[Byte] = new Array[Byte](0)
|
||||||
|
|
||||||
lazy val http: HttpClient = Gigahorse.http(Gigahorse.config)
|
lazy val http: HttpClient = Gigahorse.http(gigahorse.Config())
|
||||||
|
|
||||||
private lazy val okHttpClient: OkHttpClient = {
|
private lazy val okHttpClient: OkHttpClient = {
|
||||||
http
|
http
|
||||||
|
|
|
||||||
|
|
@ -85,8 +85,8 @@ private[sbt] case class SbtChainResolver(
|
||||||
dd: DependencyDescriptor,
|
dd: DependencyDescriptor,
|
||||||
data: ResolveData
|
data: ResolveData
|
||||||
): ResolvedModuleRevision = {
|
): ResolvedModuleRevision = {
|
||||||
if (data.getOptions.getLog != LogOptions.LOG_QUIET)
|
if (data.getOptions.getLog == LogOptions.LOG_DEFAULT)
|
||||||
Message.debug("Resolving " + dd.getDependencyRevisionId + " ...")
|
Message.info("Resolving " + dd.getDependencyRevisionId + " ...")
|
||||||
val gd = CustomSbtResolution.getDependency(dd, data)
|
val gd = CustomSbtResolution.getDependency(dd, data)
|
||||||
val mod = IvySbt.resetArtifactResolver(gd)
|
val mod = IvySbt.resetArtifactResolver(gd)
|
||||||
mod
|
mod
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
package sbt.internal.librarymanagement
|
||||||
|
|
||||||
|
import sbt.io._
|
||||||
|
import sbt.io.syntax._
|
||||||
|
import sbt.util.Level
|
||||||
|
import sbt.librarymanagement._
|
||||||
|
import sbt.librarymanagement.syntax._
|
||||||
|
import java.nio.file.Paths
|
||||||
|
|
||||||
|
//by default this test is ignored
|
||||||
|
//to run this you need to change "repo" to point to some sftp repository which contains a dependency referring a dependency in same repo
|
||||||
|
//it will then attempt to authenticate via key file and fetch the dependency specified via "org" and "module"
|
||||||
|
class SftpRepoSpec extends BaseIvySpecification {
|
||||||
|
val repo: Option[String] = None
|
||||||
|
// val repo: Option[String] = Some("some repo")
|
||||||
|
//a dependency which depends on another in the repo
|
||||||
|
def org(repo: String) = s"com.${repo}"
|
||||||
|
def module(org: String) = org % "some-lib" % "version"
|
||||||
|
|
||||||
|
override def resolvers = {
|
||||||
|
implicit val patterns = Resolver.defaultIvyPatterns
|
||||||
|
repo.map { repo =>
|
||||||
|
val privateKeyFile = Paths.get(sys.env("HOME"), ".ssh", s"id_${repo}").toFile
|
||||||
|
Resolver.sftp(repo, s"repo.${repo}.com", 2222).as(repo, privateKeyFile)
|
||||||
|
}.toVector ++ super.resolvers
|
||||||
|
}
|
||||||
|
|
||||||
|
"resolving multiple deps from sftp repo" should "not hang or fail" in {
|
||||||
|
repo match {
|
||||||
|
case Some(repo) =>
|
||||||
|
IO.delete(currentTarget / "cache" / org(repo))
|
||||||
|
// log.setLevel(Level.Debug)
|
||||||
|
lmEngine().retrieve(module(org(repo)), scalaModuleInfo = None, currentTarget, log) match {
|
||||||
|
case Right(v) => log.debug(v.toString())
|
||||||
|
case Left(e) =>
|
||||||
|
log.log(Level.Error, e.failedPaths.toString())
|
||||||
|
throw e.resolveException
|
||||||
|
}
|
||||||
|
case None => log.info(s"skipped ${getClass}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,7 +4,7 @@ import sbt.contraband.ContrabandPlugin.autoImport._
|
||||||
|
|
||||||
object Dependencies {
|
object Dependencies {
|
||||||
val scala211 = "2.11.12"
|
val scala211 = "2.11.12"
|
||||||
val scala212 = "2.12.4"
|
val scala212 = "2.12.6"
|
||||||
|
|
||||||
private val ioVersion = "1.1.3"
|
private val ioVersion = "1.1.3"
|
||||||
private val utilVersion = "1.1.3"
|
private val utilVersion = "1.1.3"
|
||||||
|
|
@ -45,8 +45,8 @@ object Dependencies {
|
||||||
val scalaReflect = Def.setting { "org.scala-lang" % "scala-reflect" % scalaVersion.value }
|
val scalaReflect = Def.setting { "org.scala-lang" % "scala-reflect" % scalaVersion.value }
|
||||||
val scalaCompiler = Def.setting { "org.scala-lang" % "scala-compiler" % scalaVersion.value }
|
val scalaCompiler = Def.setting { "org.scala-lang" % "scala-compiler" % scalaVersion.value }
|
||||||
val scalaXml = scala211Module("scala-xml", "1.0.5")
|
val scalaXml = scala211Module("scala-xml", "1.0.5")
|
||||||
val scalaTest = "org.scalatest" %% "scalatest" % "3.0.1"
|
val scalaTest = "org.scalatest" %% "scalatest" % "3.0.5"
|
||||||
val scalaCheck = "org.scalacheck" %% "scalacheck" % "1.13.4"
|
val scalaCheck = "org.scalacheck" %% "scalacheck" % "1.14.0"
|
||||||
val sjsonnew = Def.setting {
|
val sjsonnew = Def.setting {
|
||||||
"com.eed3si9n" %% "sjson-new-core" % contrabandSjsonNewVersion.value
|
"com.eed3si9n" %% "sjson-new-core" % contrabandSjsonNewVersion.value
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
sbt.version=1.1.1
|
sbt.version=1.1.4
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
addSbtPlugin("org.scala-sbt" % "sbt-houserules" % "0.3.5")
|
addSbtPlugin("org.scala-sbt" % "sbt-houserules" % "0.3.6")
|
||||||
addSbtPlugin("org.scala-sbt" % "sbt-contraband" % "0.4.0")
|
addSbtPlugin("org.scala-sbt" % "sbt-contraband" % "0.4.0")
|
||||||
addSbtPlugin("org.scala-sbt" % "sbt-contraband" % "0.3.2")
|
addSbtPlugin("org.scala-sbt" % "sbt-contraband" % "0.3.2")
|
||||||
addSbtPlugin("com.lightbend" % "sbt-whitesource" % "0.1.9")
|
addSbtPlugin("com.lightbend" % "sbt-whitesource" % "0.1.9")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue