[BTA tests] Move GlobalCompiledProjectsCache to a separate file
^KT-61860 In Progress
This commit is contained in:
committed by
Space Team
parent
99e13318dc
commit
4facf5ffbc
+74
@@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
package org.jetbrains.kotlin.buildtools.api.tests.compilation.scenario
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.buildtools.api.CompilerExecutionStrategyConfiguration
|
||||||
|
import org.jetbrains.kotlin.buildtools.api.SourcesChanges
|
||||||
|
import org.jetbrains.kotlin.buildtools.api.jvm.IncrementalJvmCompilationConfiguration
|
||||||
|
import org.jetbrains.kotlin.buildtools.api.jvm.JvmCompilationConfiguration
|
||||||
|
import org.jetbrains.kotlin.buildtools.api.tests.compilation.model.DependencyScenarioDslCacheKey
|
||||||
|
import org.jetbrains.kotlin.buildtools.api.tests.compilation.model.Module
|
||||||
|
import java.nio.file.Files
|
||||||
|
import java.nio.file.Path
|
||||||
|
import java.util.*
|
||||||
|
import kotlin.io.path.copyToRecursively
|
||||||
|
import kotlin.io.path.isRegularFile
|
||||||
|
import kotlin.io.path.relativeTo
|
||||||
|
import kotlin.io.path.walk
|
||||||
|
|
||||||
|
private data class GlobalCompiledProjectsCacheKey(
|
||||||
|
val moduleKey: DependencyScenarioDslCacheKey,
|
||||||
|
val compilationOptionsModifier: ((JvmCompilationConfiguration) -> Unit)?,
|
||||||
|
val incrementalCompilationOptionsModifier: ((IncrementalJvmCompilationConfiguration<*>) -> Unit)?,
|
||||||
|
)
|
||||||
|
|
||||||
|
internal object GlobalCompiledProjectsCache {
|
||||||
|
private val globalTempDirectory = Files.createTempDirectory("compiled-test-projects-cache").apply {
|
||||||
|
toFile().deleteOnExit()
|
||||||
|
}
|
||||||
|
private val compiledProjectsCache = mutableMapOf<GlobalCompiledProjectsCacheKey, Pair<MutableSet<String>, Path>>()
|
||||||
|
|
||||||
|
fun getProjectFromCache(
|
||||||
|
module: Module,
|
||||||
|
strategyConfig: CompilerExecutionStrategyConfiguration,
|
||||||
|
compilationOptionsModifier: ((JvmCompilationConfiguration) -> Unit)?,
|
||||||
|
incrementalCompilationOptionsModifier: ((IncrementalJvmCompilationConfiguration<*>) -> Unit)?,
|
||||||
|
): ScenarioModuleImpl? {
|
||||||
|
val (initialOutputs, cachedBuildDirPath) = compiledProjectsCache[GlobalCompiledProjectsCacheKey(
|
||||||
|
module.scenarioDslCacheKey,
|
||||||
|
compilationOptionsModifier,
|
||||||
|
incrementalCompilationOptionsModifier
|
||||||
|
)] ?: return null
|
||||||
|
cachedBuildDirPath.copyToRecursively(module.buildDirectory, followLinks = false, overwrite = true)
|
||||||
|
return ScenarioModuleImpl(module, initialOutputs, strategyConfig, compilationOptionsModifier, incrementalCompilationOptionsModifier)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun putProjectIntoCache(
|
||||||
|
module: Module,
|
||||||
|
strategyConfig: CompilerExecutionStrategyConfiguration,
|
||||||
|
compilationOptionsModifier: ((JvmCompilationConfiguration) -> Unit)?,
|
||||||
|
incrementalCompilationOptionsModifier: ((IncrementalJvmCompilationConfiguration<*>) -> Unit)?,
|
||||||
|
): ScenarioModuleImpl {
|
||||||
|
module.compileIncrementally(
|
||||||
|
SourcesChanges.Unknown,
|
||||||
|
strategyConfig,
|
||||||
|
compilationConfigAction = { compilationOptionsModifier?.invoke(it) },
|
||||||
|
incrementalCompilationConfigAction = { incrementalCompilationOptionsModifier?.invoke(it) }
|
||||||
|
)
|
||||||
|
val initialOutputs = mutableSetOf<String>()
|
||||||
|
for (file in module.outputDirectory.walk()) {
|
||||||
|
if (!file.isRegularFile()) continue
|
||||||
|
initialOutputs.add(file.relativeTo(module.outputDirectory).toString())
|
||||||
|
}
|
||||||
|
val moduleCacheDirectory = globalTempDirectory.resolve(UUID.randomUUID().toString())
|
||||||
|
module.buildDirectory.copyToRecursively(moduleCacheDirectory, followLinks = false, overwrite = false)
|
||||||
|
compiledProjectsCache[GlobalCompiledProjectsCacheKey(
|
||||||
|
module.scenarioDslCacheKey,
|
||||||
|
compilationOptionsModifier,
|
||||||
|
incrementalCompilationOptionsModifier
|
||||||
|
)] = Pair(initialOutputs, moduleCacheDirectory)
|
||||||
|
return ScenarioModuleImpl(module, initialOutputs, strategyConfig, compilationOptionsModifier, incrementalCompilationOptionsModifier)
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
-59
@@ -16,9 +16,9 @@ import java.nio.file.Path
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.io.path.*
|
import kotlin.io.path.*
|
||||||
|
|
||||||
private class ScenarioModuleImpl(
|
internal class ScenarioModuleImpl(
|
||||||
val module: Module,
|
internal val module: Module,
|
||||||
val outputs: MutableSet<String>,
|
private val outputs: MutableSet<String>,
|
||||||
private val strategyConfig: CompilerExecutionStrategyConfiguration,
|
private val strategyConfig: CompilerExecutionStrategyConfiguration,
|
||||||
private val compilationOptionsModifier: ((JvmCompilationConfiguration) -> Unit)?,
|
private val compilationOptionsModifier: ((JvmCompilationConfiguration) -> Unit)?,
|
||||||
private val incrementalCompilationOptionsModifier: ((IncrementalJvmCompilationConfiguration<*>) -> Unit)?,
|
private val incrementalCompilationOptionsModifier: ((IncrementalJvmCompilationConfiguration<*>) -> Unit)?,
|
||||||
@@ -59,7 +59,7 @@ private class ScenarioModuleImpl(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
var sourcesChanges = SourcesChanges.Known(emptyList(), emptyList())
|
private var sourcesChanges = SourcesChanges.Known(emptyList(), emptyList())
|
||||||
|
|
||||||
override fun compile(
|
override fun compile(
|
||||||
forceOutput: LogLevel?,
|
forceOutput: LogLevel?,
|
||||||
@@ -100,59 +100,4 @@ private class ScenarioDsl(
|
|||||||
|
|
||||||
fun BaseCompilationTest.scenario(strategyConfig: CompilerExecutionStrategyConfiguration, action: Scenario.() -> Unit) {
|
fun BaseCompilationTest.scenario(strategyConfig: CompilerExecutionStrategyConfiguration, action: Scenario.() -> Unit) {
|
||||||
action(ScenarioDsl(Project(strategyConfig, workingDirectory), strategyConfig))
|
action(ScenarioDsl(Project(strategyConfig, workingDirectory), strategyConfig))
|
||||||
}
|
|
||||||
|
|
||||||
private data class GlobalCompiledProjectsCacheKey(
|
|
||||||
val moduleKey: DependencyScenarioDslCacheKey,
|
|
||||||
val compilationOptionsModifier: ((JvmCompilationConfiguration) -> Unit)?,
|
|
||||||
val incrementalCompilationOptionsModifier: ((IncrementalJvmCompilationConfiguration<*>) -> Unit)?,
|
|
||||||
)
|
|
||||||
|
|
||||||
private object GlobalCompiledProjectsCache {
|
|
||||||
private val globalTempDirectory = Files.createTempDirectory("compiled-test-projects-cache").apply {
|
|
||||||
toFile().deleteOnExit()
|
|
||||||
}
|
|
||||||
private val compiledProjectsCache = mutableMapOf<GlobalCompiledProjectsCacheKey, Pair<MutableSet<String>, Path>>()
|
|
||||||
|
|
||||||
fun getProjectFromCache(
|
|
||||||
module: Module,
|
|
||||||
strategyConfig: CompilerExecutionStrategyConfiguration,
|
|
||||||
compilationOptionsModifier: ((JvmCompilationConfiguration) -> Unit)?,
|
|
||||||
incrementalCompilationOptionsModifier: ((IncrementalJvmCompilationConfiguration<*>) -> Unit)?,
|
|
||||||
): ScenarioModuleImpl? {
|
|
||||||
val (initialOutputs, cachedBuildDirPath) = compiledProjectsCache[GlobalCompiledProjectsCacheKey(
|
|
||||||
module.scenarioDslCacheKey,
|
|
||||||
compilationOptionsModifier,
|
|
||||||
incrementalCompilationOptionsModifier
|
|
||||||
)] ?: return null
|
|
||||||
cachedBuildDirPath.copyToRecursively(module.buildDirectory, followLinks = false, overwrite = true)
|
|
||||||
return ScenarioModuleImpl(module, initialOutputs, strategyConfig, compilationOptionsModifier, incrementalCompilationOptionsModifier)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun putProjectIntoCache(
|
|
||||||
module: Module,
|
|
||||||
strategyConfig: CompilerExecutionStrategyConfiguration,
|
|
||||||
compilationOptionsModifier: ((JvmCompilationConfiguration) -> Unit)?,
|
|
||||||
incrementalCompilationOptionsModifier: ((IncrementalJvmCompilationConfiguration<*>) -> Unit)?,
|
|
||||||
): ScenarioModuleImpl {
|
|
||||||
module.compileIncrementally(
|
|
||||||
SourcesChanges.Unknown,
|
|
||||||
strategyConfig,
|
|
||||||
compilationConfigAction = { compilationOptionsModifier?.invoke(it) },
|
|
||||||
incrementalCompilationConfigAction = { incrementalCompilationOptionsModifier?.invoke(it) }
|
|
||||||
)
|
|
||||||
val initialOutputs = mutableSetOf<String>()
|
|
||||||
for (file in module.outputDirectory.walk()) {
|
|
||||||
if (!file.isRegularFile()) continue
|
|
||||||
initialOutputs.add(file.relativeTo(module.outputDirectory).toString())
|
|
||||||
}
|
|
||||||
val moduleCacheDirectory = globalTempDirectory.resolve(UUID.randomUUID().toString())
|
|
||||||
module.buildDirectory.copyToRecursively(moduleCacheDirectory, followLinks = false, overwrite = false)
|
|
||||||
compiledProjectsCache[GlobalCompiledProjectsCacheKey(
|
|
||||||
module.scenarioDslCacheKey,
|
|
||||||
compilationOptionsModifier,
|
|
||||||
incrementalCompilationOptionsModifier
|
|
||||||
)] = Pair(initialOutputs, moduleCacheDirectory)
|
|
||||||
return ScenarioModuleImpl(module, initialOutputs, strategyConfig, compilationOptionsModifier, incrementalCompilationOptionsModifier)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user