Skip to content
This repository was archived by the owner on Jul 11, 2022. It is now read-only.

Commit

Permalink
[pytest-dev#149] Make check and diff not mutually exclusive (pytest-d…
Browse files Browse the repository at this point in the history
  • Loading branch information
csurfer authored and ambv committed Apr 23, 2018
1 parent b07ca2b commit 5e1e1a1
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 10 deletions.
24 changes: 14 additions & 10 deletions black.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,12 +184,8 @@ def main(
sources.append(Path("-"))
else:
err(f"invalid path: {s}")
if check and diff:
exc = click.ClickException("Options --check and --diff are mutually exclusive")
exc.exit_code = 2
raise exc

if check:
if check and not diff:
write_back = WriteBack.NO
elif diff:
write_back = WriteBack.DIFF
Expand All @@ -200,15 +196,17 @@ def main(
return

elif len(sources) == 1:
return_code = reformat_one(sources[0], line_length, fast, quiet, write_back)
return_code = reformat_one(
sources[0], line_length, fast, quiet, write_back, check
)
else:
loop = asyncio.get_event_loop()
executor = ProcessPoolExecutor(max_workers=os.cpu_count())
return_code = 1
try:
return_code = loop.run_until_complete(
schedule_formatting(
sources, line_length, write_back, fast, quiet, loop, executor
sources, line_length, write_back, fast, quiet, loop, executor, check
)
)
finally:
Expand All @@ -217,14 +215,19 @@ def main(


def reformat_one(
src: Path, line_length: int, fast: bool, quiet: bool, write_back: WriteBack
src: Path,
line_length: int,
fast: bool,
quiet: bool,
write_back: WriteBack,
check: bool,
) -> int:
"""Reformat a single file under `src` without spawning child processes.
If `quiet` is True, non-error messages are not output. `line_length`,
`write_back`, and `fast` options are passed to :func:`format_file_in_place`.
"""
report = Report(check=write_back is WriteBack.NO, quiet=quiet)
report = Report(check=check, quiet=quiet)
try:
changed = Changed.NO
if not src.is_file() and str(src) == "-":
Expand Down Expand Up @@ -262,6 +265,7 @@ async def schedule_formatting(
quiet: bool,
loop: BaseEventLoop,
executor: Executor,
check: bool,
) -> int:
"""Run formatting of `sources` in parallel using the provided `executor`.
Expand All @@ -270,7 +274,7 @@ async def schedule_formatting(
`line_length`, `write_back`, and `fast` options are passed to
:func:`format_file_in_place`.
"""
report = Report(check=write_back is WriteBack.NO, quiet=quiet)
report = Report(check=check, quiet=quiet)
cache: Cache = {}
if write_back != WriteBack.DIFF:
cache = read_cache()
Expand Down
18 changes: 18 additions & 0 deletions tests/test_black.py
Original file line number Diff line number Diff line change
Expand Up @@ -595,6 +595,24 @@ def test_write_cache_write_fail(self) -> None:
mock.side_effect = OSError
black.write_cache({}, [])

def test_check_diff_use_together(self) -> None:
with cache_dir():
# Files which will be reformatted.
src1 = (THIS_DIR / "string_quotes.py").resolve()
result = CliRunner().invoke(black.main, [str(src1), "--diff", "--check"])
self.assertEqual(result.exit_code, 1)

# Files which will not be reformatted.
src2 = (THIS_DIR / "composition.py").resolve()
result = CliRunner().invoke(black.main, [str(src2), "--diff", "--check"])
self.assertEqual(result.exit_code, 0)

# Multi file command.
result = CliRunner().invoke(
black.main, [str(src1), str(src2), "--diff", "--check"]
)
self.assertEqual(result.exit_code, 1)


if __name__ == "__main__":
unittest.main()

0 comments on commit 5e1e1a1

Please sign in to comment.