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

Commit

Permalink
Only return exit code 1 when --check is used
Browse files Browse the repository at this point in the history
Also, output less confusing messages in --check.

Fixes pytest-dev#50
  • Loading branch information
ambv committed Mar 23, 2018
1 parent 7914a5b commit 8de552e
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 14 deletions.
14 changes: 9 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,10 @@ black [OPTIONS] [SRC]...
Options:
-l, --line-length INTEGER Where to wrap around. [default: 88]
--check Don't write back the files, just return the
status. Return code 0 means nothing changed.
Return code 1 means some files were reformatted.
Return code 123 means there was an internal
error.
status. Return code 0 means nothing would
change. Return code 1 means some files would be
reformatted. Return code 123 means there was an
internal error.
--fast / --safe If --fast given, skip temporary sanity checks.
[default: --safe]
--version Show the version and exit.
Expand All @@ -58,7 +58,9 @@ Options:
* it does nothing if no sources are passed to it;
* it will read from standard input and write to standard output if `-`
is used as the filename;
* it only outputs messages to users on standard error.
* it only outputs messages to users on standard error;
* exits with code 0 unless an internal error occured (or `--check` was
used).


## The philosophy behind *Black*
Expand Down Expand Up @@ -307,6 +309,8 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md).

### 18.3a4 (unreleased)

* only return exit code 1 when --check is used (#50)

* don't remove single trailing commas from square bracket indexing
(#59)

Expand Down
26 changes: 17 additions & 9 deletions black.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class CannotSplit(Exception):
is_flag=True,
help=(
"Don't write back the files, just return the status. Return code 0 "
"means nothing changed. Return code 1 means some files were "
"means nothing would change. Return code 1 means some files would be "
"reformatted. Return code 123 means there was an internal error."
),
)
Expand Down Expand Up @@ -100,7 +100,7 @@ def main(
ctx.exit(0)
elif len(sources) == 1:
p = sources[0]
report = Report()
report = Report(check=check)
try:
if not p.is_file() and str(p) == '-':
changed = format_stdin_to_stdout(
Expand Down Expand Up @@ -1438,14 +1438,16 @@ def gen_python_files_in_dir(path: Path) -> Iterator[Path]:
@dataclass
class Report:
"""Provides a reformatting counter."""
check: bool = False
change_count: int = 0
same_count: int = 0
failure_count: int = 0

def done(self, src: Path, changed: bool) -> None:
"""Increment the counter for successful reformatting. Write out a message."""
if changed:
out(f'reformatted {src}')
reformatted = 'would reformat' if self.check else 'reformatted'
out(f'{reformatted} {src}')
self.change_count += 1
else:
out(f'{src} already well formatted, good job.', bold=False)
Expand All @@ -1464,7 +1466,7 @@ def return_code(self) -> int:
if self.failure_count:
return 123

elif self.change_count:
elif self.change_count and self.check:
return 1

return 0
Expand All @@ -1474,21 +1476,27 @@ def __str__(self) -> str:
Use `click.unstyle` to remove colors.
"""
if self.check:
reformatted = "would be reformatted"
unchanged = "would be left unchanged"
failed = "would fail to reformat"
else:
reformatted = "reformatted"
unchanged = "left unchanged"
failed = "failed to reformat"
report = []
if self.change_count:
s = 's' if self.change_count > 1 else ''
report.append(
click.style(f'{self.change_count} file{s} reformatted', bold=True)
click.style(f'{self.change_count} file{s} {reformatted}', bold=True)
)
if self.same_count:
s = 's' if self.same_count > 1 else ''
report.append(f'{self.same_count} file{s} left unchanged')
report.append(f'{self.same_count} file{s} {unchanged}')
if self.failure_count:
s = 's' if self.failure_count > 1 else ''
report.append(
click.style(
f'{self.failure_count} file{s} failed to reformat', fg='red'
)
click.style(f'{self.failure_count} file{s} {failed}', fg='red')
)
return ', '.join(report) + '.'

Expand Down
9 changes: 9 additions & 0 deletions tests/test_black.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,10 @@ def err(msg: str, **kwargs: Any) -> None:
self.assertEqual(
unstyle(str(report)), '1 file reformatted, 1 file left unchanged.'
)
self.assertEqual(report.return_code, 0)
report.check = True
self.assertEqual(report.return_code, 1)
report.check = False
report.failed(Path('e1'), 'boom')
self.assertEqual(len(out_lines), 2)
self.assertEqual(len(err_lines), 1)
Expand Down Expand Up @@ -246,6 +249,12 @@ def err(msg: str, **kwargs: Any) -> None:
'2 files failed to reformat.',
)
self.assertEqual(report.return_code, 123)
report.check = True
self.assertEqual(
unstyle(str(report)),
'2 files would be reformatted, 2 files would be left unchanged, '
'2 files would fail to reformat.',
)

def test_is_python36(self) -> None:
node = black.lib2to3_parse("def f(*, arg): ...\n")
Expand Down

0 comments on commit 8de552e

Please sign in to comment.