Merge pull request #12311 from bluetech/pkg-collect-perm-error
python: add workaround for permission error crashes from non-selected directories
This commit is contained in:
commit
704792ecbd
|
@ -0,0 +1 @@
|
|||
Fix `PermissionError` crashes arising from directories which are not selected on the command-line.
|
|
@ -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
|
||||
|
||||
|
|
|
@ -285,6 +285,23 @@ class TestCollectFS:
|
|||
items, reprec = pytester.inline_genitems()
|
||||
assert [x.name for x in items] == [f"test_{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:
|
||||
|
|
Loading…
Reference in New Issue