15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Chromium presubmit script for src/base. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)for more details on the presubmit API built into gcl. 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def _CheckNoInterfacesInBase(input_api, output_api): 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Checks to make sure no files in libbase.a have |@interface|.""" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern = input_api.re.compile(r'^\s*@interface', input_api.re.MULTILINE) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) files = [] 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for f in input_api.AffectedSourceFiles(input_api.FilterSourceFile): 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (f.LocalPath().startswith('base/') and 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) not "/test/" in f.LocalPath() and 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) not f.LocalPath().endswith('_unittest.mm') and 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) not f.LocalPath().endswith('mac/sdk_forward_declarations.h')): 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contents = input_api.ReadFile(f) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if pattern.search(contents): 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) files.append(f) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if len(files): 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return [ output_api.PresubmitError( 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'Objective-C interfaces or categories are forbidden in libbase. ' + 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'See http://groups.google.com/a/chromium.org/group/chromium-dev/' + 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'browse_thread/thread/efb28c10435987fd', 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) files) ] 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return [] 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def _CommonChecks(input_api, output_api): 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Checks common to both upload and commit.""" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) results = [] 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) results.extend(_CheckNoInterfacesInBase(input_api, output_api)) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return results 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def CheckChangeOnUpload(input_api, output_api): 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) results = [] 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) results.extend(_CommonChecks(input_api, output_api)) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return results 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def CheckChangeOnCommit(input_api, output_api): 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) results = [] 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) results.extend(_CommonChecks(input_api, output_api)) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return results 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)def GetPreferredTryMasters(project, change): 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return { 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'tryserver.chromium.linux': { 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'linux_chromium_rel_swarming': set(['defaulttests']), 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }, 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'tryserver.chromium.mac': { 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'mac_chromium_rel_swarming': set(['defaulttests']), 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }, 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'tryserver.chromium.win': { 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'win_chromium_rel_swarming': set(['defaulttests']), 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 63