X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/4dd100bff283b3c60ce67491dd53f47b45f68ac2..9c8464ca7ddd48d1c19112d895ae12d783f01563:/src/black/cache.py?ds=sidebyside

diff --git a/src/black/cache.py b/src/black/cache.py
index 3f165de..9455ff4 100644
--- a/src/black/cache.py
+++ b/src/black/cache.py
@@ -2,16 +2,14 @@
 
 import os
 import pickle
-from pathlib import Path
 import tempfile
+from pathlib import Path
 from typing import Dict, Iterable, Set, Tuple
 
 from platformdirs import user_cache_dir
 
-from black.mode import Mode
-
 from _black_version import version as __version__
-
+from black.mode import Mode
 
 # types
 Timestamp = float
@@ -20,7 +18,23 @@ CacheInfo = Tuple[Timestamp, FileSize]
 Cache = Dict[str, CacheInfo]
 
 
-CACHE_DIR = Path(user_cache_dir("black", version=__version__))
+def get_cache_dir() -> Path:
+    """Get the cache directory used by black.
+
+    Users can customize this directory on all systems using `BLACK_CACHE_DIR`
+    environment variable. By default, the cache directory is the user cache directory
+    under the black application.
+
+    This result is immediately set to a constant `black.cache.CACHE_DIR` as to avoid
+    repeated calls.
+    """
+    # NOTE: Function mostly exists as a clean way to test getting the cache directory.
+    default_cache_dir = user_cache_dir("black", version=__version__)
+    cache_dir = Path(os.environ.get("BLACK_CACHE_DIR", default_cache_dir))
+    return cache_dir
+
+
+CACHE_DIR = get_cache_dir()
 
 
 def read_cache(mode: Mode) -> Cache:
@@ -35,7 +49,7 @@ def read_cache(mode: Mode) -> Cache:
     with cache_file.open("rb") as fobj:
         try:
             cache: Cache = pickle.load(fobj)
-        except (pickle.UnpicklingError, ValueError):
+        except (pickle.UnpicklingError, ValueError, IndexError):
             return {}
 
     return cache