Avoid crashing when the user has no homedir (#2814)
This commit is contained in:
parent
9b317178d6
commit
b4a6bb08fa
@ -20,6 +20,7 @@
|
||||
|
||||
- Do not format `__pypackages__` directories by default (#2836)
|
||||
- Add support for specifying stable version with `--required-version` (#2832).
|
||||
- Avoid crashing when the user has no homedir (#2814)
|
||||
|
||||
### Documentation
|
||||
|
||||
|
@ -87,7 +87,7 @@ def find_pyproject_toml(path_search_start: Tuple[str, ...]) -> Optional[str]:
|
||||
if path_user_pyproject_toml.is_file()
|
||||
else None
|
||||
)
|
||||
except PermissionError as e:
|
||||
except (PermissionError, RuntimeError) as e:
|
||||
# We do not have access to the user-level config directory, so ignore it.
|
||||
err(f"Ignoring user configuration directory due to {e!r}")
|
||||
return None
|
||||
@ -111,6 +111,10 @@ def find_user_pyproject_toml() -> Path:
|
||||
|
||||
This looks for ~\.black on Windows and ~/.config/black on Linux and other
|
||||
Unix systems.
|
||||
|
||||
May raise:
|
||||
- RuntimeError: if the current user has no homedir
|
||||
- PermissionError: if the current process cannot access the user's homedir
|
||||
"""
|
||||
if sys.platform == "win32":
|
||||
# Windows
|
||||
|
@ -10,7 +10,7 @@
|
||||
import types
|
||||
import unittest
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from contextlib import contextmanager
|
||||
from contextlib import contextmanager, redirect_stderr
|
||||
from dataclasses import replace
|
||||
from io import BytesIO
|
||||
from pathlib import Path
|
||||
@ -1358,6 +1358,21 @@ def test_find_project_root(self) -> None:
|
||||
(src_dir.resolve(), "pyproject.toml"),
|
||||
)
|
||||
|
||||
@patch(
|
||||
"black.files.find_user_pyproject_toml",
|
||||
)
|
||||
def test_find_pyproject_toml(self, find_user_pyproject_toml: MagicMock) -> None:
|
||||
find_user_pyproject_toml.side_effect = RuntimeError()
|
||||
|
||||
with redirect_stderr(io.StringIO()) as stderr:
|
||||
result = black.files.find_pyproject_toml(
|
||||
path_search_start=(str(Path.cwd().root),)
|
||||
)
|
||||
|
||||
assert result is None
|
||||
err = stderr.getvalue()
|
||||
assert "Ignoring user configuration" in err
|
||||
|
||||
@patch(
|
||||
"black.files.find_user_pyproject_toml",
|
||||
black.files.find_user_pyproject_toml.__wrapped__,
|
||||
|
Loading…
Reference in New Issue
Block a user