From 7d04c08f3ee7c76e5bf677b87ba70629ae921579 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Thu, 8 Nov 2018 17:50:29 +0300 Subject: [PATCH] PY-17241 Don't include packages in excluded project venv directory in setup.py It happened because interpreter paths inside excluded virtualenv directory are not considered excluded themselves. Now we stop going deeper into the project structure once we've found a directory that is not a valid traditional style package (unless it's a root). --- .../python/packaging/PyPackageUtil.java | 6 +++++- .../bin/pkg/__init__.py | 0 .../project/__init__.py | 0 .../project/pkg/__init__.py | 0 .../env/site-packages/lib/__init__.py | 0 .../env/site-packages/lib/pkg/__init__.py | 0 .../project/__init__.py | 0 .../project/pkg/__init__.py | 0 .../python/packaging/PyPackageUtilTest.java | 17 +++++++++++++++++ 9 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresChildrenOfDirectoriesWithoutInitPy/bin/pkg/__init__.py create mode 100644 python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresChildrenOfDirectoriesWithoutInitPy/project/__init__.py create mode 100644 python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresChildrenOfDirectoriesWithoutInitPy/project/pkg/__init__.py create mode 100644 python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresExcludedDirectoriesWithSdkRoots/env/site-packages/lib/__init__.py create mode 100644 python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresExcludedDirectoriesWithSdkRoots/env/site-packages/lib/pkg/__init__.py create mode 100644 python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresExcludedDirectoriesWithSdkRoots/project/__init__.py create mode 100644 python/testData/packaging/PyPackageUtil/CollectingPackageNamesIgnoresExcludedDirectoriesWithSdkRoots/project/pkg/__init__.py 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