mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Exclude inner venv on opening project directory (PY-39648)
GitOrigin-RevId: 63f3352991377875696f7acfb7c8a7d93cba6951
This commit is contained in:
committed by
intellij-monorepo-bot
parent
553688cd43
commit
1359157e7b
@@ -70,6 +70,7 @@ class PythonSdkConfigurator : DirectoryProjectConfigurator {
|
||||
|
||||
findExistingAssociatedSdk(module, existingSdks)?.let {
|
||||
SdkConfigurationUtil.setDirectoryProjectSdk(project, it)
|
||||
module.excludeInnerVirtualEnv(it)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -78,6 +79,7 @@ class PythonSdkConfigurator : DirectoryProjectConfigurator {
|
||||
SdkConfigurationUtil.addSdk(newSdk)
|
||||
newSdk.associateWithModule(module, null)
|
||||
SdkConfigurationUtil.setDirectoryProjectSdk(project, newSdk)
|
||||
module.excludeInnerVirtualEnv(it)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ package com.jetbrains.python.sdk
|
||||
|
||||
import com.intellij.execution.ExecutionException
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.application.WriteAction
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.module.ModuleManager
|
||||
import com.intellij.openapi.progress.ProgressManager
|
||||
@@ -26,13 +27,16 @@ import com.intellij.openapi.project.ProjectManager
|
||||
import com.intellij.openapi.project.rootManager
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil
|
||||
import com.intellij.openapi.roots.ModuleRootManager
|
||||
import com.intellij.openapi.roots.ModuleRootModificationUtil
|
||||
import com.intellij.openapi.roots.ProjectRootManager
|
||||
import com.intellij.openapi.util.Key
|
||||
import com.intellij.openapi.util.UserDataHolder
|
||||
import com.intellij.openapi.util.UserDataHolderBase
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.openapi.vfs.LocalFileSystem
|
||||
import com.intellij.openapi.vfs.StandardFileSystems
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.util.PathUtil
|
||||
import com.intellij.util.messages.Topic
|
||||
@@ -196,6 +200,21 @@ val Module.baseDir: VirtualFile?
|
||||
val Module.basePath: String?
|
||||
get() = baseDir?.path
|
||||
|
||||
fun Module.excludeInnerVirtualEnv(sdk: Sdk) {
|
||||
val root = sdk.homePath?.let { PythonSdkUtil.getVirtualEnvRoot(it) }?.let { LocalFileSystem.getInstance().findFileByIoFile(it) } ?: return
|
||||
|
||||
val model = ModuleRootManager.getInstance(this).modifiableModel
|
||||
|
||||
val contentEntry = model.contentEntries.firstOrNull {
|
||||
val contentFile = it.file
|
||||
contentFile != null && VfsUtil.isAncestor(contentFile, root, true)
|
||||
} ?: return
|
||||
contentEntry.addExcludeFolder(root)
|
||||
|
||||
WriteAction.run<Throwable> {
|
||||
model.commit()
|
||||
}
|
||||
}
|
||||
|
||||
private fun suggestAssociatedSdkName(sdkHome: String, associatedPath: String?): String? {
|
||||
val baseSdkName = PythonSdkType.suggestBaseSdkName(sdkHome) ?: return null
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
package com.jetbrains.python.sdk.add
|
||||
|
||||
import com.intellij.execution.ExecutionException
|
||||
import com.intellij.openapi.application.WriteAction
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.module.ModuleUtil
|
||||
@@ -11,13 +10,11 @@ import com.intellij.openapi.progress.Task
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.project.ProjectManager
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.openapi.roots.ModuleRootManager
|
||||
import com.intellij.openapi.ui.TextFieldWithBrowseButton
|
||||
import com.intellij.openapi.ui.ValidationInfo
|
||||
import com.intellij.openapi.util.UserDataHolder
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.openapi.vfs.StandardFileSystems
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import com.intellij.ui.DocumentAdapter
|
||||
import com.intellij.ui.components.JBCheckBox
|
||||
import com.intellij.util.ui.FormBuilder
|
||||
@@ -103,7 +100,7 @@ class PyAddNewVirtualEnvPanel(private val project: Project?,
|
||||
if (!shared) {
|
||||
sdk.associateWithModule(module, newProjectPath)
|
||||
}
|
||||
excludeDirectoryFromProject(root, project)
|
||||
moduleToExcludeSdkFrom(root, project)?.excludeInnerVirtualEnv(sdk)
|
||||
with(PySdkSettings.instance) {
|
||||
setPreferredVirtualEnvBasePath(FileUtil.toSystemIndependentName(pathField.text), projectBasePath)
|
||||
preferredVirtualEnvBaseSdk = baseSdkField.selectedSdk?.homePath
|
||||
@@ -120,23 +117,14 @@ class PyAddNewVirtualEnvPanel(private val project: Project?,
|
||||
baseSdkField.childComponent.addItemListener { listener.run() }
|
||||
}
|
||||
|
||||
private fun excludeDirectoryFromProject(path: String, project: Project?) {
|
||||
private fun moduleToExcludeSdkFrom(path: String, project: Project?): Module? {
|
||||
val possibleProjects = if (project != null) listOf(project) else ProjectManager.getInstance().openProjects.asList()
|
||||
val rootFile = StandardFileSystems.local().refreshAndFindFileByPath(path) ?: return
|
||||
val module = possibleProjects
|
||||
.asSequence()
|
||||
.map { ModuleUtil.findModuleForFile(rootFile, it) }
|
||||
.filterNotNull()
|
||||
.firstOrNull() ?: return
|
||||
val model = ModuleRootManager.getInstance(module).modifiableModel
|
||||
val contentEntry = model.contentEntries.firstOrNull {
|
||||
val contentFile = it.file
|
||||
contentFile != null && VfsUtil.isAncestor(contentFile, rootFile, true)
|
||||
} ?: return
|
||||
contentEntry.addExcludeFolder(rootFile)
|
||||
WriteAction.run<Throwable> {
|
||||
model.commit()
|
||||
}
|
||||
val rootFile = StandardFileSystems.local().refreshAndFindFileByPath(path) ?: return null
|
||||
return possibleProjects
|
||||
.asSequence()
|
||||
.map { ModuleUtil.findModuleForFile(rootFile, it) }
|
||||
.filterNotNull()
|
||||
.firstOrNull()
|
||||
}
|
||||
|
||||
private val projectBasePath: @SystemIndependent String?
|
||||
|
||||
Reference in New Issue
Block a user