From 74f76e5445f2d265fbfd0939f3ad160451930da8 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 10 Jul 2026 11:11:56 -0400 Subject: [PATCH] [2.x] Deprecate Resolver.url This adds Resolver.uri instead. --- .../sbt/librarymanagement/ResolverExtra.scala | 46 +++++++++++++------ .../sbt/librarymanagement/ResolverTest.scala | 4 +- .../librarymanagement/IvyRepoSpec.scala | 4 +- .../librarymanagement/ResolverSpec.scala | 4 +- .../ivyless-publish-http/build.sbt | 2 +- .../module-confs/Test.sbt | 2 +- .../module-confs/changes/WrongOrg.sbt | 2 +- .../module-confs/changes/WrongPattern.sbt | 2 +- .../module-confs/changes/WrongVersion.sbt | 2 +- .../lm-coursier/maven-compatible/build.sbt | 6 +-- 10 files changed, 46 insertions(+), 28 deletions(-) diff --git a/lm-core/src/main/scala/sbt/librarymanagement/ResolverExtra.scala b/lm-core/src/main/scala/sbt/librarymanagement/ResolverExtra.scala index f1e5b5e73..702554fc5 100644 --- a/lm-core/src/main/scala/sbt/librarymanagement/ResolverExtra.scala +++ b/lm-core/src/main/scala/sbt/librarymanagement/ResolverExtra.scala @@ -132,17 +132,15 @@ private[librarymanagement] abstract class ResolverFunctions { def typesafeRepo(status: String) = MavenRepository("typesafe-" + status, TypesafeRepositoryRoot + "/" + status) - def typesafeIvyRepo(status: String) = - url("typesafe-ivy-" + status, new URI(TypesafeRepositoryRoot + "/ivy-" + status + "/").toURL)( - using ivyStylePatterns - ) - def sbtIvyRepo(status: String) = - url(s"sbt-ivy-$status", new URI(s"$SbtRepositoryRoot/ivy-$status/").toURL)(using + def typesafeIvyRepo(status: String): URLRepository = + uri("typesafe-ivy-" + status, URI(TypesafeRepositoryRoot + "/ivy-" + status + "/"))(using ivyStylePatterns ) + def sbtIvyRepo(status: String) = + uri(s"sbt-ivy-$status", URI(s"$SbtRepositoryRoot/ivy-$status/"))(using ivyStylePatterns) def sbtPluginRepo(status: String) = - url("sbt-plugin-" + status, new URI(SbtRepositoryRoot + "/sbt-plugin-" + status + "/").toURL)( - using ivyStylePatterns + uri("sbt-plugin-" + status, URI(SbtRepositoryRoot + "/sbt-plugin-" + status + "/"))(using + ivyStylePatterns ) @deprecated( @@ -339,18 +337,38 @@ private[librarymanagement] abstract class ResolverFunctions { private def toUri(dir: File): URI = dir.toPath.toUri } - object url { + object url: /** * Constructs a URL resolver with the given name. The patterns to use must be explicitly specified * using the `withPatterns` method on the constructed resolver object. */ + @deprecated("Use Resolver.uri(...) instead", "2.0.2") + def apply(name: String): URLRepository = uri(name) + + /** Constructs a URL resolver with the given name and base URL. */ + @deprecated("Use Resolver.uri(...) instead", "2.0.2") + def apply(name: String, baseURL: URL)(implicit basePatterns: Patterns): URLRepository = + uri(name, baseURL.toURI)(using basePatterns) + + /** Constructs a URL resolver with the given name and base URI. */ + @deprecated("Use Resolver.uri(...) instead", "2.0.2") + def apply(name: String, baseURI: URI)(using Patterns): URLRepository = + uri(name, baseURI) + end url + + object uri: + /** + * Constructs a URI resolver with the given name. The patterns to use must be explicitly specified + * using the `withPatterns` method on the constructed resolver object. + */ def apply(name: String): URLRepository = URLRepository(name, Patterns(false)) - /** Constructs a file resolver with the given name and base directory. */ - def apply(name: String, baseURL: URL)(implicit basePatterns: Patterns): URLRepository = - baseRepository(baseURL.toURI.normalize.toString)(URLRepository(name, _)) - } + /** Constructs a URI resolver with the given name and base URI. */ + def apply(name: String, baseURI: URI)(using Patterns): URLRepository = + baseRepository(baseURI.normalize.toString)(URLRepository(name, _)) + end uri + private def baseRepository[T](base: String)(construct: Patterns => T)(implicit basePatterns: Patterns ): T = @@ -499,7 +517,7 @@ private[librarymanagement] abstract class ResolverFunctions { if (ivy || art) { warnHttp( patterns.toString, - s""" or opt-in as Resolver.url("${repo.name}", url(...)).withAllowInsecureProtocol(true), or by using allowInsecureProtocol in repositories file""", + s""" or opt-in as Resolver.uri("${repo.name}", url(...)).withAllowInsecureProtocol(true), or by using allowInsecureProtocol in repositories file""", logger ) true diff --git a/lm-core/src/test/scala/sbt/librarymanagement/ResolverTest.scala b/lm-core/src/test/scala/sbt/librarymanagement/ResolverTest.scala index d4b353dc7..878d7968c 100644 --- a/lm-core/src/test/scala/sbt/librarymanagement/ResolverTest.scala +++ b/lm-core/src/test/scala/sbt/librarymanagement/ResolverTest.scala @@ -6,11 +6,11 @@ import sbt.internal.librarymanagement.UnitSpec class ResolverTest extends UnitSpec { - "Resolver url" should "propagate pattern descriptorOptional and skipConsistencyCheck." in { + "Resolver uri" should "propagate pattern descriptorOptional and skipConsistencyCheck." in { val pats = Vector("[orgPath]") val patsExpected = Vector("http://foo.com/test/[orgPath]") val patterns = Resolver - .url("test", new URI("http://foo.com/test").toURL)(using + .uri("test", new URI("http://foo.com/test"))(using Patterns( pats, pats, diff --git a/lm-ivy/src/test/scala/sbt/internal/librarymanagement/IvyRepoSpec.scala b/lm-ivy/src/test/scala/sbt/internal/librarymanagement/IvyRepoSpec.scala index 73140daab..0a1099161 100644 --- a/lm-ivy/src/test/scala/sbt/internal/librarymanagement/IvyRepoSpec.scala +++ b/lm-ivy/src/test/scala/sbt/internal/librarymanagement/IvyRepoSpec.scala @@ -99,7 +99,7 @@ object IvyRepoSpec extends BaseIvySpecification { override lazy val resolvers: Vector[Resolver] = Vector(testIvy) lazy val testIvy = { - val repoUrl = getClass.getResource("/test-ivy-repo") - Resolver.url("Test Repo", repoUrl)(using Resolver.ivyStylePatterns) + val repoUrl = getClass.getResource("/test-ivy-repo").toURI() + Resolver.uri("Test Repo", repoUrl)(using Resolver.ivyStylePatterns) } } diff --git a/lm-ivy/src/test/scala/sbt/internal/librarymanagement/ResolverSpec.scala b/lm-ivy/src/test/scala/sbt/internal/librarymanagement/ResolverSpec.scala index 336e83e1d..504fe2168 100644 --- a/lm-ivy/src/test/scala/sbt/internal/librarymanagement/ResolverSpec.scala +++ b/lm-ivy/src/test/scala/sbt/internal/librarymanagement/ResolverSpec.scala @@ -6,8 +6,8 @@ import sbt.librarymanagement.syntax.* import verify.BasicTestSuite class ResolverSpec extends BasicTestSuite { - test("Resolver.url") { - Resolver.url("Test Repo", new URI("http://example.com/").toURL)(using Resolver.ivyStylePatterns) + test("Resolver.uri") { + Resolver.uri("Test Repo", new URI("http://example.com/"))(using Resolver.ivyStylePatterns) () } diff --git a/sbt-app/src/sbt-test/dependency-management/ivyless-publish-http/build.sbt b/sbt-app/src/sbt-test/dependency-management/ivyless-publish-http/build.sbt index 05fc08ad0..6398193f5 100644 --- a/sbt-app/src/sbt-test/dependency-management/ivyless-publish-http/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/ivyless-publish-http/build.sbt @@ -13,7 +13,7 @@ val publishPort = 3030 // Publish to HTTP server (localhost) - ivyless publish uses PUT // Resolver.url expects java.net.URL; in build.sbt "url" is sbt.URI, so use java.net.URL explicitly publishTo := Some( - Resolver.url("test-repo", new java.net.URI(s"http://localhost:$publishPort/").toURL)(using Resolver.ivyStylePatterns) + Resolver.uri("test-repo", uri(s"http://localhost:$publishPort/"))(using Resolver.ivyStylePatterns) .withAllowInsecureProtocol(true) ) diff --git a/sbt-app/src/sbt-test/dependency-management/module-confs/Test.sbt b/sbt-app/src/sbt-test/dependency-management/module-confs/Test.sbt index b04fc28f8..69b6ac2ce 100644 --- a/sbt-app/src/sbt-test/dependency-management/module-confs/Test.sbt +++ b/sbt-app/src/sbt-test/dependency-management/module-confs/Test.sbt @@ -1,6 +1,6 @@ { def snapshotPattern = "https://repo.typesafe.com/typesafe/scala-tools-snapshots/[organization]/[module]/2.10.0-SNAPSHOT/[artifact]-[revision].[ext]" - def scalaSnapshots = Resolver.url("Scala Tools Snapshots (Typesafe)") ivys(snapshotPattern) artifacts(snapshotPattern) mavenStyle() + def scalaSnapshots = Resolver.uri("Scala Tools Snapshots (Typesafe)") ivys(snapshotPattern) artifacts(snapshotPattern) mavenStyle() moduleConfigurations += ModuleConfiguration("org.scala-lang", "*", "2.10.0-.*", scalaSnapshots) } diff --git a/sbt-app/src/sbt-test/dependency-management/module-confs/changes/WrongOrg.sbt b/sbt-app/src/sbt-test/dependency-management/module-confs/changes/WrongOrg.sbt index 90587a047..2a2012246 100644 --- a/sbt-app/src/sbt-test/dependency-management/module-confs/changes/WrongOrg.sbt +++ b/sbt-app/src/sbt-test/dependency-management/module-confs/changes/WrongOrg.sbt @@ -1,6 +1,6 @@ { def snapshotPattern = "https://repo.typesafe.com/typesafe/scala-tools-snapshots/[organization]/[module]/2.10.0-SNAPSHOT/[artifact]-[revision].[ext]" - def scalaSnapshots = Resolver.url("Scala Tools Snapshots") artifacts(snapshotPattern) ivys(snapshotPattern) mavenStyle() + def scalaSnapshots = Resolver.uri("Scala Tools Snapshots") artifacts(snapshotPattern) ivys(snapshotPattern) mavenStyle() moduleConfigurations += ModuleConfiguration("org.not-scala-lang", "*", "2.10.0-.*", scalaSnapshots) } diff --git a/sbt-app/src/sbt-test/dependency-management/module-confs/changes/WrongPattern.sbt b/sbt-app/src/sbt-test/dependency-management/module-confs/changes/WrongPattern.sbt index 95e083fd4..18d912fc7 100644 --- a/sbt-app/src/sbt-test/dependency-management/module-confs/changes/WrongPattern.sbt +++ b/sbt-app/src/sbt-test/dependency-management/module-confs/changes/WrongPattern.sbt @@ -1,6 +1,6 @@ { def snapshotPattern = "https://repo.typesafe.com/typesafe/scala-tools-snapshots/[organization]/[module]/2.10.a-SNAPSHOT/[artifact]-[revision].[ext]" - def scalaSnapshots = Resolver.url("Scala Tools Snapshots") artifacts(snapshotPattern) ivys(snapshotPattern) mavenStyle() + def scalaSnapshots = Resolver.uri("Scala Tools Snapshots") artifacts(snapshotPattern) ivys(snapshotPattern) mavenStyle() moduleConfigurations += ModuleConfiguration("org.scala-lang", "*", "2.10.0-.*", scalaSnapshots) } diff --git a/sbt-app/src/sbt-test/dependency-management/module-confs/changes/WrongVersion.sbt b/sbt-app/src/sbt-test/dependency-management/module-confs/changes/WrongVersion.sbt index f6c9b6f79..3cb8f5aae 100644 --- a/sbt-app/src/sbt-test/dependency-management/module-confs/changes/WrongVersion.sbt +++ b/sbt-app/src/sbt-test/dependency-management/module-confs/changes/WrongVersion.sbt @@ -1,6 +1,6 @@ { def snapshotPattern = "https://repo.typesafe.com/typesafe/scala-tools-snapshots/[organization]/[module]/2.10.0-SNAPSHOT/[artifact]-[revision].[ext]" - def scalaSnapshots = Resolver.url("Scala Tools Snapshots") artifacts(snapshotPattern) ivys(snapshotPattern) mavenStyle() + def scalaSnapshots = Resolver.uri("Scala Tools Snapshots") artifacts(snapshotPattern) ivys(snapshotPattern) mavenStyle() moduleConfigurations += ModuleConfiguration("org.scala-lang", "*", "2.10.0-.*", scalaSnapshots) } diff --git a/sbt-app/src/sbt-test/lm-coursier/maven-compatible/build.sbt b/sbt-app/src/sbt-test/lm-coursier/maven-compatible/build.sbt index e66a4456a..7512a5854 100644 --- a/sbt-app/src/sbt-test/lm-coursier/maven-compatible/build.sbt +++ b/sbt-app/src/sbt-test/lm-coursier/maven-compatible/build.sbt @@ -1,12 +1,12 @@ scalaVersion := "2.12.8" -resolvers += Resolver.url( +resolvers += Resolver.uri( "jitpack", - new URI("https://jitpack.io").toURL + uri("https://jitpack.io") )( // patterns should be ignored - and the repo be considered a maven one - because // isMavenCompatible is true - Patterns( + using Patterns( Resolver.ivyStylePatterns.ivyPatterns, Resolver.ivyStylePatterns.artifactPatterns, isMavenCompatible = true,