From 627c484cd8d59cea7228fe953f6c43c4385dee67 Mon Sep 17 00:00:00 2001 From: bitloi <89318445+bitloi@users.noreply.github.com> Date: Thu, 29 Jan 2026 11:07:44 -0500 Subject: [PATCH] [2.x] fix: Restore bincompat for ScriptedRun methods (#8654) In PR #8621, I added a new `keepTempDirectory` parameter to `ScriptedRun.run()` and `invoke()` methods. To suppress MiMa warnings, I added `mimaBinaryIssueFilters` for: - `DirectMissingMethodProblem("sbt.ScriptedRun.run")` - `DirectMissingMethodProblem("sbt.ScriptedRun.invoke")` - `DirectMissingMethodProblem` for various internal `RunV1`, `RunV2`, `RunInParallelV1`, `RunInParallelV2` classes However, this broke binary compatibility, which prevents sbt 1.x from calling sbt 2.x for cross-building (building sbt 2.x plugins using sbt 1.x). --- build.sbt | 8 +-- main/src/main/scala/sbt/ScriptedRun.scala | 65 +++++++++++++++++++---- 2 files changed, 56 insertions(+), 17 deletions(-) diff --git a/build.sbt b/build.sbt index 6df8ccafb..8af8b3700 100644 --- a/build.sbt +++ b/build.sbt @@ -724,14 +724,8 @@ lazy val mainProj = (project in file("main")) mimaBinaryIssueFilters ++= Vector( exclude[DirectMissingMethodProblem]("sbt.internal.ConsoleProject.*"), exclude[DirectMissingMethodProblem]("sbt.coursierint.LMCoursier.coursierConfiguration"), - exclude[DirectMissingMethodProblem]("sbt.ScriptedRun.run"), - exclude[DirectMissingMethodProblem]("sbt.ScriptedRun.invoke"), - exclude[ReversedMissingMethodProblem]("sbt.ScriptedRun.invoke"), - exclude[DirectMissingMethodProblem]("sbt.ScriptedRun#RunInParallelV1.invoke"), - exclude[DirectMissingMethodProblem]("sbt.ScriptedRun#RunInParallelV2.invoke"), - exclude[DirectMissingMethodProblem]("sbt.ScriptedRun#RunV1.invoke"), - exclude[DirectMissingMethodProblem]("sbt.ScriptedRun#RunV2.invoke"), exclude[IncompatibleMethTypeProblem]("sbt.internal.Compiler.scalaInstanceTask"), + exclude[ReversedMissingMethodProblem]("sbt.ScriptedRun.invoke"), ), ) .dependsOn(lmCore, lmIvy, lmCoursierShadedPublishing) diff --git a/main/src/main/scala/sbt/ScriptedRun.scala b/main/src/main/scala/sbt/ScriptedRun.scala index 816e46217..7735e584e 100644 --- a/main/src/main/scala/sbt/ScriptedRun.scala +++ b/main/src/main/scala/sbt/ScriptedRun.scala @@ -10,9 +10,31 @@ package sbt import java.io.File import java.lang.reflect.Method -import scala.annotation.unused sealed trait ScriptedRun { + final def run( + resourceBaseDirectory: File, + bufferLog: Boolean, + tests: Seq[String], + launcherJar: File, + javaCommand: String, + launchOpts: Seq[String], + prescripted: java.util.List[File], + instances: Int, + ): Unit = { + run( + resourceBaseDirectory, + bufferLog, + tests, + launcherJar, + javaCommand, + launchOpts, + prescripted, + instances, + keepTempDirectory = false, + ) + } + final def run( resourceBaseDirectory: File, bufferLog: Boolean, @@ -40,6 +62,29 @@ sealed trait ScriptedRun { } catch { case e: java.lang.reflect.InvocationTargetException => throw e.getCause } } + protected def invoke( + resourceBaseDirectory: File, + bufferLog: java.lang.Boolean, + tests: Array[String], + launcherJar: File, + javaCommand: String, + launchOpts: Array[String], + prescripted: java.util.List[File], + instances: java.lang.Integer, + ): AnyRef = { + invoke( + resourceBaseDirectory, + bufferLog, + tests, + launcherJar, + javaCommand, + launchOpts, + prescripted, + instances, + keepTempDirectory = false, + ) + } + protected def invoke( resourceBaseDirectory: File, bufferLog: java.lang.Boolean, @@ -115,11 +160,11 @@ object ScriptedRun { bufferLog: java.lang.Boolean, tests: Array[String], launcherJar: File, - @unused javaCommand: String, + javaCommand: String, launchOpts: Array[String], prescripted: java.util.List[File], - @unused instances: java.lang.Integer, - @unused keepTempDirectory: java.lang.Boolean, + instances: java.lang.Integer, + keepTempDirectory: java.lang.Boolean, ): AnyRef = run.invoke( scriptedTests, @@ -138,11 +183,11 @@ object ScriptedRun { bufferLog: java.lang.Boolean, tests: Array[String], launcherJar: File, - @unused javaCommand: String, + javaCommand: String, launchOpts: Array[String], prescripted: java.util.List[File], instances: Integer, - @unused keepTempDirectory: java.lang.Boolean, + keepTempDirectory: java.lang.Boolean, ): AnyRef = runInParallel.invoke( scriptedTests, @@ -165,8 +210,8 @@ object ScriptedRun { javaCommand: String, launchOpts: Array[String], prescripted: java.util.List[File], - @unused instances: java.lang.Integer, - @unused keepTempDirectory: java.lang.Boolean, + instances: java.lang.Integer, + keepTempDirectory: java.lang.Boolean, ): AnyRef = run.invoke( scriptedTests, @@ -190,7 +235,7 @@ object ScriptedRun { launchOpts: Array[String], prescripted: java.util.List[File], instances: Integer, - @unused keepTempDirectory: java.lang.Boolean, + keepTempDirectory: java.lang.Boolean, ): AnyRef = runInParallel.invoke( scriptedTests, @@ -214,7 +259,7 @@ object ScriptedRun { javaCommand: String, launchOpts: Array[String], prescripted: java.util.List[File], - @unused instances: java.lang.Integer, + instances: java.lang.Integer, keepTempDirectory: java.lang.Boolean, ): AnyRef = run.invoke(