]> granicus.if.org Git - python/commitdiff
Check the whitespace of pull requests on Travis (GH-2367)
authorBrett Cannon <brettcannon@users.noreply.github.com>
Sat, 24 Jun 2017 23:51:23 +0000 (16:51 -0700)
committerGitHub <noreply@github.com>
Sat, 24 Jun 2017 23:51:23 +0000 (16:51 -0700)
.travis.yml
Tools/scripts/patchcheck.py

index d30de21e82197d38e49d9a99dfb56a67c7d2b44a..4be6e4c2154079cebf9a0283de85fbcb58f80a5f 100644 (file)
@@ -89,6 +89,11 @@ before_script:
       fi
 
 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`.
   - make buildbottest TESTOPTS="-j4 -uall,-cpu,-tzdata"
 
index 33a9fead879325c41d6a8f7f605b13604b9e2c85..436b277b6ae866c890ff07f49b8b64786479efbe 100755 (executable)
@@ -1,4 +1,5 @@
 #!/usr/bin/env python3
+"""Check proposed changes for common issues."""
 import re
 import sys
 import shutil
@@ -135,7 +136,7 @@ def report_modified_files(file_paths):
         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):
     """Make sure that the whitespace for .py files have been normalized."""
     reindent.makebackup = False  # No need to create backups.
@@ -212,6 +213,27 @@ def regenerated_pyconfig_h_in(file_paths):
     else:
         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():
     base_branch = get_base_branch()
     file_paths = changed_files(base_branch)
@@ -246,4 +268,12 @@ def 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()