| #!/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 |