Gradle, js, resolver: don't skip reading lock file while skipping package manager execution
This commit is contained in:
+2
-3
@@ -9,7 +9,6 @@ import org.gradle.api.Incubating
|
|||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
import org.jetbrains.kotlin.gradle.internal.isInIdeaSync
|
import org.jetbrains.kotlin.gradle.internal.isInIdeaSync
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinProjectNpmResolution
|
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinProjectNpmResolution
|
||||||
@@ -129,8 +128,8 @@ class KotlinNpmResolutionManager(val nodeJsSettings: NodeJsRootExtension) {
|
|||||||
error("NPM dependencies should be resolved $requireUpToDateReason")
|
error("NPM dependencies should be resolved $requireUpToDateReason")
|
||||||
}
|
}
|
||||||
|
|
||||||
val skipPackageManager = upToDate && !forceFullResolve
|
val forceUpToDate = upToDate && !forceFullResolve
|
||||||
state1.resolver.close(skipPackageManager).also {
|
state1.resolver.close(forceUpToDate).also {
|
||||||
this.state = ResolutionState.Installed(it)
|
this.state = ResolutionState.Installed(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -18,7 +18,8 @@ interface NpmApi {
|
|||||||
|
|
||||||
fun resolveRootProject(
|
fun resolveRootProject(
|
||||||
rootProject: Project,
|
rootProject: Project,
|
||||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
subProjects: Collection<KotlinCompilationNpmResolution>,
|
||||||
|
skipExecution: Boolean
|
||||||
)
|
)
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
+10
-15
@@ -62,7 +62,7 @@ internal class KotlinRootNpmResolver internal constructor(
|
|||||||
/**
|
/**
|
||||||
* Don't use directly, use [NodeJsRootExtension.resolveIfNeeded] instead.
|
* Don't use directly, use [NodeJsRootExtension.resolveIfNeeded] instead.
|
||||||
*/
|
*/
|
||||||
internal fun close(skipPackageManager: Boolean): KotlinRootNpmResolution {
|
internal fun close(forceUpToDate: Boolean): KotlinRootNpmResolution {
|
||||||
check(!closed)
|
check(!closed)
|
||||||
closed = true
|
closed = true
|
||||||
|
|
||||||
@@ -73,8 +73,6 @@ internal class KotlinRootNpmResolver internal constructor(
|
|||||||
|
|
||||||
gradleNodeModules.close()
|
gradleNodeModules.close()
|
||||||
|
|
||||||
fun result() = KotlinRootNpmResolution(rootProject, projectResolutions)
|
|
||||||
|
|
||||||
// we need manual up-to-date checking to avoid call package manager during
|
// we need manual up-to-date checking to avoid call package manager during
|
||||||
// idea import if nothing was changed
|
// idea import if nothing was changed
|
||||||
// we should call it even kotlinNpmInstall task is up-to-date (skipPackageManager is true)
|
// we should call it even kotlinNpmInstall task is up-to-date (skipPackageManager is true)
|
||||||
@@ -82,22 +80,19 @@ internal class KotlinRootNpmResolver internal constructor(
|
|||||||
val upToDateChecks = allNpmPackages.map {
|
val upToDateChecks = allNpmPackages.map {
|
||||||
PackageJsonUpToDateCheck(it.npmProject)
|
PackageJsonUpToDateCheck(it.npmProject)
|
||||||
}
|
}
|
||||||
if (upToDateChecks.all { it.upToDate }) return result()
|
val upToDate = forceUpToDate || upToDateChecks.all { it.upToDate }
|
||||||
|
|
||||||
if (skipPackageManager) {
|
if (allNpmPackages.any { it.externalNpmDependencies.isNotEmpty() }) {
|
||||||
upToDateChecks.forEach { it.commit() }
|
nodeJs.packageManager.resolveRootProject(rootProject, allNpmPackages, upToDate)
|
||||||
return result()
|
} else if (projectResolvers.values.any { it.taskRequirements.hasNodeModulesDependentTasks }) {
|
||||||
} else {
|
if (!upToDate) {
|
||||||
if (allNpmPackages.any { it.externalNpmDependencies.isNotEmpty() }) {
|
|
||||||
nodeJs.packageManager.resolveRootProject(rootProject, allNpmPackages)
|
|
||||||
} else if (projectResolvers.values.any { it.taskRequirements.hasNodeModulesDependentTasks }) {
|
|
||||||
NpmSimpleLinker(nodeJs).link(allNpmPackages)
|
NpmSimpleLinker(nodeJs).link(allNpmPackages)
|
||||||
}
|
}
|
||||||
|
|
||||||
upToDateChecks.forEach { it.commit() }
|
|
||||||
|
|
||||||
return result()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
upToDateChecks.forEach { it.commit() }
|
||||||
|
|
||||||
|
return KotlinRootNpmResolution(rootProject, projectResolutions)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun removeOutdatedPackages(nodeJs: NodeJsRootExtension, allNpmPackages: List<KotlinCompilationNpmResolution>) {
|
private fun removeOutdatedPackages(nodeJs: NodeJsRootExtension, allNpmPackages: List<KotlinCompilationNpmResolution>) {
|
||||||
|
|||||||
+5
-2
@@ -20,6 +20,9 @@ object Yarn : NpmApi {
|
|||||||
override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) =
|
override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) =
|
||||||
getDelegate(resolvedNpmProject.project).resolveProject(resolvedNpmProject)
|
getDelegate(resolvedNpmProject.project).resolveProject(resolvedNpmProject)
|
||||||
|
|
||||||
override fun resolveRootProject(rootProject: Project, subProjects: Collection<KotlinCompilationNpmResolution>) =
|
override fun resolveRootProject(
|
||||||
getDelegate(rootProject.project).resolveRootProject(rootProject, subProjects)
|
rootProject: Project,
|
||||||
|
subProjects: Collection<KotlinCompilationNpmResolution>,
|
||||||
|
skipExecution: Boolean
|
||||||
|
) = getDelegate(rootProject.project).resolveRootProject(rootProject, subProjects, skipExecution)
|
||||||
}
|
}
|
||||||
+5
-1
@@ -22,5 +22,9 @@ object YarnSimple : YarnBasics() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun resolveRootProject(rootProject: Project, subProjects: Collection<KotlinCompilationNpmResolution>) = Unit
|
override fun resolveRootProject(
|
||||||
|
rootProject: Project,
|
||||||
|
subProjects: Collection<KotlinCompilationNpmResolution>,
|
||||||
|
skipExecution: Boolean
|
||||||
|
) = Unit
|
||||||
}
|
}
|
||||||
+13
-6
@@ -14,21 +14,28 @@ import java.io.File
|
|||||||
object YarnWorkspaces : YarnBasics() {
|
object YarnWorkspaces : YarnBasics() {
|
||||||
override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) = Unit
|
override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) = Unit
|
||||||
|
|
||||||
override fun resolveRootProject(rootProject: Project, subProjects: Collection<KotlinCompilationNpmResolution>) {
|
override fun resolveRootProject(
|
||||||
|
rootProject: Project,
|
||||||
|
subProjects: Collection<KotlinCompilationNpmResolution>,
|
||||||
|
skipExecution: Boolean
|
||||||
|
) {
|
||||||
check(rootProject == rootProject.rootProject)
|
check(rootProject == rootProject.rootProject)
|
||||||
setup(rootProject)
|
if (!skipExecution) setup(rootProject)
|
||||||
return resolveWorkspaces(rootProject, subProjects)
|
return resolveWorkspaces(rootProject, subProjects, skipExecution)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolveWorkspaces(
|
private fun resolveWorkspaces(
|
||||||
rootProject: Project,
|
rootProject: Project,
|
||||||
npmProjects: Collection<KotlinCompilationNpmResolution>
|
npmProjects: Collection<KotlinCompilationNpmResolution>,
|
||||||
|
skipExecution: Boolean
|
||||||
) {
|
) {
|
||||||
val nodeJsWorldDir = NodeJsRootPlugin.apply(rootProject).rootPackageDir
|
val nodeJsWorldDir = NodeJsRootPlugin.apply(rootProject).rootPackageDir
|
||||||
|
|
||||||
saveRootProjectWorkspacesPackageJson(rootProject, npmProjects, nodeJsWorldDir)
|
if (!skipExecution) {
|
||||||
|
saveRootProjectWorkspacesPackageJson(rootProject, npmProjects, nodeJsWorldDir)
|
||||||
|
yarnExec(rootProject, nodeJsWorldDir, NpmApi.resolveOperationDescription("yarn"))
|
||||||
|
}
|
||||||
|
|
||||||
yarnExec(rootProject, nodeJsWorldDir, NpmApi.resolveOperationDescription("yarn"))
|
|
||||||
yarnLockReadTransitiveDependencies(nodeJsWorldDir, npmProjects.flatMap { it.externalNpmDependencies })
|
yarnLockReadTransitiveDependencies(nodeJsWorldDir, npmProjects.flatMap { it.externalNpmDependencies })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user