Index: PRESUBMIT.py |
=================================================================== |
--- PRESUBMIT.py (revision 0) |
+++ PRESUBMIT.py (revision 0) |
@@ -0,0 +1,73 @@ |
+#!/usr/bin/python |
+# Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""Top-level presubmit script for Chromium. |
+ |
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for |
+details on the presubmit API built into gcl. |
+""" |
+ |
+ |
+import os |
+ |
+ |
+# Files with these extensions will be considered source files |
+SOURCE_FILE_EXTENSIONS = ['.c', '.cc', '.cpp', '.h', '.m', '.mm', '.py'] |
+ |
+ |
+def ReadFile(path): |
+ """Given a path, returns the full contents of the file. |
+ |
+ Reads files in binary format. |
+ """ |
+ fo = open(path, 'rb') |
+ try: |
+ contents = fo.read() |
+ finally: |
+ fo.close() |
+ return contents |
+ |
+ |
+# Seam for unit testing |
+_ReadFile = ReadFile |
+ |
+ |
+def CheckChangeOnUpload(input_api, output_api): |
+ return (CheckNoCrOrTabs(input_api, output_api) + |
+ input_api.canned_checks.CheckDoNotSubmit(input_api, output_api)) |
+ |
+ |
+def CheckChangeOnCommit(input_api, output_api): |
+ # No extra checks on commit for now |
+ return CheckChangeOnUpload(input_api, output_api) |
+ |
+ |
+def CheckNoCrOrTabs(input_api, output_api): |
+ """Reports an error if source files use CR (or CRLF) or TAB. |
+ """ |
+ cr_files = [] |
+ tab_files = [] |
+ results = [] |
+ |
+ for f in input_api.AffectedTextFiles(include_deletes=False): |
+ path = f.LocalPath() |
+ root, ext = os.path.splitext(path) |
+ if ext in SOURCE_FILE_EXTENSIONS: |
+ # Need to read the file ourselves since AffectedFile.NewContents() |
+ # will normalize line endings. |
+ contents = _ReadFile(path) |
+ if '\r' in contents: |
+ cr_files.append(path) |
+ if '\t' in contents: |
+ tab_files.append(path) |
+ if cr_files: |
+ results.append(output_api.PresubmitError( |
+ 'Found CR (or CRLF) line ending in these files, please use only LF:', |
+ items=cr_files)) |
+ if tab_files: |
+ results.append(output_api.PresubmitError( |
+ 'Found tabs in the following files, please use spaces', |
+ items=tab_files)) |
+ return results |