From 6fee91bbffbdfa9bbecdc5e58b3ec9a3ed632fa1 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 12 Mar 2023 19:06:18 -0400 Subject: [PATCH 1/2] Don't apply platform substitution to % --- .../librarymanagement/ScalaArtifacts.scala | 22 +++++++++++-------- .../sbt/internal/librarymanagement/Ivy.scala | 11 ++++++---- .../PlatformResolutionSpec.scala | 15 +++++++++++++ 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/core/src/main/scala/sbt/librarymanagement/ScalaArtifacts.scala b/core/src/main/scala/sbt/librarymanagement/ScalaArtifacts.scala index 82c454e24..3dc2b71c4 100644 --- a/core/src/main/scala/sbt/librarymanagement/ScalaArtifacts.scala +++ b/core/src/main/scala/sbt/librarymanagement/ScalaArtifacts.scala @@ -57,12 +57,12 @@ object ScalaArtifacts { def libraryDependency(version: String): ModuleID = libraryDependency(Organization, version) - def libraryDependency(org: String, version: String): ModuleID = { - if (isScala3(version)) - ModuleID(org, Scala3LibraryID, version).withCrossVersion(CrossVersion.binary) - else - ModuleID(org, LibraryID, version) - } + def libraryDependency(org: String, version: String): ModuleID = + if isScala3(version) then + ModuleID(org, Scala3LibraryID, version) + .withCrossVersion(CrossVersion.binary) + .platform(Platform.jvm) + else ModuleID(org, LibraryID, version).platform(Platform.jvm) private[sbt] def docToolDependencies( org: String, @@ -79,6 +79,7 @@ object ScalaArtifacts { ModuleID(org, ScaladocID, version) .withConfigurations(Some(Configurations.ScalaDocTool.name + "->default(compile)")) .withCrossVersion(CrossVersion.binary) + .platform(Platform.jvm) ) else Seq.empty @@ -91,6 +92,7 @@ object ScalaArtifacts { ModuleID(org, Scala3CompilerID, version) .withConfigurations(Some(Configurations.ScalaTool.name + "->default(compile)")) .withCrossVersion(CrossVersion.binary) + .platform(Platform.jvm) ) else Seq( @@ -99,9 +101,11 @@ object ScalaArtifacts { ) private[this] def scala2ToolDependency(org: String, id: String, version: String): ModuleID = - ModuleID(org, id, version).withConfigurations( - Some(Configurations.ScalaTool.name + "->default,optional(default)") - ) + ModuleID(org, id, version) + .withConfigurations( + Some(Configurations.ScalaTool.name + "->default,optional(default)") + ) + .platform(Platform.jvm) } object SbtArtifacts { diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/Ivy.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/Ivy.scala index c8e4d3592..4f2de8e1c 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/Ivy.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/Ivy.scala @@ -742,10 +742,13 @@ private[sbt] object IvySbt { case "" | Platform.jvm => m case _ => m.withName(s"${m.name}_$platformName") (m: ModuleID) => - (platform, m.platformOpt) match - case (Some(p), None) => addSuffix(m, p) - case (_, Some(p)) => addSuffix(m, p) - case _ => m + m.crossVersion match + case _: Disabled => m + case _ => + (platform, m.platformOpt) match + case (Some(p), None) => addSuffix(m, p) + case (_, Some(p)) => addSuffix(m, p) + case _ => m } private def toIvyArtifact( diff --git a/ivy/src/test/scala/sbt/internal/librarymanagement/PlatformResolutionSpec.scala b/ivy/src/test/scala/sbt/internal/librarymanagement/PlatformResolutionSpec.scala index 2d40e0147..39cc3d8c7 100644 --- a/ivy/src/test/scala/sbt/internal/librarymanagement/PlatformResolutionSpec.scala +++ b/ivy/src/test/scala/sbt/internal/librarymanagement/PlatformResolutionSpec.scala @@ -27,6 +27,20 @@ object PlatformResolutionSpec extends BaseIvySpecification { ) } + test("sjs1 platform resolves % as JVM") { + cleanCache() + val m = module( + exampleModuleId("0.6.0"), + deps = Vector(junit), + Some(scala2_13), + platform = Some(sjs1), + ) + assert( + update(m).configurations.head.modules.map(_.toString).mkString + contains "junit:junit:4.13.1" + ) + } + test("None platform can specify .platform(sjs1) depenency") { cleanCache() val m = module( @@ -64,6 +78,7 @@ object PlatformResolutionSpec extends BaseIvySpecification { def exampleModuleId(v: String): ModuleID = ("com.example" % "foo" % v % Compile) def scopt = ("com.github.scopt" %% "scopt" % "4.1.0" % Compile) + def junit = ("junit" % "junit" % "4.13.1" % Compile) override val resolvers = Vector( Resolver.mavenCentral, ) From 13f7bb250bbe8296bc84e74290adb559e47e43c9 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 29 Oct 2023 14:54:24 -0400 Subject: [PATCH 2/2] sjsonnew 0.14.0-M1 --- .../sbt/librarymanagement/UpdateReport.scala | 8 ++++---- .../librarymanagement/UpdateReportFormats.scala | 2 +- core/src/main/contraband/librarymanagement.json | 2 +- .../sbt/librarymanagement/RichUpdateReport.scala | 2 +- .../librarymanagement/UpdateReportExtra.scala | 2 +- .../sbt/librarymanagement/ivy/IvyPaths.scala | 16 ++++++++-------- .../librarymanagement/ivy/IvyPathsFormats.scala | 4 ++-- ivy/src/main/contraband/lm-ivy.json | 4 ++-- .../sbt/internal/librarymanagement/Ivy.scala | 4 ++-- .../internal/librarymanagement/IvyCache.scala | 2 +- .../librarymanagement/IvyInternalDefaults.scala | 2 +- project/Dependencies.scala | 4 ++-- 12 files changed, 26 insertions(+), 26 deletions(-) diff --git a/core/src/main/contraband-scala/sbt/librarymanagement/UpdateReport.scala b/core/src/main/contraband-scala/sbt/librarymanagement/UpdateReport.scala index 0e3c68f1a..3e8bcbe1a 100644 --- a/core/src/main/contraband-scala/sbt/librarymanagement/UpdateReport.scala +++ b/core/src/main/contraband-scala/sbt/librarymanagement/UpdateReport.scala @@ -16,7 +16,7 @@ final class UpdateReport private ( val cachedDescriptor: java.io.File, val configurations: Vector[sbt.librarymanagement.ConfigurationReport], val stats: sbt.librarymanagement.UpdateStats, - val stamps: Map[java.io.File, Long]) extends sbt.librarymanagement.UpdateReportExtra with Serializable { + val stamps: Map[String, Long]) extends sbt.librarymanagement.UpdateReportExtra with Serializable { @@ -30,7 +30,7 @@ final class UpdateReport private ( override def toString: String = { "Update report:\n\t" + stats + "\n" + configurations.mkString } - private[this] def copy(cachedDescriptor: java.io.File = cachedDescriptor, configurations: Vector[sbt.librarymanagement.ConfigurationReport] = configurations, stats: sbt.librarymanagement.UpdateStats = stats, stamps: Map[java.io.File, Long] = stamps): UpdateReport = { + private[this] def copy(cachedDescriptor: java.io.File = cachedDescriptor, configurations: Vector[sbt.librarymanagement.ConfigurationReport] = configurations, stats: sbt.librarymanagement.UpdateStats = stats, stamps: Map[String, Long] = stamps): UpdateReport = { new UpdateReport(cachedDescriptor, configurations, stats, stamps) } def withCachedDescriptor(cachedDescriptor: java.io.File): UpdateReport = { @@ -42,11 +42,11 @@ final class UpdateReport private ( def withStats(stats: sbt.librarymanagement.UpdateStats): UpdateReport = { copy(stats = stats) } - def withStamps(stamps: Map[java.io.File, Long]): UpdateReport = { + def withStamps(stamps: Map[String, Long]): UpdateReport = { copy(stamps = stamps) } } object UpdateReport { - def apply(cachedDescriptor: java.io.File, configurations: Vector[sbt.librarymanagement.ConfigurationReport], stats: sbt.librarymanagement.UpdateStats, stamps: Map[java.io.File, Long]): UpdateReport = new UpdateReport(cachedDescriptor, configurations, stats, stamps) + def apply(cachedDescriptor: java.io.File, configurations: Vector[sbt.librarymanagement.ConfigurationReport], stats: sbt.librarymanagement.UpdateStats, stamps: Map[String, Long]): UpdateReport = new UpdateReport(cachedDescriptor, configurations, stats, stamps) } diff --git a/core/src/main/contraband-scala/sbt/librarymanagement/UpdateReportFormats.scala b/core/src/main/contraband-scala/sbt/librarymanagement/UpdateReportFormats.scala index 41951020d..36ea7c27a 100644 --- a/core/src/main/contraband-scala/sbt/librarymanagement/UpdateReportFormats.scala +++ b/core/src/main/contraband-scala/sbt/librarymanagement/UpdateReportFormats.scala @@ -14,7 +14,7 @@ implicit lazy val UpdateReportFormat: JsonFormat[sbt.librarymanagement.UpdateRep val cachedDescriptor = unbuilder.readField[java.io.File]("cachedDescriptor") val configurations = unbuilder.readField[Vector[sbt.librarymanagement.ConfigurationReport]]("configurations") val stats = unbuilder.readField[sbt.librarymanagement.UpdateStats]("stats") - val stamps = unbuilder.readField[Map[java.io.File, Long]]("stamps") + val stamps = unbuilder.readField[Map[String, Long]]("stamps") unbuilder.endObject() sbt.librarymanagement.UpdateReport(cachedDescriptor, configurations, stats, stamps) case None => diff --git a/core/src/main/contraband/librarymanagement.json b/core/src/main/contraband/librarymanagement.json index 6b210d34c..89d20007d 100644 --- a/core/src/main/contraband/librarymanagement.json +++ b/core/src/main/contraband/librarymanagement.json @@ -814,7 +814,7 @@ "type": "sbt.librarymanagement.UpdateStats", "doc": [ "stats information about the update that produced this report" ] }, - { "name": "stamps", "type": "Map[java.io.File, Long]" } + { "name": "stamps", "type": "Map[String, Long]" } ], "toString": "\"Update report:\\n\\t\" + stats + \"\\n\" + configurations.mkString" }, diff --git a/core/src/main/scala/sbt/librarymanagement/RichUpdateReport.scala b/core/src/main/scala/sbt/librarymanagement/RichUpdateReport.scala index 9060f14b6..321790def 100644 --- a/core/src/main/scala/sbt/librarymanagement/RichUpdateReport.scala +++ b/core/src/main/scala/sbt/librarymanagement/RichUpdateReport.scala @@ -14,7 +14,7 @@ final class RichUpdateReport(report: UpdateReport) { val stamps = files .map(f => ( - f, + f.toString, // TODO: The list of files may also contain some odd files that do not actually exist like: // "./target/ivyhome/resolution-cache/com.example/foo/0.4.0/resolved.xml.xml". // IO.getModifiedTimeOrZero() will just return zero, but the list of files should not contain such diff --git a/core/src/main/scala/sbt/librarymanagement/UpdateReportExtra.scala b/core/src/main/scala/sbt/librarymanagement/UpdateReportExtra.scala index 910827703..e3927bb30 100644 --- a/core/src/main/scala/sbt/librarymanagement/UpdateReportExtra.scala +++ b/core/src/main/scala/sbt/librarymanagement/UpdateReportExtra.scala @@ -123,7 +123,7 @@ private[librarymanagement] abstract class UpdateReportExtra { def cachedDescriptor: File def configurations: Vector[ConfigurationReport] def stats: UpdateStats - private[sbt] def stamps: Map[File, Long] + private[sbt] def stamps: Map[String, Long] /** All resolved modules in all configurations. */ def allModules: Vector[ModuleID] = { diff --git a/ivy/src/main/contraband-scala/sbt/librarymanagement/ivy/IvyPaths.scala b/ivy/src/main/contraband-scala/sbt/librarymanagement/ivy/IvyPaths.scala index 574369bb0..74268a9d3 100644 --- a/ivy/src/main/contraband-scala/sbt/librarymanagement/ivy/IvyPaths.scala +++ b/ivy/src/main/contraband-scala/sbt/librarymanagement/ivy/IvyPaths.scala @@ -5,8 +5,8 @@ // DO NOT EDIT MANUALLY package sbt.librarymanagement.ivy final class IvyPaths private ( - val baseDirectory: java.io.File, - val ivyHome: Option[java.io.File]) extends Serializable { + val baseDirectory: String, + val ivyHome: Option[String]) extends Serializable { @@ -20,21 +20,21 @@ final class IvyPaths private ( override def toString: String = { "IvyPaths(" + baseDirectory + ", " + ivyHome + ")" } - private[this] def copy(baseDirectory: java.io.File = baseDirectory, ivyHome: Option[java.io.File] = ivyHome): IvyPaths = { + private[this] def copy(baseDirectory: String = baseDirectory, ivyHome: Option[String] = ivyHome): IvyPaths = { new IvyPaths(baseDirectory, ivyHome) } - def withBaseDirectory(baseDirectory: java.io.File): IvyPaths = { + def withBaseDirectory(baseDirectory: String): IvyPaths = { copy(baseDirectory = baseDirectory) } - def withIvyHome(ivyHome: Option[java.io.File]): IvyPaths = { + def withIvyHome(ivyHome: Option[String]): IvyPaths = { copy(ivyHome = ivyHome) } - def withIvyHome(ivyHome: java.io.File): IvyPaths = { + def withIvyHome(ivyHome: String): IvyPaths = { copy(ivyHome = Option(ivyHome)) } } object IvyPaths { - def apply(baseDirectory: java.io.File, ivyHome: Option[java.io.File]): IvyPaths = new IvyPaths(baseDirectory, ivyHome) - def apply(baseDirectory: java.io.File, ivyHome: java.io.File): IvyPaths = new IvyPaths(baseDirectory, Option(ivyHome)) + def apply(baseDirectory: String, ivyHome: Option[String]): IvyPaths = new IvyPaths(baseDirectory, ivyHome) + def apply(baseDirectory: String, ivyHome: String): IvyPaths = new IvyPaths(baseDirectory, Option(ivyHome)) } diff --git a/ivy/src/main/contraband-scala/sbt/librarymanagement/ivy/IvyPathsFormats.scala b/ivy/src/main/contraband-scala/sbt/librarymanagement/ivy/IvyPathsFormats.scala index 1db14727e..1483f1d91 100644 --- a/ivy/src/main/contraband-scala/sbt/librarymanagement/ivy/IvyPathsFormats.scala +++ b/ivy/src/main/contraband-scala/sbt/librarymanagement/ivy/IvyPathsFormats.scala @@ -11,8 +11,8 @@ implicit lazy val IvyPathsFormat: JsonFormat[sbt.librarymanagement.ivy.IvyPaths] __jsOpt match { case Some(__js) => unbuilder.beginObject(__js) - val baseDirectory = unbuilder.readField[java.io.File]("baseDirectory") - val ivyHome = unbuilder.readField[Option[java.io.File]]("ivyHome") + val baseDirectory = unbuilder.readField[String]("baseDirectory") + val ivyHome = unbuilder.readField[Option[String]]("ivyHome") unbuilder.endObject() sbt.librarymanagement.ivy.IvyPaths(baseDirectory, ivyHome) case None => diff --git a/ivy/src/main/contraband/lm-ivy.json b/ivy/src/main/contraband/lm-ivy.json index 383e17549..d6e90dc76 100644 --- a/ivy/src/main/contraband/lm-ivy.json +++ b/ivy/src/main/contraband/lm-ivy.json @@ -137,8 +137,8 @@ "target": "Scala", "type": "record", "fields": [ - { "name": "baseDirectory", "type": "java.io.File" }, - { "name": "ivyHome", "type": "java.io.File?" } + { "name": "baseDirectory", "type": "String" }, + { "name": "ivyHome", "type": "String?" } ] } ] diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/Ivy.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/Ivy.scala index 4f2de8e1c..2faa98678 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/Ivy.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/Ivy.scala @@ -131,10 +131,10 @@ final class IvySbt( IvySbt.loadURI(is, e.uri.getOrElse(sys.error("uri must be specified!"))) case i: InlineIvyConfiguration => val paths = getIvyPaths(i.paths) - is.setBaseDir(paths.baseDirectory) + is.setBaseDir(new File(paths.baseDirectory)) is.setVariable("ivy.checksums", i.checksums mkString ",") is.setVariable(ConvertResolver.ManagedChecksums, i.managedChecksums.toString) - paths.ivyHome foreach is.setDefaultIvyUserDir + paths.ivyHome.foreach { (h) => is.setDefaultIvyUserDir(new File(h)) } IvySbt.configureCache(is, i.resolutionCacheDir) IvySbt.setResolvers(is, i.resolvers, i.otherResolvers, configuration.updateOptions, log) IvySbt.setModuleConfigurations(is, i.moduleConfigurations, log) diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/IvyCache.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/IvyCache.scala index cadd0e313..2eb2474f2 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/IvyCache.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/IvyCache.scala @@ -106,7 +106,7 @@ class IvyCache(val ivyHome: Option[File]) { /** A minimal Ivy setup with only a local resolver and the current directory as the base directory. */ private def basicLocalIvy(lock: Option[xsbti.GlobalLock], log: Logger) = { val local = Resolver.defaultLocal - val paths = IvyPaths(new File("."), ivyHome) + val paths = IvyPaths(".", ivyHome.map(_.toString)) val conf = InlineIvyConfiguration() .withPaths(paths) .withResolvers(Vector(local)) diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/IvyInternalDefaults.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/IvyInternalDefaults.scala index e2d558baf..59f88ffc1 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/IvyInternalDefaults.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/IvyInternalDefaults.scala @@ -21,7 +21,7 @@ object IvyInternalDefaults { opt.getOrElse(Logger.Null) def defaultIvyPaths: IvyPaths = - IvyPaths(defaultBaseDirectory, None) + IvyPaths(defaultBaseDirectory.toString, None) def getIvyPaths(opt: Option[IvyPaths]): IvyPaths = opt.getOrElse(defaultIvyPaths) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 0f165a66f..4f57a494a 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -5,7 +5,7 @@ import sbt.contraband.ContrabandPlugin.autoImport._ object Dependencies { val scala212 = "2.12.15" val scala213 = "2.13.6" - val scala3 = "3.2.1" + val scala3 = "3.3.1" def nightlyVersion: Option[String] = sys.env.get("BUILD_VERSION") orElse sys.props.get("sbt.build.version") @@ -56,7 +56,7 @@ object Dependencies { val scalaTest = "org.scalatest" %% "scalatest" % "3.2.10" val scalaVerify = "com.eed3si9n.verify" %% "verify" % "1.0.0" val scalaCheck = "org.scalacheck" %% "scalacheck" % "1.15.3" - val sjsonNewVersion = "0.13.0" + val sjsonNewVersion = "0.14.0-M1" val sjsonnew = Def.setting { "com.eed3si9n" %% "sjson-new-core" % sjsonNewVersion }