From ae38b076da99ea0d4092a4be604ccc4b0f73d8af Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Mon, 5 Jun 2023 17:08:46 +0300 Subject: [PATCH] main: move norecursedir check to main's pytest_ignore_collect Fix #11081 --- changelog/11081.improvement.rst | 1 + src/_pytest/main.py | 9 ++++++--- src/_pytest/python.py | 3 --- 3 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 changelog/11081.improvement.rst diff --git a/changelog/11081.improvement.rst b/changelog/11081.improvement.rst new file mode 100644 index 000000000..227e478d4 --- /dev/null +++ b/changelog/11081.improvement.rst @@ -0,0 +1 @@ +The :confval:`norecursedir` check is now performed in a :hook:`pytest_ignore_collect` implementation, so plugins can affect it. diff --git a/src/_pytest/main.py b/src/_pytest/main.py index 8f07daeec..155d4300e 100644 --- a/src/_pytest/main.py +++ b/src/_pytest/main.py @@ -400,6 +400,12 @@ def pytest_ignore_collect(collection_path: Path, config: Config) -> Optional[boo allow_in_venv = config.getoption("collect_in_virtualenv") if not allow_in_venv and _in_venv(collection_path): return True + + if collection_path.is_dir(): + norecursepatterns = config.getini("norecursedirs") + if any(fnmatch_ex(pat, collection_path) for pat in norecursepatterns): + return True + return None @@ -563,9 +569,6 @@ class Session(nodes.FSCollector): ihook = self.gethookproxy(fspath.parent) if ihook.pytest_ignore_collect(collection_path=fspath, config=self.config): return False - norecursepatterns = self.config.getini("norecursedirs") - if any(fnmatch_ex(pat, fspath) for pat in norecursepatterns): - return False return True def _collectfile( diff --git a/src/_pytest/python.py b/src/_pytest/python.py index 3b1253cf4..ad847c8af 100644 --- a/src/_pytest/python.py +++ b/src/_pytest/python.py @@ -706,9 +706,6 @@ class Package(Module): ihook = self.session.gethookproxy(fspath.parent) if ihook.pytest_ignore_collect(collection_path=fspath, config=self.config): return False - norecursepatterns = self.config.getini("norecursedirs") - if any(fnmatch_ex(pat, fspath) for pat in norecursepatterns): - return False return True def _collectfile(