diff --git a/main/src/main/scala/sbt/internal/Load.scala b/main/src/main/scala/sbt/internal/Load.scala index 2c98145e1..cd3dc674c 100755 --- a/main/src/main/scala/sbt/internal/Load.scala +++ b/main/src/main/scala/sbt/internal/Load.scala @@ -1120,11 +1120,11 @@ private[sbt] object Load { buildBase ) val discoveredIdsStr = discovered.map(_.id).mkString(",") - val (root, expand, moreProjects, otherProjects) = + val (root, moreProjects, otherProjects) = rootOpt match case Some(root) => log.debug(s"[Loading] Found root project ${root.id} w/ remaining $discoveredIdsStr") - (root, true, discovered, LoadedProjects(Nil, Nil)) + (root, discovered, LoadedProjects(Nil, Nil)) case None => log.debug(s"[Loading] Found non-root projects $discoveredIdsStr") // Here we do something interesting... We need to create an aggregate root project @@ -1144,10 +1144,10 @@ private[sbt] object Load { ) val existingIds = otherProjects.projects.map(_.id) val refs = existingIds.map(id => ProjectRef(buildUri, id)) - (root.aggregate(refs*), false, Nil, otherProjects) + (root.aggregate(refs*), Nil, otherProjects) val (finalRoot, projectLevelExtra) = timed(s"Load.loadTransitive: processProject($root)", log) { - processProject(root, files, extraFiles, expand) + processProject(root, files, extraFiles, true) } val newProjects = moreProjects ++ projectLevelExtra val newAcc = finalRoot +: (acc ++ otherProjects.projects) diff --git a/sbt-app/src/sbt-test/project/derived-no-explicit-root/build.sbt b/sbt-app/src/sbt-test/project/derived-no-explicit-root/build.sbt new file mode 100644 index 000000000..450e2b142 --- /dev/null +++ b/sbt-app/src/sbt-test/project/derived-no-explicit-root/build.sbt @@ -0,0 +1,7 @@ +@transient +lazy val check = taskKey[Unit]("check") + +check := { + val v = (LocalProject("foo") / DerivedProjectPlugin.value1).value + assert(v == 3, s"Expected 3 but got $v") +} diff --git a/sbt-app/src/sbt-test/project/derived-no-explicit-root/project/DerivedProjectPlugin.scala b/sbt-app/src/sbt-test/project/derived-no-explicit-root/project/DerivedProjectPlugin.scala new file mode 100644 index 000000000..f2cc528bb --- /dev/null +++ b/sbt-app/src/sbt-test/project/derived-no-explicit-root/project/DerivedProjectPlugin.scala @@ -0,0 +1,21 @@ +import sbt._ +import sbt.Keys._ + +object DerivedProjectPlugin extends AutoPlugin { + val value1 = settingKey[Int]("value1") + + override def derivedProjects(proj: ProjectDefinition[?]) = + proj.projectOrigin match { + case ProjectOrigin.DerivedProject => + Nil + case _ => + Seq( + Project("foo", file("foo")).settings( + value1 := 3, + name := "foo", + ) + ) + } + + override def trigger = allRequirements +} diff --git a/sbt-app/src/sbt-test/project/derived-no-explicit-root/test b/sbt-app/src/sbt-test/project/derived-no-explicit-root/test new file mode 100644 index 000000000..54cab8268 --- /dev/null +++ b/sbt-app/src/sbt-test/project/derived-no-explicit-root/test @@ -0,0 +1,2 @@ +# derivedProjects should work even without an explicit root project +> check