[Gradle] Fix configuration cache for cleanNativeDistributionCommonization
^KT-57482 Verification Pending
This commit is contained in:
committed by
Space Team
parent
c64a7068d9
commit
9afddb1a7a
+13
-2
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
+26
-10
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user