Add API dependency tracking to testQuickFilter.

This commit is contained in:
Eugene Vigdorchik 2012-03-07 12:28:40 +04:00
parent cef766046d
commit e92ba43b3f
2 changed files with 10 additions and 3 deletions

View File

@ -327,7 +327,14 @@ object Defaults extends BuildCommon
case (analysis, dir) =>
val succeeded = new TestResultFilter(succeededFile(dir))
args => test => selectedFilter(args)(test) && {
!succeeded(test) // Add recompilation status.
succeeded(test) match {
case None => true
case Some(ts) =>
import analysis.{relations => rel, apis}
rel.definesClass(test) flatMap {
f => (rel.internalSrcDeps(f) map apis.internal) ++ (rel.externalDeps(f) map apis.external)
} exists (_.compilation.startTime > ts)
}
}
}
def succeededFile(dir: File) = dir / "succeeded_tests"

View File

@ -25,10 +25,10 @@ private[sbt] class TestStatusReporter(f: File) extends TestsListener
}
}
private[sbt] class TestResultFilter(f: File) extends (String => Boolean) with NotNull
private[sbt] class TestResultFilter(f: File) extends NotNull
{
private lazy val succeeded = TestStatus.read(f)
def apply(test: String) = succeeded.contains(test)
def apply(test: String): Option[Long] = succeeded.get(test)
}
private object TestStatus