From 6dc2cf4210abd06f3c0ba690dff6b58acf3d9aa5 Mon Sep 17 00:00:00 2001 From: Anatoly Fayngelerin Date: Wed, 29 Jun 2016 16:47:27 -0400 Subject: [PATCH] dependsOn can now be used inside a .sbt file for a subproject --- main/src/main/scala/sbt/internal/DslAst.scala | 4 ++++ notes/0.13.12/depends-on-build-sbt.md | 9 +++++++++ sbt/src/main/scala/syntax.scala | 1 + .../sbt-test/project/subproject-dependson/build.sbt | 11 +++++++++++ .../project/subproject-dependson/projA/build.sbt | 1 + .../project/subproject-dependson/projB/build.sbt | 3 +++ sbt/src/sbt-test/project/subproject-dependson/test | 1 + 7 files changed, 30 insertions(+) create mode 100644 notes/0.13.12/depends-on-build-sbt.md create mode 100644 sbt/src/sbt-test/project/subproject-dependson/build.sbt create mode 100644 sbt/src/sbt-test/project/subproject-dependson/projA/build.sbt create mode 100644 sbt/src/sbt-test/project/subproject-dependson/projB/build.sbt create mode 100644 sbt/src/sbt-test/project/subproject-dependson/test diff --git a/main/src/main/scala/sbt/internal/DslAst.scala b/main/src/main/scala/sbt/internal/DslAst.scala index 7a8e2c2ed..6d9382ccf 100644 --- a/main/src/main/scala/sbt/internal/DslAst.scala +++ b/main/src/main/scala/sbt/internal/DslAst.scala @@ -58,6 +58,10 @@ object DslEntry { case class DslDisablePlugins(plugins: Seq[AutoPlugin]) extends ProjectManipulation { override val toFunction: Project => Project = _.disablePlugins(plugins: _*) } + /** Represents registering an internal dependency for the current project */ + case class DslDependsOn(cs: Seq[Eval[ClasspathDep[ProjectReference]]]) extends ProjectManipulation { + override val toFunction: Project => Project = _.dependsOn(cs: _*) + } /** Represents registering a set of configurations with the current project. */ case class DslConfigs(cs: Seq[Configuration]) extends ProjectManipulation { override val toFunction: Project => Project = _.configs(cs: _*) diff --git a/notes/0.13.12/depends-on-build-sbt.md b/notes/0.13.12/depends-on-build-sbt.md new file mode 100644 index 000000000..04bb4760c --- /dev/null +++ b/notes/0.13.12/depends-on-build-sbt.md @@ -0,0 +1,9 @@ + [@anatolydwnld]: https://github.com/anatolydwnld + +### Fixes with compatibility implications + +### Improvements + +- Add the ability to call dependsOn for the current project inside a build sbt file. By [@anatolydwnld][@anatolydwnld] + +### Bug fixes diff --git a/sbt/src/main/scala/syntax.scala b/sbt/src/main/scala/syntax.scala index 30ed4cac1..a823f0863 100644 --- a/sbt/src/main/scala/syntax.scala +++ b/sbt/src/main/scala/syntax.scala @@ -52,6 +52,7 @@ 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) + def dependsOn(deps: Eval[ClasspathDep[ProjectReference]]*): DslEntry = DslEntry.DslDependsOn(deps) // avoid conflict with `sbt.Keys.aggregate` def aggregateProjects(refs: Eval[ProjectReference]*): DslEntry = DslEntry.DslAggregate(refs) } diff --git a/sbt/src/sbt-test/project/subproject-dependson/build.sbt b/sbt/src/sbt-test/project/subproject-dependson/build.sbt new file mode 100644 index 000000000..9782f67c4 --- /dev/null +++ b/sbt/src/sbt-test/project/subproject-dependson/build.sbt @@ -0,0 +1,11 @@ +val projA = project in file("projA") + +val projB = project in file("projB") + +lazy val check = taskKey[Unit]("Verifies expected build behavior") + +check := { + val projBDeps = (dependencyClasspath in (projB, Compile)).value.map(_.data) + val assertion = projBDeps.filter(_.getAbsolutePath.contains("projA")).nonEmpty + assert(assertion, "Unable to find projA classes in projB's dependency list") +} diff --git a/sbt/src/sbt-test/project/subproject-dependson/projA/build.sbt b/sbt/src/sbt-test/project/subproject-dependson/projA/build.sbt new file mode 100644 index 000000000..2cc74591f --- /dev/null +++ b/sbt/src/sbt-test/project/subproject-dependson/projA/build.sbt @@ -0,0 +1 @@ +name := "projA" diff --git a/sbt/src/sbt-test/project/subproject-dependson/projB/build.sbt b/sbt/src/sbt-test/project/subproject-dependson/projB/build.sbt new file mode 100644 index 000000000..732b88063 --- /dev/null +++ b/sbt/src/sbt-test/project/subproject-dependson/projB/build.sbt @@ -0,0 +1,3 @@ +name := "projB" + +dependsOn(LocalProject("projA")) diff --git a/sbt/src/sbt-test/project/subproject-dependson/test b/sbt/src/sbt-test/project/subproject-dependson/test new file mode 100644 index 000000000..a5912a391 --- /dev/null +++ b/sbt/src/sbt-test/project/subproject-dependson/test @@ -0,0 +1 @@ +> check \ No newline at end of file