PY-40486 Fixes after rebasing on master

Co-authored-by: Mikhail Golubev <mikhail.golubev@jetbrains.com>

GitOrigin-RevId: fbecb15b6720ae4c2c741404b063dcdb59d0c23e
This commit is contained in:
Alexander Koshevoy
2021-09-23 16:37:44 +03:00
committed by intellij-monorepo-bot
parent 863ee165e1
commit c82480ce58
5 changed files with 40 additions and 15 deletions

View File

@@ -2,18 +2,25 @@
package com.jetbrains.python.sdk
import com.intellij.execution.ExecutionException
import com.intellij.execution.target.TargetEnvironmentRequest
import com.intellij.execution.target.TargetProgressIndicatorAdapter
import com.intellij.execution.target.TargetedCommandLineBuilder
import com.intellij.execution.target.local.LocalTargetEnvironmentRequest
import com.intellij.openapi.Disposable
import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.util.Disposer
import com.jetbrains.python.PythonHelper
import com.jetbrains.python.run.*
import com.jetbrains.python.run.target.HelpersAwareTargetEnvironmentRequest
class PyTargetsIntrospectionFacade(val mySdk: Sdk) {
private val myTargetEnvRequest = checkNotNull(PythonInterpreterTargetEnvironmentFactory.findTargetEnvironmentRequest(mySdk))
class PyTargetsIntrospectionFacade(val mySdk: Sdk, val project: Project) {
private val pyRequest: HelpersAwareTargetEnvironmentRequest =
checkNotNull(PythonInterpreterTargetEnvironmentFactory.findPythonTargetInterpreter(mySdk, project))
private val myTargetEnvRequest: TargetEnvironmentRequest
get() = pyRequest.targetEnvironmentRequest
init {
check(mySdk !is Disposable || !Disposer.isDisposed(mySdk))
@@ -43,7 +50,7 @@ class PyTargetsIntrospectionFacade(val mySdk: Sdk) {
@Throws(ExecutionException::class)
fun getInterpreterPaths(indicator: ProgressIndicator): List<String> {
val execution = prepareHelperScriptExecution(helperPackage = PythonHelper.SYSPATH, targetEnvironmentRequest = myTargetEnvRequest)
val execution = prepareHelperScriptExecution(helperPackage = PythonHelper.SYSPATH, helpersAwareTargetRequest = pyRequest)
val environment = myTargetEnvRequest.prepareEnvironment(TargetProgressIndicatorAdapter(indicator))
val cmd = execution.buildTargetedCommandLine(environment, mySdk, emptyList())
return cmd.execute(environment, indicator).stdoutLines
@@ -52,6 +59,6 @@ class PyTargetsIntrospectionFacade(val mySdk: Sdk) {
@Throws(ExecutionException::class)
fun synchronizeRemoteSourcesAndSetupMappings(indicator: ProgressIndicator) {
if (isLocalTarget()) return
PyTargetsRemoteSourcesRefresher(mySdk).run(indicator)
PyTargetsRemoteSourcesRefresher(mySdk, project).run(indicator)
}
}

View File

@@ -6,6 +6,7 @@ import com.google.gson.annotations.SerializedName
import com.intellij.execution.ExecutionException
import com.intellij.execution.target.TargetEnvironment
import com.intellij.execution.target.TargetEnvironment.TargetPath
import com.intellij.execution.target.TargetEnvironmentRequest
import com.intellij.execution.target.TargetProgressIndicatorAdapter
import com.intellij.execution.target.value.getRelativeTargetPath
import com.intellij.execution.target.value.getTargetDownloadPath
@@ -13,6 +14,7 @@ import com.intellij.execution.target.value.getTargetUploadPath
import com.intellij.openapi.Disposable
import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.util.Disposer
import com.intellij.util.PathMappingSettings
@@ -24,6 +26,7 @@ import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory
import com.jetbrains.python.run.buildTargetedCommandLine
import com.jetbrains.python.run.execute
import com.jetbrains.python.run.prepareHelperScriptExecution
import com.jetbrains.python.run.target.HelpersAwareTargetEnvironmentRequest
import java.nio.file.Files
import java.nio.file.Paths
import java.nio.file.attribute.FileTime
@@ -33,11 +36,15 @@ import kotlin.io.path.div
private const val STATE_FILE = ".state.json"
class PyTargetsRemoteSourcesRefresher(val mySdk: Sdk) {
private val myTargetEnvRequest = checkNotNull(PythonInterpreterTargetEnvironmentFactory.findTargetEnvironmentRequest(mySdk))
class PyTargetsRemoteSourcesRefresher(val mySdk: Sdk, project: Project) {
private val pyRequest: HelpersAwareTargetEnvironmentRequest =
checkNotNull(PythonInterpreterTargetEnvironmentFactory.findPythonTargetInterpreter(mySdk, project))
private val myTargetEnvRequest: TargetEnvironmentRequest
get() = pyRequest.targetEnvironmentRequest
init {
check(mySdk !is Disposable || !Disposer.isDisposed(mySdk))
assert(mySdk !is Disposable || !Disposer.isDisposed(mySdk))
}
@Throws(ExecutionException::class)
@@ -51,7 +58,7 @@ class PyTargetsRemoteSourcesRefresher(val mySdk: Sdk) {
val downloadVolume = TargetEnvironment.DownloadRoot(localRootPath = localRemoteSourcesRoot, targetRootPath = TargetPath.Temporary())
myTargetEnvRequest.downloadVolumes += downloadVolume
val execution = prepareHelperScriptExecution(helperPackage = PythonHelper.REMOTE_SYNC, targetEnvironmentRequest = myTargetEnvRequest)
val execution = prepareHelperScriptExecution(helperPackage = PythonHelper.REMOTE_SYNC, helpersAwareTargetRequest = pyRequest)
val stateFilePath = localRemoteSourcesRoot / STATE_FILE
val stateFilePrevTimestamp: FileTime
@@ -71,7 +78,7 @@ class PyTargetsRemoteSourcesRefresher(val mySdk: Sdk) {
// XXX Make it automatic
environment.uploadVolumes.values.forEach { it.upload(".", targetIndicator) }
val cmd = execution.buildTargetedCommandLine(environment, mySdk, emptyList())
cmd.execute(environment, indicator)
@@ -84,7 +91,7 @@ class PyTargetsRemoteSourcesRefresher(val mySdk: Sdk) {
if (Files.getLastModifiedTime(stateFilePath) <= stateFilePrevTimestamp) {
throw IllegalStateException("$stateFilePath has not been updated")
}
val stateFile: StateFile
Files.newBufferedReader(stateFilePath).use {
stateFile = Gson().fromJson(it, StateFile::class.java)

View File

@@ -138,7 +138,7 @@ public class PythonSdkUpdater implements StartupActivity.Background {
}
try {
if (Experiments.getInstance().isFeatureEnabled("python.use.targets.api.for.run.configurations")) {
PyTargetsIntrospectionFacade targetsFacade = new PyTargetsIntrospectionFacade(sdk);
PyTargetsIntrospectionFacade targetsFacade = new PyTargetsIntrospectionFacade(sdk, myProject);
String version = targetsFacade.getInterpreterVersion(indicator);
commitSdkVersionIfChanged(sdk, version);
if (targetsFacade.isLocalTarget()) {

View File

@@ -119,7 +119,7 @@ public class PySkeletonRefresher {
mySdk = sdk;
mySkeletonsPath = skeletonsPath;
if (Experiments.getInstance().isFeatureEnabled("python.use.targets.api.for.run.configurations")) {
mySkeletonsGenerator = new PyTargetsSkeletonGenerator(getSkeletonsPath(), mySdk, folder);
mySkeletonsGenerator = new PyTargetsSkeletonGenerator(getSkeletonsPath(), mySdk, folder, myProject);
}
else if (PythonSdkUtil.isRemote(sdk)) {
try {

View File

@@ -4,17 +4,21 @@ package com.jetbrains.python.sdk.skeletons
import com.intellij.execution.process.CapturingProcessHandler
import com.intellij.execution.process.ProcessOutput
import com.intellij.execution.target.TargetEnvironment
import com.intellij.execution.target.TargetEnvironmentRequest
import com.intellij.execution.target.TargetProgressIndicator
import com.intellij.execution.target.local.LocalTargetEnvironmentRequest
import com.intellij.execution.target.value.getTargetDownloadPath
import com.intellij.openapi.progress.EmptyProgressIndicator
import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.project.Project
import com.intellij.openapi.project.ProjectManager
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.util.io.FileUtil
import com.jetbrains.python.PythonHelper
import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory
import com.jetbrains.python.run.buildTargetedCommandLine
import com.jetbrains.python.run.prepareHelperScriptExecution
import com.jetbrains.python.run.target.HelpersAwareTargetEnvironmentRequest
import com.jetbrains.python.sdk.InvalidSdkException
import com.jetbrains.python.sdk.skeleton.PySkeletonHeader
import java.nio.file.Files
@@ -22,9 +26,16 @@ import java.nio.file.NoSuchFileException
import java.nio.file.Paths
import kotlin.io.path.div
class PyTargetsSkeletonGenerator(skeletonPath: String?, pySdk: Sdk, currentFolder: String?)
class PyTargetsSkeletonGenerator(skeletonPath: String, pySdk: Sdk, currentFolder: String?, project: Project?)
: PySkeletonGenerator(skeletonPath, pySdk, currentFolder) {
private val myTargetEnvRequest = checkNotNull(PythonInterpreterTargetEnvironmentFactory.findTargetEnvironmentRequest(sdk = mySdk))
private val pyRequest: HelpersAwareTargetEnvironmentRequest = checkNotNull(
// TODO Get rid of the dependency on the default project
PythonInterpreterTargetEnvironmentFactory.findPythonTargetInterpreter(mySdk, project ?: ProjectManager.getInstance().defaultProject)
)
private val myTargetEnvRequest: TargetEnvironmentRequest
get() = pyRequest.targetEnvironmentRequest
private val myFoundBinaries: MutableSet<String> = HashSet()
private fun isLocalTarget() = myTargetEnvRequest is LocalTargetEnvironmentRequest
@@ -43,7 +54,7 @@ class PyTargetsSkeletonGenerator(skeletonPath: String?, pySdk: Sdk, currentFolde
private fun doRunProcess(listener: LineWiseProcessOutputListener?): ProcessOutput {
val generatorScriptExecution = prepareHelperScriptExecution(helperPackage = PythonHelper.GENERATOR3,
targetEnvironmentRequest = myTargetEnvRequest)
helpersAwareTargetRequest = pyRequest)
generatorScriptExecution.addParameter("-d")
val skeletonsDownloadRoot = TargetEnvironment.DownloadRoot(localRootPath = Paths.get(mySkeletonsPath),
targetRootPath = TargetEnvironment.TargetPath.Temporary())