diff --git a/main/src/main/scala/sbt/Project.scala b/main/src/main/scala/sbt/Project.scala index e9ec9e074..68b874d89 100755 --- a/main/src/main/scala/sbt/Project.scala +++ b/main/src/main/scala/sbt/Project.scala @@ -592,6 +592,8 @@ trait ProjectExtra { implicit def richTaskSessionVar[T](init: Initialize[Task[T]]): Project.RichTaskSessionVar[T] = new Project.RichTaskSessionVar(init) + def inThisBuild(ss: Seq[Setting[_]]): Seq[Setting[_]] = + inScope(ThisScope.copy(project = Select(ThisBuild)))(ss) def inConfig(conf: Configuration)(ss: Seq[Setting[_]]): Seq[Setting[_]] = inScope(ThisScope.copy(config = Select(conf)))((configuration :== conf) +: ss) def inTask(t: Scoped)(ss: Seq[Setting[_]]): Seq[Setting[_]] = @@ -599,6 +601,8 @@ trait ProjectExtra { def inScope(scope: Scope)(ss: Seq[Setting[_]]): Seq[Setting[_]] = Project.transform(Scope.replaceThis(scope), ss) + private[sbt] def inThisBuild[T](i: Initialize[T]): Initialize[T] = + inScope(ThisScope.copy(project = Select(ThisBuild)), i) private[sbt] def inConfig[T](conf: Configuration, i: Initialize[T]): Initialize[T] = inScope(ThisScope.copy(config = Select(conf)), i) private[sbt] def inTask[T](t: Scoped, i: Initialize[T]): Initialize[T] = diff --git a/notes/0.13.9/in-this-build.markdown b/notes/0.13.9/in-this-build.markdown new file mode 100644 index 000000000..735e38fde --- /dev/null +++ b/notes/0.13.9/in-this-build.markdown @@ -0,0 +1,12 @@ + + [@dwijnand]: http://github.com/dwijnand + [1847]: https://github.com/sbt/sbt/issues/1847 + [1989]: https://github.com/sbt/sbt/pull/1989 + +### Fixes with compatibility implications + +### Improvements + +- Add `inThisBuild`, similar to `inConfig`, to allow specifying multiple settings in `ThisBuild` scope. [#1847][1847]/[#1989][1989] by [@dwijnand][@dwijnand] + +### Bug fixes diff --git a/sbt/src/sbt-test/project/in-this-build/build.sbt b/sbt/src/sbt-test/project/in-this-build/build.sbt new file mode 100644 index 000000000..eeb4b8b72 --- /dev/null +++ b/sbt/src/sbt-test/project/in-this-build/build.sbt @@ -0,0 +1,11 @@ +val a = settingKey[Int]("an int") + +inThisBuild ( + a := 1 +) + +val p = project + +TaskKey[Unit]("check") := { + assert((a in p).?.value == Option(1), s"a in p should be Some(1) but is ${(a in p).?.value}") +} diff --git a/sbt/src/sbt-test/project/in-this-build/test b/sbt/src/sbt-test/project/in-this-build/test new file mode 100644 index 000000000..15675b169 --- /dev/null +++ b/sbt/src/sbt-test/project/in-this-build/test @@ -0,0 +1 @@ +> check