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