blob: 2096425b550b6b8ab421411da09f5d4fac812c3c [file] [log] [blame]
maruel@chromium.org2a74d372011-03-29 19:05:50 +00001# Copyright (c) 2011 The Chromium Authors. All rights reserved.
maruel@chromium.org3d235242009-05-15 12:40:48 +00002# 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 depot tools.
6
7See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
maruel@chromium.org2a74d372011-03-29 19:05:50 +00008details on the presubmit API built into depot_tools.
maruel@chromium.org3d235242009-05-15 12:40:48 +00009"""
10
maruel@chromium.orgce30ef72009-05-25 15:20:42 +000011UNIT_TESTS = [
maruel@chromium.org35625c72011-03-23 17:34:02 +000012 'tests.fix_encoding_test',
maruel@chromium.orgce30ef72009-05-25 15:20:42 +000013 'tests.gcl_unittest',
maruel@chromium.orgad80e3b2010-09-09 14:18:28 +000014 'tests.gclient_scm_test',
maruel@chromium.org888b8352010-08-11 18:42:03 +000015 'tests.gclient_smoketest',
maruel@chromium.orgd5800f12009-11-12 20:03:43 +000016 'tests.gclient_utils_test',
dpranke@chromium.org5fe603e2011-03-09 21:02:50 +000017 'tests.owners_unittest',
maruel@chromium.orgce30ef72009-05-25 15:20:42 +000018 'tests.presubmit_unittest',
maruel@chromium.orgd5800f12009-11-12 20:03:43 +000019 'tests.scm_unittest',
maruel@chromium.orgce30ef72009-05-25 15:20:42 +000020 'tests.trychange_unittest',
nirnimesh@chromium.orgb82e4092009-06-18 14:24:08 +000021 'tests.watchlists_unittest',
maruel@chromium.orgce30ef72009-05-25 15:20:42 +000022]
maruel@chromium.org3d235242009-05-15 12:40:48 +000023
dpranke@chromium.org627ea672011-03-11 23:29:03 +000024
maruel@chromium.orge94aedc2010-12-13 21:11:30 +000025def CommonChecks(input_api, output_api):
maruel@chromium.org7b305e82009-05-19 18:24:20 +000026 output = []
maruel@chromium.org5d0dc432011-01-03 02:40:37 +000027 # Verify that LocalPath() is local, e.g.:
28 # os.path.join(PresubmitLocalPath(), LocalPath()) == AbsoluteLocalPath()
29 for i in input_api.AffectedFiles():
30 if (input_api.os_path.join(input_api.PresubmitLocalPath(), i.LocalPath()) !=
31 i.AbsoluteLocalPath()):
32 output.append(output_api.PresubmitError('Path inconsistency'))
33 # Return right away because it needs to be fixed first.
34 return output
35
dpranke@chromium.org8d840412011-03-17 23:43:45 +000036 output.extend(input_api.canned_checks.CheckOwners(input_api, output_api))
dpranke@chromium.org3ae183f2011-03-09 21:40:32 +000037
maruel@chromium.orge94aedc2010-12-13 21:11:30 +000038 output.extend(input_api.canned_checks.RunPythonUnitTests(
39 input_api,
40 output_api,
41 UNIT_TESTS))
maruel@chromium.orge94aedc2010-12-13 21:11:30 +000042
maruel@chromium.org5d0dc432011-01-03 02:40:37 +000043 white_list = [r'.*\.py$', r'^git-try$']
maruel@chromium.orgbf38a7e2010-12-14 18:15:54 +000044 black_list = list(input_api.DEFAULT_BLACK_LIST) + [
maruel@chromium.org5d0dc432011-01-03 02:40:37 +000045 r'^cpplint\.py$',
maruel@chromium.org2a74d372011-03-29 19:05:50 +000046 r'^tests[\/\\]\w+?[\/\\].+',
dpranke@chromium.org97ae58e2011-03-18 00:29:20 +000047 ]
maruel@chromium.orge94aedc2010-12-13 21:11:30 +000048 output.extend(input_api.canned_checks.RunPylint(
49 input_api,
50 output_api,
maruel@chromium.orgbf38a7e2010-12-14 18:15:54 +000051 white_list=white_list,
52 black_list=black_list))
maruel@chromium.org2a74d372011-03-29 19:05:50 +000053 output.extend(RunGitClTests(input_api, output_api))
54 return output
55
56
57def RunGitClTests(input_api, output_api):
58 """Run all the shells scripts in the directory test.
59 """
60 # Not exposed from InputApi.
61 from os import listdir
62
63 # First loads a local Rietveld instance.
64 import sys
65 old_sys_path = sys.path
66 try:
67 sys.path = [input_api.PresubmitLocalPath()] + sys.path
68 from tests import local_rietveld # pylint: disable=W0403
69 server = local_rietveld.LocalRietveld()
70 finally:
71 sys.path = old_sys_path
72
73 # Set to True for testing.
74 verbose = False
75 if verbose:
76 stdout = None
77 stderr = None
78 else:
79 stdout = input_api.subprocess.PIPE
80 stderr = input_api.subprocess.STDOUT
81 output = []
82 try:
83 # Start a local rietveld instance to test against.
84 server.start_server()
85 test_path = input_api.os_path.abspath(
86 input_api.os_path.join(input_api.PresubmitLocalPath(), 'tests'))
87 for test in listdir(test_path):
88 # test-lib.sh is not an actual test so it should not be run. The other
89 # tests are tests known to fail.
90 DISABLED_TESTS = (
91 'owners.sh', 'push-from-logs.sh', 'rename.sh', 'test-lib.sh')
92 if test in DISABLED_TESTS or not test.endswith('.sh'):
93 continue
94
95 print('Running %s' % test)
96 proc = input_api.subprocess.Popen(
97 [input_api.os_path.join(test_path, test)],
98 cwd=test_path,
99 stdout=stdout,
100 stderr=stderr)
101 proc.communicate()
102 if proc.returncode != 0:
103 output.append(output_api.PresubmitError('%s failed' % test))
104 except local_rietveld.Failure, e:
105 output.append(output_api.PresubmitError('\n'.join(str(i) for i in e.args)))
106 finally:
107 server.stop_server()
maruel@chromium.orgce30ef72009-05-25 15:20:42 +0000108 return output
109
110
maruel@chromium.orge94aedc2010-12-13 21:11:30 +0000111def CheckChangeOnUpload(input_api, output_api):
112 return CommonChecks(input_api, output_api)
113
114
maruel@chromium.orgce30ef72009-05-25 15:20:42 +0000115def CheckChangeOnCommit(input_api, output_api):
116 output = []
maruel@chromium.orge94aedc2010-12-13 21:11:30 +0000117 output.extend(CommonChecks(input_api, output_api))
118 output.extend(input_api.canned_checks.CheckDoNotSubmit(
119 input_api,
120 output_api))
maruel@chromium.org7b305e82009-05-19 18:24:20 +0000121 return output