From ad1696422b7343a0cfea3c4b304e6acfa15d3cff Mon Sep 17 00:00:00 2001
From: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Date: Tue, 27 Apr 2021 14:16:35 -0700
Subject: [PATCH 1/1] Ignore inaccessible user config (#2158)

Fixes #2157
---
 CHANGES.md            |  2 ++
 src/black/__init__.py | 13 +++++++++++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/CHANGES.md b/CHANGES.md
index a30668d..cae61f2 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -4,6 +4,8 @@
 
 #### _Black_
 
+- Fix crash if the user configuration directory is inaccessible. (#2158)
+
 - Clarify that _Black_ may change the AST, especially when cleaning up docstrings.
   (#2159)
 
diff --git a/src/black/__init__.py b/src/black/__init__.py
index 015ca41..1c69cc4 100644
--- a/src/black/__init__.py
+++ b/src/black/__init__.py
@@ -311,8 +311,17 @@ def find_pyproject_toml(path_search_start: Tuple[str, ...]) -> Optional[str]:
     if path_pyproject_toml.is_file():
         return str(path_pyproject_toml)
 
-    path_user_pyproject_toml = find_user_pyproject_toml()
-    return str(path_user_pyproject_toml) if path_user_pyproject_toml.is_file() else None
+    try:
+        path_user_pyproject_toml = find_user_pyproject_toml()
+        return (
+            str(path_user_pyproject_toml)
+            if path_user_pyproject_toml.is_file()
+            else None
+        )
+    except PermissionError 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
 
 
 def parse_pyproject_toml(path_config: str) -> Dict[str, Any]:
-- 
2.39.5