From 4b847b148f694d782122b489c254f20187019de3 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 21 Feb 2020 23:39:29 -0500 Subject: [PATCH] Make bare setting loading order alphabetical Fixes https://github.com/sbt/sbt/issues/2697 Ref https://twitter.com/not_xuwei_k/status/1230140477959286848 Note that this is could potentially break an existing build that was relying on previous behavior, which seem to return `build.sbt` at the end if you have `a.sbt`, `b.sbt`, `c.sbt`, and `build.sbt`. --- main/src/main/scala/sbt/BuildPaths.scala | 5 ++++- sbt/src/sbt-test/project/setting-order/a.sbt | 1 + sbt/src/sbt-test/project/setting-order/b.sbt | 1 + sbt/src/sbt-test/project/setting-order/build.sbt | 12 ++++++++++++ sbt/src/sbt-test/project/setting-order/c.sbt | 1 + sbt/src/sbt-test/project/setting-order/test | 1 + 6 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 sbt/src/sbt-test/project/setting-order/a.sbt create mode 100644 sbt/src/sbt-test/project/setting-order/b.sbt create mode 100644 sbt/src/sbt-test/project/setting-order/build.sbt create mode 100644 sbt/src/sbt-test/project/setting-order/c.sbt create mode 100644 sbt/src/sbt-test/project/setting-order/test diff --git a/main/src/main/scala/sbt/BuildPaths.scala b/main/src/main/scala/sbt/BuildPaths.scala index ba4219615..064f50107 100644 --- a/main/src/main/scala/sbt/BuildPaths.scala +++ b/main/src/main/scala/sbt/BuildPaths.scala @@ -8,6 +8,7 @@ package sbt import java.io.File +import java.util.Locale import KeyRanks.DSetting import sbt.io.{ GlobFilter, Path } @@ -114,7 +115,9 @@ object BuildPaths { private[this] def defaultDependencyBase(globalBase: File) = globalBase / "dependency" private[this] def defaultGlobalZinc(globalBase: File) = globalBase / "zinc" - def configurationSources(base: File): Seq[File] = (base * (GlobFilter("*.sbt") - ".sbt")).get + def configurationSources(base: File): Seq[File] = + (base * (GlobFilter("*.sbt") - ".sbt")).get + .sortBy(_.getName.toLowerCase(Locale.ENGLISH)) def pluginDirectory(definitionBase: File) = definitionBase / PluginsDirectoryName def evalOutputDirectory(base: File) = outputDirectory(base) / "config-classes" diff --git a/sbt/src/sbt-test/project/setting-order/a.sbt b/sbt/src/sbt-test/project/setting-order/a.sbt new file mode 100644 index 000000000..02cd89214 --- /dev/null +++ b/sbt/src/sbt-test/project/setting-order/a.sbt @@ -0,0 +1 @@ +Compile / scalacOptions += "a" diff --git a/sbt/src/sbt-test/project/setting-order/b.sbt b/sbt/src/sbt-test/project/setting-order/b.sbt new file mode 100644 index 000000000..e2ae0f78a --- /dev/null +++ b/sbt/src/sbt-test/project/setting-order/b.sbt @@ -0,0 +1 @@ +Compile / scalacOptions += "b" diff --git a/sbt/src/sbt-test/project/setting-order/build.sbt b/sbt/src/sbt-test/project/setting-order/build.sbt new file mode 100644 index 000000000..69d74540d --- /dev/null +++ b/sbt/src/sbt-test/project/setting-order/build.sbt @@ -0,0 +1,12 @@ +val check = taskKey[Unit]("") + +lazy val root = (project in file(".")) + .settings( + Compile / scalacOptions += "multi-project", + check := { + val xs = (Compile / scalacOptions).value + assert(xs.toList == List("multi-project", "a", "b", "bare", "c"), s"$xs") + } + ) + +Compile / scalacOptions += "bare" diff --git a/sbt/src/sbt-test/project/setting-order/c.sbt b/sbt/src/sbt-test/project/setting-order/c.sbt new file mode 100644 index 000000000..07a70ce8d --- /dev/null +++ b/sbt/src/sbt-test/project/setting-order/c.sbt @@ -0,0 +1 @@ +Compile / scalacOptions += "c" diff --git a/sbt/src/sbt-test/project/setting-order/test b/sbt/src/sbt-test/project/setting-order/test new file mode 100644 index 000000000..15675b169 --- /dev/null +++ b/sbt/src/sbt-test/project/setting-order/test @@ -0,0 +1 @@ +> check