mirror of https://github.com/sbt/sbt.git
cleanup cache-related code, aiming for unknown cause of #292
This commit is contained in:
parent
a0300cd3b3
commit
d146c7f84c
|
|
@ -31,6 +31,8 @@ package sbt
|
|||
|
||||
object Defaults extends BuildCommon
|
||||
{
|
||||
final val CacheDirectoryName = "cache"
|
||||
|
||||
def configSrcSub(key: SettingKey[File]): Initialize[File] = (key in ThisScope.copy(config = Global), configuration) { (src, conf) => src / nameForSrc(conf.name) }
|
||||
def nameForSrc(config: String) = if(config == "compile") "main" else config
|
||||
def prefix(config: String) = if(config == "compile") "" else config + "-"
|
||||
|
|
@ -131,7 +133,7 @@ object Defaults extends BuildCommon
|
|||
sourceDirectory <<= baseDirectory / "src",
|
||||
sourceManaged <<= crossTarget / "src_managed",
|
||||
resourceManaged <<= crossTarget / "resource_managed",
|
||||
cacheDirectory <<= (target, thisProject)(_ / "cache" / _.id)
|
||||
cacheDirectory <<= (crossTarget, thisProject)(_ / CacheDirectoryName / _.id / "global")
|
||||
)
|
||||
|
||||
lazy val configPaths = sourceConfigPaths ++ resourceConfigPaths ++ outputConfigPaths
|
||||
|
|
@ -168,7 +170,7 @@ object Defaults extends BuildCommon
|
|||
resources <<= Classpaths.concat(managedResources, unmanagedResources)
|
||||
)
|
||||
lazy val outputConfigPaths = Seq(
|
||||
cacheDirectory <<= (cacheDirectory, configuration) { _ / _.name },
|
||||
cacheDirectory <<= (crossTarget, thisProject, configuration) { _ / CacheDirectoryName / _.id / _.name },
|
||||
classDirectory <<= (crossTarget, configuration) { (outDir, conf) => outDir / (prefix(conf.name) + "classes") },
|
||||
docDirectory <<= (crossTarget, configuration) { (outDir, conf) => outDir / (prefix(conf.name) + "api") }
|
||||
)
|
||||
|
|
@ -189,8 +191,7 @@ object Defaults extends BuildCommon
|
|||
scalaVersion in GlobalScope <<= appConfiguration( _.provider.scalaProvider.version),
|
||||
scalaBinaryVersion <<= scalaVersion(v => binaryVersion(v, "2.10")),
|
||||
crossScalaVersions in GlobalScope <<= Seq(scalaVersion).join,
|
||||
crossTarget <<= (target, scalaBinaryVersion, sbtBinaryVersion, sbtPlugin, crossPaths)(makeCrossTarget),
|
||||
cacheDirectory <<= (crossTarget, thisProject)(_ / "cache" / _.id)
|
||||
crossTarget <<= (target, scalaBinaryVersion, sbtBinaryVersion, sbtPlugin, crossPaths)(makeCrossTarget)
|
||||
)
|
||||
def makeCrossTarget(t: File, sv: String, sbtv: String, plugin: Boolean, cross: Boolean): File =
|
||||
{
|
||||
|
|
@ -396,6 +397,10 @@ object Defaults extends BuildCommon
|
|||
else
|
||||
base.configurations
|
||||
def pairID[A,B] = (a: A, b: B) => (a,b)
|
||||
|
||||
def perTaskCache(key: TaskKey[_]): Setting[File] =
|
||||
cacheDirectory ~= { _ / ("for_" + key.key.label) }
|
||||
|
||||
def packageTasks(key: TaskKey[File], mappingsTask: Initialize[Task[Seq[(File,String)]]]) =
|
||||
inTask(key)( Seq(
|
||||
key in TaskGlobal <<= packageTask,
|
||||
|
|
@ -403,7 +408,7 @@ object Defaults extends BuildCommon
|
|||
mappings <<= mappingsTask,
|
||||
packagedArtifact <<= (artifact, key) map pairID,
|
||||
artifact <<= artifactSetting,
|
||||
cacheDirectory <<= cacheDirectory / key.key.label,
|
||||
perTaskCache(key),
|
||||
artifactPath <<= artifactPathSetting(artifact)
|
||||
))
|
||||
def packageTask: Initialize[Task[File]] =
|
||||
|
|
@ -458,7 +463,7 @@ object Defaults extends BuildCommon
|
|||
}
|
||||
|
||||
def docSetting(key: TaskKey[File]): Seq[Setting[_]] = inTask(key)(compileInputsSettings ++ Seq(
|
||||
cacheDirectory ~= (_ / key.key.label),
|
||||
perTaskCache(key),
|
||||
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
|
||||
key in TaskGlobal <<= (cacheDirectory, compileInputs, target, configuration, streams) map { (cache, in, out, config, s) =>
|
||||
|
|
@ -502,7 +507,7 @@ object Defaults extends BuildCommon
|
|||
def compileTask = (compileInputs, streams) map { (i,s) => Compiler(i,s.log) }
|
||||
def compileIncSetupTask =
|
||||
(dependencyClasspath, cacheDirectory, skip in compile, definesClass) map { (cp, cacheDir, skip, definesC) =>
|
||||
Compiler.IncSetup(analysisMap(cp), definesC, skip, cacheDir / "compile")
|
||||
Compiler.IncSetup(analysisMap(cp), definesC, skip, cacheDir / "inc_compile")
|
||||
}
|
||||
def compileInputsSettings: Seq[Setting[_]] = {
|
||||
val optionsPair = TaskKey.local[(Seq[String], Seq[String])]
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ final class CompileConfiguration(val sources: Seq[File], val classpath: Seq[File
|
|||
val previousAnalysis: Analysis, val previousSetup: Option[CompileSetup], val currentSetup: CompileSetup, val getAnalysis: File => Option[Analysis], val definesClass: DefinesClass,
|
||||
val maxErrors: Int, val compiler: AnalyzingCompiler, val javac: JavaCompiler)
|
||||
|
||||
class AggressiveCompile(cacheDirectory: File)
|
||||
class AggressiveCompile(cacheFile: 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, skip: Boolean = false)(implicit log: Logger): Analysis =
|
||||
{
|
||||
|
|
@ -106,7 +106,7 @@ class AggressiveCompile(cacheDirectory: File)
|
|||
options.dropWhile(_ != CompilerArguments.BootClasspathOption).drop(1).take(1).headOption.toList.flatMap(IO.parseClasspath)
|
||||
|
||||
import AnalysisFormats._
|
||||
val store = AggressiveCompile.staticCache(cacheDirectory, AnalysisStore.sync(AnalysisStore.cached(FileBasedStore(cacheDirectory))))
|
||||
val store = AggressiveCompile.staticCache(cacheFile, AnalysisStore.sync(AnalysisStore.cached(FileBasedStore(cacheFile))))
|
||||
}
|
||||
private object AggressiveCompile
|
||||
{
|
||||
|
|
|
|||
|
|
@ -25,16 +25,17 @@ object Compiler
|
|||
|
||||
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 IncSetup(analysisMap: Map[File, Analysis], definesClass: DefinesClass, skip: Boolean, cacheDirectory: File)
|
||||
final case class IncSetup(analysisMap: Map[File, Analysis], definesClass: DefinesClass, skip: Boolean, cacheFile: File)
|
||||
final case class Compilers(scalac: AnalyzingCompiler, javac: JavaCompiler)
|
||||
|
||||
@deprecated("Use the other inputs variant.", "0.12.0")
|
||||
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 =
|
||||
{
|
||||
import Path._
|
||||
val classesDirectory = outputDirectory / "classes"
|
||||
val cacheDirectory = outputDirectory / "cache"
|
||||
val cacheFile = outputDirectory / "cache_old_style"
|
||||
val augClasspath = classesDirectory.asFile +: classpath
|
||||
val incSetup = IncSetup(Map.empty, definesClass, false, cacheDirectory)
|
||||
val incSetup = IncSetup(Map.empty, definesClass, false, cacheFile)
|
||||
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 =
|
||||
|
|
@ -103,7 +104,7 @@ object Compiler
|
|||
import in.config._
|
||||
import in.incSetup._
|
||||
|
||||
val agg = new AggressiveCompile(cacheDirectory)
|
||||
val agg = new AggressiveCompile(cacheFile)
|
||||
agg(scalac, javac, sources, classpath, classesDirectory, options, javacOptions, analysisMap, definesClass, maxErrors, order, skip)(log)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue