diff --git a/main/src/main/scala/sbt/dsl/package.scala b/main/src/main/scala/sbt/dsl/package.scala index f7f1df2e3..6d56b3acb 100644 --- a/main/src/main/scala/sbt/dsl/package.scala +++ b/main/src/main/scala/sbt/dsl/package.scala @@ -5,7 +5,8 @@ import internals.{ DslConfigs, DslEnablePlugins, DslDisablePlugins, - DslDependsOn + DslDependsOn, + DslAggregate } package object dsl { @@ -13,4 +14,6 @@ package object dsl { def disablePlugins(ps: AutoPlugin*): DslEntry = DslDisablePlugins(ps) def configs(cs: Configuration*): DslEntry = DslConfigs(cs) def dependsOn(deps: ClasspathDep[ProjectReference]*): DslEntry = DslDependsOn(deps) + // avoid conflict with `sbt.Keys.aggregate` + def aggregateProjects(refs: ProjectReference*): DslEntry = DslAggregate(refs) } diff --git a/main/src/main/scala/sbt/internals/DslAst.scala b/main/src/main/scala/sbt/internals/DslAst.scala index bac7f08a1..80f6ae326 100644 --- a/main/src/main/scala/sbt/internals/DslAst.scala +++ b/main/src/main/scala/sbt/internals/DslAst.scala @@ -62,3 +62,7 @@ case class DslConfigs(cs: Seq[Configuration]) extends ProjectManipulation { case class DslDependsOn(cs: Seq[ClasspathDep[ProjectReference]]) extends ProjectManipulation { override val toFunction: Project => Project = _.dependsOn(cs: _*) } +/** this represents an `aggregate()` in the sbt DSL */ +case class DslAggregate(refs: Seq[ProjectReference]) extends ProjectManipulation { + override val toFunction: Project => Project = _.aggregate(refs: _*) +} diff --git a/notes/0.13.13/aggregate-build-sbt.md b/notes/0.13.13/aggregate-build-sbt.md new file mode 100644 index 000000000..ef459e2e9 --- /dev/null +++ b/notes/0.13.13/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/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