From a0e6fb03f0288f0bff12be80c402d8a62b5b045a Mon Sep 17 00:00:00 2001 From: Alexander Likhachev Date: Wed, 6 Oct 2021 21:01:25 +0300 Subject: [PATCH] [Gradle] Do not register compilation outputs in clean task Calculations of compilation outputs implicitly requires compile task configuration to execute `clean` task. This implicit configuration works unstable in parallel builds. We probably fine with the fact that outputs that are configured to be outside of build directory will not be cleaned by `clean` task #KT-48046 Fixed --- .../kotlin/gradle/NewMultiplatformIT.kt | 31 ------------------- .../gradle/plugin/KotlinTargetConfigurator.kt | 7 ----- 2 files changed, 38 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index 37220308576..e9a57c8edd7 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -1416,37 +1416,6 @@ class NewMultiplatformIT : BaseGradleIT() { } } - - @Test - fun testStaleOutputCleanup() = with(Project("new-mpp-lib-with-tests", gradleVersion)) { - setupWorkingDir() - // Check that output directories of Kotlin compilations are registered for Gradle stale outputs cleanup. - // One way to check that is to run a Gradle build with no Gradle history (no .gradle directory) and see that the compilation - // output directories are cleaned up, even those outside the project's buildDir - - gradleBuildScript().appendText( - "\n" + """ - kotlin.targets.js.compilations.main.output.classesDirs.from("foo") // should affect Gradle's behavior wrt stale output cleanup - task('foo') { - outputs.dir("foo") - doFirst { - println 'hello' - file("foo/2.txt").text = System.currentTimeMillis() - } - } - """.trimIndent() - ) - - val staleFilePath = "foo/1.txt" - projectDir.resolve(staleFilePath).run { parentFile.mkdirs(); createNewFile() } - - build("foo") { - assertSuccessful() - assertNoSuchFile(staleFilePath) - assertFileExists("foo/2.txt") - } - } - @Test fun testDefaultSourceSetsDsl() = with(Project("sample-lib", gradleVersion, "new-mpp-lib-and-app")) { setupWorkingDir() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt index 6fe89120d23..d1b63949dac 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt @@ -71,12 +71,6 @@ abstract class AbstractKotlinTargetConfigurator protected val createTestCompilation: Boolean ) : KotlinTargetConfigurator { - private fun Project.registerOutputsForStaleOutputCleanup(kotlinCompilation: KotlinCompilation<*>) { - tasks.withType().named(LifecycleBasePlugin.CLEAN_TASK_NAME).configure { cleanTask -> - cleanTask.delete(kotlinCompilation.output.allOutputs) - } - } - protected open fun setupCompilationDependencyFiles(compilation: KotlinCompilation) { val project = compilation.target.project @@ -91,7 +85,6 @@ abstract class AbstractKotlinTargetConfigurator val main = target.compilations.create(KotlinCompilation.MAIN_COMPILATION_NAME) target.compilations.all { - project.registerOutputsForStaleOutputCleanup(it) setupCompilationDependencyFiles(it) }