summaryrefslogtreecommitdiff
path: root/mesonbuild/mformat.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/mformat.py')
-rw-r--r--mesonbuild/mformat.py18
1 files changed, 15 insertions, 3 deletions
diff --git a/mesonbuild/mformat.py b/mesonbuild/mformat.py
index ac36dc08b..0281ed532 100644
--- a/mesonbuild/mformat.py
+++ b/mesonbuild/mformat.py
@@ -3,6 +3,7 @@
from __future__ import annotations
+import difflib
import re
import typing as T
from configparser import ConfigParser, MissingSectionHeaderError, ParsingError
@@ -996,7 +997,13 @@ def add_arguments(parser: argparse.ArgumentParser) -> None:
inplace_group.add_argument(
'-q', '--check-only',
action='store_true',
- help='exit with 1 if files would be modified by meson format'
+ help='silently exit with 1 if files would be modified by meson format'
+ )
+ inplace_group.add_argument(
+ '-d', '--check-diff',
+ action='store_true',
+ default=False,
+ help='exit with 1 and show diff if files would be modified by meson format'
)
inplace_group.add_argument(
'-i', '--inplace',
@@ -1092,9 +1099,14 @@ def run(options: argparse.Namespace) -> int:
sf.write(formatted)
except IOError as e:
raise MesonException(f'Unable to write to {src_file}') from e
- elif options.check_only:
- # TODO: add verbose output showing diffs
+ elif options.check_only or options.check_diff:
if code != formatted:
+ if options.check_diff:
+ diff = difflib.unified_diff(code.splitlines(), formatted.splitlines(),
+ str(src_file), str(src_file),
+ '(original)', '(reformatted)',
+ lineterm='')
+ print('\n'.join(diff))
return 1
elif options.output:
try: