Do not accidentally format files when only checking if they are formatted.

pull/8718/head
Jussi Pakkanen 4 years ago
parent 53f6ef3b7b
commit b2687e86c8
  1. 7
      mesonbuild/scripts/clangformat.py
  2. 7
      run_unittests.py

@ -36,12 +36,17 @@ def parse_pattern_file(fname: Path) -> T.List[str]:
return patterns
def run_clang_format(exelist: T.List[str], fname: Path, check: bool) -> subprocess.CompletedProcess:
if check:
original = fname.read_bytes()
before = fname.stat().st_mtime
ret = subprocess.run(exelist + ['-style=file', '-i', str(fname)])
args = ['-style=file', '-i', str(fname)]
ret = subprocess.run(exelist + args)
after = fname.stat().st_mtime
if before != after:
print('File reformatted: ', fname)
if check:
# Restore the original if only checking.
fname.write_bytes(original)
ret.returncode = 1
return ret

@ -5634,7 +5634,7 @@ class AllPlatformTests(BasePlatformTests):
self._run(cmd + python_command + [script])
self.assertEqual('This is text.', self._run(cmd + [app]).strip())
def test_clang_format(self):
def test_clang_format_check(self):
if self.backend is not Backend.ninja:
raise unittest.SkipTest(f'Skipping clang-format tests with {self.backend.name} backend')
if not shutil.which('clang-format'):
@ -5658,9 +5658,10 @@ class AllPlatformTests(BasePlatformTests):
output = self.build('clang-format-check')
self.assertEqual(1, output.count('File reformatted:'))
# All code has been reformatted already, so it should be no-op now.
# The check format should not touch any files. Thus
# running format again has some work to do.
output = self.build('clang-format')
self.assertEqual(0, output.count('File reformatted:'))
self.assertEqual(1, output.count('File reformatted:'))
self.build('clang-format-check')
def test_custom_target_implicit_include(self):

Loading…
Cancel
Save