blob: e196e32a6745648988aa1ffa1385a62562dd6450 [file] [log] [blame]
[email protected]377ab1da2011-03-17 15:36:281# Copyright (c) 2011 The Chromium Authors. All rights reserved.
[email protected]ca8d1982009-02-19 16:33:122# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Top-level presubmit script for Chromium.
6
[email protected]f1293792009-07-31 18:09:567See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
[email protected]50d7d721e2009-11-15 17:56:188for more details about the presubmit API built into gcl.
[email protected]ca8d1982009-02-19 16:33:129"""
10
[email protected]379e7dd2010-01-28 17:39:2111_EXCLUDED_PATHS = (
[email protected]3e4eb112011-01-18 03:29:5412 r"^breakpad[\\\/].*",
13 r"^net/tools/spdyshark/[\\\/].*",
14 r"^skia[\\\/].*",
15 r"^v8[\\\/].*",
16 r".*MakeFile$",
[email protected]4306417642009-06-11 00:33:4017)
[email protected]ca8d1982009-02-19 16:33:1218
[email protected]ca8d1982009-02-19 16:33:1219
[email protected]22c9bd72011-03-27 16:47:3920def _CheckNoInterfacesInBase(input_api, output_api):
[email protected]6a4c8e682010-12-19 03:31:3421 """Checks to make sure no files in libbase.a have |@interface|."""
[email protected]839c1392011-04-29 20:15:1922 pattern = input_api.re.compile(r'^\s*@interface', input_api.re.MULTILINE)
[email protected]6a4c8e682010-12-19 03:31:3423 files = []
[email protected]22c9bd72011-03-27 16:47:3924 for f in input_api.AffectedSourceFiles(input_api.FilterSourceFile):
[email protected]6a4c8e682010-12-19 03:31:3425 if (f.LocalPath().find('base/') != -1 and
26 f.LocalPath().find('base/test/') == -1):
27 contents = input_api.ReadFile(f)
28 if pattern.search(contents):
29 files.append(f)
30
31 if len(files):
32 return [ output_api.PresubmitError(
33 'Objective-C interfaces or categories are forbidden in libbase. ' +
34 'See http://groups.google.com/a/chromium.org/group/chromium-dev/' +
35 'browse_thread/thread/efb28c10435987fd',
36 files) ]
37 return []
38
[email protected]650c9082010-12-14 14:33:4439
[email protected]22c9bd72011-03-27 16:47:3940def _CommonChecks(input_api, output_api):
41 """Checks common to both upload and commit."""
42 results = []
43 results.extend(input_api.canned_checks.PanProjectChecks(
44 input_api, output_api, excluded_paths=_EXCLUDED_PATHS))
45 results.extend(_CheckNoInterfacesInBase(input_api, output_api))
46 return results
[email protected]1f7b4172010-01-28 01:17:3447
[email protected]b337cb5b2011-01-23 21:24:0548
49def _CheckSubversionConfig(input_api, output_api):
50 """Verifies the subversion config file is correctly setup.
51
52 Checks that autoprops are enabled, returns an error otherwise.
53 """
54 join = input_api.os_path.join
55 if input_api.platform == 'win32':
56 appdata = input_api.environ.get('APPDATA', '')
57 if not appdata:
58 return [output_api.PresubmitError('%APPDATA% is not configured.')]
59 path = join(appdata, 'Subversion', 'config')
60 else:
61 home = input_api.environ.get('HOME', '')
62 if not home:
63 return [output_api.PresubmitError('$HOME is not configured.')]
64 path = join(home, '.subversion', 'config')
65
66 error_msg = (
67 'Please look at http://dev.chromium.org/developers/coding-style to\n'
68 'configure your subversion configuration file. This enables automatic\n'
[email protected]c6a3c10b2011-01-24 16:14:2069 'properties to simplify the project maintenance.\n'
70 'Pro-tip: just download and install\n'
71 'http://src.chromium.org/viewvc/chrome/trunk/tools/build/slave/config\n')
[email protected]b337cb5b2011-01-23 21:24:0572
73 try:
74 lines = open(path, 'r').read().splitlines()
75 # Make sure auto-props is enabled and check for 2 Chromium standard
76 # auto-prop.
77 if (not '*.cc = svn:eol-style=LF' in lines or
78 not '*.pdf = svn:mime-type=application/pdf' in lines or
79 not 'enable-auto-props = yes' in lines):
80 return [
[email protected]79ed7e62011-02-21 21:08:5381 output_api.PresubmitNotifyResult(
[email protected]b337cb5b2011-01-23 21:24:0582 'It looks like you have not configured your subversion config '
[email protected]b5359c02011-02-01 20:29:5683 'file or it is not up-to-date.\n' + error_msg)
[email protected]b337cb5b2011-01-23 21:24:0584 ]
85 except (OSError, IOError):
86 return [
[email protected]79ed7e62011-02-21 21:08:5387 output_api.PresubmitNotifyResult(
[email protected]b337cb5b2011-01-23 21:24:0588 'Can\'t find your subversion config file.\n' + error_msg)
89 ]
90 return []
91
92
[email protected]1f7b4172010-01-28 01:17:3493def CheckChangeOnUpload(input_api, output_api):
94 results = []
95 results.extend(_CommonChecks(input_api, output_api))
[email protected]fe5f57c52009-06-05 14:25:5496 return results
[email protected]ca8d1982009-02-19 16:33:1297
98
99def CheckChangeOnCommit(input_api, output_api):
[email protected]fe5f57c52009-06-05 14:25:54100 results = []
[email protected]1f7b4172010-01-28 01:17:34101 results.extend(_CommonChecks(input_api, output_api))
[email protected]dd805fe2009-10-01 08:11:51102 # TODO(thestig) temporarily disabled, doesn't work in third_party/
103 #results.extend(input_api.canned_checks.CheckSvnModifiedDirectories(
104 # input_api, output_api, sources))
[email protected]fe5f57c52009-06-05 14:25:54105 # Make sure the tree is 'open'.
[email protected]806e98e2010-03-19 17:49:27106 results.extend(input_api.canned_checks.CheckTreeIsOpen(
[email protected]7f238152009-08-12 19:00:34107 input_api,
108 output_api,
[email protected]4efa42142010-08-26 01:29:26109 json_url='http://chromium-status.appspot.com/current?format=json'))
[email protected]806e98e2010-03-19 17:49:27110 results.extend(input_api.canned_checks.CheckRietveldTryJobExecution(input_api,
111 output_api, 'http://codereview.chromium.org', ('win', 'linux', 'mac'),
112 '[email protected]'))
113
[email protected]3e4eb112011-01-18 03:29:54114 results.extend(input_api.canned_checks.CheckChangeHasBugField(
115 input_api, output_api))
116 results.extend(input_api.canned_checks.CheckChangeHasTestField(
117 input_api, output_api))
[email protected]b337cb5b2011-01-23 21:24:05118 results.extend(_CheckSubversionConfig(input_api, output_api))
[email protected]fe5f57c52009-06-05 14:25:54119 return results
[email protected]ca8d1982009-02-19 16:33:12120
121
[email protected]5fa06292009-09-29 01:55:00122def GetPreferredTrySlaves():
123 return ['win', 'linux', 'mac']