From 3fc2a77281e03c678d93029bc98484902d9b48fb Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 8 Apr 2021 21:32:51 +0300 Subject: [PATCH] [Gradle, JS] Remove redundant caching infrastructure --- .../targets/js/nodejs/NodeJsRootExtension.kt | 3 - .../kotlin/gradle/targets/js/npm/NpmApi.kt | 3 - .../js/npm/PackageJsonUpToDateCheck.kt | 52 ---------------- .../js/npm/resolver/KotlinRootNpmResolver.kt | 13 ---- .../js/npm/tasks/KotlinNpmInstallTask.kt | 6 -- .../kotlin/gradle/targets/js/yarn/Yarn.kt | 9 +-- .../gradle/targets/js/yarn/YarnSimple.kt | 61 ------------------- .../gradle/targets/js/yarn/YarnWorkspaces.kt | 4 -- 8 files changed, 1 insertion(+), 150 deletions(-) delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJsonUpToDateCheck.kt delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnSimple.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt index af7e72e6f50..eb92f674b23 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt @@ -77,9 +77,6 @@ open class NodeJsRootExtension(@Transient val rootProject: Project) : Configurat rootProject.buildDir.resolve("js") } - internal val rootNodeModulesStateFile: File - get() = rootPackageDir.resolve("node_modules.state") - val projectPackagesDir: File get() = rootPackageDir.resolve("packages") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmApi.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmApi.kt index bf7e3a649b2..9b7e644679e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmApi.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmApi.kt @@ -18,8 +18,6 @@ import java.io.File interface NpmApi { fun setup(project: Project) - fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) - fun preparedFiles(nodeJs: NodeJsRootExtension): Collection fun prepareRootProject( @@ -38,7 +36,6 @@ interface NpmApi { nodeJs: NodeJsRootExtension, yarnHome: File, npmProjects: Collection, - skipExecution: Boolean, cliArgs: List ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJsonUpToDateCheck.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJsonUpToDateCheck.kt deleted file mode 100644 index 25a1e3e6149..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJsonUpToDateCheck.kt +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.targets.js.npm - -import org.gradle.api.Project -import org.gradle.api.internal.project.ProjectInternal -import org.gradle.internal.hash.FileHasher -import org.gradle.internal.service.ServiceRegistry -import org.jetbrains.kotlin.daemon.common.toHexString -import org.jetbrains.kotlin.gradle.internal.ensureParentDirsCreated -import java.io.File - -class PackageJsonUpToDateCheck(val services: ServiceRegistry, val npmProject: NpmProject) { - - private val NpmProject.packageJsonHashFile: File - get() = dir.resolve("package.json.hash") - - private val prevHash by lazy { - val packageJsonHashFile = npmProject.packageJsonHashFile - if (packageJsonHashFile.exists()) packageJsonHashFile.readText() else null - } - - private val packageJsonFile = npmProject.packageJsonFile - - private val hash by lazy { - val hasher = services.get(FileHasher::class.java) - hasher.hash(packageJsonFile).toByteArray().toHexString() - } - - val upToDate: Boolean - get() = packageJsonFile.exists() && - npmProject.nodeModulesDir.isDirectory && - prevHash == hash - - fun commit() { - if (!upToDate) { - val packageJsonHashFile = npmProject.packageJsonHashFile - packageJsonHashFile.ensureParentDirsCreated() - packageJsonHashFile.writeText(hash) - } - } - - inline fun updateIfNeeded(body: () -> Unit) { - if (!upToDate) { - body() - commit() - } - } -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt index 0f7e3af44fa..789d87638ce 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt @@ -17,7 +17,6 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension import org.jetbrains.kotlin.gradle.targets.js.npm.CompositeNodeModulesCache import org.jetbrains.kotlin.gradle.targets.js.npm.GradleNodeModulesCache import org.jetbrains.kotlin.gradle.targets.js.npm.KotlinNpmResolutionManager -import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJsonUpToDateCheck import org.jetbrains.kotlin.gradle.targets.js.npm.plugins.RootResolverPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinProjectNpmResolution @@ -229,27 +228,15 @@ internal class KotlinRootNpmResolver internal constructor( .values .flatMap { it.npmProjects } - // we need manual up-to-date checking to avoid call package manager during - // idea import if nothing was changed - // we should call it even kotlinNpmInstall task is up-to-date (skipPackageManager is true) - // because our upToDateChecks saves state for next execution - val upToDateChecks = allNpmPackages.map { - PackageJsonUpToDateCheck(services, it.npmProject) - } - val upToDate = forceUpToDate || upToDateChecks.all { it.upToDate } - nodeJs.packageManager.resolveRootProject( services, logger, nodeJs, yarn.requireConfigured().home, allNpmPackages, - upToDate, args ) - upToDateChecks.forEach { it.commit() } - return KotlinRootNpmResolution(rootProject, projectResolutions) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt index 527bbaec5b0..49fb485c0f9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt @@ -46,12 +46,6 @@ open class KotlinNpmInstallTask : DefaultTask() { nodeJs.packageManager.preparedFiles(nodeJs) } - // avoid using node_modules as output directory, as it is significantly slows down build - @get:OutputFile - val nodeModulesState: File by lazy { - nodeJs.rootNodeModulesStateFile - } - @get:OutputFile val yarnLock: File by lazy { nodeJs.rootPackageDir.resolve("yarn.lock") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/Yarn.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/Yarn.kt index dfd94628fd8..c7a52a7994f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/Yarn.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/Yarn.kt @@ -16,18 +16,13 @@ import java.io.File class Yarn : NpmApi { private val yarnWorkspaces = YarnWorkspaces() - private val yarnSimple = YarnSimple() private fun getDelegate(project: Project): NpmApi = - if (project.yarn.useWorkspaces) yarnWorkspaces - else yarnSimple + yarnWorkspaces override fun setup(project: Project) = getDelegate(project.rootProject).setup(project) - override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) = - getDelegate(resolvedNpmProject.project).resolveProject(resolvedNpmProject) - override fun preparedFiles(nodeJs: NodeJsRootExtension): Collection = yarnWorkspaces.preparedFiles(nodeJs) @@ -56,7 +51,6 @@ class Yarn : NpmApi { nodeJs: NodeJsRootExtension, yarnHome: File, npmProjects: Collection, - skipExecution: Boolean, cliArgs: List ) { yarnWorkspaces @@ -66,7 +60,6 @@ class Yarn : NpmApi { nodeJs, yarnHome, npmProjects, - skipExecution, cliArgs ) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnSimple.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnSimple.kt deleted file mode 100644 index eb702d009f5..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnSimple.kt +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.targets.js.yarn - -import org.gradle.api.Project -import org.gradle.api.internal.project.ProjectInternal -import org.gradle.api.logging.Logger -import org.gradle.internal.service.ServiceRegistry -import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension -import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin -import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi -import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJsonUpToDateCheck -import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution -import java.io.File - -class YarnSimple : YarnBasics() { - override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) { - setup(resolvedNpmProject.project.rootProject) - -// val project = resolvedNpmProject.project -// -// PackageJsonUpToDateCheck(resolvedNpmProject.npmProject).updateIfNeeded { -// yarnExec( -// (project as ProjectInternal).services, -// project.logger, -// NodeJsRootPlugin.apply(project), -// YarnPlugin.apply(project).requireConfigured().home, -// resolvedNpmProject.npmProject.dir, -// NpmApi.resolveOperationDescription("yarn for ${project.path}"), -// emptyList() -// ) -// yarnLockReadTransitiveDependencies(resolvedNpmProject.npmProject.dir, resolvedNpmProject.externalNpmDependencies) -// } - } - - override fun preparedFiles(nodeJs: NodeJsRootExtension): Collection = - emptyList() - - override fun prepareRootProject( - rootProject: Project?, - nodeJs: NodeJsRootExtension, - rootProjectName: String, - rootProjectVersion: String, - logger: Logger, - subProjects: Collection, - resolutions: Map - ) = Unit - - override fun resolveRootProject( - services: ServiceRegistry, - logger: Logger, - nodeJs: NodeJsRootExtension, - yarnHome: File, - npmProjects: Collection, - skipExecution: Boolean, - cliArgs: List - ) = Unit -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt index 7da3e68c2e0..cbb79fc0fac 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt @@ -17,8 +17,6 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmR import java.io.File class YarnWorkspaces : YarnBasics() { - override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) = Unit - override fun preparedFiles(nodeJs: NodeJsRootExtension): Collection { return listOf( nodeJs @@ -74,7 +72,6 @@ class YarnWorkspaces : YarnBasics() { nodeJs: NodeJsRootExtension, yarnHome: File, npmProjects: Collection, - skipExecution: Boolean, cliArgs: List ) { val nodeJsWorldDir = nodeJs.rootPackageDir @@ -88,7 +85,6 @@ class YarnWorkspaces : YarnBasics() { NpmApi.resolveOperationDescription("yarn"), cliArgs ) - nodeJs.rootNodeModulesStateFile.writeText(System.currentTimeMillis().toString()) yarnLockReadTransitiveDependencies(nodeJsWorldDir, npmProjects.flatMap { it.externalNpmDependencies }) }