mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 13:31:28 +07:00
[eel] move process utils in to the eel-provider module
GitOrigin-RevId: 8beffa883a1de89e7d487ada51df190d5347cbee
This commit is contained in:
committed by
intellij-monorepo-bot
parent
c686e1f364
commit
da7deee35d
@@ -1,5 +0,0 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
@ApiStatus.Internal
|
||||
package com.intellij.platform.eel.impl.utils;
|
||||
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
@@ -1,28 +1,29 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.platform.eel.impl.utils
|
||||
package com.intellij.platform.eel.provider.utils
|
||||
|
||||
import com.intellij.execution.process.ProcessOutput
|
||||
import com.intellij.openapi.progress.runBlockingMaybeCancellable
|
||||
import com.intellij.platform.eel.*
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import com.intellij.platform.eel.provider.ResultErrImpl
|
||||
import com.intellij.platform.eel.provider.ResultOkImpl
|
||||
import com.intellij.platform.eel.provider.getEelDescriptor
|
||||
import com.intellij.platform.eel.provider.utils.asEelChannel
|
||||
import com.intellij.platform.eel.provider.utils.copy
|
||||
import com.intellij.util.io.computeDetached
|
||||
import kotlinx.coroutines.DelicateCoroutinesApi
|
||||
import kotlinx.coroutines.coroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withTimeoutOrNull
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import org.jetbrains.annotations.ApiStatus.Internal
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.nio.file.Path
|
||||
import kotlin.io.path.pathString
|
||||
import kotlin.time.Duration
|
||||
import kotlin.time.Duration.Companion.days
|
||||
|
||||
val EelProcessExecutionResult.stdoutString: String get() = String(stdout)
|
||||
val EelProcessExecutionResult.stderrString: String get() = String(stderr)
|
||||
|
||||
class EelProcessExecutionResult(val exitCode: Int, val stdout: ByteArray, val stderr: ByteArray)
|
||||
|
||||
/**
|
||||
* Function that awaits the completion of an [EelProcess] and retrieves its execution result,
|
||||
* including the exit code, standard output, and standard error streams.
|
||||
@@ -32,15 +33,14 @@ import kotlin.time.Duration.Companion.days
|
||||
* val process = eelApi.exec.executeProcess("ls", "-la").getOrThrow()
|
||||
* val result = process.awaitProcessResult()
|
||||
* println("Exit code: ${result.exitCode}")
|
||||
* println("Standard Output: ${result.stdout}")
|
||||
* println("Standard Error: ${result.stderr}")
|
||||
* println("Standard Output: ${String(result.stdout)}")
|
||||
* println("Standard Error: ${String(result.stderr)}")
|
||||
* ```
|
||||
*
|
||||
* @see EelProcess
|
||||
* @see ProcessOutput
|
||||
*/
|
||||
@OptIn(DelicateCoroutinesApi::class)
|
||||
suspend fun EelProcess.awaitProcessResult(): ProcessOutput {
|
||||
suspend fun EelProcess.awaitProcessResult(): EelProcessExecutionResult {
|
||||
return computeDetached {
|
||||
ByteArrayOutputStream().use { out ->
|
||||
ByteArrayOutputStream().use { err ->
|
||||
@@ -54,14 +54,14 @@ suspend fun EelProcess.awaitProcessResult(): ProcessOutput {
|
||||
}
|
||||
}
|
||||
|
||||
ProcessOutput(String(out.toByteArray()), String(err.toByteArray()), exitCode.await(), false, false)
|
||||
EelProcessExecutionResult(exitCode.await(), out.toByteArray(), err.toByteArray())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun EelApi.whereBlocking(exe: String): EelPath? {
|
||||
return runBlockingMaybeCancellable { where(exe) }
|
||||
return runBlockingMaybeCancellable { exec.where(exe) }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -85,7 +85,7 @@ fun EelApi.whereBlocking(exe: String): EelPath? {
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
suspend fun EelApi.where(exe: String): EelPath? {
|
||||
suspend fun EelExecApi.where(exe: String): EelPath? {
|
||||
val tool = when (this) {
|
||||
is EelPosixApi -> "which"
|
||||
is EelWindowsApi -> "where.exe"
|
||||
@@ -99,7 +99,7 @@ suspend fun EelApi.where(exe: String): EelPath? {
|
||||
return null
|
||||
}
|
||||
else {
|
||||
return EelPath.parse(result.stdout.trim(), descriptor)
|
||||
return EelPath.parse(result.stdoutString.trim(), descriptor)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,9 +111,9 @@ suspend fun EelApi.where(exe: String): EelPath? {
|
||||
* withTimeout(10.seconds) {python.exec("-v")}.getOr{return it}
|
||||
* ```
|
||||
*/
|
||||
@Internal
|
||||
@ApiStatus.Internal
|
||||
@ApiStatus.Experimental
|
||||
suspend fun Path.exec(vararg args: String, timeout: Duration = Int.MAX_VALUE.days): EelResult<ProcessOutput, EelExecApi.ExecuteProcessError?> {
|
||||
suspend fun Path.exec(vararg args: String, timeout: Duration = Int.MAX_VALUE.days): EelResult<EelProcessExecutionResult, EelExecApi.ExecuteProcessError?> {
|
||||
|
||||
val process = getEelDescriptor().upgrade().exec.executeProcess(pathString, *args).getOr { return it }
|
||||
val output = withTimeoutOrNull(timeout) {
|
||||
@@ -9,9 +9,10 @@ import com.intellij.openapi.progress.runBlockingMaybeCancellable
|
||||
import com.intellij.platform.eel.*
|
||||
import com.intellij.platform.eel.fs.*
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import com.intellij.platform.eel.impl.utils.awaitProcessResult
|
||||
import com.intellij.platform.eel.provider.asNioPath
|
||||
import com.intellij.platform.eel.provider.upgradeBlocking
|
||||
import com.intellij.platform.eel.provider.utils.awaitProcessResult
|
||||
import com.intellij.platform.eel.provider.utils.stdoutString
|
||||
import com.intellij.util.suspendingLazy
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import java.nio.file.Path
|
||||
@@ -96,7 +97,7 @@ internal fun javaHomeFinderEel(descriptor: EelDescriptor): JavaHomeFinderBasic {
|
||||
if (result.exitCode != 0) {
|
||||
return@runBlockingMaybeCancellable ""
|
||||
}
|
||||
result.stdout
|
||||
result.stdoutString
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
@@ -26,12 +26,14 @@ import com.intellij.openapi.util.SystemInfo
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.openapi.util.registry.Registry
|
||||
import com.intellij.platform.eel.*
|
||||
import com.intellij.platform.eel.impl.utils.awaitProcessResult
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import com.intellij.platform.eel.provider.asEelPath
|
||||
import com.intellij.platform.eel.provider.asNioPath
|
||||
import com.intellij.platform.eel.provider.getEelDescriptor
|
||||
import com.intellij.platform.eel.provider.upgradeBlocking
|
||||
import com.intellij.platform.eel.provider.utils.awaitProcessResult
|
||||
import com.intellij.platform.eel.provider.utils.stderrString
|
||||
import com.intellij.platform.eel.provider.utils.stdoutString
|
||||
import com.intellij.util.Urls
|
||||
import com.intellij.util.io.HttpRequests
|
||||
import com.intellij.util.io.delete
|
||||
@@ -139,7 +141,7 @@ class JdkInstaller : JdkInstallerBase() {
|
||||
val process = eel.exec.execute(builder).getOrThrow()
|
||||
try {
|
||||
withTimeout(timeout.milliseconds) {
|
||||
process.awaitProcessResult()
|
||||
process.awaitProcessResult().let { ProcessOutput(it.stdoutString, it.stderrString, it.exitCode, false, false) }
|
||||
}
|
||||
}
|
||||
catch (_: TimeoutCancellationException) {
|
||||
|
||||
@@ -29,11 +29,11 @@ import com.intellij.openapi.util.registry.Registry
|
||||
import com.intellij.platform.eel.EelApi
|
||||
import com.intellij.platform.eel.LocalEelApi
|
||||
import com.intellij.platform.eel.fs.getPath
|
||||
import com.intellij.platform.eel.impl.utils.where
|
||||
import com.intellij.platform.eel.provider.asNioPath
|
||||
import com.intellij.platform.eel.provider.asNioPathOrNull
|
||||
import com.intellij.platform.eel.provider.getEelDescriptor
|
||||
import com.intellij.platform.eel.provider.utils.fetchLoginShellEnvVariablesBlocking
|
||||
import com.intellij.platform.eel.provider.utils.where
|
||||
import com.intellij.platform.ide.progress.runWithModalProgressBlocking
|
||||
import com.intellij.platform.ide.progress.withBackgroundProgress
|
||||
import com.intellij.platform.util.progress.withProgressText
|
||||
@@ -141,7 +141,7 @@ object MavenEelUtil {
|
||||
result.add(MavenInSpecificPath(home))
|
||||
}
|
||||
|
||||
val path = runBlockingMaybeCancellable { where("mvn") }?.asNioPathOrNull()?.parent?.parent
|
||||
val path = runBlockingMaybeCancellable { exec.where("mvn") }?.asNioPathOrNull()?.parent?.parent
|
||||
if (path != null && isValidMavenHome(path)) {
|
||||
result.add(MavenInSpecificPath(path))
|
||||
}
|
||||
|
||||
@@ -12,11 +12,11 @@ import com.intellij.openapi.util.NlsSafe
|
||||
import com.intellij.openapi.util.text.HtmlChunk
|
||||
import com.intellij.openapi.util.text.StringUtil
|
||||
import com.intellij.platform.eel.EelDescriptor
|
||||
import com.intellij.platform.eel.impl.utils.where
|
||||
import com.intellij.platform.eel.path.EelPath.Companion.parse
|
||||
import com.intellij.platform.eel.path.pathSeparator
|
||||
import com.intellij.platform.eel.provider.asNioPath
|
||||
import com.intellij.platform.eel.provider.getEelDescriptor
|
||||
import com.intellij.platform.eel.provider.utils.where
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.impl.source.tree.LeafPsiElement
|
||||
@@ -110,7 +110,7 @@ internal class ShDocumentationProvider(private val scope: CoroutineScope) : Docu
|
||||
}
|
||||
}
|
||||
|
||||
eel.where("man")?.toString()
|
||||
eel.exec.where("man")?.toString()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,9 @@ package com.jetbrains.python
|
||||
|
||||
import com.intellij.openapi.util.NlsSafe
|
||||
import com.intellij.platform.eel.getOr
|
||||
import com.intellij.platform.eel.impl.utils.exec
|
||||
import com.intellij.platform.eel.provider.utils.exec
|
||||
import com.intellij.platform.eel.provider.utils.stderrString
|
||||
import com.intellij.platform.eel.provider.utils.stdoutString
|
||||
import com.jetbrains.python.PySdkBundle.message
|
||||
import com.jetbrains.python.Result.Companion.failure
|
||||
import com.jetbrains.python.psi.LanguageLevel
|
||||
@@ -47,9 +49,9 @@ suspend fun PythonBinary.executeWithResult(vararg args: String): Result<@NlsSafe
|
||||
return failure(text)
|
||||
}
|
||||
return if (output.exitCode != 0) {
|
||||
failure(message("python.get.version.error", pathString, "code ${output.exitCode}, {output.stderr}"))
|
||||
failure(message("python.get.version.error", pathString, "code ${output.exitCode}, ${output.stderrString}"))
|
||||
}
|
||||
else {
|
||||
Result.success(output.stdout)
|
||||
Result.success(output.stdoutString)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user