Commit 70cb1875 authored by Brett Cannon's avatar Brett Cannon Committed by GitHub

Check the whitespace of pull requests on Travis (GH-2367)

parent 13e96cc5
...@@ -89,6 +89,11 @@ before_script: ...@@ -89,6 +89,11 @@ before_script:
fi fi
script: script:
# Using the built Python as patchcheck.py is built around the idea of using
# a checkout-build of CPython to know things like what base branch the changes
# should be compared against.
# Only run on Linux as the check only needs to be run once.
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./python Tools/scripts/patchcheck.py --travis $TRAVIS_PULL_REQUEST; fi
# `-r -w` implicitly provided through `make buildbottest`. # `-r -w` implicitly provided through `make buildbottest`.
- make buildbottest TESTOPTS="-j4 -uall,-cpu,-tzdata" - make buildbottest TESTOPTS="-j4 -uall,-cpu,-tzdata"
......
#!/usr/bin/env python3 #!/usr/bin/env python3
"""Check proposed changes for common issues."""
import re import re
import sys import sys
import shutil import shutil
...@@ -135,7 +136,7 @@ def report_modified_files(file_paths): ...@@ -135,7 +136,7 @@ def report_modified_files(file_paths):
return "\n".join(lines) return "\n".join(lines)
@status("Fixing whitespace", info=report_modified_files) @status("Fixing Python file whitespace", info=report_modified_files)
def normalize_whitespace(file_paths): def normalize_whitespace(file_paths):
"""Make sure that the whitespace for .py files have been normalized.""" """Make sure that the whitespace for .py files have been normalized."""
reindent.makebackup = False # No need to create backups. reindent.makebackup = False # No need to create backups.
...@@ -212,6 +213,27 @@ def regenerated_pyconfig_h_in(file_paths): ...@@ -212,6 +213,27 @@ def regenerated_pyconfig_h_in(file_paths):
else: else:
return "not needed" return "not needed"
def travis(pull_request):
if pull_request == 'false':
print('Not a pull request; skipping')
return
base_branch = get_base_branch()
file_paths = changed_files(base_branch)
python_files = [fn for fn in file_paths if fn.endswith('.py')]
c_files = [fn for fn in file_paths if fn.endswith(('.c', '.h'))]
doc_files = [fn for fn in file_paths if fn.startswith('Doc') and
fn.endswith(('.rst', '.inc'))]
fixed = []
fixed.extend(normalize_whitespace(python_files))
fixed.extend(normalize_c_whitespace(c_files))
fixed.extend(normalize_docs_whitespace(doc_files))
if not fixed:
print('No whitespace issues found')
else:
print(f'Please fix the {len(fixed)} file(s) with whitespace issues')
print('(on UNIX you can run `make patchcheck` to make the fixes)')
sys.exit(1)
def main(): def main():
base_branch = get_base_branch() base_branch = get_base_branch()
file_paths = changed_files(base_branch) file_paths = changed_files(base_branch)
...@@ -246,4 +268,12 @@ def main(): ...@@ -246,4 +268,12 @@ def main():
if __name__ == '__main__': if __name__ == '__main__':
main() import argparse
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--travis',
help='Perform pass/fail checks')
args = parser.parse_args()
if args.travis:
travis(args.travis)
else:
main()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment