| # Copyright (c) 2012 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 more details about the presubmit API built into depot_tools. |
| """ |
| PRESUBMIT_VERSION = '2.0.0' |
| |
| # This line is 'magic' in that git-cl looks for it to decide whether to |
| # use Python3 instead of Python2 when running the code in this file. |
| USE_PYTHON3 = True |
| |
| # This list must be kept in sync with the lists in //.eleventy.js and |
| # //scripts/upload_lobs.py. |
| # TODO(dpranke): Figure out how to share these lists to eliminate the |
| # duplication and need to keep them in sync. |
| |
| LOB_EXTENSIONS = [ |
| '.ai', |
| '.bin', |
| '.bmp', |
| '.bz2', |
| '.crx', |
| '.dia', |
| '.msi', |
| '.gif', |
| '.ico', |
| '.jpg', |
| '.jpeg', |
| '.mp4', |
| '.pdf', |
| '.png', |
| '.PNG', |
| '.swf', |
| '.tar.gz', |
| '.tiff', |
| '.webp', |
| '.xcf', |
| '.xlsx', |
| '.zip' |
| ] |
| |
| import os |
| |
| def CheckPatchFormatted(input_api, output_api): |
| return input_api.canned_checks.CheckPatchFormatted(input_api, output_api) |
| |
| |
| def CheckChangeHasDescription(input_api, output_api): |
| return input_api.canned_checks.CheckChangeHasDescription( |
| input_api, output_api) |
| |
| def CheckForLobs(input_api, output_api): |
| output_status = [] |
| for file in input_api.change.AffectedFiles(): |
| # The tar.gz for example prevents using a hashmap to look up the extension |
| for ext in LOB_EXTENSIONS: |
| if str(file).endswith(ext) and file.Action() != 'D': |
| error_msg = ('The file \'{file_name}\' is a binary that has not been ' |
| 'uploaded to GCE. Please run:\n\tscripts/upload_lobs.py ' |
| '"{file_name}"\nand commit {file_name}.sha1 instead' |
| .format(file_name = file.LocalPath())) |
| |
| error = output_api.PresubmitError(error_msg) |
| output_status.append(error) |
| break |
| |
| return output_status |
| |
| def CheckLobIgnores(input_api, output_api): |
| output_status = [] |
| with open("site/.gitignore", 'r+') as ignore_file: |
| ignored_lobs = set(line.rstrip() for line in ignore_file.readlines()) |
| |
| for ignored_lob in ignored_lobs: |
| lob_sha_file = os.path.join('site', ignored_lob + '.sha1') |
| if not os.path.exists(lob_sha_file): |
| error_msg = ('The sha1 file \'{removed_file}\' no longer exists, ' |
| 'please remove {ignored_file} from site/.gitignore' |
| .format(removed_file = lob_sha_file, ignored_file = ignored_lob)) |
| |
| error = output_api.PresubmitError(error_msg) |
| output_status.append(error) |
| return output_status |