From 6035bc02ef07691c22b487b483aedbfa9afadef6 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 23 Apr 2020 22:15:09 -0400 Subject: [PATCH 01/10] Update cross test --- sbt/src/sbt-test/actions/cross/build.sbt | 38 +++++++++++++----------- sbt/src/sbt-test/actions/cross/test | 15 ++++++---- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/sbt/src/sbt-test/actions/cross/build.sbt b/sbt/src/sbt-test/actions/cross/build.sbt index 6d1b52a23..02bce3223 100644 --- a/sbt/src/sbt-test/actions/cross/build.sbt +++ b/sbt/src/sbt-test/actions/cross/build.sbt @@ -1,20 +1,24 @@ -scalaVersion in ThisBuild := "2.7.7" +ThisBuild / scalaVersion := "2.11.12" -scalaVersion := "2.9.1" +lazy val root = (project in file(".")) + .settings( + scalaVersion := "2.12.11", -scalaVersion in update := { - scalaVersion.value match { - case "2.9.1" => "2.9.0-1" - case "2.8.2" => "2.8.1" - case x => x - } -} + update / scalaVersion := { + scalaVersion.value match { + case "2.12.11" => "2.12.10" + case "2.11.12" => "2.11.11" + case x => x + } + }, -InputKey[Unit]("check") := { - val args = Def.spaceDelimited().parsed - def check(label: String, i: Int, actual: String) = - assert(args(i) == actual, s"Expected $label='${args(i)}' got '$actual'") - check("scalaVersion in ThisBuild", 0, scalaVersion in ThisBuild value) - check("scalaVersion", 1, scalaVersion.value) - check("scalaVersion in update", 2, scalaVersion in update value) -} + InputKey[Unit]("check") := { + val args = Def.spaceDelimited().parsed + def checkV(label: String, i: Int, actual: String) = + assert(args(i) == actual, s"Expected $label='${args(i)}' got '$actual'") + + checkV("ThisBuild / scalaVersion", 0, (ThisBuild / scalaVersion).value) + checkV("scalaVersion", 1, scalaVersion.value) + checkV("update / scalaVersion", 2, (update / scalaVersion).value) + } + ) diff --git a/sbt/src/sbt-test/actions/cross/test b/sbt/src/sbt-test/actions/cross/test index 0ea962b97..974f3fdc2 100644 --- a/sbt/src/sbt-test/actions/cross/test +++ b/sbt/src/sbt-test/actions/cross/test @@ -1,8 +1,11 @@ -> check 2.7.7 2.9.1 2.9.0-1 -> ++ 2.8.2! -> check 2.8.2 2.8.2 2.8.1 -> ++ 2.10.4! +> check 2.11.12 2.12.11 2.12.10 + +> ++ 2.11.12! +> check 2.11.12 2.11.12 2.11.11 + +> ++ 2.13.1! > set resolvers ++= Nil -> check 2.10.4 2.10.4 2.10.4 +> check 2.13.1 2.13.1 2.13.1 + > session clear-all -> check 2.7.7 2.9.1 2.9.0-1 \ No newline at end of file +> check 2.11.12 2.12.11 2.12.10 From 7a39841ecc1aed689ee58936787d7ba2f2e44454 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 23 Apr 2020 22:40:58 -0400 Subject: [PATCH 02/10] Add test for command crossing using ! --- .../sbt-test/actions/cross-advanced/build.sbt | 32 +++++++++++++++++++ .../foo/src/test/scala/foo/FooSpec.scala | 0 sbt/src/sbt-test/actions/cross-advanced/test | 17 ++++++++++ .../actions/cross-test-only/build.sbt | 16 ---------- sbt/src/sbt-test/actions/cross-test-only/test | 5 --- 5 files changed, 49 insertions(+), 21 deletions(-) create mode 100644 sbt/src/sbt-test/actions/cross-advanced/build.sbt rename sbt/src/sbt-test/actions/{cross-test-only => cross-advanced}/foo/src/test/scala/foo/FooSpec.scala (100%) create mode 100644 sbt/src/sbt-test/actions/cross-advanced/test delete mode 100644 sbt/src/sbt-test/actions/cross-test-only/build.sbt delete mode 100644 sbt/src/sbt-test/actions/cross-test-only/test diff --git a/sbt/src/sbt-test/actions/cross-advanced/build.sbt b/sbt/src/sbt-test/actions/cross-advanced/build.sbt new file mode 100644 index 000000000..e4f5f82d8 --- /dev/null +++ b/sbt/src/sbt-test/actions/cross-advanced/build.sbt @@ -0,0 +1,32 @@ +lazy val compile2 = taskKey[Unit]("") + +lazy val root = (project in file(".")) + .aggregate(foo, bar, client) + .settings( + crossScalaVersions := Nil, + addCommandAlias("build", "compile2"), + ) + +lazy val foo = project + .settings( + crossScalaVersions := Seq("2.12.11", "2.13.1"), + libraryDependencies += "org.scalatest" %% "scalatest" % "3.1.0", + compile2 := { + // This tests that +build will ignore bar's crossScalaVersions and use root's like sbt 0.13 + val x = (LocalProject("bar") / scalaVersion).value + assert(x == scalaVersion.value, s"$x == ${scalaVersion.value}") + (Compile / compile).value + }, + ) + +lazy val bar = project + .settings( + crossScalaVersions := Seq("2.12.11"), + compile2 := (Compile / compile).value, + ) + +lazy val client = project + .settings( + crossScalaVersions := Seq("2.12.11", "2.13.1"), + compile2 := (Compile / compile).value, + ) diff --git a/sbt/src/sbt-test/actions/cross-test-only/foo/src/test/scala/foo/FooSpec.scala b/sbt/src/sbt-test/actions/cross-advanced/foo/src/test/scala/foo/FooSpec.scala similarity index 100% rename from sbt/src/sbt-test/actions/cross-test-only/foo/src/test/scala/foo/FooSpec.scala rename to sbt/src/sbt-test/actions/cross-advanced/foo/src/test/scala/foo/FooSpec.scala diff --git a/sbt/src/sbt-test/actions/cross-advanced/test b/sbt/src/sbt-test/actions/cross-advanced/test new file mode 100644 index 000000000..8da8135ff --- /dev/null +++ b/sbt/src/sbt-test/actions/cross-advanced/test @@ -0,0 +1,17 @@ +> + clean + +## test input task +> + foo / testOnly foo.FooSpec +> + testOnly foo.FooSpec + +## test + with command or alias +> clean +## for command cross building you do need crossScalaVerions on root +> set root/crossScalaVersions := Seq("2.12.11", "2.13.1") +> + build +$ exists foo/target/scala-2.12 +$ exists foo/target/scala-2.13 +$ exists bar/target/scala-2.12 +$ exists bar/target/scala-2.13 +$ exists client/target/scala-2.12 +$ exists client/target/scala-2.13 diff --git a/sbt/src/sbt-test/actions/cross-test-only/build.sbt b/sbt/src/sbt-test/actions/cross-test-only/build.sbt deleted file mode 100644 index c6f6e6e89..000000000 --- a/sbt/src/sbt-test/actions/cross-test-only/build.sbt +++ /dev/null @@ -1,16 +0,0 @@ -lazy val root = (project in file(".")) - .aggregate(foo, client) - .settings( - crossScalaVersions := Nil - ) - -lazy val foo = project - .settings( - crossScalaVersions := Seq("2.12.11", "2.13.1"), - libraryDependencies += "org.scalatest" %% "scalatest" % "3.1.0", - ) - -lazy val client = project - .settings( - crossScalaVersions := Seq("2.12.11", "2.13.1"), - ) diff --git a/sbt/src/sbt-test/actions/cross-test-only/test b/sbt/src/sbt-test/actions/cross-test-only/test deleted file mode 100644 index fa3b4e0a4..000000000 --- a/sbt/src/sbt-test/actions/cross-test-only/test +++ /dev/null @@ -1,5 +0,0 @@ -> + clean - -> + foo / testOnly foo.FooSpec - -> + testOnly foo.FooSpec From 111fe3826e224c506fb6a13ab75308f2ce022ca0 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 23 Apr 2020 22:59:55 -0400 Subject: [PATCH 03/10] Add test for cross + task Ref https://github.com/sbt/sbt/issues/5497 --- sbt/src/sbt-test/actions/cross-advanced/build.sbt | 10 ++++++++++ sbt/src/sbt-test/actions/cross-advanced/test | 3 +++ 2 files changed, 13 insertions(+) diff --git a/sbt/src/sbt-test/actions/cross-advanced/build.sbt b/sbt/src/sbt-test/actions/cross-advanced/build.sbt index e4f5f82d8..20660f67e 100644 --- a/sbt/src/sbt-test/actions/cross-advanced/build.sbt +++ b/sbt/src/sbt-test/actions/cross-advanced/build.sbt @@ -1,3 +1,4 @@ +lazy val check = taskKey[Unit]("") lazy val compile2 = taskKey[Unit]("") lazy val root = (project in file(".")) @@ -11,6 +12,13 @@ lazy val foo = project .settings( crossScalaVersions := Seq("2.12.11", "2.13.1"), libraryDependencies += "org.scalatest" %% "scalatest" % "3.1.0", + + check := { + // This tests that +check will respect bar's crossScalaVersions and not switch + val x = (LocalProject("bar") / scalaVersion).value + assert(x == "2.12.11", s"$x == 2.12.11") + (Compile / compile).value + }, compile2 := { // This tests that +build will ignore bar's crossScalaVersions and use root's like sbt 0.13 val x = (LocalProject("bar") / scalaVersion).value @@ -22,11 +30,13 @@ lazy val foo = project lazy val bar = project .settings( crossScalaVersions := Seq("2.12.11"), + check := (Compile / compile).value, compile2 := (Compile / compile).value, ) lazy val client = project .settings( crossScalaVersions := Seq("2.12.11", "2.13.1"), + check := (Compile / compile).value, compile2 := (Compile / compile).value, ) diff --git a/sbt/src/sbt-test/actions/cross-advanced/test b/sbt/src/sbt-test/actions/cross-advanced/test index 8da8135ff..bf896f40c 100644 --- a/sbt/src/sbt-test/actions/cross-advanced/test +++ b/sbt/src/sbt-test/actions/cross-advanced/test @@ -4,6 +4,9 @@ > + foo / testOnly foo.FooSpec > + testOnly foo.FooSpec +## test + with task in multi-project with different Scala versions +> + check + ## test + with command or alias > clean ## for command cross building you do need crossScalaVerions on root From 2ad28974c65a2b2e638a70d157e37c60dd5eb3cd Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 23 Apr 2020 23:06:48 -0400 Subject: [PATCH 04/10] Add test for cross + inputTask --- sbt/src/sbt-test/actions/cross-advanced/build.sbt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sbt/src/sbt-test/actions/cross-advanced/build.sbt b/sbt/src/sbt-test/actions/cross-advanced/build.sbt index 20660f67e..432f0c21a 100644 --- a/sbt/src/sbt-test/actions/cross-advanced/build.sbt +++ b/sbt/src/sbt-test/actions/cross-advanced/build.sbt @@ -19,6 +19,12 @@ lazy val foo = project assert(x == "2.12.11", s"$x == 2.12.11") (Compile / compile).value }, + (Test / testOnly) := { + // This tests that +testOnly will respect bar's crossScalaVersions and not switch + val x = (LocalProject("bar") / scalaVersion).value + assert(x == "2.12.11", s"$x == 2.12.11") + val _ = (Test / testOnly).evaluated + }, compile2 := { // This tests that +build will ignore bar's crossScalaVersions and use root's like sbt 0.13 val x = (LocalProject("bar") / scalaVersion).value From 5ed54affff107d1ee628e56f0a0f8157c3870488 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 23 Apr 2020 23:11:42 -0400 Subject: [PATCH 05/10] Add test for cross + scoped task --- sbt/src/sbt-test/actions/cross-advanced/build.sbt | 11 +++++++++++ sbt/src/sbt-test/actions/cross-advanced/test | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/sbt/src/sbt-test/actions/cross-advanced/build.sbt b/sbt/src/sbt-test/actions/cross-advanced/build.sbt index 432f0c21a..ae2d20ef1 100644 --- a/sbt/src/sbt-test/actions/cross-advanced/build.sbt +++ b/sbt/src/sbt-test/actions/cross-advanced/build.sbt @@ -40,6 +40,17 @@ lazy val bar = project compile2 := (Compile / compile).value, ) +lazy val baz = project + .settings( + crossScalaVersions := Seq("2.13.1"), + check := { + // This tests that +baz/check will respect bar's crossScalaVersions and not switch + val x = (LocalProject("bar") / scalaVersion).value + assert(x == "2.12.11", s"$x == 2.12.11") + (Compile / compile).value + }, + ) + lazy val client = project .settings( crossScalaVersions := Seq("2.12.11", "2.13.1"), diff --git a/sbt/src/sbt-test/actions/cross-advanced/test b/sbt/src/sbt-test/actions/cross-advanced/test index bf896f40c..666eb3039 100644 --- a/sbt/src/sbt-test/actions/cross-advanced/test +++ b/sbt/src/sbt-test/actions/cross-advanced/test @@ -1,5 +1,9 @@ > + clean +## test scoped task +## this should not force any Scala version changes to other subprojects +> + baz/check + ## test input task > + foo / testOnly foo.FooSpec > + testOnly foo.FooSpec From 4c1c4e6710f3ba79dc23b2140235ef7b5bca07a6 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 23 Apr 2020 23:26:58 -0400 Subject: [PATCH 06/10] cross build -v verbose flag Ref https://github.com/sbt/sbt/issues/5506 --- sbt/src/sbt-test/actions/cross-advanced/test | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sbt/src/sbt-test/actions/cross-advanced/test b/sbt/src/sbt-test/actions/cross-advanced/test index 666eb3039..96d9ad0f7 100644 --- a/sbt/src/sbt-test/actions/cross-advanced/test +++ b/sbt/src/sbt-test/actions/cross-advanced/test @@ -1,5 +1,8 @@ > + clean +## verbose +> + -v compile + ## test scoped task ## this should not force any Scala version changes to other subprojects > + baz/check From 588d01b2dd9eae18d2aaa99b911528456fb972d7 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 24 Apr 2020 01:04:05 -0400 Subject: [PATCH 07/10] Fix switch command -v flag --- main/src/main/scala/sbt/Cross.scala | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/main/src/main/scala/sbt/Cross.scala b/main/src/main/scala/sbt/Cross.scala index 2bdde84dd..103937891 100644 --- a/main/src/main/scala/sbt/Cross.scala +++ b/main/src/main/scala/sbt/Cross.scala @@ -54,12 +54,17 @@ object Cross { } } val spacedVersion = if (spacePresent) version else version & spacedFirst(SwitchCommand) - val verbose = Parser.opt(token(Space ~> "-v")) + val verboseOpt = Parser.opt(token(Space ~> "-v")) val optionalCommand = Parser.opt(token(Space ~> matched(state.combinedParser))) - (spacedVersion ~ verbose ~ optionalCommand).map { + val switch1 = (token(Space ~> "-v") ~> (Space ~> version) ~ optionalCommand) map { + case v ~ command => + Switch(v, true, command) + } + val switch2 = (spacedVersion ~ verboseOpt ~ optionalCommand) map { case v ~ verbose ~ command => Switch(v, verbose.isDefined, command) } + switch1 | switch2 } token(SwitchCommand ~> OptSpace) flatMap { sp => From 063b32bbbac327d6087e0dfe3006b12b3bea4fca Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 24 Apr 2020 01:06:18 -0400 Subject: [PATCH 08/10] Fix cross + scoped task --- main/src/main/scala/sbt/Cross.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Cross.scala b/main/src/main/scala/sbt/Cross.scala index 103937891..a11bcccf4 100644 --- a/main/src/main/scala/sbt/Cross.scala +++ b/main/src/main/scala/sbt/Cross.scala @@ -200,7 +200,7 @@ object Cross { commandsByVersion.flatMap { case (v, commands) => commands match { - case Seq(c) => Seq(s"$SwitchCommand $verbose $v! $c") + case Seq(c) => Seq(s"$SwitchCommand $verbose $v $c") case Seq() => Nil // should be unreachable case multi if fullArgs.isEmpty => Seq(s"$SwitchCommand $verbose $v! all ${multi.mkString(" ")}") From 11a403251a2797d8b36f09676da19c3e347a7f06 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 24 Apr 2020 01:08:21 -0400 Subject: [PATCH 09/10] Fix cross + input task --- main/src/main/scala/sbt/Cross.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Cross.scala b/main/src/main/scala/sbt/Cross.scala index a11bcccf4..f87a0da39 100644 --- a/main/src/main/scala/sbt/Cross.scala +++ b/main/src/main/scala/sbt/Cross.scala @@ -204,7 +204,7 @@ object Cross { case Seq() => Nil // should be unreachable case multi if fullArgs.isEmpty => Seq(s"$SwitchCommand $verbose $v! all ${multi.mkString(" ")}") - case multi => Seq(s"$SwitchCommand $verbose $v!") ++ multi + case multi => Seq(s"$SwitchCommand $verbose $v") ++ multi } } } From 0a5c2edddfb8858b98d73171bf1d88e21fafb0a6 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 24 Apr 2020 01:18:16 -0400 Subject: [PATCH 10/10] Fix strict switch command so +task is fixed --- main/src/main/scala/sbt/Cross.scala | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/main/src/main/scala/sbt/Cross.scala b/main/src/main/scala/sbt/Cross.scala index f87a0da39..21902e4d4 100644 --- a/main/src/main/scala/sbt/Cross.scala +++ b/main/src/main/scala/sbt/Cross.scala @@ -203,7 +203,7 @@ object Cross { case Seq(c) => Seq(s"$SwitchCommand $verbose $v $c") case Seq() => Nil // should be unreachable case multi if fullArgs.isEmpty => - Seq(s"$SwitchCommand $verbose $v! all ${multi.mkString(" ")}") + Seq(s"$SwitchCommand $verbose $v all ${multi.mkString(" ")}") case multi => Seq(s"$SwitchCommand $verbose $v") ++ multi } } @@ -247,15 +247,18 @@ object Cross { if (args.version.force) { // The Scala version was forced on the whole build, run as is args.command - } else { + } else args.command.map { rawCmd => - val (aggs, aggCommand) = parseSlashCommand(Project.extract(state))(rawCmd) - aggs - .intersect(affectedRefs) - .map({ case ProjectRef(_, proj) => s"$proj/$aggCommand" }) - .mkString("all ", " ", "") + // for now, treat `all` command specially + if (rawCmd.startsWith("all ")) rawCmd + else { + val (aggs, aggCommand) = parseSlashCommand(Project.extract(state))(rawCmd) + aggs + .intersect(affectedRefs) + .map({ case ProjectRef(_, proj) => s"$proj/$aggCommand" }) + .mkString("all ", " ", "") + } } - } strictCmd.toList ::: switchedState }