Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle .COLOR_DIFF in the same way as .DIFF #1673

Merged
merged 6 commits into from Sep 5, 2020
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/black/__init__.py
Expand Up @@ -661,7 +661,7 @@ def reformat_one(
changed = Changed.YES
else:
cache: Cache = {}
if write_back != WriteBack.DIFF:
if write_back not in (WriteBack.DIFF, WriteBack.COLOR_DIFF):
cache = read_cache(mode)
res_src = src.resolve()
if res_src in cache and cache[res_src] == get_cache_info(res_src):
Expand Down Expand Up @@ -735,7 +735,7 @@ async def schedule_formatting(
:func:`format_file_in_place`.
"""
cache: Cache = {}
if write_back != WriteBack.DIFF:
if write_back not in (WriteBack.DIFF, WriteBack.COLOR_DIFF):
cache = read_cache(mode)
sources, cached = filter_cached(cache, sources)
for src in sorted(cached):
Expand All @@ -746,7 +746,7 @@ async def schedule_formatting(
cancelled = []
sources_to_cache = []
lock = None
if write_back == WriteBack.DIFF:
if write_back in (WriteBack.DIFF, WriteBack.COLOR_DIFF):
# For diff output, we need locks to ensure we don't interleave output
# from different processes.
manager = Manager()
Expand Down
53 changes: 50 additions & 3 deletions tests/test_black.py
@@ -1,4 +1,5 @@
#!/usr/bin/env python3
import multiprocessing
import asyncio
import logging
from concurrent.futures import ThreadPoolExecutor
Expand Down Expand Up @@ -1395,9 +1396,55 @@ def test_no_cache_when_writeback_diff(self) -> None:
src = (workspace / "test.py").resolve()
with src.open("w") as fobj:
fobj.write("print('hello')")
self.invokeBlack([str(src), "--diff"])
cache_file = black.get_cache_file(mode)
self.assertFalse(cache_file.exists())
with patch("black.read_cache") as read_cache, patch(
"black.write_cache"
) as write_cache:
self.invokeBlack([str(src), "--diff"])
cache_file = black.get_cache_file(mode)
self.assertFalse(cache_file.exists())
write_cache.assert_not_called()
read_cache.assert_not_called()

def test_no_cache_when_writeback_color_diff(self) -> None:
mode = DEFAULT_MODE
with cache_dir() as workspace:
src = (workspace / "test.py").resolve()
with src.open("w") as fobj:
fobj.write("print('hello')")
with patch("black.read_cache") as read_cache, patch(
"black.write_cache"
) as write_cache:
self.invokeBlack([str(src), "--diff", "--color"])
cache_file = black.get_cache_file(mode)
self.assertFalse(cache_file.exists())
write_cache.assert_not_called()
read_cache.assert_not_called()

@event_loop()
def test_output_locking_when_writeback_diff(self) -> None:
with cache_dir() as workspace:
for tag in range(0, 4):
src = (workspace / f"test{tag}.py").resolve()
with src.open("w") as fobj:
fobj.write("print('hello')")
with patch("black.Manager", wraps=multiprocessing.Manager) as mgr:
self.invokeBlack(["--diff", str(workspace)], exit_code=0)
# this isn't quite doing what we want, but if it _isn't_
# called then we cannot be using the lock it provides
mgr.assert_called()

@event_loop()
def test_output_locking_when_writeback_color_diff(self) -> None:
with cache_dir() as workspace:
for tag in range(0, 4):
src = (workspace / f"test{tag}.py").resolve()
with src.open("w") as fobj:
fobj.write("print('hello')")
with patch("black.Manager", wraps=multiprocessing.Manager) as mgr:
self.invokeBlack(["--diff", "--color", str(workspace)], exit_code=0)
# this isn't quite doing what we want, but if it _isn't_
# called then we cannot be using the lock it provides
mgr.assert_called()

def test_no_cache_when_stdin(self) -> None:
mode = DEFAULT_MODE
Expand Down