From e0eb46a99e91faaee742a49aca7d0fe93de73ad8 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 26 Mar 2018 22:50:03 -0400 Subject: [PATCH 1/8] sbt 1.1.2 --- project/build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/build.properties b/project/build.properties index 31334bbd3..05313438a 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.1.1 +sbt.version=1.1.2 From a14b53da5b7d3468993ff3a6071da6db9b4b3c3e Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 26 Mar 2018 22:50:41 -0400 Subject: [PATCH 2/8] bump to 1.1.5-SNAPSHOT --- build.sbt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.sbt b/build.sbt index 15b9d73b0..4db20753e 100644 --- a/build.sbt +++ b/build.sbt @@ -30,7 +30,7 @@ def commonSettings: Seq[Setting[_]] = Seq( val mimaSettings = Def settings ( mimaPreviousArtifacts := Set( "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 => organization.value %% moduleName.value % version cross (if (crossPaths.value) CrossVersion.binary else CrossVersion.disabled) @@ -50,10 +50,10 @@ lazy val lmRoot = (project in file(".")) }, bintrayPackage := "librarymanagement", scalafmtOnCompile in Sbt := false, - git.baseVersion := "1.1.3", + git.baseVersion := "1.1.5", version := { val v = version.value - if (v contains "SNAPSHOT") git.baseVersion.value + if (v contains "SNAPSHOT") git.baseVersion.value + "-SNAPSHOT" else v } )), From 13807179ae15c1bd37e9ca626a0b6671737ed329 Mon Sep 17 00:00:00 2001 From: OlegYch Date: Sat, 7 Apr 2018 21:59:32 +0300 Subject: [PATCH 3/8] windows compatibility (due to contraband) --- build.sbt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build.sbt b/build.sbt index 4db20753e..0bdf600eb 100644 --- a/build.sbt +++ b/build.sbt @@ -2,6 +2,11 @@ import Dependencies._ import Path._ import com.typesafe.tools.mima.core._, ProblemFilters._ +val _ = { + sys.props += ("line.separator" -> "\n") + sys.props += ("file.separaror" -> "/") +} + def commonSettings: Seq[Setting[_]] = Seq( scalaVersion := scala212, // publishArtifact in packageDoc := false, From 58bb203858fc85fd687483bd0c49d31cf38aa2a7 Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Sun, 8 Apr 2018 14:36:41 +1000 Subject: [PATCH 4/8] Upgrade to latest sbt-houserules --- project/plugins.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index 2cec48aed..7c698418b 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -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") scalacOptions += "-language:postfixOps" From bbb2ef3977b54dee4eb8fb20fa55f0a1a1bcfa21 Mon Sep 17 00:00:00 2001 From: OlegYch Date: Sat, 7 Apr 2018 23:27:08 +0300 Subject: [PATCH 5/8] fix retrieving deps via sftp resolver --- build.sbt | 2 +- .../librarymanagement/ConvertResolver.scala | 18 ++++++-- .../librarymanagement/SftpRepoSpec.scala | 42 +++++++++++++++++++ 3 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 ivy/src/test/scala/sbt/internal/librarymanagement/SftpRepoSpec.scala diff --git a/build.sbt b/build.sbt index 0bdf600eb..4e812dccd 100644 --- a/build.sbt +++ b/build.sbt @@ -3,8 +3,8 @@ import Path._ import com.typesafe.tools.mima.core._, ProblemFilters._ val _ = { + //https://github.com/sbt/contraband/issues/122 sys.props += ("line.separator" -> "\n") - sys.props += ("file.separaror" -> "/") } def commonSettings: Seq[Setting[_]] = Seq( diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/ConvertResolver.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/ConvertResolver.scala index cc13ea745..41a571c37 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/ConvertResolver.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/ConvertResolver.scala @@ -7,7 +7,7 @@ import java.net.URL import java.util.Collections 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.plugins.repository.{ RepositoryCopyProgressListener, Resource, TransferEvent } 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.core.module.descriptor.{ Artifact => IArtifact } +import org.apache.ivy.core.report.DownloadReport import sbt.io.IO import sbt.util.Logger import sbt.librarymanagement._ @@ -181,7 +182,7 @@ private[sbt] object ConvertResolver { resolver } case repo: SshRepository => { - val resolver = new SshResolver with DescriptorRequired { + val resolver = new SshResolver with DescriptorRequired with ThreadSafeSshBasedResolver { override val managedChecksumsEnabled: Boolean = managedChecksums override def getResource(resource: Resource, dest: File): Long = get(resource, dest) } @@ -190,7 +191,7 @@ private[sbt] object ConvertResolver { resolver } case repo: SftpRepository => { - val resolver = new SFTPResolver + val resolver = new SFTPResolver with ThreadSafeSshBasedResolver initializeSSHResolver(resolver, repo, settings) resolver } @@ -406,4 +407,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) + } + } } diff --git a/ivy/src/test/scala/sbt/internal/librarymanagement/SftpRepoSpec.scala b/ivy/src/test/scala/sbt/internal/librarymanagement/SftpRepoSpec.scala new file mode 100644 index 000000000..8da14644a --- /dev/null +++ b/ivy/src/test/scala/sbt/internal/librarymanagement/SftpRepoSpec.scala @@ -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}") + } + } +} From 3b6df7d1059bfbab3f9cd9c417fd767bc1dbfee2 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 28 Apr 2018 03:58:44 -0400 Subject: [PATCH 6/8] Scala 2.12.6 and other dependencies sbt 1.1.4 Scala 2.12.6 ScalaCheck 1.14.0 ScalaTest 3.0.5 --- project/Dependencies.scala | 6 +++--- project/build.properties | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 61b8756e8..a428e71c0 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -4,7 +4,7 @@ import sbt.contraband.ContrabandPlugin.autoImport._ object Dependencies { val scala211 = "2.11.12" - val scala212 = "2.12.4" + val scala212 = "2.12.6" private val ioVersion = "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 scalaCompiler = Def.setting { "org.scala-lang" % "scala-compiler" % scalaVersion.value } val scalaXml = scala211Module("scala-xml", "1.0.5") - val scalaTest = "org.scalatest" %% "scalatest" % "3.0.1" % Test - val scalaCheck = "org.scalacheck" %% "scalacheck" % "1.13.4" % Test + val scalaTest = "org.scalatest" %% "scalatest" % "3.0.5" % Test + val scalaCheck = "org.scalacheck" %% "scalacheck" % "1.14.0" % Test val sjsonnew = Def.setting { "com.eed3si9n" %% "sjson-new-core" % contrabandSjsonNewVersion.value } diff --git a/project/build.properties b/project/build.properties index 05313438a..64cf32f7f 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.1.2 +sbt.version=1.1.4 From 9a002fb5494889d645f45f7834c970dc0e4702d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Wold?= Date: Tue, 15 May 2018 13:22:38 +0200 Subject: [PATCH 7/8] Fixes 4156 --- .../internal/librarymanagement/ivyint/SbtChainResolver.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/SbtChainResolver.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/SbtChainResolver.scala index fb2e9b1d3..b22aa5bef 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/SbtChainResolver.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/SbtChainResolver.scala @@ -85,8 +85,8 @@ private[sbt] case class SbtChainResolver( dd: DependencyDescriptor, data: ResolveData ): ResolvedModuleRevision = { - if (data.getOptions.getLog != LogOptions.LOG_QUIET) - Message.debug("Resolving " + dd.getDependencyRevisionId + " ...") + if (data.getOptions.getLog == LogOptions.LOG_DEFAULT) + Message.info("Resolving " + dd.getDependencyRevisionId + " ...") val gd = CustomSbtResolution.getDependency(dd, data) val mod = IvySbt.resetArtifactResolver(gd) mod From c24ab5c4eeac5032677ce2672c508808e695f175 Mon Sep 17 00:00:00 2001 From: tanishiking24 Date: Thu, 17 May 2018 10:46:21 +0900 Subject: [PATCH 8/8] Enable sbt to specify config.resource without disabling gigahorse Fix https://github.com/sbt/sbt/issues/3585. Gigahorse.config tries to load specified config file in sbt's classpath and of course fail to find the specified config file, and throw java.io.IOException if we specify config.resource, because We can avoid trying to load specified config file inside sbt by avoid using Gigahorse.config that call `ConfigFactory.load()` inside. This commit fixes librarymanagement not to use Gigahorse.config and make it use gigahorse.Config() which returns gigahorse's default config without calling `ConfigFactory.load()` instead. --- core/src/main/scala/sbt/librarymanagement/Http.scala | 2 +- .../internal/librarymanagement/ivyint/GigahorseUrlHandler.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/scala/sbt/librarymanagement/Http.scala b/core/src/main/scala/sbt/librarymanagement/Http.scala index 9870d9b0f..833a9edc0 100644 --- a/core/src/main/scala/sbt/librarymanagement/Http.scala +++ b/core/src/main/scala/sbt/librarymanagement/Http.scala @@ -3,5 +3,5 @@ package sbt.librarymanagement import gigahorse._, support.okhttp.Gigahorse object Http { - lazy val http: HttpClient = Gigahorse.http(Gigahorse.config) + lazy val http: HttpClient = Gigahorse.http(gigahorse.Config()) } diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/GigahorseUrlHandler.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/GigahorseUrlHandler.scala index b7e754dda..49b0f2bbc 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/GigahorseUrlHandler.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/GigahorseUrlHandler.scala @@ -214,7 +214,7 @@ object GigahorseUrlHandler { 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 = { http