From 7b5680a58a346193f390d365d8253587376719df Mon Sep 17 00:00:00 2001 From: Piotr Chabelski Date: Tue, 23 May 2023 16:41:51 +0200 Subject: [PATCH] Fix toolkit dependency updates (#2138) --- .../integration/DependencyUpdateTests.scala | 4 +-- .../ActionableDependencyHandler.scala | 26 ++++++++++++++----- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/modules/integration/src/test/scala/scala/cli/integration/DependencyUpdateTests.scala b/modules/integration/src/test/scala/scala/cli/integration/DependencyUpdateTests.scala index 9841473672..c9c948dd86 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/DependencyUpdateTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/DependencyUpdateTests.scala @@ -61,7 +61,7 @@ class DependencyUpdateTests extends ScalaCliSuite { } } - test("update typelevel toolkit dependence") { + test("update typelevel toolkit dependency") { val toolkitVersion = "0.0.1" val testInputs = TestInputs( os.rel / "Foo.scala" -> @@ -79,7 +79,7 @@ class DependencyUpdateTests extends ScalaCliSuite { os.proc(TestUtil.cli, "--power", "dependency-update", "--all", ".") .call(cwd = root) - val toolkitDirective = "//> using toolkit \"(.*)\"".r + val toolkitDirective = "//> using toolkit \"typelevel:(.*)\"".r val updatedToolkitVersionOpt = { val regexMatch = toolkitDirective.findFirstMatchIn(os.read(root / "Foo.scala")) regexMatch.map(_.group(1)) diff --git a/modules/options/src/main/scala/scala/build/actionable/ActionableDependencyHandler.scala b/modules/options/src/main/scala/scala/build/actionable/ActionableDependencyHandler.scala index e06a8dec2d..2b64f9f6d3 100644 --- a/modules/options/src/main/scala/scala/build/actionable/ActionableDependencyHandler.scala +++ b/modules/options/src/main/scala/scala/build/actionable/ActionableDependencyHandler.scala @@ -3,14 +3,15 @@ package scala.build.actionable import coursier.Versions import coursier.core.{Latest, Version} import coursier.parse.RepositoryParser -import dependency._ +import dependency.* import scala.build.EitherCps.{either, value} import scala.build.Positioned -import scala.build.actionable.ActionableDiagnostic._ +import scala.build.actionable.ActionableDiagnostic.* import scala.build.actionable.errors.ActionableHandlerError import scala.build.errors.{BuildException, RepositoryFormatError} -import scala.build.internal.Util._ +import scala.build.internal.Constants +import scala.build.internal.Util.* import scala.build.options.BuildOptions import scala.build.options.ScalaVersionUtil.versions import scala.concurrent.duration.DurationInt @@ -32,15 +33,26 @@ case object ActionableDependencyHandler val dependency = setting.value val currentVersion = dependency.version val latestVersion = value(findLatestVersion(buildOptions, dependency)) - if (Version(latestVersion) > Version(currentVersion) && !isLatestSyntaxVersion(currentVersion)) - if (dependency.userParams.contains("toolkit")) + if Version(latestVersion) > Version(currentVersion) && !isLatestSyntaxVersion(currentVersion) + then + if dependency.userParams.contains(Constants.toolkitName) && + dependency.module.name != Constants.toolkitTestName + then + val toolkitSuggestion = + if dependency.module.organization == Constants.toolkitOrganization then latestVersion + else if dependency.module.organization == Constants.typelevelOrganization then + s"typelevel:$latestVersion" + else s"${dependency.module.organization}:$latestVersion" Some(ActionableDependencyUpdateDiagnostic( setting.positions, currentVersion, latestVersion, - dependencyModuleName = "toolkit", - suggestion = latestVersion + dependencyModuleName = Constants.toolkitName, + suggestion = toolkitSuggestion )) + else if dependency.userParams.contains(Constants.toolkitName) && + dependency.module.name == Constants.toolkitTestName + then None // filtering out toolkit-test to prevent double-update-diagnostic else Some(ActionableDependencyUpdateDiagnostic( setting.positions,