From: Matt VanEseltine 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=inline 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