12442de1351a8d9bee0912a09317122bb5bdb08bcandrew@webrtc.org# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 22442de1351a8d9bee0912a09317122bb5bdb08bcandrew@webrtc.org# 32442de1351a8d9bee0912a09317122bb5bdb08bcandrew@webrtc.org# Use of this source code is governed by a BSD-style license 42442de1351a8d9bee0912a09317122bb5bdb08bcandrew@webrtc.org# that can be found in the LICENSE file in the root of the source 52442de1351a8d9bee0912a09317122bb5bdb08bcandrew@webrtc.org# tree. An additional intellectual property rights grant can be found 62442de1351a8d9bee0912a09317122bb5bdb08bcandrew@webrtc.org# in the file PATENTS. All contributing project authors may 72442de1351a8d9bee0912a09317122bb5bdb08bcandrew@webrtc.org# be found in the AUTHORS file in the root of the source tree. 8da159d6be61ae8041ab265092c2d6ba0ca7b64f5niklase@google.com 9986ee082b628ffd3a90fbbe4b933a312489921e0kjellanderimport json 10aefe61ae2a392122994739adac54017e33cab9bfkjellander@webrtc.orgimport os 11986ee082b628ffd3a90fbbe4b933a312489921e0kjellanderimport platform 128575980e16b917b5d94e670a9c6da9029615b575kjellander@webrtc.orgimport re 13986ee082b628ffd3a90fbbe4b933a312489921e0kjellanderimport subprocess 143bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.orgimport sys 158575980e16b917b5d94e670a9c6da9029615b575kjellander@webrtc.org 168575980e16b917b5d94e670a9c6da9029615b575kjellander@webrtc.org 170fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org# Directories that will be scanned by cpplint by the presubmit script. 180fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.orgCPPLINT_DIRS = [ 19ea07373a2eb46f2732a8b5acef06a9b5078f37f8Fredrik Solenberg 'webrtc/audio', 20ea07373a2eb46f2732a8b5acef06a9b5078f37f8Fredrik Solenberg 'webrtc/call', 210f2e939a92fc1a70a67a9fc141d1f1d006bcded9jbauch 'webrtc/common_video', 2270625e5bf3c91c57bf704d380bcc9df86575f08ajbauch 'webrtc/examples', 238f09f170e650e14c4cd57c51be32a46e8cd1843bterelius 'webrtc/modules/remote_bitrate_estimator', 24377b5e622f3e2f4d3b564c0d64f40ff3b5d5acb5danilchap 'webrtc/modules/rtp_rtcp', 255908c71128aea207e42f86468aedb0a6fce3cccbphilipel 'webrtc/modules/video_coding', 2688eeac4aa7eaf22afc95bffbc8c2a2652b9222c8mflodman 'webrtc/modules/video_processing', 270f2e939a92fc1a70a67a9fc141d1f1d006bcded9jbauch 'webrtc/sound', 280f2e939a92fc1a70a67a9fc141d1f1d006bcded9jbauch 'webrtc/tools', 29d1590b2571c4cb33416e14c92e4f2dfed42ec3d4mflodman 'webrtc/video', 300fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org] 310fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org 32fd595235878df06e7737ba8b72e8792d31d58d8akjellander# List of directories of "supported" native APIs. That means changes to headers 33fd595235878df06e7737ba8b72e8792d31d58d8akjellander# will be done in a compatible way following this scheme: 34fd595235878df06e7737ba8b72e8792d31d58d8akjellander# 1. Non-breaking changes are made. 35fd595235878df06e7737ba8b72e8792d31d58d8akjellander# 2. The old APIs as marked as deprecated (with comments). 36fd595235878df06e7737ba8b72e8792d31d58d8akjellander# 3. Deprecation is announced to discuss-webrtc@googlegroups.com and 37fd595235878df06e7737ba8b72e8792d31d58d8akjellander# webrtc-users@google.com (internal list). 38fd595235878df06e7737ba8b72e8792d31d58d8akjellander# 4. (later) The deprecated APIs are removed. 39fd595235878df06e7737ba8b72e8792d31d58d8akjellander# Directories marked as DEPRECATED should not be used. They're only present in 40fd595235878df06e7737ba8b72e8792d31d58d8akjellander# the list to support legacy downstream code. 4153047c9739989251cbe7090865411b1469b47f5dkjellanderNATIVE_API_DIRS = ( 4253047c9739989251cbe7090865411b1469b47f5dkjellander 'talk/app/webrtc', 4353047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc', 44fd595235878df06e7737ba8b72e8792d31d58d8akjellander 'webrtc/base', # DEPRECATED. 45fd595235878df06e7737ba8b72e8792d31d58d8akjellander 'webrtc/common_audio/include', # DEPRECATED. 4653047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc/modules/audio_coding/include', 47fd595235878df06e7737ba8b72e8792d31d58d8akjellander 'webrtc/modules/audio_conference_mixer/include', # DEPRECATED. 4853047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc/modules/audio_device/include', 4953047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc/modules/audio_processing/include', 5053047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc/modules/bitrate_controller/include', 5153047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc/modules/include', 5253047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc/modules/remote_bitrate_estimator/include', 5353047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc/modules/rtp_rtcp/include', 54fd595235878df06e7737ba8b72e8792d31d58d8akjellander 'webrtc/modules/rtp_rtcp/source', # DEPRECATED. 5553047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc/modules/utility/include', 5653047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc/modules/video_coding/codecs/h264/include', 5753047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc/modules/video_coding/codecs/i420/include', 5853047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc/modules/video_coding/codecs/vp8/include', 5953047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc/modules/video_coding/codecs/vp9/include', 6053047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc/modules/video_coding/include', 61fd595235878df06e7737ba8b72e8792d31d58d8akjellander 'webrtc/system_wrappers/include', # DEPRECATED. 6253047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc/voice_engine/include', 6353047c9739989251cbe7090865411b1469b47f5dkjellander) 6453047c9739989251cbe7090865411b1469b47f5dkjellander 6553047c9739989251cbe7090865411b1469b47f5dkjellander 6653047c9739989251cbe7090865411b1469b47f5dkjellanderdef _VerifyNativeApiHeadersListIsValid(input_api, output_api): 6753047c9739989251cbe7090865411b1469b47f5dkjellander """Ensures the list of native API header directories is up to date.""" 6853047c9739989251cbe7090865411b1469b47f5dkjellander non_existing_paths = [] 6953047c9739989251cbe7090865411b1469b47f5dkjellander native_api_full_paths = [ 7053047c9739989251cbe7090865411b1469b47f5dkjellander input_api.os_path.join(input_api.PresubmitLocalPath(), 7153047c9739989251cbe7090865411b1469b47f5dkjellander *path.split('/')) for path in NATIVE_API_DIRS] 7253047c9739989251cbe7090865411b1469b47f5dkjellander for path in native_api_full_paths: 7353047c9739989251cbe7090865411b1469b47f5dkjellander if not os.path.isdir(path): 7453047c9739989251cbe7090865411b1469b47f5dkjellander non_existing_paths.append(path) 7553047c9739989251cbe7090865411b1469b47f5dkjellander if non_existing_paths: 7653047c9739989251cbe7090865411b1469b47f5dkjellander return [output_api.PresubmitError( 7753047c9739989251cbe7090865411b1469b47f5dkjellander 'Directories to native API headers have changed which has made the ' 7853047c9739989251cbe7090865411b1469b47f5dkjellander 'list in PRESUBMIT.py outdated.\nPlease update it to the current ' 7953047c9739989251cbe7090865411b1469b47f5dkjellander 'location of our native APIs.', 8053047c9739989251cbe7090865411b1469b47f5dkjellander non_existing_paths)] 8153047c9739989251cbe7090865411b1469b47f5dkjellander return [] 8253047c9739989251cbe7090865411b1469b47f5dkjellander 8353047c9739989251cbe7090865411b1469b47f5dkjellander 8453047c9739989251cbe7090865411b1469b47f5dkjellanderdef _CheckNativeApiHeaderChanges(input_api, output_api): 8553047c9739989251cbe7090865411b1469b47f5dkjellander """Checks to remind proper changing of native APIs.""" 8653047c9739989251cbe7090865411b1469b47f5dkjellander files = [] 8753047c9739989251cbe7090865411b1469b47f5dkjellander for f in input_api.AffectedSourceFiles(input_api.FilterSourceFile): 8853047c9739989251cbe7090865411b1469b47f5dkjellander if f.LocalPath().endswith('.h'): 8953047c9739989251cbe7090865411b1469b47f5dkjellander for path in NATIVE_API_DIRS: 9053047c9739989251cbe7090865411b1469b47f5dkjellander if os.path.dirname(f.LocalPath()) == path: 9153047c9739989251cbe7090865411b1469b47f5dkjellander files.append(f) 9253047c9739989251cbe7090865411b1469b47f5dkjellander 9353047c9739989251cbe7090865411b1469b47f5dkjellander if files: 94ffea13c42cc3ebc118b6261be688f88974cc7ab5kjellander return [output_api.PresubmitNotifyResult( 9553047c9739989251cbe7090865411b1469b47f5dkjellander 'You seem to be changing native API header files. Please make sure ' 9653047c9739989251cbe7090865411b1469b47f5dkjellander 'you:\n' 9753047c9739989251cbe7090865411b1469b47f5dkjellander ' 1. Make compatible changes that don\'t break existing clients.\n' 9853047c9739989251cbe7090865411b1469b47f5dkjellander ' 2. Mark the old APIs as deprecated.\n' 9953047c9739989251cbe7090865411b1469b47f5dkjellander ' 3. Create a timeline and plan for when the deprecated method will ' 10053047c9739989251cbe7090865411b1469b47f5dkjellander 'be removed (preferably 3 months or so).\n' 10153047c9739989251cbe7090865411b1469b47f5dkjellander ' 4. Update/inform existing downstream code owners to stop using the ' 10253047c9739989251cbe7090865411b1469b47f5dkjellander 'deprecated APIs: \n' 10353047c9739989251cbe7090865411b1469b47f5dkjellander 'send announcement to discuss-webrtc@googlegroups.com and ' 10453047c9739989251cbe7090865411b1469b47f5dkjellander 'webrtc-users@google.com.\n' 10553047c9739989251cbe7090865411b1469b47f5dkjellander ' 5. (after ~3 months) remove the deprecated API.\n' 10653047c9739989251cbe7090865411b1469b47f5dkjellander 'Related files:', 10753047c9739989251cbe7090865411b1469b47f5dkjellander files)] 10853047c9739989251cbe7090865411b1469b47f5dkjellander return [] 10953047c9739989251cbe7090865411b1469b47f5dkjellander 1100fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org 11151198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.orgdef _CheckNoIOStreamInHeaders(input_api, output_api): 11251198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org """Checks to make sure no .h files include <iostream>.""" 11351198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org files = [] 11451198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org pattern = input_api.re.compile(r'^#include\s*<iostream>', 11551198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org input_api.re.MULTILINE) 11651198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org for f in input_api.AffectedSourceFiles(input_api.FilterSourceFile): 11751198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org if not f.LocalPath().endswith('.h'): 11851198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org continue 11951198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org contents = input_api.ReadFile(f) 12051198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org if pattern.search(contents): 12151198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org files.append(f) 12251198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org 12351198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org if len(files): 12457e5fd2e604ff7e60425c3f7654b40da03fc763cHenrik Kjellander return [output_api.PresubmitError( 12551198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org 'Do not #include <iostream> in header files, since it inserts static ' + 12651198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org 'initialization into every file including the header. Instead, ' + 12751198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org '#include <ostream>. See http://crbug.com/94794', 12857e5fd2e604ff7e60425c3f7654b40da03fc763cHenrik Kjellander files)] 12951198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org return [] 13051198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org 131e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org 13251198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.orgdef _CheckNoFRIEND_TEST(input_api, output_api): 13351198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org """Make sure that gtest's FRIEND_TEST() macro is not used, the 13451198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org FRIEND_TEST_ALL_PREFIXES() macro from testsupport/gtest_prod_util.h should be 13551198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org used instead since that allows for FLAKY_, FAILS_ and DISABLED_ prefixes.""" 13651198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org problems = [] 13751198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org 13851198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org file_filter = lambda f: f.LocalPath().endswith(('.cc', '.h')) 13951198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org for f in input_api.AffectedFiles(file_filter=file_filter): 14051198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org for line_num, line in f.ChangedContents(): 14151198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org if 'FRIEND_TEST(' in line: 14251198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org problems.append(' %s:%d' % (f.LocalPath(), line_num)) 14351198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org 14451198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org if not problems: 14551198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org return [] 14651198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org return [output_api.PresubmitPromptWarning('WebRTC\'s code should not use ' 14751198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org 'gtest\'s FRIEND_TEST() macro. Include testsupport/gtest_prod_util.h and ' 14851198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org 'use FRIEND_TEST_ALL_PREFIXES() instead.\n' + '\n'.join(problems))] 14951198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org 150e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org 1510fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.orgdef _IsLintWhitelisted(whitelist_dirs, file_path): 1520fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org """ Checks if a file is whitelisted for lint check.""" 1530fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org for path in whitelist_dirs: 1540fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org if os.path.dirname(file_path).startswith(path): 1550fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org return True 1560fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org return False 1570fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org 1580fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org 1592a45209a6d17e12419e13592eba786e7ba7b1425mflodman@webrtc.orgdef _CheckApprovedFilesLintClean(input_api, output_api, 1602a45209a6d17e12419e13592eba786e7ba7b1425mflodman@webrtc.org source_file_filter=None): 1612a45209a6d17e12419e13592eba786e7ba7b1425mflodman@webrtc.org """Checks that all new or whitelisted .cc and .h files pass cpplint.py. 16251198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org This check is based on _CheckChangeLintsClean in 16351198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org depot_tools/presubmit_canned_checks.py but has less filters and only checks 16451198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org added files.""" 16551198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org result = [] 16651198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org 16751198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org # Initialize cpplint. 16851198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org import cpplint 16951198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org # Access to a protected member _XX of a client class 17051198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org # pylint: disable=W0212 17151198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org cpplint._cpplint_state.ResetErrorCounts() 17251198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org 1730fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org # Create a platform independent whitelist for the CPPLINT_DIRS. 1740fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org whitelist_dirs = [input_api.os_path.join(*path.split('/')) 1750fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org for path in CPPLINT_DIRS] 1760fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org 17751198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org # Use the strictest verbosity level for cpplint.py (level 1) which is the 17851198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org # default when running cpplint.py from command line. 17951198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org # To make it possible to work with not-yet-converted code, we're only applying 1802a45209a6d17e12419e13592eba786e7ba7b1425mflodman@webrtc.org # it to new (or moved/renamed) files and files listed in LINT_FOLDERS. 18151198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org verbosity_level = 1 18251198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org files = [] 18351198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org for f in input_api.AffectedSourceFiles(source_file_filter): 18457e5fd2e604ff7e60425c3f7654b40da03fc763cHenrik Kjellander # Note that moved/renamed files also count as added. 1850fcaf99b716c71e721db25f37f62dabf5dcbe69akjellander@webrtc.org if f.Action() == 'A' or _IsLintWhitelisted(whitelist_dirs, f.LocalPath()): 18651198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org files.append(f.AbsoluteLocalPath()) 1872a45209a6d17e12419e13592eba786e7ba7b1425mflodman@webrtc.org 18851198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org for file_name in files: 18951198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org cpplint.ProcessFile(file_name, verbosity_level) 19051198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org 19151198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org if cpplint._cpplint_state.error_count > 0: 19251198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org if input_api.is_committing: 19351198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org # TODO(kjellander): Change back to PresubmitError below when we're 19451198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org # confident with the lint settings. 19551198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org res_type = output_api.PresubmitPromptWarning 19651198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org else: 19751198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org res_type = output_api.PresubmitPromptWarning 19851198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org result = [res_type('Changelist failed cpplint.py check.')] 19951198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org 20051198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org return result 20151198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org 20283fe69da95bde17a8a80c4e9f8aaa1fe1439be85henrike@webrtc.orgdef _CheckNoRtcBaseDeps(input_api, gyp_files, output_api): 20383fe69da95bde17a8a80c4e9f8aaa1fe1439be85henrike@webrtc.org pattern = input_api.re.compile(r"base.gyp:rtc_base\s*'") 20483fe69da95bde17a8a80c4e9f8aaa1fe1439be85henrike@webrtc.org violating_files = [] 20583fe69da95bde17a8a80c4e9f8aaa1fe1439be85henrike@webrtc.org for f in gyp_files: 20636b0c1afae15e6cb47971ba81d1a8cf670045ccahenrike@webrtc.org gyp_exceptions = ( 20736b0c1afae15e6cb47971ba81d1a8cf670045ccahenrike@webrtc.org 'base_tests.gyp', 20836b0c1afae15e6cb47971ba81d1a8cf670045ccahenrike@webrtc.org 'desktop_capture.gypi', 20936b0c1afae15e6cb47971ba81d1a8cf670045ccahenrike@webrtc.org 'libjingle.gyp', 21028af64105b6dbe97e423e2f6cfde8e47a2df625ahenrike@webrtc.org 'libjingle_tests.gyp', 211e723728992de4626445fc7d3ca500cfea7c96890kjellander@webrtc.org 'p2p.gyp', 21236b0c1afae15e6cb47971ba81d1a8cf670045ccahenrike@webrtc.org 'sound.gyp', 21336b0c1afae15e6cb47971ba81d1a8cf670045ccahenrike@webrtc.org 'webrtc_test_common.gyp', 21436b0c1afae15e6cb47971ba81d1a8cf670045ccahenrike@webrtc.org 'webrtc_tests.gypi', 21536b0c1afae15e6cb47971ba81d1a8cf670045ccahenrike@webrtc.org ) 21636b0c1afae15e6cb47971ba81d1a8cf670045ccahenrike@webrtc.org if f.LocalPath().endswith(gyp_exceptions): 21736b0c1afae15e6cb47971ba81d1a8cf670045ccahenrike@webrtc.org continue 21883fe69da95bde17a8a80c4e9f8aaa1fe1439be85henrike@webrtc.org contents = input_api.ReadFile(f) 21983fe69da95bde17a8a80c4e9f8aaa1fe1439be85henrike@webrtc.org if pattern.search(contents): 22083fe69da95bde17a8a80c4e9f8aaa1fe1439be85henrike@webrtc.org violating_files.append(f) 22183fe69da95bde17a8a80c4e9f8aaa1fe1439be85henrike@webrtc.org if violating_files: 22283fe69da95bde17a8a80c4e9f8aaa1fe1439be85henrike@webrtc.org return [output_api.PresubmitError( 22383fe69da95bde17a8a80c4e9f8aaa1fe1439be85henrike@webrtc.org 'Depending on rtc_base is not allowed. Change your dependency to ' 22483fe69da95bde17a8a80c4e9f8aaa1fe1439be85henrike@webrtc.org 'rtc_base_approved and possibly sanitize and move the desired source ' 22583fe69da95bde17a8a80c4e9f8aaa1fe1439be85henrike@webrtc.org 'file(s) to rtc_base_approved.\nChanged GYP files:', 22683fe69da95bde17a8a80c4e9f8aaa1fe1439be85henrike@webrtc.org items=violating_files)] 22783fe69da95bde17a8a80c4e9f8aaa1fe1439be85henrike@webrtc.org return [] 228e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org 229f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.orgdef _CheckNoSourcesAboveGyp(input_api, gyp_files, output_api): 230f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org # Disallow referencing source files with paths above the GYP file location. 231f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org source_pattern = input_api.re.compile(r'sources.*?\[(.*?)\]', 232f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org re.MULTILINE | re.DOTALL) 233a33f05e8d7f293b5984b3cd7695eadefd16dcabakjellander@webrtc.org file_pattern = input_api.re.compile(r"'((\.\./.*?)|(<\(webrtc_root\).*?))'") 234f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org violating_gyp_files = set() 235f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org violating_source_entries = [] 236f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org for gyp_file in gyp_files: 237f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org contents = input_api.ReadFile(gyp_file) 238f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org for source_block_match in source_pattern.finditer(contents): 239c98f6f368a789955f4dec5a58e0163571021ac4akjellander@webrtc.org # Find all source list entries starting with ../ in the source block 240c98f6f368a789955f4dec5a58e0163571021ac4akjellander@webrtc.org # (exclude overrides entries). 241f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org for file_list_match in file_pattern.finditer(source_block_match.group(0)): 242c98f6f368a789955f4dec5a58e0163571021ac4akjellander@webrtc.org source_file = file_list_match.group(0) 243c98f6f368a789955f4dec5a58e0163571021ac4akjellander@webrtc.org if 'overrides/' not in source_file: 244c98f6f368a789955f4dec5a58e0163571021ac4akjellander@webrtc.org violating_source_entries.append(source_file) 245c98f6f368a789955f4dec5a58e0163571021ac4akjellander@webrtc.org violating_gyp_files.add(gyp_file) 246f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org if violating_gyp_files: 247f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org return [output_api.PresubmitError( 248f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org 'Referencing source files above the directory of the GYP file is not ' 249f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org 'allowed. Please introduce new GYP targets and/or GYP files in the ' 250f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org 'proper location instead.\n' 251f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org 'Invalid source entries:\n' 252f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org '%s\n' 253f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org 'Violating GYP files:' % '\n'.join(violating_source_entries), 254f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org items=violating_gyp_files)] 255f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org return [] 256f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org 257e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.orgdef _CheckGypChanges(input_api, output_api): 258e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org source_file_filter = lambda x: input_api.FilterSourceFile( 259e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org x, white_list=(r'.+\.(gyp|gypi)$',)) 260e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org 261e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org gyp_files = [] 262e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org for f in input_api.AffectedSourceFiles(source_file_filter): 2633398a4ac15c9954f7d6355607897060236c3169bkjellander@webrtc.org if f.LocalPath().startswith('webrtc'): 2643398a4ac15c9954f7d6355607897060236c3169bkjellander@webrtc.org gyp_files.append(f) 265e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org 266e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org result = [] 267e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org if gyp_files: 268e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org result.append(output_api.PresubmitNotifyResult( 269e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org 'As you\'re changing GYP files: please make sure corresponding ' 270e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org 'BUILD.gn files are also updated.\nChanged GYP files:', 271e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org items=gyp_files)) 27283fe69da95bde17a8a80c4e9f8aaa1fe1439be85henrike@webrtc.org result.extend(_CheckNoRtcBaseDeps(input_api, gyp_files, output_api)) 273f68ffca050438b8055b108228cca198686abc0c1kjellander@webrtc.org result.extend(_CheckNoSourcesAboveGyp(input_api, gyp_files, output_api)) 274e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org return result 275e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org 2763bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.orgdef _CheckUnwantedDependencies(input_api, output_api): 2773bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org """Runs checkdeps on #include statements added in this 2783bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org change. Breaking - rules is an error, breaking ! rules is a 2793bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org warning. 2803bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org """ 2813bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org # Copied from Chromium's src/PRESUBMIT.py. 2823bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org 2833bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org # We need to wait until we have an input_api object and use this 2843bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org # roundabout construct to import checkdeps because this file is 2853bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org # eval-ed and thus doesn't have __file__. 2863bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org original_sys_path = sys.path 2873bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org try: 288aefe61ae2a392122994739adac54017e33cab9bfkjellander@webrtc.org checkdeps_path = input_api.os_path.join(input_api.PresubmitLocalPath(), 289aefe61ae2a392122994739adac54017e33cab9bfkjellander@webrtc.org 'buildtools', 'checkdeps') 290aefe61ae2a392122994739adac54017e33cab9bfkjellander@webrtc.org if not os.path.exists(checkdeps_path): 291aefe61ae2a392122994739adac54017e33cab9bfkjellander@webrtc.org return [output_api.PresubmitError( 292aefe61ae2a392122994739adac54017e33cab9bfkjellander@webrtc.org 'Cannot find checkdeps at %s\nHave you run "gclient sync" to ' 293aefe61ae2a392122994739adac54017e33cab9bfkjellander@webrtc.org 'download Chromium and setup the symlinks?' % checkdeps_path)] 294aefe61ae2a392122994739adac54017e33cab9bfkjellander@webrtc.org sys.path.append(checkdeps_path) 2953bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org import checkdeps 2963bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org from cpp_checker import CppChecker 2973bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org from rules import Rule 2983bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org finally: 2993bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org # Restore sys.path to what it was before. 3003bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org sys.path = original_sys_path 3013bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org 3023bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org added_includes = [] 3033bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org for f in input_api.AffectedFiles(): 3043bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org if not CppChecker.IsCppFile(f.LocalPath()): 3053bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org continue 3063bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org 30757e5fd2e604ff7e60425c3f7654b40da03fc763cHenrik Kjellander changed_lines = [line for _, line in f.ChangedContents()] 3083bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org added_includes.append([f.LocalPath(), changed_lines]) 3093bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org 3103bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org deps_checker = checkdeps.DepsChecker(input_api.PresubmitLocalPath()) 3113bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org 3123bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org error_descriptions = [] 3133bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org warning_descriptions = [] 3143bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org for path, rule_type, rule_description in deps_checker.CheckAddedCppIncludes( 3153bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org added_includes): 3163bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org description_with_path = '%s\n %s' % (path, rule_description) 3173bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org if rule_type == Rule.DISALLOW: 3183bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org error_descriptions.append(description_with_path) 3193bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org else: 3203bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org warning_descriptions.append(description_with_path) 3213bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org 3223bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org results = [] 3233bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org if error_descriptions: 3243bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org results.append(output_api.PresubmitError( 3253bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org 'You added one or more #includes that violate checkdeps rules.', 3263bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org error_descriptions)) 3273bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org if warning_descriptions: 3283bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org results.append(output_api.PresubmitPromptOrNotify( 3293bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org 'You added one or more #includes of files that are temporarily\n' 3303bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org 'allowed but being removed. Can you avoid introducing the\n' 3313bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org '#include? See relevant DEPS file(s) for details and contacts.', 3323bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org warning_descriptions)) 3333bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org return results 3343bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org 335e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org 3368d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellanderdef _RunPythonTests(input_api, output_api): 3378d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander def join(*args): 3388d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander return input_api.os_path.join(input_api.PresubmitLocalPath(), *args) 3398d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander 3408d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander test_directories = [ 3418d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander join('tools', 'autoroller', 'unittests'), 3428d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander ] 3438d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander 3448d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander tests = [] 3458d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander for directory in test_directories: 3468d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander tests.extend( 3478d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander input_api.canned_checks.GetUnitTestsInDirectory( 3488d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander input_api, 3498d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander output_api, 3508d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander directory, 3518d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander whitelist=[r'.+_test\.py$'])) 3528d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander return input_api.RunTests(tests, parallel=True) 3538d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander 3548d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander 35553df136240bc78e8054085a2ef25c4240530a745andrew@webrtc.orgdef _CommonChecks(input_api, output_api): 35653df136240bc78e8054085a2ef25c4240530a745andrew@webrtc.org """Checks common to both upload and commit.""" 357da159d6be61ae8041ab265092c2d6ba0ca7b64f5niklase@google.com results = [] 35842f580e490e8343a87362dbb20207380d850372ctkchin # Filter out files that are in objc or ios dirs from being cpplint-ed since 35942f580e490e8343a87362dbb20207380d850372ctkchin # they do not follow C++ lint rules. 36042f580e490e8343a87362dbb20207380d850372ctkchin black_list = input_api.DEFAULT_BLACK_LIST + ( 36142f580e490e8343a87362dbb20207380d850372ctkchin r".*\bobjc[\\\/].*", 36242f580e490e8343a87362dbb20207380d850372ctkchin ) 36342f580e490e8343a87362dbb20207380d850372ctkchin source_file_filter = lambda x: input_api.FilterSourceFile(x, None, black_list) 36442f580e490e8343a87362dbb20207380d850372ctkchin results.extend(_CheckApprovedFilesLintClean( 36542f580e490e8343a87362dbb20207380d850372ctkchin input_api, output_api, source_file_filter)) 3665d37139374178479c16956a2a4eefd231206c2a1phoglund@webrtc.org results.extend(input_api.canned_checks.RunPylint(input_api, output_api, 3675d37139374178479c16956a2a4eefd231206c2a1phoglund@webrtc.org black_list=(r'^.*gviz_api\.py$', 3685d37139374178479c16956a2a4eefd231206c2a1phoglund@webrtc.org r'^.*gaeunit\.py$', 36933584f942c6e1723918d9d2b76f429ab8396751efischman@webrtc.org # Embedded shell-script fakes out pylint. 37014771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^build[\\\/].*\.py$', 37114771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^buildtools[\\\/].*\.py$', 37214771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^chromium[\\\/].*\.py$', 37314771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^google_apis[\\\/].*\.py$', 37414771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^net.*[\\\/].*\.py$', 37514771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^out.*[\\\/].*\.py$', 37614771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^testing[\\\/].*\.py$', 37714771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^third_party[\\\/].*\.py$', 37814771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^tools[\\\/]find_depot_tools.py$', 37914771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^tools[\\\/]clang[\\\/].*\.py$', 38014771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^tools[\\\/]generate_library_loader[\\\/].*\.py$', 38114771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^tools[\\\/]gn[\\\/].*\.py$', 38214771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^tools[\\\/]gyp[\\\/].*\.py$', 383d6d27e7340bca1598973e2197cf08d79ce9aeb04Henrik Kjellander r'^tools[\\\/]isolate_driver.py$', 38414771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^tools[\\\/]protoc_wrapper[\\\/].*\.py$', 38514771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^tools[\\\/]python[\\\/].*\.py$', 38614771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^tools[\\\/]python_charts[\\\/]data[\\\/].*\.py$', 38714771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^tools[\\\/]refactoring[\\\/].*\.py$', 38814771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^tools[\\\/]swarming_client[\\\/].*\.py$', 38914771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^tools[\\\/]vim[\\\/].*\.py$', 3905d37139374178479c16956a2a4eefd231206c2a1phoglund@webrtc.org # TODO(phoglund): should arguably be checked. 39114771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^tools[\\\/]valgrind-webrtc[\\\/].*\.py$', 39214771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^tools[\\\/]valgrind[\\\/].*\.py$', 39314771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^tools[\\\/]win[\\\/].*\.py$', 39414771ac6bfe0c66134425b99212f443f03231229Henrik Kjellander r'^xcodebuild.*[\\\/].*\.py$',), 3955d37139374178479c16956a2a4eefd231206c2a1phoglund@webrtc.org disabled_warnings=['F0401', # Failed to import x 3965d37139374178479c16956a2a4eefd231206c2a1phoglund@webrtc.org 'E0611', # No package y in x 3975d37139374178479c16956a2a4eefd231206c2a1phoglund@webrtc.org 'W0232', # Class has no __init__ method 39857e5fd2e604ff7e60425c3f7654b40da03fc763cHenrik Kjellander ], 39957e5fd2e604ff7e60425c3f7654b40da03fc763cHenrik Kjellander pylintrc='pylintrc')) 40057e5fd2e604ff7e60425c3f7654b40da03fc763cHenrik Kjellander # WebRTC can't use the presubmit_canned_checks.PanProjectChecks function since 40157e5fd2e604ff7e60425c3f7654b40da03fc763cHenrik Kjellander # we need to have different license checks in talk/ and webrtc/ directories. 40257e5fd2e604ff7e60425c3f7654b40da03fc763cHenrik Kjellander # Instead, hand-picked checks are included below. 403632246792fb208280a048fb2497a309c5a4d3690Henrik Kjellander 404632246792fb208280a048fb2497a309c5a4d3690Henrik Kjellander # Skip long-lines check for DEPS, GN and GYP files. 405632246792fb208280a048fb2497a309c5a4d3690Henrik Kjellander long_lines_sources = lambda x: input_api.FilterSourceFile(x, 406632246792fb208280a048fb2497a309c5a4d3690Henrik Kjellander black_list=(r'.+\.gyp$', r'.+\.gypi$', r'.+\.gn$', r'.+\.gni$', 'DEPS')) 4072442de1351a8d9bee0912a09317122bb5bdb08bcandrew@webrtc.org results.extend(input_api.canned_checks.CheckLongLines( 408632246792fb208280a048fb2497a309c5a4d3690Henrik Kjellander input_api, output_api, maxlen=80, source_file_filter=long_lines_sources)) 4092442de1351a8d9bee0912a09317122bb5bdb08bcandrew@webrtc.org results.extend(input_api.canned_checks.CheckChangeHasNoTabs( 4102442de1351a8d9bee0912a09317122bb5bdb08bcandrew@webrtc.org input_api, output_api)) 41153df136240bc78e8054085a2ef25c4240530a745andrew@webrtc.org results.extend(input_api.canned_checks.CheckChangeHasNoStrayWhitespace( 41253df136240bc78e8054085a2ef25c4240530a745andrew@webrtc.org input_api, output_api)) 41353df136240bc78e8054085a2ef25c4240530a745andrew@webrtc.org results.extend(input_api.canned_checks.CheckChangeTodoHasOwner( 41453df136240bc78e8054085a2ef25c4240530a745andrew@webrtc.org input_api, output_api)) 41553047c9739989251cbe7090865411b1469b47f5dkjellander results.extend(_CheckNativeApiHeaderChanges(input_api, output_api)) 41651198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org results.extend(_CheckNoIOStreamInHeaders(input_api, output_api)) 41751198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org results.extend(_CheckNoFRIEND_TEST(input_api, output_api)) 418e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org results.extend(_CheckGypChanges(input_api, output_api)) 4193bd4156d75b12c084026e8e31c12fd4b982374d3kjellander@webrtc.org results.extend(_CheckUnwantedDependencies(input_api, output_api)) 4208d3ad82d30f3634c49af07dad210449721b9d3d1Henrik Kjellander results.extend(_RunPythonTests(input_api, output_api)) 42153df136240bc78e8054085a2ef25c4240530a745andrew@webrtc.org return results 422da159d6be61ae8041ab265092c2d6ba0ca7b64f5niklase@google.com 423e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org 42453df136240bc78e8054085a2ef25c4240530a745andrew@webrtc.orgdef CheckChangeOnUpload(input_api, output_api): 42553df136240bc78e8054085a2ef25c4240530a745andrew@webrtc.org results = [] 42653df136240bc78e8054085a2ef25c4240530a745andrew@webrtc.org results.extend(_CommonChecks(input_api, output_api)) 42757e5fd2e604ff7e60425c3f7654b40da03fc763cHenrik Kjellander results.extend( 42857e5fd2e604ff7e60425c3f7654b40da03fc763cHenrik Kjellander input_api.canned_checks.CheckGNFormatted(input_api, output_api)) 4292442de1351a8d9bee0912a09317122bb5bdb08bcandrew@webrtc.org return results 430da159d6be61ae8041ab265092c2d6ba0ca7b64f5niklase@google.com 431e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org 4322442de1351a8d9bee0912a09317122bb5bdb08bcandrew@webrtc.orgdef CheckChangeOnCommit(input_api, output_api): 4331198db9dd6017a286590ce3a7095b1deda7b94a9niklase@google.com results = [] 43453df136240bc78e8054085a2ef25c4240530a745andrew@webrtc.org results.extend(_CommonChecks(input_api, output_api)) 43553047c9739989251cbe7090865411b1469b47f5dkjellander results.extend(_VerifyNativeApiHeadersListIsValid(input_api, output_api)) 4361198db9dd6017a286590ce3a7095b1deda7b94a9niklase@google.com results.extend(input_api.canned_checks.CheckOwners(input_api, output_api)) 43753df136240bc78e8054085a2ef25c4240530a745andrew@webrtc.org results.extend(input_api.canned_checks.CheckChangeWasUploaded( 43853df136240bc78e8054085a2ef25c4240530a745andrew@webrtc.org input_api, output_api)) 43953df136240bc78e8054085a2ef25c4240530a745andrew@webrtc.org results.extend(input_api.canned_checks.CheckChangeHasDescription( 44053df136240bc78e8054085a2ef25c4240530a745andrew@webrtc.org input_api, output_api)) 44151198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org results.extend(input_api.canned_checks.CheckChangeHasBugField( 44251198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org input_api, output_api)) 44351198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org results.extend(input_api.canned_checks.CheckChangeHasTestField( 44451198f1c683cff50986fd043dc2185bb336fed99kjellander@webrtc.org input_api, output_api)) 44512cb88cab9f3a1b4dbb60bebc4fc4fe6c705306ekjellander@webrtc.org results.extend(input_api.canned_checks.CheckTreeIsOpen( 44612cb88cab9f3a1b4dbb60bebc4fc4fe6c705306ekjellander@webrtc.org input_api, output_api, 44712cb88cab9f3a1b4dbb60bebc4fc4fe6c705306ekjellander@webrtc.org json_url='http://webrtc-status.appspot.com/current?format=json')) 4481198db9dd6017a286590ce3a7095b1deda7b94a9niklase@google.com return results 4498575980e16b917b5d94e670a9c6da9029615b575kjellander@webrtc.org 450e415864a326ce48ff2d41d4c9a3faed26c033450kjellander@webrtc.org 4518575980e16b917b5d94e670a9c6da9029615b575kjellander@webrtc.org# pylint: disable=W0613 452c7b8b2f2a75f0620a978f3e7eff057780d49ed5ckjellander@webrtc.orgdef GetPreferredTryMasters(project, change): 453986ee082b628ffd3a90fbbe4b933a312489921e0kjellander cq_config_path = os.path.join( 45404465d286e6a1a643c88fabddd44eb870f906c38tandrii change.RepositoryRoot(), 'infra', 'config', 'cq.cfg') 455986ee082b628ffd3a90fbbe4b933a312489921e0kjellander # commit_queue.py below is a script in depot_tools directory, which has a 456986ee082b628ffd3a90fbbe4b933a312489921e0kjellander # 'builders' command to retrieve a list of CQ builders from the CQ config. 457986ee082b628ffd3a90fbbe4b933a312489921e0kjellander is_win = platform.system() == 'Windows' 458986ee082b628ffd3a90fbbe4b933a312489921e0kjellander masters = json.loads(subprocess.check_output( 459986ee082b628ffd3a90fbbe4b933a312489921e0kjellander ['commit_queue', 'builders', cq_config_path], shell=is_win)) 460986ee082b628ffd3a90fbbe4b933a312489921e0kjellander 461986ee082b628ffd3a90fbbe4b933a312489921e0kjellander try_config = {} 462986ee082b628ffd3a90fbbe4b933a312489921e0kjellander for master in masters: 463986ee082b628ffd3a90fbbe4b933a312489921e0kjellander try_config.setdefault(master, {}) 464986ee082b628ffd3a90fbbe4b933a312489921e0kjellander for builder in masters[master]: 465986ee082b628ffd3a90fbbe4b933a312489921e0kjellander if 'presubmit' in builder: 466986ee082b628ffd3a90fbbe4b933a312489921e0kjellander # Do not trigger presubmit builders, since they're likely to fail 467986ee082b628ffd3a90fbbe4b933a312489921e0kjellander # (e.g. OWNERS checks before finished code review), and we're running 468986ee082b628ffd3a90fbbe4b933a312489921e0kjellander # local presubmit anyway. 469986ee082b628ffd3a90fbbe4b933a312489921e0kjellander pass 470986ee082b628ffd3a90fbbe4b933a312489921e0kjellander else: 471986ee082b628ffd3a90fbbe4b933a312489921e0kjellander try_config[master][builder] = ['defaulttests'] 472986ee082b628ffd3a90fbbe4b933a312489921e0kjellander 473986ee082b628ffd3a90fbbe4b933a312489921e0kjellander return try_config 474