diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt index 896c8dc559a..c199d6fd5a1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt @@ -18,9 +18,11 @@ abstract class NodeJsSetupTask : DefaultTask() { @Transient private val settings = NodeJsRootPlugin.apply(project.rootProject) private val env by lazy { settings.requireConfigured() } - private val archiveOperations = ArchiveOperationsCompat(project) + private val shouldDownload = settings.download + private val archiveOperations = ArchiveOperationsCompat(project) + @get:Inject internal open val fs: FileSystemOperations get() = error("Should be injected") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnSetupTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnSetupTask.kt index 20362c5bc83..ea16927b7e0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnSetupTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnSetupTask.kt @@ -7,25 +7,32 @@ package org.jetbrains.kotlin.gradle.targets.js.yarn import org.gradle.api.DefaultTask import org.gradle.api.artifacts.Configuration +import org.gradle.api.file.FileSystemOperations import org.gradle.api.provider.Provider import org.gradle.api.tasks.* import org.jetbrains.kotlin.gradle.logging.kotlinInfo import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.utils.ArchiveOperationsCompat -import org.jetbrains.kotlin.gradle.utils.FileSystemOperationsCompat import org.jetbrains.kotlin.statistics.metrics.NumericalMetrics import java.io.File import java.net.URI +import javax.inject.Inject @CacheableTask open class YarnSetupTask : DefaultTask() { @Transient private val settings = project.yarn private val env by lazy { settings.requireConfigured() } - private val fileSystemOperations = FileSystemOperationsCompat(project) + + private val shouldDownload = settings.download + private val archiveOperations = ArchiveOperationsCompat(project) + @get:Inject + internal open val fs: FileSystemOperations + get() = error("Should be injected") + @Suppress("MemberVisibilityCanBePrivate") val downloadUrl @Input get() = env.downloadUrl @@ -73,6 +80,12 @@ open class YarnSetupTask : DefaultTask() { dist } + init { + onlyIf { + shouldDownload + } + } + @TaskAction fun setup() { logger.kotlinInfo("Using yarn distribution from '$yarnDist'") @@ -82,7 +95,7 @@ open class YarnSetupTask : DefaultTask() { private fun extract(archive: File, destination: File) { val dirInTar = archive.name.removeSuffix(".tar.gz") - fileSystemOperations.copy { + fs.copy { it.from(archiveOperations.tarTree(archive)) it.into(destination) it.includeEmptyDirs = false