From 03766f515b908b76a488da40fec3eeffb9369af7 Mon Sep 17 00:00:00 2001 From: Matt VanEseltine 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.2