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.Task
|
||||
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.npm.resolved.KotlinCompilationNpmResolution
|
||||
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")
|
||||
}
|
||||
|
||||
val skipPackageManager = upToDate && !forceFullResolve
|
||||
state1.resolver.close(skipPackageManager).also {
|
||||
val forceUpToDate = upToDate && !forceFullResolve
|
||||
state1.resolver.close(forceUpToDate).also {
|
||||
this.state = ResolutionState.Installed(it)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -18,7 +18,8 @@ interface NpmApi {
|
||||
|
||||
fun resolveRootProject(
|
||||
rootProject: Project,
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>,
|
||||
skipExecution: Boolean
|
||||
)
|
||||
|
||||
companion object {
|
||||
|
||||
+10
-15
@@ -62,7 +62,7 @@ internal class KotlinRootNpmResolver internal constructor(
|
||||
/**
|
||||
* Don't use directly, use [NodeJsRootExtension.resolveIfNeeded] instead.
|
||||
*/
|
||||
internal fun close(skipPackageManager: Boolean): KotlinRootNpmResolution {
|
||||
internal fun close(forceUpToDate: Boolean): KotlinRootNpmResolution {
|
||||
check(!closed)
|
||||
closed = true
|
||||
|
||||
@@ -73,8 +73,6 @@ internal class KotlinRootNpmResolver internal constructor(
|
||||
|
||||
gradleNodeModules.close()
|
||||
|
||||
fun result() = KotlinRootNpmResolution(rootProject, projectResolutions)
|
||||
|
||||
// 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)
|
||||
@@ -82,22 +80,19 @@ internal class KotlinRootNpmResolver internal constructor(
|
||||
val upToDateChecks = allNpmPackages.map {
|
||||
PackageJsonUpToDateCheck(it.npmProject)
|
||||
}
|
||||
if (upToDateChecks.all { it.upToDate }) return result()
|
||||
val upToDate = forceUpToDate || upToDateChecks.all { it.upToDate }
|
||||
|
||||
if (skipPackageManager) {
|
||||
upToDateChecks.forEach { it.commit() }
|
||||
return result()
|
||||
} else {
|
||||
if (allNpmPackages.any { it.externalNpmDependencies.isNotEmpty() }) {
|
||||
nodeJs.packageManager.resolveRootProject(rootProject, allNpmPackages)
|
||||
} else if (projectResolvers.values.any { it.taskRequirements.hasNodeModulesDependentTasks }) {
|
||||
if (allNpmPackages.any { it.externalNpmDependencies.isNotEmpty() }) {
|
||||
nodeJs.packageManager.resolveRootProject(rootProject, allNpmPackages, upToDate)
|
||||
} else if (projectResolvers.values.any { it.taskRequirements.hasNodeModulesDependentTasks }) {
|
||||
if (!upToDate) {
|
||||
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>) {
|
||||
|
||||
+5
-2
@@ -20,6 +20,9 @@ object Yarn : NpmApi {
|
||||
override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) =
|
||||
getDelegate(resolvedNpmProject.project).resolveProject(resolvedNpmProject)
|
||||
|
||||
override fun resolveRootProject(rootProject: Project, subProjects: Collection<KotlinCompilationNpmResolution>) =
|
||||
getDelegate(rootProject.project).resolveRootProject(rootProject, subProjects)
|
||||
override fun resolveRootProject(
|
||||
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() {
|
||||
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)
|
||||
setup(rootProject)
|
||||
return resolveWorkspaces(rootProject, subProjects)
|
||||
if (!skipExecution) setup(rootProject)
|
||||
return resolveWorkspaces(rootProject, subProjects, skipExecution)
|
||||
}
|
||||
|
||||
private fun resolveWorkspaces(
|
||||
rootProject: Project,
|
||||
npmProjects: Collection<KotlinCompilationNpmResolution>
|
||||
npmProjects: Collection<KotlinCompilationNpmResolution>,
|
||||
skipExecution: Boolean
|
||||
) {
|
||||
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 })
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user