From: Matt VanEseltine <vaneseltine@gmail.com>
Date: Mon, 21 Oct 2019 09:20:13 +0000 (-0400)
Subject: Do not load incompatible cache (#875) (#1034)
X-Git-Url: https://git.madduck.net/etc/vim.git/commitdiff_plain/03766f515b908b76a488da40fec3eeffb9369af7?ds=sidebyside

Do not load incompatible cache (#875) (#1034)

A black cache created in Python 3.8 throws an unhandled
ValueError in earlier versions. This is because 3.6 does
not recognize the pickle protocol used as default in 3.8.
Accordingly, this commit:

  - Fixes read_cache to return an empty cache instead.

  - Changes the pickle protocol to 4 as the highest protocol
    fully supported by black's supported Python versions.
---

diff --git a/black.py b/black.py
index 151c1a6..8a70c02 100644
--- a/black.py
+++ b/black.py
@@ -4006,7 +4006,7 @@ def read_cache(mode: FileMode) -> Cache:
     with cache_file.open("rb") as fobj:
         try:
             cache: Cache = pickle.load(fobj)
-        except pickle.UnpicklingError:
+        except (pickle.UnpicklingError, ValueError):
             return {}
 
     return cache
@@ -4041,7 +4041,7 @@ def write_cache(cache: Cache, sources: Iterable[Path], mode: FileMode) -> None:
         CACHE_DIR.mkdir(parents=True, exist_ok=True)
         new_cache = {**cache, **{src.resolve(): get_cache_info(src) for src in sources}}
         with tempfile.NamedTemporaryFile(dir=str(cache_file.parent), delete=False) as f:
-            pickle.dump(new_cache, f, protocol=pickle.HIGHEST_PROTOCOL)
+            pickle.dump(new_cache, f, protocol=4)
         os.replace(f.name, cache_file)
     except OSError:
         pass