[Gradle] Fix configuration cache for cleanNativeDistributionCommonization

^KT-57482 Verification Pending
This commit is contained in:
Anton Lakotka
2023-04-25 16:16:52 +00:00
committed by Space Team
parent c64a7068d9
commit 9afddb1a7a
2 changed files with 39 additions and 12 deletions
@@ -11,6 +11,8 @@ import org.jetbrains.kotlin.gradle.report.BuildReportType
import org.jetbrains.kotlin.gradle.testbase.*
import org.jetbrains.kotlin.konan.target.HostManager
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.io.TempDir
import java.nio.file.Path
@DisplayName("Configuration cache")
class ConfigurationCacheIT : AbstractConfigurationCacheIT() {
@@ -126,14 +128,23 @@ class ConfigurationCacheIT : AbstractConfigurationCacheIT() {
maxVersion = TestVersions.Gradle.G_8_1
)
@GradleTest
fun testCommonizer(gradleVersion: GradleVersion) {
fun testCommonizer(gradleVersion: GradleVersion, @TempDir konanHome: Path) {
project("native-configuration-cache", gradleVersion) {
// results of :commonizeNativeDistribution is not cleanable so just check if it works with configuration cache on first run
build(
":commonizeNativeDistribution",
) {
assertOutputContains("0 problems were found storing the configuration cache.")
}
// Override kotlin native home location to be able to run clean native distribution commonization task
// since by default it is global location on host
val buildOptions = defaultBuildOptions.copy(
freeArgs = listOf("-Porg.jetbrains.kotlin.native.home=$konanHome")
)
build(":cleanNativeDistributionCommonization", buildOptions = buildOptions) {
assertOutputContains("0 problems were found storing the configuration cache.")
}
testConfigurationCacheOf(":lib:commonizeCInterop")
}
}
@@ -8,6 +8,10 @@ package org.jetbrains.kotlin.gradle.targets.native.internal
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.file.FileSystemOperations
import org.gradle.api.provider.Property
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.compilerRunner.maybeCreateCommonizerClasspathConfiguration
import org.jetbrains.kotlin.gradle.internal.isInIdeaSync
@@ -18,6 +22,8 @@ import org.jetbrains.kotlin.gradle.plugin.ide.ideaImportDependsOn
import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
import org.jetbrains.kotlin.gradle.tasks.dependsOn
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
import java.io.File
import javax.inject.Inject
internal val Project.isCInteropCommonizationEnabled: Boolean get() = PropertiesProvider(this).enableCInteropCommonization
@@ -140,7 +146,7 @@ internal val Project.commonizeNativeDistributionTask: TaskProvider<NativeDistrib
)
}
internal val Project.cleanNativeDistributionCommonizerTask: TaskProvider<DefaultTask>?
internal val Project.cleanNativeDistributionCommonizerTask: TaskProvider<CleanNativeDistributionCommonizerTask>?
get() {
val commonizeNativeDistributionTask = commonizeNativeDistributionTask ?: return null
return rootProject.locateOrRegisterTask(
@@ -149,15 +155,25 @@ internal val Project.cleanNativeDistributionCommonizerTask: TaskProvider<Default
group = "interop"
description = "Deletes all previously commonized klib's from the Kotlin/Native distribution"
val commonizerDirectory = commonizeNativeDistributionTask.map { it.rootOutputDirectory }
outputs.dir(commonizerDirectory)
doFirst {
NativeDistributionCommonizerLock(commonizerDirectory.get()).withLock { lockFile ->
val files = commonizerDirectory.get().listFiles().orEmpty().toSet() - lockFile
delete(*files.toTypedArray())
}
}
commonizerDirectory.set(commonizeNativeDistributionTask.map { it.rootOutputDirectory })
}
)
}
internal abstract class CleanNativeDistributionCommonizerTask : DefaultTask() {
@get:Inject
abstract val fileSystemOperations: FileSystemOperations
@get:OutputDirectory
abstract val commonizerDirectory: Property<File>
@TaskAction
fun action() {
NativeDistributionCommonizerLock(commonizerDirectory.get()).withLock { lockFile ->
val files = commonizerDirectory.get().listFiles().orEmpty().toSet() - lockFile
fileSystemOperations.delete {
it.delete(files)
}
}
}
}