From 400fb17865405db397e760855213f7f84a34b402 Mon Sep 17 00:00:00 2001 From: Aleksandr Sorotskii Date: Wed, 8 Jan 2025 23:03:44 +0100 Subject: [PATCH] fix poetry package manager running poetry update upon reloading the package list; #PY-78077 Fixed (cherry picked from commit b0f73f88f39a62b4351fb6189fe5d9afb79ef6d3) GitOrigin-RevId: 8e78ddecb0298826c8bc8dcf55e5b105954bd269 --- .../sdk/poetry/PoetryCommandExecutor.kt | 24 +++++++++++++++---- .../python/sdk/poetry/PoetryPackageManager.kt | 18 +------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/python/src/com/jetbrains/python/sdk/poetry/PoetryCommandExecutor.kt b/python/src/com/jetbrains/python/sdk/poetry/PoetryCommandExecutor.kt index caa5edfc7ed2..3b7f56d8daae 100644 --- a/python/src/com/jetbrains/python/sdk/poetry/PoetryCommandExecutor.kt +++ b/python/src/com/jetbrains/python/sdk/poetry/PoetryCommandExecutor.kt @@ -18,6 +18,7 @@ import com.intellij.util.SystemProperties import com.jetbrains.python.PyBundle import com.jetbrains.python.packaging.PyExecutionException import com.jetbrains.python.packaging.PyPackageManager +import com.jetbrains.python.packaging.common.PythonPackage import com.jetbrains.python.packaging.management.PythonPackageManager import com.jetbrains.python.pathValidation.PlatformAndRoot import com.jetbrains.python.pathValidation.ValidationRequest @@ -184,10 +185,25 @@ suspend fun poetryInstallPackage(sdk: Sdk, pkg: String, extraArgs: List) suspend fun poetryUninstallPackage(sdk: Sdk, pkg: String): Result = runPoetryWithSdk(sdk, "remove", pkg) @Internal -suspend fun poetryReloadPackages(sdk: Sdk): Result { - runPoetryWithSdk(sdk, "update").onFailure { return Result.failure(it) } - runPoetryWithSdk(sdk, "install", "--no-root").onFailure { return Result.failure(it) } - return runPoetryWithSdk(sdk, "show") +suspend fun poetryShowPackages(sdk: Sdk): Result> { + val output = runPoetryWithSdk(sdk, "show").getOrElse { + return Result.failure(it) + } + + return parsePoetryShow(output).let { Result.success(it) } +} + +@Internal +fun parsePoetryShow(input: String): List { + val result = mutableListOf() + input.split("\n").forEach { line -> + if (line.isNotBlank()) { + val packageInfo = line.trim().split(" ").map { it.trim() }.filter { it.isNotBlank() && it != "(!)"} + result.add(PythonPackage(packageInfo[0], packageInfo[1], false)) + } + } + + return result } /** diff --git a/python/src/com/jetbrains/python/sdk/poetry/PoetryPackageManager.kt b/python/src/com/jetbrains/python/sdk/poetry/PoetryPackageManager.kt index 0950c8e89c98..814c1ca22f96 100644 --- a/python/src/com/jetbrains/python/sdk/poetry/PoetryPackageManager.kt +++ b/python/src/com/jetbrains/python/sdk/poetry/PoetryPackageManager.kt @@ -27,8 +27,7 @@ class PoetryPackageManager(project: Project, sdk: Sdk) : PythonPackageManager(pr override suspend fun uninstallPackageCommand(pkg: PythonPackage): Result = poetryUninstallPackage(sdk, pkg.name) override suspend fun reloadPackagesCommand(): Result> { - val output = poetryReloadPackages(sdk).getOrElse { return Result.failure(it) } - return Result.success(parsePoetryShow(output)) + return poetryShowPackages(sdk) } override suspend fun reloadPackages(): Result> { @@ -57,21 +56,6 @@ class PoetryPackageManager(project: Project, sdk: Sdk) : PythonPackageManager(pr /** * Parses the output of `poetry show` into a list of packages. */ -private fun parsePoetryShow(input: String): List { - val result = mutableListOf() - input.split("\n").forEach { line -> - if (line.isNotBlank()) { - val packageInfo = line.trim().split(" ").map { it.trim() }.filter { it.isNotBlank() } - result.add(PythonPackage(packageInfo[0], packageInfo[1], false)) - } - } - return result -} - -@TestOnly -fun parsePoetryShowTest(input: String): List { - return parsePoetryShow(input) -} @TestOnly fun parsePoetryShowOutdatedTest(input: String): Map {