From 0c086a7761c3078992a321069ffa4cbeb98b4675 Mon Sep 17 00:00:00 2001 From: kenji yoshida <6b656e6a69@gmail.com> Date: Wed, 27 Jul 2016 23:35:16 +0900 Subject: [PATCH] `aggregate` can now be used inside a .sbt file (#2683) (cherry picked from commit b92e5773f7170f26da08d9c56a13e1abbb082ef7) --- main/src/main/scala/sbt/internal/DslAst.scala | 7 +++++-- notes/1.0.0/aggregate-build-sbt.md | 5 +++++ sbt/src/main/scala/syntax.scala | 3 +++ sbt/src/sbt-test/project/aggregate/build.sbt | 3 +++ sbt/src/sbt-test/project/aggregate/projA/A.scala | 1 + sbt/src/sbt-test/project/aggregate/projA/build.sbt | 3 +++ sbt/src/sbt-test/project/aggregate/test | 2 ++ 7 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 notes/1.0.0/aggregate-build-sbt.md create mode 100644 sbt/src/sbt-test/project/aggregate/build.sbt create mode 100644 sbt/src/sbt-test/project/aggregate/projA/A.scala create mode 100644 sbt/src/sbt-test/project/aggregate/projA/build.sbt create mode 100644 sbt/src/sbt-test/project/aggregate/test 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