From 4a73b1d11b6af653fa2c38a0dc5aa10ccccb90fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wro=C5=84ski?= Date: Fri, 27 Jan 2023 13:44:05 +0100 Subject: [PATCH] Fix - actionable actions not suggest update to previous version --- .../tests/ActionableDiagnosticTests.scala | 59 +++++++++++++++++++ .../ActionableDependencyHandler.scala | 3 +- 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/modules/build/src/test/scala/scala/build/tests/ActionableDiagnosticTests.scala b/modules/build/src/test/scala/scala/build/tests/ActionableDiagnosticTests.scala index ebdcfdc515..d235dd6c4e 100644 --- a/modules/build/src/test/scala/scala/build/tests/ActionableDiagnosticTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/ActionableDiagnosticTests.scala @@ -153,4 +153,63 @@ class ActionableDiagnosticTests extends munit.FunSuite { expect(testLibDiagnostic.newVersion == "1.0.7") } } + + test("actionable actions should not suggest update to previous version") { + val testInputs = TestInputs( + os.rel / "Foo.scala" -> + s"""//> using lib "test-org::test-name-1:2.0.0-M1" + | + |object Hello extends App { + | println("Hello") + |} + |""".stripMargin + ) + // create fake repository which contains hardcoded versions [1.0.0] of test-name-1 library + val repoTmpDir = os.temp.dir(prefix = "scala-cli-tests-actionable-diagnostic-repo") + os.write( + repoTmpDir / "test-org" / "test-name-1_3" / "maven-metadata.xml", + """ + | + | test-org + | test-name-1_3 + | + | 2.0.0-M + | 2.0.0-M1 + | + | 1.0.0 + | 2.0.0-M1 + | + | + | + |""".stripMargin, + createFolders = true + ) + os.write( + repoTmpDir / "test-org" / "test-name-1_3" / "2.0.0-M1" / "test-name-1_3-2.0.0-M1.pom", + """ + | + | test-org + | test-name-1_3 + | 2.0.0-M1 + |""".stripMargin, + createFolders = true + ) + val withRepoBuildOptions = baseOptions.copy( + classPathOptions = + baseOptions.classPathOptions.copy(extraRepositories = Seq(s"file:${repoTmpDir.toString}")) + ) + testInputs.withBuild(withRepoBuildOptions, buildThreads, None, actionableDiagnostics = true) { + (_, _, maybeBuild) => + val build = maybeBuild.orThrow + + val updateDiagnostics = + ActionablePreprocessor.generateActionableDiagnostics(build.options).orThrow + + val testLibDiagnosticOpt = updateDiagnostics.collectFirst { + case diagnostic: ActionableDependencyUpdateDiagnostic => diagnostic + } + println(testLibDiagnosticOpt) + expect(testLibDiagnosticOpt.isEmpty) + } + } } 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 624d8f6459..bbe42cb3d4 100644 --- a/modules/options/src/main/scala/scala/build/actionable/ActionableDependencyHandler.scala +++ b/modules/options/src/main/scala/scala/build/actionable/ActionableDependencyHandler.scala @@ -1,6 +1,7 @@ package scala.build.actionable import coursier.Versions +import coursier.core.Version import coursier.parse.RepositoryParser import dependency._ @@ -29,7 +30,7 @@ case object ActionableDependencyHandler val currentVersion = dependency.version val latestVersion = value(findLatestVersion(buildOptions, dependency)) - if (latestVersion != currentVersion) + if (Version(latestVersion) > Version(currentVersion)) if (dependency.userParams.contains("toolkit")) Some(ActionableDependencyUpdateDiagnostic( setting.positions,