From fdd0e14e71d91b8dc9f2ca74e94420d6d31b2eb2 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Sat, 24 Apr 2010 22:48:57 -0400 Subject: [PATCH] Defer checking test names until they are needed (after test-compile). Not as immediate feedback, but it is more accurate. --- sbt/src/main/scala/sbt/DefaultProject.scala | 2 +- sbt/src/main/scala/sbt/ScalaProject.scala | 29 +++++++++++++-------- sbt/src/main/scala/sbt/TaskManager.scala | 1 + 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/sbt/src/main/scala/sbt/DefaultProject.scala b/sbt/src/main/scala/sbt/DefaultProject.scala index b379496e2..e92548a80 100644 --- a/sbt/src/main/scala/sbt/DefaultProject.scala +++ b/sbt/src/main/scala/sbt/DefaultProject.scala @@ -299,7 +299,7 @@ abstract class BasicScalaProject extends ScalaProject with BasicDependencyProjec protected def packageProjectAction = zipTask(packageProjectPaths, packageProjectZip) describedAs ProjectPackageDescription protected def docAllAction = (doc && docTest) describedAs DocAllDescription - protected def packageAllAction = task { None } dependsOn(`package`, packageTest, packageSrc, packageTestSrc, packageDocs) describedAs PackageAllDescription + protected def packageAllAction = Empty dependsOn(`package`, packageTest, packageSrc, packageTestSrc, packageDocs) describedAs PackageAllDescription protected def graphSourcesAction = graphSourcesTask(graphSourcesPath, mainSourceRoots, mainCompileConditional.analysis).dependsOn(compile) protected def graphPackagesAction = graphPackagesTask(graphPackagesPath, mainSourceRoots, mainCompileConditional.analysis).dependsOn(compile) protected def incrementVersionAction = task { incrementVersionNumber(); None } describedAs IncrementVersionDescription diff --git a/sbt/src/main/scala/sbt/ScalaProject.scala b/sbt/src/main/scala/sbt/ScalaProject.scala index c2d5a2b06..1db8741d7 100644 --- a/sbt/src/main/scala/sbt/ScalaProject.scala +++ b/sbt/src/main/scala/sbt/ScalaProject.scala @@ -173,8 +173,8 @@ trait ScalaProject extends SimpleScalaProject with FileTasks with MultiTaskProje val beginTasks = begin.map(toTask).toSeq // test setup tasks val workTasks = work.map(w => toTask(w) dependsOn(beginTasks : _*)) // the actual tests val endTasks = end.map(toTask).toSeq // tasks that perform test cleanup and are run regardless of success of tests - val endTask = task { None } named("test-cleanup") dependsOn(endTasks : _*) - val rootTask = task { None } named("test-complete") dependsOn(workTasks.toSeq : _*) // the task that depends on all test subtasks + val endTask = Empty named("test-cleanup") dependsOn(endTasks : _*) + val rootTask = Empty named("test-complete") dependsOn(workTasks.toSeq : _*) // the task that depends on all test subtasks SubWork[Project#Task](rootTask, endTask) } new CompoundTask(work) @@ -392,17 +392,24 @@ trait MultiTaskProject extends Project def filterInclude = { - val (exactFilters, testFilters) = testNames.toList.map(GlobFilter.apply).partition(_.isInstanceOf[ExactFilter]) - val includeTests = exactFilters.map(_.asInstanceOf[ExactFilter].matchName) - val toCheck = scala.collection.mutable.HashSet(includeTests: _*) - toCheck --= allTests - - if(!toCheck.isEmpty && log.atLevel(Level.Warn)) + lazy val (exactFilters, testFilters) = testNames.toList.map(GlobFilter.apply).partition(_.isInstanceOf[ExactFilter]) + lazy val includeTests = exactFilters.map(_.asInstanceOf[ExactFilter].matchName) + def checkExistence() = { - log.warn("Test(s) not found:") - toCheck.foreach(test => log.warn("\t" + test)) + val toCheck = Set() ++ includeTests -- allTests + + if(!toCheck.isEmpty && log.atLevel(Level.Warn)) + { + log.warn("Test(s) not found:") + toCheck.foreach(test => log.warn("\t" + test)) + } + toCheck + } + lazy val includeTestsSet = + { + checkExistence() + Set(includeTests: _*) } - val includeTestsSet = Set(includeTests: _*) (test: String) => includeTestsSet.contains(test) || testFilters.exists(_.accept(test)) } diff --git a/sbt/src/main/scala/sbt/TaskManager.scala b/sbt/src/main/scala/sbt/TaskManager.scala index 8977c728f..040b46c01 100644 --- a/sbt/src/main/scala/sbt/TaskManager.scala +++ b/sbt/src/main/scala/sbt/TaskManager.scala @@ -98,6 +98,7 @@ trait TaskManager{ val interactiveDependencyIndex = dependencyList.findIndexOf(_.interactive) require(interactiveDependencyIndex < 0, "Dependency (at index " + interactiveDependencyIndex + ") is interactive. Interactive tasks cannot be dependencies.") } + lazy val Empty = task { None} } object TaskManager {