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