diff --git a/python/junit5Tests-framework/src/com/intellij/python/junit5Tests/framework/winLockedFile/api.kt b/python/junit5Tests-framework/src/com/intellij/python/junit5Tests/framework/winLockedFile/api.kt index 2eeaffec1685..003a8eb4ab30 100644 --- a/python/junit5Tests-framework/src/com/intellij/python/junit5Tests/framework/winLockedFile/api.kt +++ b/python/junit5Tests-framework/src/com/intellij/python/junit5Tests/framework/winLockedFile/api.kt @@ -26,5 +26,5 @@ fun getProcessLockedPath(path: Path): Result, @NlsSafe Strin fun deleteCheckLocking(path: Path, vararg processesToKillIfLocked: Regex = arrayOf(PYTHON)): Unit = deleteCheckLockingImpl(path, *processesToKillIfLocked) -private val PYTHON = Regex("^(python|pip)[0-9.]*\\.exe$") +private val PYTHON = Regex("^(python|pip|conda)[0-9.]*\\.exe$") diff --git a/python/setup-test-environment/conda/src/com/intellij/python/community/testFramework/testEnv/conda/TypeConda.kt b/python/setup-test-environment/conda/src/com/intellij/python/community/testFramework/testEnv/conda/TypeConda.kt index a4103ead0ca3..86897c971482 100644 --- a/python/setup-test-environment/conda/src/com/intellij/python/community/testFramework/testEnv/conda/TypeConda.kt +++ b/python/setup-test-environment/conda/src/com/intellij/python/community/testFramework/testEnv/conda/TypeConda.kt @@ -4,13 +4,16 @@ import com.intellij.execution.processTools.getResultStdout import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.projectRoots.Sdk import com.intellij.python.community.testFramework.testEnv.PythonType +import com.intellij.util.io.awaitExit import com.jetbrains.python.PythonBinary import com.jetbrains.python.getOrThrow import com.jetbrains.python.packaging.PyCondaPackageService import com.jetbrains.python.packaging.findCondaExecutableRelativeToEnv import com.jetbrains.python.sdk.flavors.conda.PyCondaEnv import com.jetbrains.python.sdk.flavors.conda.PyCondaEnvIdentity +import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import org.jetbrains.annotations.ApiStatus.Internal import java.nio.file.Path @@ -39,7 +42,17 @@ data object TypeConda : PythonType("conda") { for (arg in arrayOf("--name", "-p")) { val args = arrayOf(condaPath.toString(), "remove", arg, envName, "--all", "-y") - Runtime.getRuntime().exec(args).getResultStdout().getOrElse { + val exec = Runtime.getRuntime().exec(args) + launch { + try { + exec.awaitExit() + } + catch (e: CancellationException) { + exec.destroyForcibly() + throw e + } + } + exec.getResultStdout().getOrElse { logger().warn(it) } }