Skip to content

Commit

Permalink
Avoid crashing when the user has no homedir
Browse files Browse the repository at this point in the history
  • Loading branch information
Joachim Jablon authored and ewjoachim committed Feb 1, 2022
1 parent fb9fe6b commit 667d021
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
6 changes: 5 additions & 1 deletion src/black/files.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
17 changes: 16 additions & 1 deletion tests/test_black.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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__,
Expand Down

0 comments on commit 667d021

Please sign in to comment.