[Gradle, JS] Use FileSystemOperations only when it's available

FileSystemOperations is available since Gradle 6.0. ArchiveOperations usage is also refactored. Integration tests Gradle version requirements are reverted.
上级 0e29a9df
...@@ -12,9 +12,6 @@ import org.junit.Test ...@@ -12,9 +12,6 @@ import org.junit.Test
import kotlin.test.assertTrue import kotlin.test.assertTrue
class DukatIntegrationIT : BaseGradleIT() { class DukatIntegrationIT : BaseGradleIT() {
override val defaultGradleVersion: GradleVersionRequired
get() = GradleVersionRequired.AtLeast("6.0")
@Test @Test
fun testSeparateDukatKotlinDslRootDependencies() { fun testSeparateDukatKotlinDslRootDependencies() {
testSeparateDukat( testSeparateDukat(
......
...@@ -305,9 +305,6 @@ abstract class AbstractKotlin2JsGradlePluginIT(val irBackend: Boolean) : BaseGra ...@@ -305,9 +305,6 @@ abstract class AbstractKotlin2JsGradlePluginIT(val irBackend: Boolean) : BaseGra
jsCompilerType = if (irBackend) KotlinJsCompilerType.IR else KotlinJsCompilerType.LEGACY jsCompilerType = if (irBackend) KotlinJsCompilerType.IR else KotlinJsCompilerType.LEGACY
) )
override val defaultGradleVersion: GradleVersionRequired
get() = GradleVersionRequired.AtLeast("6.0")
protected fun CompiledProject.checkIrCompilationMessage() { protected fun CompiledProject.checkIrCompilationMessage() {
if (irBackend) { if (irBackend) {
assertContains(USING_JS_IR_BACKEND_MESSAGE) assertContains(USING_JS_IR_BACKEND_MESSAGE)
......
...@@ -16,9 +16,6 @@ class KotlinJsIrLibraryGradlePluginIT : BaseGradleIT() { ...@@ -16,9 +16,6 @@ class KotlinJsIrLibraryGradlePluginIT : BaseGradleIT() {
jsCompilerType = KotlinJsCompilerType.IR jsCompilerType = KotlinJsCompilerType.IR
) )
override val defaultGradleVersion: GradleVersionRequired
get() = GradleVersionRequired.AtLeast("6.0")
@Test @Test
fun testSimpleJsBinaryLibrary() { fun testSimpleJsBinaryLibrary() {
val project = Project("simple-js-library") val project = Project("simple-js-library")
......
...@@ -14,7 +14,7 @@ import org.junit.Test ...@@ -14,7 +14,7 @@ import org.junit.Test
class CleanDataTaskIT : BaseGradleIT() { class CleanDataTaskIT : BaseGradleIT() {
override val defaultGradleVersion: GradleVersionRequired override val defaultGradleVersion: GradleVersionRequired
get() = GradleVersionRequired.AtLeast("6.0") get() = GradleVersionRequired.AtLeast("5.5.1")
@Test @Test
fun testDownloadedFolderDeletion() { fun testDownloadedFolderDeletion() {
......
...@@ -2,12 +2,12 @@ package org.jetbrains.kotlin.gradle.targets.js.nodejs ...@@ -2,12 +2,12 @@ package org.jetbrains.kotlin.gradle.targets.js.nodejs
import org.gradle.api.DefaultTask import org.gradle.api.DefaultTask
import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Configuration
import org.gradle.api.file.ArchiveOperations
import org.gradle.api.file.FileSystemOperations
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
import org.gradle.api.tasks.* import org.gradle.api.tasks.*
import org.jetbrains.kotlin.gradle.logging.kotlinInfo import org.jetbrains.kotlin.gradle.logging.kotlinInfo
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
import org.jetbrains.kotlin.gradle.utils.ArchiveOperationsCompat
import org.jetbrains.kotlin.gradle.utils.FileSystemOperationsCompat
import org.jetbrains.kotlin.statistics.metrics.NumericalMetrics import org.jetbrains.kotlin.statistics.metrics.NumericalMetrics
import java.io.File import java.io.File
import java.net.URI import java.net.URI
...@@ -16,13 +16,8 @@ import java.net.URI ...@@ -16,13 +16,8 @@ import java.net.URI
open class NodeJsSetupTask : DefaultTask() { open class NodeJsSetupTask : DefaultTask() {
private val settings = NodeJsRootPlugin.apply(project.rootProject) private val settings = NodeJsRootPlugin.apply(project.rootProject)
private val env by lazy { settings.requireConfigured() } private val env by lazy { settings.requireConfigured() }
private val fs = services.get(FileSystemOperations::class.java) private val fs = FileSystemOperationsCompat(project)
private val archives: Any? = try { private val archiveOperations = ArchiveOperationsCompat(project)
services.get(ArchiveOperations::class.java)
} catch (e: NoClassDefFoundError) {
// Gradle version < 6.6
null
}
val ivyDependency: String val ivyDependency: String
@Input get() = env.ivyDependency @Input get() = env.ivyDependency
...@@ -89,22 +84,12 @@ open class NodeJsSetupTask : DefaultTask() { ...@@ -89,22 +84,12 @@ open class NodeJsSetupTask : DefaultTask() {
when { when {
archive.name.endsWith("zip") -> fs.copy { archive.name.endsWith("zip") -> fs.copy {
val from = if (archives != null) { it.from(archiveOperations.zipTree(archive))
(archives as ArchiveOperations).zipTree(archive)
} else {
project.zipTree(archive)
}
it.from(from)
it.into(destination) it.into(destination)
} }
else -> { else -> {
fs.copy { fs.copy {
val from = if (archives != null) { it.from(archiveOperations.tarTree(archive))
(archives as ArchiveOperations).tarTree(archive)
} else {
project.tarTree(archive)
}
it.from(from)
it.into(destination) it.into(destination)
} }
} }
......
...@@ -6,21 +6,20 @@ ...@@ -6,21 +6,20 @@
package org.jetbrains.kotlin.gradle.targets.js.npm package org.jetbrains.kotlin.gradle.targets.js.npm
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.file.ArchiveOperations
import org.gradle.api.file.FileSystemOperations
import org.jetbrains.kotlin.gradle.targets.js.JS import org.jetbrains.kotlin.gradle.targets.js.JS
import org.jetbrains.kotlin.gradle.targets.js.JS_MAP import org.jetbrains.kotlin.gradle.targets.js.JS_MAP
import org.jetbrains.kotlin.gradle.targets.js.META_JS import org.jetbrains.kotlin.gradle.targets.js.META_JS
import org.jetbrains.kotlin.gradle.targets.js.ir.KLIB_TYPE import org.jetbrains.kotlin.gradle.targets.js.ir.KLIB_TYPE
import org.jetbrains.kotlin.gradle.utils.ArchiveOperationsCompat
import org.jetbrains.kotlin.gradle.utils.FileSystemOperationsCompat
import java.io.File import java.io.File
/** /**
* Creates fake NodeJS module directory from given gradle [dependency]. * Creates fake NodeJS module directory from given gradle [dependency].
*/ */
internal class GradleNodeModuleBuilder( internal class GradleNodeModuleBuilder(
val project: Project, val fs: FileSystemOperationsCompat,
val fs: FileSystemOperations, val archiveOperations: ArchiveOperationsCompat,
val archiveOperations: Any?,
val moduleName: String, val moduleName: String,
val moduleVersion: String, val moduleVersion: String,
val srcFiles: Collection<File>, val srcFiles: Collection<File>,
...@@ -34,12 +33,7 @@ internal class GradleNodeModuleBuilder( ...@@ -34,12 +33,7 @@ internal class GradleNodeModuleBuilder(
when { when {
isKotlinJsRuntimeFile(srcFile) -> files.add(srcFile) isKotlinJsRuntimeFile(srcFile) -> files.add(srcFile)
srcFile.isCompatibleArchive -> { srcFile.isCompatibleArchive -> {
val archiveFiles = if (archiveOperations != null) { archiveOperations.zipTree(srcFile).forEach { innerFile ->
(archiveOperations as ArchiveOperations).zipTree(srcFile)
} else {
project.zipTree(srcFile)
}
archiveFiles.forEach { innerFile ->
when { when {
innerFile.name == NpmProject.PACKAGE_JSON -> srcPackageJsonFile = innerFile innerFile.name == NpmProject.PACKAGE_JSON -> srcPackageJsonFile = innerFile
isKotlinJsRuntimeFile(innerFile) -> files.add(innerFile) isKotlinJsRuntimeFile(innerFile) -> files.add(innerFile)
......
...@@ -5,10 +5,9 @@ ...@@ -5,10 +5,9 @@
package org.jetbrains.kotlin.gradle.targets.js.npm package org.jetbrains.kotlin.gradle.targets.js.npm
import org.gradle.api.file.ArchiveOperations
import org.gradle.api.file.FileSystemOperations
import org.gradle.api.internal.project.ProjectInternal
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
import org.jetbrains.kotlin.gradle.utils.ArchiveOperationsCompat
import org.jetbrains.kotlin.gradle.utils.FileSystemOperationsCompat
import java.io.File import java.io.File
/** /**
...@@ -18,20 +17,15 @@ internal class GradleNodeModulesCache(nodeJs: NodeJsRootExtension) : AbstractNod ...@@ -18,20 +17,15 @@ internal class GradleNodeModulesCache(nodeJs: NodeJsRootExtension) : AbstractNod
@Transient @Transient
private val project = nodeJs.rootProject private val project = nodeJs.rootProject
private val fs = (project as ProjectInternal).services.get(FileSystemOperations::class.java) private val fs = FileSystemOperationsCompat(project)
private val archiveOperations: Any? = try { private val archiveOperations = ArchiveOperationsCompat(project)
(project as ProjectInternal).services.get(ArchiveOperations::class.java)
} catch (e: NoClassDefFoundError) {
// Gradle version < 6.6
null
}
override fun buildImportedPackage( override fun buildImportedPackage(
name: String, name: String,
version: String, version: String,
file: File file: File
): File? { ): File? {
val module = GradleNodeModuleBuilder(project, fs, archiveOperations, name, version, listOf(file), dir) val module = GradleNodeModuleBuilder(fs, archiveOperations, name, version, listOf(file), dir)
module.visitArtifacts() module.visitArtifacts()
return module.rebuild() return module.rebuild()
} }
......
...@@ -17,9 +17,16 @@ ...@@ -17,9 +17,16 @@
package org.jetbrains.kotlin.gradle.utils package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.GradleException import org.gradle.api.GradleException
import org.gradle.api.Project
import org.gradle.api.Task import org.gradle.api.Task
import org.gradle.api.file.ArchiveOperations
import org.gradle.api.file.CopySpec
import org.gradle.api.file.FileSystemOperations
import org.gradle.api.file.FileTree
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.tasks.TaskInputs import org.gradle.api.tasks.TaskInputs
import org.gradle.api.tasks.TaskOutputs import org.gradle.api.tasks.TaskOutputs
import org.gradle.api.tasks.WorkResult
import org.gradle.api.tasks.bundling.AbstractArchiveTask import org.gradle.api.tasks.bundling.AbstractArchiveTask
import org.gradle.util.GradleVersion import org.gradle.util.GradleVersion
import java.io.File import java.io.File
...@@ -64,4 +71,43 @@ internal fun checkGradleCompatibility( ...@@ -64,4 +71,43 @@ internal fun checkGradleCompatibility(
} }
internal val AbstractArchiveTask.archivePathCompatible: File internal val AbstractArchiveTask.archivePathCompatible: File
get() = archiveFile.get().asFile get() = archiveFile.get().asFile
\ No newline at end of file
internal class ArchiveOperationsCompat(@Transient private val project: Project) {
private val archiveOperations: Any? = try {
(project as ProjectInternal).services.get(ArchiveOperations::class.java)
} catch (e: NoClassDefFoundError) {
// Gradle version < 6.6
null
}
fun zipTree(obj: Any): FileTree {
return when (archiveOperations) {
is ArchiveOperations -> archiveOperations.zipTree(obj)
else -> project.zipTree(obj)
}
}
fun tarTree(obj: Any): FileTree {
return when (archiveOperations) {
is ArchiveOperations -> archiveOperations.tarTree(obj)
else -> project.tarTree(obj)
}
}
}
internal class FileSystemOperationsCompat(@Transient private val project: Project) {
private val fileSystemOperations: Any? = try {
(project as ProjectInternal).services.get(FileSystemOperations::class.java)
} catch (e: NoClassDefFoundError) {
// Gradle version < 6.0
null
}
fun copy(action: (CopySpec) -> Unit): WorkResult? {
return when (fileSystemOperations) {
is FileSystemOperations -> fileSystemOperations.copy(action)
else -> project.copy(action)
}
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册