| Index: presubmit_canned_checks.py
|
| ===================================================================
|
| --- presubmit_canned_checks.py (revision 79277)
|
| +++ presubmit_canned_checks.py (working copy)
|
| @@ -4,6 +4,9 @@
|
|
|
| """Generic presubmit checks that can be reused by other presubmit checks."""
|
|
|
| +import time
|
| +
|
| +
|
| ### Description checks
|
|
|
| def CheckChangeHasTestField(input_api, output_api):
|
| @@ -679,3 +682,119 @@
|
| approvers.append(m['sender'])
|
| return set(approvers)
|
|
|
| +
|
| +def _CheckConstNSObject(input_api, output_api, source_file_filter):
|
| + """Checks to make sure no objective-c files have |const NSSomeClass*|."""
|
| + pattern = input_api.re.compile(r'const\s+NS\w*\s*\*')
|
| +
|
| + def objective_c_filter(f):
|
| + return (source_file_filter(f) and
|
| + input_api.os_path.splitext(f.LocalPath())[1] in ('.h', '.mm'))
|
| +
|
| + files = []
|
| + for f in input_api.AffectedSourceFiles(objective_c_filter):
|
| + contents = input_api.ReadFile(f)
|
| + if pattern.search(contents):
|
| + files.append(f)
|
| +
|
| + if files:
|
| + if input_api.is_committing:
|
| + res_type = output_api.PresubmitPromptWarning
|
| + else:
|
| + res_type = output_api.PresubmitNotifyResult
|
| + return [ res_type('|const NSClass*| is wrong, see ' +
|
| + 'http://dev.chromium.org/developers/clang-mac',
|
| + files) ]
|
| + return []
|
| +
|
| +
|
| +def _CheckSingletonInHeaders(input_api, output_api, source_file_filter):
|
| + """Checks to make sure no header files have |Singleton<|."""
|
| + pattern = input_api.re.compile(r'Singleton<')
|
| + files = []
|
| + for f in input_api.AffectedSourceFiles(source_file_filter):
|
| + if (f.LocalPath().endswith('.h') or f.LocalPath().endswith('.hxx') or
|
| + f.LocalPath().endswith('.hpp') or f.LocalPath().endswith('.inl')):
|
| + contents = input_api.ReadFile(f)
|
| + if pattern.search(contents):
|
| + files.append(f)
|
| +
|
| + if files:
|
| + return [ output_api.PresubmitError(
|
| + 'Found Singleton<T> in the following header files.\n' +
|
| + 'Please move them to an appropriate source file so that the ' +
|
| + 'template gets instantiated in a single compilation unit.',
|
| + files) ]
|
| + return []
|
| +
|
| +
|
| +def PanProjectChecks(input_api, output_api,
|
| + excluded_paths=None, text_files=None,
|
| + license_header=None, project_name=None):
|
| + """Checks that ALL chromium orbit projects should use.
|
| +
|
| + These are checks to be run on all Chromium orbit project, including:
|
| + Chromium
|
| + Native Client
|
| + V8
|
| + When you update this function, please take this broad scope into account.
|
| + Args:
|
| + input_api: Bag of input related interfaces.
|
| + output_api: Bag of output related interfaces.
|
| + excluded_paths: Don't include these paths in common checks.
|
| + text_files: Which file are to be treated as documentation text files.
|
| + license_header: What license header should be on files.
|
| + project_name: What is the name of the project as it appears in the license.
|
| + Returns:
|
| + A list of warning or error objects.
|
| + """
|
| + excluded_paths = excluded_paths or tuple()
|
| + text_files = text_files or (
|
| + r'.*\.txt',
|
| + r'.*\.json',
|
| + )
|
| + project_name = project_name or 'Chromium'
|
| + license_header = license_header or (
|
| + r'.*? Copyright \(c\) %(year)s The %(project)s Authors\. '
|
| + r'All rights reserved\.\n'
|
| + r'.*? Use of this source code is governed by a BSD-style license that '
|
| + r'can be\n'
|
| + r'.*? found in the LICENSE file\.\n'
|
| + ) % {
|
| + 'year': time.strftime('%Y'),
|
| + 'project': project_name,
|
| + }
|
| +
|
| + results = []
|
| + # This code loads the default black list (e.g. third_party, experimental, etc)
|
| + # and add our black list (breakpad, skia and v8 are still not following
|
| + # google style and are not really living this repository).
|
| + # See presubmit_support.py InputApi.FilterSourceFile for the (simple) usage.
|
| + black_list = input_api.DEFAULT_BLACK_LIST + excluded_paths
|
| + white_list = input_api.DEFAULT_WHITE_LIST + text_files
|
| + sources = lambda x: input_api.FilterSourceFile(x, black_list=black_list)
|
| + text_files = lambda x: input_api.FilterSourceFile(x, black_list=black_list,
|
| + white_list=white_list)
|
| +
|
| + # TODO(dpranke): enable upload as well
|
| + if input_api.is_committing:
|
| + results.extend(input_api.canned_checks.CheckOwners(
|
| + input_api, output_api, source_file_filter=sources))
|
| +
|
| + results.extend(input_api.canned_checks.CheckLongLines(
|
| + input_api, output_api, source_file_filter=sources))
|
| + results.extend(input_api.canned_checks.CheckChangeHasNoTabs(
|
| + input_api, output_api, source_file_filter=sources))
|
| + results.extend(input_api.canned_checks.CheckChangeHasNoStrayWhitespace(
|
| + input_api, output_api, source_file_filter=sources))
|
| + results.extend(input_api.canned_checks.CheckChangeSvnEolStyle(
|
| + input_api, output_api, source_file_filter=text_files))
|
| + results.extend(input_api.canned_checks.CheckSvnForCommonMimeTypes(
|
| + input_api, output_api))
|
| + results.extend(input_api.canned_checks.CheckLicense(
|
| + input_api, output_api, license_header, source_file_filter=sources))
|
| + results.extend(_CheckConstNSObject(
|
| + input_api, output_api, source_file_filter=sources))
|
| + results.extend(_CheckSingletonInHeaders(
|
| + input_api, output_api, source_file_filter=sources))
|
| + return results
|
|
|