mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 14:23:28 +07:00
* Coroutines must call ``blockingContext`` when run legacy code with ``invokeAndWait``. Modality state leads to livelock otherwise. * Coroutines must use ``runInterruptible` when accessing process streams (see ProcessExt.kt) GitOrigin-RevId: 5aaa357ff329dc95efd072d50fbca7e36ab07563
38 lines
1.7 KiB
Kotlin
38 lines
1.7 KiB
Kotlin
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
|
package com.jetbrains
|
|
|
|
import com.intellij.execution.processTools.getBareExecutionResult
|
|
import com.intellij.execution.target.TargetEnvironmentRequest
|
|
import com.intellij.execution.target.TargetProgressIndicator
|
|
import com.intellij.execution.target.TargetedCommandLineBuilder
|
|
import com.intellij.openapi.projectRoots.Sdk
|
|
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor
|
|
import com.jetbrains.python.sdk.configureBuilderToRunPythonOnTarget
|
|
import com.jetbrains.python.sdk.getOrCreateAdditionalData
|
|
import org.junit.Assert
|
|
|
|
|
|
internal suspend fun getPythonVersion(sdk: Sdk, request: TargetEnvironmentRequest): String? {
|
|
val commandLineBuilder = TargetedCommandLineBuilder(request)
|
|
sdk.configureBuilderToRunPythonOnTarget(commandLineBuilder)
|
|
val flavor = sdk.getOrCreateAdditionalData().flavor
|
|
return getPythonVersion(commandLineBuilder, flavor, request)
|
|
}
|
|
|
|
internal suspend fun getPythonVersion(commandLineBuilder: TargetedCommandLineBuilder,
|
|
flavor: PythonSdkFlavor<*>,
|
|
request: TargetEnvironmentRequest): String? {
|
|
commandLineBuilder.addParameter(flavor.versionOption)
|
|
val commandLine = commandLineBuilder.build()
|
|
val result = request
|
|
.prepareEnvironment(TargetProgressIndicator.EMPTY)
|
|
.createProcess(commandLine).getBareExecutionResult()
|
|
|
|
// Conda python may send version to stderr, check both
|
|
|
|
val err = result.stdErr.decodeToString()
|
|
val out = result.stdOut.decodeToString()
|
|
Assert.assertEquals(err, 0, result.exitCode)
|
|
val versionString = out.ifBlank { err }.trim()
|
|
return flavor.getVersionStringFromOutput(versionString)
|
|
} |