Skip to content

Commit

Permalink
Merge pull request #12319 from pytest-dev/backport-12311-to-8.2.x
Browse files Browse the repository at this point in the history
[8.2.x] python: add workaround for permission error crashes from non-selected directories
  • Loading branch information
bluetech authored May 14, 2024
2 parents 328001e + c9e9315 commit 4d5fb7d
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 1 deletion.
1 change: 1 addition & 0 deletions changelog/12120.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix `PermissionError` crashes arising from directories which are not selected on the command-line.
7 changes: 6 additions & 1 deletion src/_pytest/python.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,12 @@ def pytest_collect_directory(
path: Path, parent: nodes.Collector
) -> Optional[nodes.Collector]:
pkginit = path / "__init__.py"
if pkginit.is_file():
try:
has_pkginit = pkginit.is_file()
except PermissionError:
# See https://github.com/pytest-dev/pytest/issues/12120#issuecomment-2106349096.
return None
if has_pkginit:
return Package.from_parent(parent, path=path)
return None

Expand Down
17 changes: 17 additions & 0 deletions testing/test_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,23 @@ def test_testpaths_ini(self, pytester: Pytester, monkeypatch: MonkeyPatch) -> No
items, reprec = pytester.inline_genitems()
assert [x.name for x in items] == ["test_%s" % dirname]

def test_missing_permissions_on_unselected_directory_doesnt_crash(
self, pytester: Pytester
) -> None:
"""Regression test for #12120."""
test = pytester.makepyfile(test="def test(): pass")
bad = pytester.mkdir("bad")
try:
bad.chmod(0)

result = pytester.runpytest(test)
finally:
bad.chmod(750)
bad.rmdir()

assert result.ret == ExitCode.OK
result.assert_outcomes(passed=1)


class TestCollectPluginHookRelay:
def test_pytest_collect_file(self, pytester: Pytester) -> None:
Expand Down

0 comments on commit 4d5fb7d

Please sign in to comment.