Honor maxErrors for compileInput

This uses a recently added technique (cf `TaskKey.local`) to introduce
local TaskKey and get around the nine parameter restriction.
This commit is contained in:
Indrajit Raychaudhuri 2011-11-10 14:51:31 +05:30
parent b16d4a36ad
commit e1e6b25d0c
2 changed files with 15 additions and 17 deletions

View File

@ -16,7 +16,7 @@ package sbt
import org.scalatools.testing.{AnnotatedFingerprint, SubclassFingerprint}
import sys.error
import scala.xml.{Node => XNode,NodeSeq}
import scala.xml.NodeSeq
import org.apache.ivy.core.module.{descriptor, id}
import descriptor.ModuleDescriptor, id.ModuleRevisionId
import java.io.File
@ -193,11 +193,10 @@ object Defaults extends BuildCommon
}
def compilersSetting = compilers <<= (scalaInstance, appConfiguration, streams, classpathOptions, javaHome) map { (si, app, s, co, jh) => Compiler.compilers(si, co, jh)(app, s.log) }
lazy val configTasks = docSetting(doc) ++ Seq(
lazy val configTasks = docSetting(doc) ++ compileInputsSettings ++ Seq(
initialCommands in GlobalScope :== "",
cleanupCommands in GlobalScope :== "",
compile <<= compileTask,
compileInputs <<= compileInputsTask,
compileIncSetup <<= compileIncSetupTask,
console <<= consoleTask,
consoleQuick <<= consoleQuickTask,
@ -442,11 +441,10 @@ object Defaults extends BuildCommon
new Run(si, trap, tmp)
}
def docSetting(key: TaskKey[File]): Seq[Setting[_]] = inTask(key)(Seq(
def docSetting(key: TaskKey[File]): Seq[Setting[_]] = inTask(key)(compileInputsSettings ++ Seq(
cacheDirectory ~= (_ / key.key.label),
target <<= docDirectory, // deprecate docDirectory in favor of 'target in doc'; remove when docDirectory is removed
scalacOptions <<= scaladocOptions or scalacOptions, // deprecate scaladocOptions in favor of 'scalacOptions in doc'; remove when scaladocOptions is removed
compileInputs <<= compileInputsTask,
key in TaskGlobal <<= (cacheDirectory, compileInputs, target, configuration, streams) map { (cache, in, out, config, s) =>
// For Scala/Java hybrid projects, the output docs are rebased to `scala` or `java` sub-directory accordingly. We do hybrid
// mode iff both *.scala and *.java files exist -- other doc resources (package.html, *.jpg etc.) don't influence the decision.
@ -488,13 +486,15 @@ object Defaults extends BuildCommon
(dependencyClasspath, cacheDirectory, skip in compile, definesClass) map { (cp, cacheDir, skip, definesC) =>
Compiler.IncSetup(analysisMap(cp), definesC, skip, cacheDir / "compile")
}
def compileInputsTask =
(dependencyClasspath, sources, compilers, javacOptions, scalacOptions, classDirectory, compileOrder, compileIncSetup, streams) map {
(cp, srcs, cs, javacOpts, scalacOpts, classes, order, incSetup, s) =>
val classpath = classes +: data(cp)
Compiler.inputs(classpath, srcs, classes, scalacOpts, javacOpts, 100, order)(cs, incSetup, s.log)
}
def compileInputsSettings: Seq[Setting[_]] = {
val optionsPair = TaskKey.local[(Seq[String], Seq[String])]
Seq(optionsPair <<= (scalacOptions, javacOptions) map Pair.apply,
compileInputs <<= (dependencyClasspath, sources, compilers, optionsPair, classDirectory, compileOrder, compileIncSetup, maxErrors, streams) map {
(cp, srcs, cs, optsPair, classes, order, incSetup, maxErr, s) =>
Compiler.inputs(classes +: data(cp), srcs, classes, optsPair._1, optsPair._2, maxErr, order)(cs, incSetup, s.log)
})
}
def sbtPluginExtra(m: ModuleID, sbtV: String, scalaV: String): ModuleID = m.extra(CustomPomParser.SbtVersionKey -> sbtV, CustomPomParser.ScalaVersionKey -> scalaV).copy(crossVersion = false)
def writePluginsDescriptor(plugins: Set[String], dir: File): Seq[File] =
{
@ -1205,4 +1205,4 @@ trait BuildCommon
def getPrevious[T](task: TaskKey[T]): Initialize[Task[Option[T]]] =
(state, resolvedScoped) map { (s, ctx) => getFromContext(task, ctx, s) }
}
}

View File

@ -13,8 +13,7 @@ $ exists "target/api/java"
> 'set sources in (Compile, doc) <<= sources in (Compile, doc) map { _.filterNot(_.getName endsWith ".java") }'
> clean
> doc
> ; clean ; doc
# pure scala project, only scaladoc at top level
$ exists "target/api/index.js"
@ -24,8 +23,7 @@ $ absent "target/api/java"
> 'set sources in (Compile, doc) <<= sources in Compile map { _.filter(_.getName endsWith ".java") }'
> clean
> doc
> ; clean ; doc
# pure java project, only javadoc at top level
$ exists "target/api/package-list"