From 03766f515b908b76a488da40fec3eeffb9369af7 Mon Sep 17 00:00:00 2001
From: Matt VanEseltine <vaneseltine@gmail.com>
Date: Mon, 21 Oct 2019 05:20:13 -0400
Subject: [PATCH] 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.
---
 black.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

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
-- 
2.39.5