|  | # 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. | 
|  |  | 
|  | """Chromium presubmit script for src/base. | 
|  |  | 
|  | See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts | 
|  | for more details on the presubmit API built into depot_tools. | 
|  | """ | 
|  |  | 
|  | def _CheckNoInterfacesInBase(input_api, output_api): | 
|  | """Checks to make sure no files in libbase.a have |@interface|.""" | 
|  | pattern = input_api.re.compile(r'^\s*@interface', input_api.re.MULTILINE) | 
|  | files = [] | 
|  | for f in input_api.AffectedSourceFiles(input_api.FilterSourceFile): | 
|  | if (f.LocalPath().startswith('base/') and | 
|  | not "/ios/" in f.LocalPath() and | 
|  | not "/test/" in f.LocalPath() and | 
|  | not f.LocalPath().endswith('_unittest.mm') and | 
|  | not f.LocalPath().endswith('mac/sdk_forward_declarations.h')): | 
|  | contents = input_api.ReadFile(f) | 
|  | if pattern.search(contents): | 
|  | files.append(f) | 
|  |  | 
|  | if len(files): | 
|  | return [ output_api.PresubmitError( | 
|  | 'Objective-C interfaces or categories are forbidden in libbase. ' + | 
|  | 'See http://groups.google.com/a/chromium.org/group/chromium-dev/' + | 
|  | 'browse_thread/thread/efb28c10435987fd', | 
|  | files) ] | 
|  | return [] | 
|  |  | 
|  |  | 
|  | def _CommonChecks(input_api, output_api): | 
|  | """Checks common to both upload and commit.""" | 
|  | results = [] | 
|  | results.extend(_CheckNoInterfacesInBase(input_api, output_api)) | 
|  | return results | 
|  |  | 
|  | def CheckChangeOnUpload(input_api, output_api): | 
|  | results = [] | 
|  | results.extend(_CommonChecks(input_api, output_api)) | 
|  | return results | 
|  |  | 
|  |  | 
|  | def CheckChangeOnCommit(input_api, output_api): | 
|  | results = [] | 
|  | results.extend(_CommonChecks(input_api, output_api)) | 
|  | return results |