[python] PY-79486: Exclude .venv only, do not visit dot dirs.

No need to exclude all dot dirs (`.venv` is enough) but no need to visit them either.

GitOrigin-RevId: db5405b659a1da9174f2bc5a01b0a808f4d59668
This commit is contained in:
Ilya.Kazakevich
2025-12-25 23:10:15 +01:00
committed by intellij-monorepo-bot
parent 957eac5c13
commit 11d0c31d71
2 changed files with 14 additions and 6 deletions

View File

@@ -9,6 +9,7 @@ import com.intellij.python.pyproject.model.spi.PyProjectTomlProject
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
import com.jetbrains.python.Result
import com.jetbrains.python.venvReader.Directory
import com.jetbrains.python.venvReader.VirtualEnvReader.Companion.DEFAULT_VIRTUALENV_DIRNAME
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.IOException
@@ -55,13 +56,17 @@ internal suspend fun walkFileSystemNoTomlContent(
}
return@onVisitFile FileVisitResult.CONTINUE
}
onPostVisitDirectory { directory, _ ->
return@onPostVisitDirectory if (directory.name.startsWith(".")) {
excludedDirs.add(directory)
FileVisitResult.SKIP_SUBTREE
onPreVisitDirectory { directory, _ ->
val dirName = directory.name
val hidden = dirName.startsWith('.')
if (!hidden) {
FileVisitResult.CONTINUE
}
else {
FileVisitResult.CONTINUE
if (dirName == DEFAULT_VIRTUALENV_DIRNAME) {
excludedDirs.add(directory)
}
FileVisitResult.SKIP_SUBTREE
}
}
}

View File

@@ -5,7 +5,9 @@ import com.intellij.python.pyproject.model.internal.pyProjectToml.walkFileSystem
import com.intellij.testFramework.common.timeoutRunBlocking
import com.intellij.testFramework.utils.io.createDirectory
import com.intellij.testFramework.utils.io.createFile
import com.intellij.util.io.createDirectories
import com.jetbrains.python.Result
import com.jetbrains.python.venvReader.VirtualEnvReader.Companion.DEFAULT_VIRTUALENV_DIRNAME
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers
import org.junit.jupiter.api.BeforeAll
@@ -29,7 +31,8 @@ class PyWalkFileSystemTest {
root.resolve(PY_PROJECT_TOML).createFile(),
root.resolve("dir").createDirectory().resolve(PY_PROJECT_TOML).createFile()
)
expectedExcludedDir = root.resolve(".foo").createDirectory()
root.resolve(".abc").createDirectories().resolve(PY_PROJECT_TOML).createFile()
expectedExcludedDir = root.resolve(DEFAULT_VIRTUALENV_DIRNAME).createDirectory()
}
}