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
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())
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:
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) == "-":
quiet: bool,
loop: BaseEventLoop,
executor: Executor,
+ check: bool,
) -> int:
"""Run formatting of `sources` in parallel using the provided `executor`.
`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()
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()