mirror of https://github.com/sbt/sbt.git
add 'skip' for manually overriding whether recompilation should occur. fixes #128
This commit is contained in:
parent
9d27186202
commit
73a10644d7
|
|
@ -68,6 +68,7 @@ object Defaults extends BuildCommon
|
||||||
scalaHome :== None,
|
scalaHome :== None,
|
||||||
javaHome :== None,
|
javaHome :== None,
|
||||||
extraLoggers :== { _ => Nil },
|
extraLoggers :== { _ => Nil },
|
||||||
|
skip :== false,
|
||||||
version :== "0.1",
|
version :== "0.1",
|
||||||
outputStrategy :== None,
|
outputStrategy :== None,
|
||||||
exportJars :== false,
|
exportJars :== false,
|
||||||
|
|
@ -422,8 +423,8 @@ object Defaults extends BuildCommon
|
||||||
|
|
||||||
def compileTask = (compileInputs, streams) map { (i,s) => Compiler(i,s.log) }
|
def compileTask = (compileInputs, streams) map { (i,s) => Compiler(i,s.log) }
|
||||||
def compileIncSetupTask =
|
def compileIncSetupTask =
|
||||||
(dependencyClasspath, cacheDirectory, definesClass) map { (cp, cacheDir, definesC) =>
|
(dependencyClasspath, cacheDirectory, skip in compile, definesClass) map { (cp, cacheDir, skip, definesC) =>
|
||||||
Compiler.IncSetup(analysisMap(cp), definesC, cacheDir / "compile")
|
Compiler.IncSetup(analysisMap(cp), definesC, skip, cacheDir / "compile")
|
||||||
}
|
}
|
||||||
def compileInputsTask =
|
def compileInputsTask =
|
||||||
(dependencyClasspath, sources, compilers, javacOptions, scalacOptions, classDirectory, compileOrder, compileIncSetup, streams) map {
|
(dependencyClasspath, sources, compilers, javacOptions, scalacOptions, classDirectory, compileOrder, compileIncSetup, streams) map {
|
||||||
|
|
|
||||||
|
|
@ -261,6 +261,7 @@ object Keys
|
||||||
val sbtResolver = SettingKey[Resolver]("sbt-resolver", "Provides a resolver for obtaining sbt as a dependency.")
|
val sbtResolver = SettingKey[Resolver]("sbt-resolver", "Provides a resolver for obtaining sbt as a dependency.")
|
||||||
val sbtDependency = SettingKey[ModuleID]("sbt-dependency", "Provides a definition for declaring the current version of sbt.")
|
val sbtDependency = SettingKey[ModuleID]("sbt-dependency", "Provides a definition for declaring the current version of sbt.")
|
||||||
val sbtVersion = SettingKey[String]("sbt-version", "Provides the version of sbt. This setting should be not be modified.")
|
val sbtVersion = SettingKey[String]("sbt-version", "Provides the version of sbt. This setting should be not be modified.")
|
||||||
|
val skip = SettingKey[Boolean]("skip")
|
||||||
|
|
||||||
// special
|
// special
|
||||||
val parallelExecution = SettingKey[Boolean]("parallel-execution", "Enables (true) or disables (false) parallel execution of tasks.")
|
val parallelExecution = SettingKey[Boolean]("parallel-execution", "Enables (true) or disables (false) parallel execution of tasks.")
|
||||||
|
|
|
||||||
|
|
@ -22,23 +22,27 @@ final class CompileConfiguration(val sources: Seq[File], val classpath: Seq[File
|
||||||
|
|
||||||
class AggressiveCompile(cacheDirectory: File)
|
class AggressiveCompile(cacheDirectory: File)
|
||||||
{
|
{
|
||||||
def apply(compiler: AnalyzingCompiler, javac: JavaCompiler, sources: Seq[File], classpath: Seq[File], outputDirectory: File, options: Seq[String] = Nil, javacOptions: Seq[String] = Nil, analysisMap: Map[File, Analysis] = Map.empty, definesClass: DefinesClass = Locate.definesClass _, maxErrors: Int = 100, compileOrder: CompileOrder.Value = Mixed)(implicit log: Logger): Analysis =
|
def apply(compiler: AnalyzingCompiler, javac: JavaCompiler, sources: Seq[File], classpath: Seq[File], outputDirectory: File, options: Seq[String] = Nil, javacOptions: Seq[String] = Nil, analysisMap: Map[File, Analysis] = Map.empty, definesClass: DefinesClass = Locate.definesClass _, maxErrors: Int = 100, compileOrder: CompileOrder.Value = Mixed, skip: Boolean = false)(implicit log: Logger): Analysis =
|
||||||
{
|
{
|
||||||
val setup = new CompileSetup(outputDirectory, new CompileOptions(options, javacOptions), compiler.scalaInstance.actualVersion, compileOrder)
|
val setup = new CompileSetup(outputDirectory, new CompileOptions(options, javacOptions), compiler.scalaInstance.actualVersion, compileOrder)
|
||||||
compile1(sources, classpath, setup, store, analysisMap, definesClass, compiler, javac, maxErrors)
|
compile1(sources, classpath, setup, store, analysisMap, definesClass, compiler, javac, maxErrors, skip)
|
||||||
}
|
}
|
||||||
|
|
||||||
def withBootclasspath(args: CompilerArguments, classpath: Seq[File]): Seq[File] =
|
def withBootclasspath(args: CompilerArguments, classpath: Seq[File]): Seq[File] =
|
||||||
args.bootClasspath ++ args.finishClasspath(classpath)
|
args.bootClasspath ++ args.finishClasspath(classpath)
|
||||||
|
|
||||||
def compile1(sources: Seq[File], classpath: Seq[File], setup: CompileSetup, store: AnalysisStore, analysis: Map[File, Analysis], definesClass: DefinesClass, compiler: AnalyzingCompiler, javac: JavaCompiler, maxErrors: Int)(implicit log: Logger): Analysis =
|
def compile1(sources: Seq[File], classpath: Seq[File], setup: CompileSetup, store: AnalysisStore, analysis: Map[File, Analysis], definesClass: DefinesClass, compiler: AnalyzingCompiler, javac: JavaCompiler, maxErrors: Int, skip: Boolean)(implicit log: Logger): Analysis =
|
||||||
{
|
{
|
||||||
val (previousAnalysis, previousSetup) = extract(store.get())
|
val (previousAnalysis, previousSetup) = extract(store.get())
|
||||||
val config = new CompileConfiguration(sources, classpath, previousAnalysis, previousSetup, setup, analysis.get _, definesClass, maxErrors, compiler, javac)
|
if(skip)
|
||||||
val (modified, result) = compile2(config)
|
previousAnalysis
|
||||||
if(modified)
|
else {
|
||||||
store.set(result, setup)
|
val config = new CompileConfiguration(sources, classpath, previousAnalysis, previousSetup, setup, analysis.get _, definesClass, maxErrors, compiler, javac)
|
||||||
result
|
val (modified, result) = compile2(config)
|
||||||
|
if(modified)
|
||||||
|
store.set(result, setup)
|
||||||
|
result
|
||||||
|
}
|
||||||
}
|
}
|
||||||
def compile2(config: CompileConfiguration)(implicit log: Logger, equiv: Equiv[CompileSetup]): (Boolean, Analysis) =
|
def compile2(config: CompileConfiguration)(implicit log: Logger, equiv: Equiv[CompileSetup]): (Boolean, Analysis) =
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ object Compiler
|
||||||
|
|
||||||
final case class Inputs(compilers: Compilers, config: Options, incSetup: IncSetup)
|
final case class Inputs(compilers: Compilers, config: Options, incSetup: IncSetup)
|
||||||
final case class Options(classpath: Seq[File], sources: Seq[File], classesDirectory: File, options: Seq[String], javacOptions: Seq[String], maxErrors: Int, order: CompileOrder.Value)
|
final case class Options(classpath: Seq[File], sources: Seq[File], classesDirectory: File, options: Seq[String], javacOptions: Seq[String], maxErrors: Int, order: CompileOrder.Value)
|
||||||
final case class IncSetup(analysisMap: Map[File, Analysis], definesClass: DefinesClass, cacheDirectory: File)
|
final case class IncSetup(analysisMap: Map[File, Analysis], definesClass: DefinesClass, skip: Boolean, cacheDirectory: File)
|
||||||
final case class Compilers(scalac: AnalyzingCompiler, javac: JavaCompiler)
|
final case class Compilers(scalac: AnalyzingCompiler, javac: JavaCompiler)
|
||||||
|
|
||||||
def inputs(classpath: Seq[File], sources: Seq[File], outputDirectory: File, options: Seq[String], javacOptions: Seq[String], definesClass: DefinesClass, maxErrors: Int, order: CompileOrder.Value)(implicit compilers: Compilers, log: Logger): Inputs =
|
def inputs(classpath: Seq[File], sources: Seq[File], outputDirectory: File, options: Seq[String], javacOptions: Seq[String], definesClass: DefinesClass, maxErrors: Int, order: CompileOrder.Value)(implicit compilers: Compilers, log: Logger): Inputs =
|
||||||
|
|
@ -34,7 +34,7 @@ object Compiler
|
||||||
val classesDirectory = outputDirectory / "classes"
|
val classesDirectory = outputDirectory / "classes"
|
||||||
val cacheDirectory = outputDirectory / "cache"
|
val cacheDirectory = outputDirectory / "cache"
|
||||||
val augClasspath = classesDirectory.asFile +: classpath
|
val augClasspath = classesDirectory.asFile +: classpath
|
||||||
val incSetup = IncSetup(Map.empty, definesClass, cacheDirectory)
|
val incSetup = IncSetup(Map.empty, definesClass, false, cacheDirectory)
|
||||||
inputs(augClasspath, sources, classesDirectory, options, javacOptions, maxErrors, order)(compilers, incSetup, log)
|
inputs(augClasspath, sources, classesDirectory, options, javacOptions, maxErrors, order)(compilers, incSetup, log)
|
||||||
}
|
}
|
||||||
def inputs(classpath: Seq[File], sources: Seq[File], classesDirectory: File, options: Seq[String], javacOptions: Seq[String], maxErrors: Int, order: CompileOrder.Value)(implicit compilers: Compilers, incSetup: IncSetup, log: Logger): Inputs =
|
def inputs(classpath: Seq[File], sources: Seq[File], classesDirectory: File, options: Seq[String], javacOptions: Seq[String], maxErrors: Int, order: CompileOrder.Value)(implicit compilers: Compilers, incSetup: IncSetup, log: Logger): Inputs =
|
||||||
|
|
@ -104,7 +104,7 @@ object Compiler
|
||||||
import in.incSetup._
|
import in.incSetup._
|
||||||
|
|
||||||
val agg = new AggressiveCompile(cacheDirectory)
|
val agg = new AggressiveCompile(cacheDirectory)
|
||||||
agg(scalac, javac, sources, classpath, classesDirectory, options, javacOptions, analysisMap, definesClass, maxErrors, order)(log)
|
agg(scalac, javac, sources, classpath, classesDirectory, options, javacOptions, analysisMap, definesClass, maxErrors, order, skip)(log)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue