From 627bd6bea15db52b905540473e1f738d22165962 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Fri, 22 Mar 2024 14:27:19 +0100 Subject: [PATCH 1/2] Fix checkTargets --- main/src/main/scala/sbt/ProjectExtra.scala | 25 -------------------- main/src/main/scala/sbt/internal/Load.scala | 26 +++++++++++++++++++-- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/main/src/main/scala/sbt/ProjectExtra.scala b/main/src/main/scala/sbt/ProjectExtra.scala index f1f7e0f04c..b7c956adc2 100755 --- a/main/src/main/scala/sbt/ProjectExtra.scala +++ b/main/src/main/scala/sbt/ProjectExtra.scala @@ -357,31 +357,6 @@ trait ProjectExtra extends Scoped.Syntax: def setCond[T](key: AttributeKey[T], vopt: Option[T], attributes: AttributeMap): AttributeMap = attributes.setCond(key, vopt) - private[sbt] def checkTargets(data: Settings[Scope]): Option[String] = - val dups = overlappingTargets(allTargets(data)) - if (dups.isEmpty) None - else { - val dupStrs = dups map { case (dir, scopes) => - s"${dir.getAbsolutePath}:\n\t${scopes.mkString("\n\t")}" - } - Some(s"Overlapping output directories:${dupStrs.mkString}") - } - - private[this] def overlappingTargets( - targets: Seq[(ProjectRef, File)] - ): Map[File, Seq[ProjectRef]] = - targets.groupBy(_._2).view.filter(_._2.size > 1).mapValues(_.map(_._1)).toMap - - private[this] def allTargets(data: Settings[Scope]): Seq[(ProjectRef, File)] = { - import ScopeFilter._ - val allProjects = ScopeFilter(Make.inAnyProject) - val targetAndRef = Def.setting { (Keys.thisProjectRef.value, Keys.target.value) } - new SettingKeyAll(Def.optional(targetAndRef)(identity)) - .all(allProjects) - .evaluate(data) - .flatMap(x => x) - } - private[sbt] def equalKeys(a: ScopedKey[_], b: ScopedKey[_], mask: ScopeMask): Boolean = a.key == b.key && Scope.equal(a.scope, b.scope, mask) diff --git a/main/src/main/scala/sbt/internal/Load.scala b/main/src/main/scala/sbt/internal/Load.scala index 74a012b69b..2efafdfbd0 100755 --- a/main/src/main/scala/sbt/internal/Load.scala +++ b/main/src/main/scala/sbt/internal/Load.scala @@ -283,8 +283,7 @@ private[sbt] object Load { ) } - // todo: fix this - // Project.checkTargets(data) foreach sys.error + checkTargets(data).foreach(sys.error) val index = timed("Load.apply: structureIndex", log) { structureIndex(data, settings, loaded.extra(data), projects) } @@ -304,6 +303,29 @@ private[sbt] object Load { (rootEval, bs) } + private def checkTargets(data: Settings[Scope]): Option[String] = + val dups = overlappingTargets(allTargets(data)) + if (dups.isEmpty) None + else { + val dupStr = dups.map { case (dir, scopes) => + s"${dir.getAbsolutePath}:\n\t${scopes.mkString("\n\t")}" + }.mkString + Some(s"Overlapping output directories:$dupStr") + } + + private def overlappingTargets(targets: Seq[(ProjectRef, File)]): Map[File, Seq[ProjectRef]] = + targets.groupBy(_._2).view.filter(_._2.size > 1).mapValues(_.map(_._1)).toMap + + private def allTargets(data: Settings[Scope]): Seq[(ProjectRef, File)] = { + import ScopeFilter._ + val allProjects = ScopeFilter(Make.inAnyProject) + val targetAndRef = Def.setting { (Keys.thisProjectRef.value, Keys.target.value) } + new SettingKeyAll(Def.optional(targetAndRef)(identity)) + .all(allProjects) + .evaluate(data) + .flatMap(x => x) + } + // map dependencies on the special tasks: // 1. the scope of 'streams' is the same as the defining key and has the task axis set to the defining key // 2. the defining key is stored on constructed tasks: used for error reporting among other things From c6ef392027a9561821e70664ece8dedd4ce2e2b3 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Mon, 25 Mar 2024 10:52:29 +0100 Subject: [PATCH 2/2] fix scripted --- .../evicted-semver-spec/build.sbt | 11 +---------- .../dependency-management/evicted-semver-spec/test | 5 +++-- .../evicted-semver-spec/v1.0.0/LibraryTest.scala | 3 --- .../evicted-semver-spec/v1.1.0/LibraryTest.scala | 3 --- 4 files changed, 4 insertions(+), 18 deletions(-) delete mode 100644 sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/v1.0.0/LibraryTest.scala delete mode 100644 sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/v1.1.0/LibraryTest.scala diff --git a/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt b/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt index 9460b811d8..2fd840665b 100644 --- a/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt @@ -13,22 +13,13 @@ def commonSettings: Seq[Def.Setting[_]] = resolvers += MavenCache("local-maven", (LocalRootProject / target).value / "local-maven"), ) -lazy val root = (project in file(".")) - .settings(commonSettings) - -val `v1-0-0` = (project in file("v1.0.0")) +val semverSpecTest = project .settings(commonSettings) .settings( name := "semver-spec-test", version := "1.0.0", ) -val `v1-1-0` = (project in file("v1.1.0")) - .settings(commonSettings) - .settings( - name := "semver-spec-test", - version := "1.1.0", - ) val middle = project .settings(commonSettings) diff --git a/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/test b/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/test index 93ed91f57c..e8b982fcf6 100644 --- a/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/test +++ b/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/test @@ -1,5 +1,6 @@ -> v1-0-0/publish -> v1-1-0/publish +> semverSpecTest/publish +> set semverSpecTest/version := "1.1.0" +> semverSpecTest/publish > middle/publish > use/check diff --git a/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/v1.0.0/LibraryTest.scala b/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/v1.0.0/LibraryTest.scala deleted file mode 100644 index fbfda9e74c..0000000000 --- a/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/v1.0.0/LibraryTest.scala +++ /dev/null @@ -1,3 +0,0 @@ -package example - -trait Foo {} diff --git a/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/v1.1.0/LibraryTest.scala b/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/v1.1.0/LibraryTest.scala deleted file mode 100644 index fbfda9e74c..0000000000 --- a/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/v1.1.0/LibraryTest.scala +++ /dev/null @@ -1,3 +0,0 @@ -package example - -trait Foo {}