write cache in --check mode (#453)
Fixes #448. This diff makes us always write to the cache in normal mode, except if the file is already in the cache, and it makes us write to the cache in --check mode if the file is already well formatted. I also fixed some related docstrings. WriteBack.NO is now used only in tests.
This commit is contained in:
parent
cc48bc56ca
commit
9e15cacc67
28
black.py
28
black.py
@ -94,11 +94,12 @@ class WriteBack(Enum):
|
|||||||
NO = 0
|
NO = 0
|
||||||
YES = 1
|
YES = 1
|
||||||
DIFF = 2
|
DIFF = 2
|
||||||
|
CHECK = 3
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_configuration(cls, *, check: bool, diff: bool) -> "WriteBack":
|
def from_configuration(cls, *, check: bool, diff: bool) -> "WriteBack":
|
||||||
if check and not diff:
|
if check and not diff:
|
||||||
return cls.NO
|
return cls.CHECK
|
||||||
|
|
||||||
return cls.DIFF if diff else cls.YES
|
return cls.DIFF if diff else cls.YES
|
||||||
|
|
||||||
@ -398,7 +399,14 @@ def reformat_one(
|
|||||||
mode=mode,
|
mode=mode,
|
||||||
):
|
):
|
||||||
changed = Changed.YES
|
changed = Changed.YES
|
||||||
if write_back == WriteBack.YES and changed is not Changed.NO:
|
if write_back is WriteBack.YES:
|
||||||
|
should_write = changed is not Changed.CACHED
|
||||||
|
elif write_back is WriteBack.CHECK:
|
||||||
|
should_write = changed is Changed.NO
|
||||||
|
else:
|
||||||
|
should_write = False
|
||||||
|
|
||||||
|
if should_write:
|
||||||
write_cache(cache, [src], line_length, mode)
|
write_cache(cache, [src], line_length, mode)
|
||||||
report.done(src, changed)
|
report.done(src, changed)
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
@ -466,11 +474,17 @@ async def schedule_formatting(
|
|||||||
elif task.exception():
|
elif task.exception():
|
||||||
report.failed(src, str(task.exception()))
|
report.failed(src, str(task.exception()))
|
||||||
else:
|
else:
|
||||||
|
changed = Changed.YES if task.result() else Changed.NO
|
||||||
|
# In normal mode, write all files to the cache.
|
||||||
|
if write_back is WriteBack.YES:
|
||||||
formatted.append(src)
|
formatted.append(src)
|
||||||
report.done(src, Changed.YES if task.result() else Changed.NO)
|
# In check mode, write only unchanged files to the cache.
|
||||||
|
elif write_back is WriteBack.CHECK and changed is Changed.NO:
|
||||||
|
formatted.append(src)
|
||||||
|
report.done(src, changed)
|
||||||
if cancelled:
|
if cancelled:
|
||||||
await asyncio.gather(*cancelled, loop=loop, return_exceptions=True)
|
await asyncio.gather(*cancelled, loop=loop, return_exceptions=True)
|
||||||
if write_back == WriteBack.YES and formatted:
|
if write_back in (WriteBack.YES, WriteBack.CHECK) and formatted:
|
||||||
write_cache(cache, formatted, line_length, mode)
|
write_cache(cache, formatted, line_length, mode)
|
||||||
|
|
||||||
|
|
||||||
@ -484,7 +498,8 @@ def format_file_in_place(
|
|||||||
) -> bool:
|
) -> bool:
|
||||||
"""Format file under `src` path. Return True if changed.
|
"""Format file under `src` path. Return True if changed.
|
||||||
|
|
||||||
If `write_back` is True, write reformatted code back to stdout.
|
If `write_back` is DIFF, write a diff to stdout. If it is YES, write reformatted
|
||||||
|
code to the file.
|
||||||
`line_length` and `fast` options are passed to :func:`format_file_contents`.
|
`line_length` and `fast` options are passed to :func:`format_file_contents`.
|
||||||
"""
|
"""
|
||||||
if src.suffix == ".pyi":
|
if src.suffix == ".pyi":
|
||||||
@ -533,7 +548,8 @@ def format_stdin_to_stdout(
|
|||||||
) -> bool:
|
) -> bool:
|
||||||
"""Format file on stdin. Return True if changed.
|
"""Format file on stdin. Return True if changed.
|
||||||
|
|
||||||
If `write_back` is True, write reformatted code back to stdout.
|
If `write_back` is YES, write reformatted code back to stdout. If it is DIFF,
|
||||||
|
write a diff to stdout.
|
||||||
`line_length`, `fast`, `is_pyi`, and `force_py36` arguments are passed to
|
`line_length`, `fast`, `is_pyi`, and `force_py36` arguments are passed to
|
||||||
:func:`format_file_contents`.
|
:func:`format_file_contents`.
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user