From 1fa855e2e700e52e111b445e141fdfeafc1301d4 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Sat, 1 Oct 2011 14:39:40 -0400 Subject: [PATCH] fixes #211. +/++ only clear scalaVersion/scalaHome in Global config+task. --- main/Cross.scala | 7 +++++-- sbt/src/sbt-test/actions/cross/build.sbt | 18 ++++++++++++++++++ sbt/src/sbt-test/actions/cross/test | 3 +++ 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 sbt/src/sbt-test/actions/cross/build.sbt create mode 100644 sbt/src/sbt-test/actions/cross/test diff --git a/main/Cross.scala b/main/Cross.scala index f09144a7c..d170c13cf 100644 --- a/main/Cross.scala +++ b/main/Cross.scala @@ -6,7 +6,7 @@ package sbt import Keys._ import complete.{DefaultParsers, Parser} import DefaultParsers._ - import Project.Setting + import Project.{ScopedKey, Setting} import Scope.GlobalScope object Cross @@ -33,7 +33,10 @@ object Cross Project.setProject(session, newStructure, command :: state) } def crossExclude(s: Setting[_]): Boolean = - s.key.key == scalaVersion.key || s.key.key == scalaHome.key + s.key match { + case ScopedKey( Scope(_, Global, Global, _), scalaHome.key | scalaVersion.key) => true + case _ => false + } def crossParser(state: State): Parser[String] = token(Cross <~ OptSpace) flatMap { _ => token(matched( state.combinedParser & spacedFirst(Cross) )) } diff --git a/sbt/src/sbt-test/actions/cross/build.sbt b/sbt/src/sbt-test/actions/cross/build.sbt new file mode 100644 index 000000000..1604f0fa2 --- /dev/null +++ b/sbt/src/sbt-test/actions/cross/build.sbt @@ -0,0 +1,18 @@ +scalaVersion in ThisBuild := "2.7.7" + +scalaVersion := "2.9.1" + +scalaVersion in update <<= scalaVersion { + case "2.9.1" => "2.9.0-1" + case "2.8.2" => "2.8.1" + case x => x +} + +InputKey[Unit]("check") <<= inputTask { argsT => + (argsT, scalaVersion in ThisBuild, scalaVersion, scalaVersion in update) map { (args, svTB, svP, svU) => + def check(label: String, i: Int, actual: String) = assert(args(i) == actual, "Expected " + label + "='" + args(i) + "' got '" + actual + "'") + check("scalaVersion in ThisBuild", 0, svTB) + check("scalaVersion", 1, svP) + check("scalaVersion in update", 2, svU) + } +} diff --git a/sbt/src/sbt-test/actions/cross/test b/sbt/src/sbt-test/actions/cross/test new file mode 100644 index 000000000..de92dc24c --- /dev/null +++ b/sbt/src/sbt-test/actions/cross/test @@ -0,0 +1,3 @@ +> check 2.7.7 2.9.1 2.9.0-1 +> ++ 2.8.2 +> check 2.8.2 2.8.2 2.8.1