diff --git a/python/src/com/jetbrains/python/packaging/PyPackageUtil.java b/python/src/com/jetbrains/python/packaging/PyPackageUtil.java index 0bcdbb56f7e9..9555dfd12c1d 100644 --- a/python/src/com/jetbrains/python/packaging/PyPackageUtil.java +++ b/python/src/com/jetbrains/python/packaging/PyPackageUtil.java @@ -312,10 +312,14 @@ public class PyPackageUtil { VfsUtilCore.visitChildrenRecursively(root, new VirtualFileVisitor() { @Override public boolean visitFile(@NotNull VirtualFile file) { + if (file.equals(root)) { + return true; + } if (!fileIndex.isExcluded(file) && file.isDirectory() && file.findChild(PyNames.INIT_DOT_PY) != null) { results.add(VfsUtilCore.getRelativePath(file, root, '.')); + return true; } - return true; + return false; } }); } diff --git a/python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresChildrenOfDirectoriesWithoutInitPy/bin/pkg/__init__.py b/python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresChildrenOfDirectoriesWithoutInitPy/bin/pkg/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresChildrenOfDirectoriesWithoutInitPy/project/__init__.py b/python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresChildrenOfDirectoriesWithoutInitPy/project/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresChildrenOfDirectoriesWithoutInitPy/project/pkg/__init__.py b/python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresChildrenOfDirectoriesWithoutInitPy/project/pkg/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresExcludedDirectoriesWithSdkRoots/env/site-packages/lib/__init__.py b/python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresExcludedDirectoriesWithSdkRoots/env/site-packages/lib/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresExcludedDirectoriesWithSdkRoots/env/site-packages/lib/pkg/__init__.py b/python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresExcludedDirectoriesWithSdkRoots/env/site-packages/lib/pkg/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresExcludedDirectoriesWithSdkRoots/project/__init__.py b/python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresExcludedDirectoriesWithSdkRoots/project/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresExcludedDirectoriesWithSdkRoots/project/pkg/__init__.py b/python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresExcludedDirectoriesWithSdkRoots/project/pkg/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testSrc/com/jetbrains/python/packaging/PyPackageUtilTest.java b/python/testSrc/com/jetbrains/python/packaging/PyPackageUtilTest.java index 439b3eb3494c..a347f283184b 100644 --- a/python/testSrc/com/jetbrains/python/packaging/PyPackageUtilTest.java +++ b/python/testSrc/com/jetbrains/python/packaging/PyPackageUtilTest.java @@ -18,6 +18,7 @@ package com.jetbrains.python.packaging; import com.google.common.collect.ImmutableMap; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.module.Module; +import com.intellij.openapi.vfs.VirtualFile; import com.jetbrains.python.fixtures.PyTestCase; import com.jetbrains.python.psi.LanguageLevel; import com.jetbrains.python.psi.PyCallExpression; @@ -264,4 +265,20 @@ public class PyPackageUtilTest extends PyTestCase { assertEquals(text, argument.getText()); } } + + // PY-17241 + public void testCollectingPackageNamesIgnoresExcludedDirectoriesWithSdkRoots() { + addExcludedRoot("env"); + final VirtualFile sdkRoot = myFixture.findFileInTempDir("env/site-packages"); + runWithAdditionalClassEntryInSdkRoots(sdkRoot, () -> { + final List collected = PyPackageUtil.getPackageNames(myFixture.getModule()); + assertSameElements(collected, "project", "project.pkg"); + }); + } + + // PY-17241 + public void testCollectingPackageNamesIgnoresChildrenOfDirectoriesWithoutInitPy() { + final List collected = PyPackageUtil.getPackageNames(myFixture.getModule()); + assertSameElements(collected, "project", "project.pkg"); + } } \ No newline at end of file