diff --git a/main/src/main/scala/sbt/internal/DslAst.scala b/main/src/main/scala/sbt/internal/DslAst.scala index 9098a54cc..338c86f8c 100644 --- a/main/src/main/scala/sbt/internal/DslAst.scala +++ b/main/src/main/scala/sbt/internal/DslAst.scala @@ -1,7 +1,7 @@ package sbt package internal -import sbt.internal.util.RangePosition +import sbt.internal.util.{ Eval, RangePosition } import sbt.librarymanagement.Configuration @@ -61,5 +61,8 @@ object DslEntry { case class DslConfigs(cs: Seq[Configuration]) extends ProjectManipulation { override val toFunction: Project => Project = _.configs(cs: _*) } - + /** this represents an `aggregate()` in the sbt DSL */ + case class DslAggregate(refs: Seq[Eval[ProjectReference]]) extends ProjectManipulation { + override val toFunction: Project => Project = _.aggregate(refs: _*) + } } diff --git a/notes/1.0.0/aggregate-build-sbt.md b/notes/1.0.0/aggregate-build-sbt.md new file mode 100644 index 000000000..ef459e2e9 --- /dev/null +++ b/notes/1.0.0/aggregate-build-sbt.md @@ -0,0 +1,5 @@ + [@xuwei-k]: https://github.com/xuwei-k + +### Improvements + +- Add the ability to call aggregate for the current project inside a build sbt file. By [@xuwei-k][@xuwei-k] diff --git a/sbt/src/main/scala/syntax.scala b/sbt/src/main/scala/syntax.scala index 041f9e0f7..1472bec1f 100644 --- a/sbt/src/main/scala/syntax.scala +++ b/sbt/src/main/scala/syntax.scala @@ -1,6 +1,7 @@ package sbt import sbt.internal.DslEntry +import sbt.internal.util.Eval object syntax extends syntax @@ -51,6 +52,8 @@ abstract class syntax extends IOSyntax0 with sbt.std.TaskExtra with sbt.internal def enablePlugins(ps: AutoPlugin*): DslEntry = DslEntry.DslEnablePlugins(ps) def disablePlugins(ps: AutoPlugin*): DslEntry = DslEntry.DslDisablePlugins(ps) def configs(cs: Configuration*): DslEntry = DslEntry.DslConfigs(cs) + // avoid conflict with `sbt.Keys.aggregate` + def aggregateProjects(refs: Eval[ProjectReference]*): DslEntry = DslEntry.DslAggregate(refs) } // Todo share this this io.syntax diff --git a/sbt/src/sbt-test/project/aggregate/build.sbt b/sbt/src/sbt-test/project/aggregate/build.sbt new file mode 100644 index 000000000..4c3ce9830 --- /dev/null +++ b/sbt/src/sbt-test/project/aggregate/build.sbt @@ -0,0 +1,3 @@ +aggregateProjects( + RootProject(file("projA")) +) diff --git a/sbt/src/sbt-test/project/aggregate/projA/A.scala b/sbt/src/sbt-test/project/aggregate/projA/A.scala new file mode 100644 index 000000000..83d15dc73 --- /dev/null +++ b/sbt/src/sbt-test/project/aggregate/projA/A.scala @@ -0,0 +1 @@ +class A diff --git a/sbt/src/sbt-test/project/aggregate/projA/build.sbt b/sbt/src/sbt-test/project/aggregate/projA/build.sbt new file mode 100644 index 000000000..88a866ee1 --- /dev/null +++ b/sbt/src/sbt-test/project/aggregate/projA/build.sbt @@ -0,0 +1,3 @@ +name := "projA" + +scalaVersion := "2.11.8" diff --git a/sbt/src/sbt-test/project/aggregate/test b/sbt/src/sbt-test/project/aggregate/test new file mode 100644 index 000000000..1cb4f2bba --- /dev/null +++ b/sbt/src/sbt-test/project/aggregate/test @@ -0,0 +1,2 @@ +> compile +$ exists projA/target/scala-2.11/classes/A.class