diff --git a/main/src/main/scala/sbt/internal/Act.scala b/main/src/main/scala/sbt/internal/Act.scala index 6e577d958..a3662ac44 100644 --- a/main/src/main/scala/sbt/internal/Act.scala +++ b/main/src/main/scala/sbt/internal/Act.scala @@ -573,8 +573,14 @@ object Act { private def anyKeyValues(structure: BuildStructure, keys: Seq[ScopedKey[?]]): Seq[KeyValue[?]] = keys.flatMap(key => getValue(structure.data, key).map(KeyValue(key, _))) + /** + * Starting sbt 2.0.0, we will not delegate when a non-existent scoping + * such as Compile / update is required. + */ private def getValue[T](data: Def.Settings, key: ScopedKey[T]): Option[T] = - if (java.lang.Boolean.getBoolean("sbt.cli.nodelegation")) data.getDirect(key) + if key.scope.config.isSelect || + key.scope.task.isSelect + then data.getDirect(key) else data.get(key) def requireSession[T](s: State, p: => Parser[T]): Parser[T] = diff --git a/sbt-app/src/sbt-test/project/no-delegate/A.scala b/sbt-app/src/sbt-test/project/no-delegate/A.scala new file mode 100644 index 000000000..e69de29bb diff --git a/sbt-app/src/sbt-test/project/no-delegate/build.sbt b/sbt-app/src/sbt-test/project/no-delegate/build.sbt new file mode 100644 index 000000000..666b594e7 --- /dev/null +++ b/sbt-app/src/sbt-test/project/no-delegate/build.sbt @@ -0,0 +1 @@ +scalaVersion := "3.7.4" diff --git a/sbt-app/src/sbt-test/project/no-delegate/test b/sbt-app/src/sbt-test/project/no-delegate/test new file mode 100644 index 000000000..717e9bbf0 --- /dev/null +++ b/sbt-app/src/sbt-test/project/no-delegate/test @@ -0,0 +1,6 @@ +> compile +> test + +# Fail on non-existent scoping +-> Compile / update +