| OLD | NEW |
| 1 # Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 1 # Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 2 # | 2 # |
| 3 # Use of this source code is governed by a BSD-style license | 3 # Use of this source code is governed by a BSD-style license |
| 4 # that can be found in the LICENSE file in the root of the source | 4 # that can be found in the LICENSE file in the root of the source |
| 5 # tree. An additional intellectual property rights grant can be found | 5 # tree. An additional intellectual property rights grant can be found |
| 6 # in the file PATENTS. All contributing project authors may | 6 # in the file PATENTS. All contributing project authors may |
| 7 # be found in the AUTHORS file in the root of the source tree. | 7 # be found in the AUTHORS file in the root of the source tree. |
| 8 | 8 |
| 9 import json | 9 import json |
| 10 import os | 10 import os |
| 11 import platform | 11 import platform |
| 12 import re | 12 import re |
| 13 import subprocess | 13 import subprocess |
| 14 import sys | 14 import sys |
| 15 | 15 |
| 16 | 16 |
| 17 # Directories that will be scanned by cpplint by the presubmit script. | 17 # Directories that will be scanned by cpplint by the presubmit script. |
| 18 CPPLINT_DIRS = [ | 18 CPPLINT_DIRS = [ |
| 19 'webrtc/video_engine', | 19 'webrtc/video_engine', |
| 20 ] | 20 ] |
| 21 | 21 |
| 22 NATIVE_API_DIRS = ( |
| 23 'talk/app/webrtc', |
| 24 'webrtc', |
| 25 'webrtc/common_audio/include', # DEPRECATED (will go away). |
| 26 'webrtc/modules/audio_coding/include', |
| 27 'webrtc/modules/audio_conference_mixer/include', # DEPRECATED (will go away). |
| 28 'webrtc/modules/audio_device/include', |
| 29 'webrtc/modules/audio_processing/include', |
| 30 'webrtc/modules/bitrate_controller/include', |
| 31 'webrtc/modules/include', |
| 32 'webrtc/modules/remote_bitrate_estimator/include', |
| 33 'webrtc/modules/rtp_rtcp/include', |
| 34 'webrtc/modules/rtp_rtcp/source', # DEPRECATED (will go away). |
| 35 'webrtc/modules/utility/include', |
| 36 'webrtc/modules/video_coding/codecs/h264/include', |
| 37 'webrtc/modules/video_coding/codecs/i420/include', |
| 38 'webrtc/modules/video_coding/codecs/vp8/include', |
| 39 'webrtc/modules/video_coding/codecs/vp9/include', |
| 40 'webrtc/modules/video_coding/include', |
| 41 'webrtc/system_wrappers/include', # DEPRECATED (will go away). |
| 42 'webrtc/voice_engine/include', |
| 43 ) |
| 44 |
| 45 |
| 46 def _VerifyNativeApiHeadersListIsValid(input_api, output_api): |
| 47 """Ensures the list of native API header directories is up to date.""" |
| 48 non_existing_paths = [] |
| 49 native_api_full_paths = [ |
| 50 input_api.os_path.join(input_api.PresubmitLocalPath(), |
| 51 *path.split('/')) for path in NATIVE_API_DIRS] |
| 52 for path in native_api_full_paths: |
| 53 if not os.path.isdir(path): |
| 54 non_existing_paths.append(path) |
| 55 if non_existing_paths: |
| 56 return [output_api.PresubmitError( |
| 57 'Directories to native API headers have changed which has made the ' |
| 58 'list in PRESUBMIT.py outdated.\nPlease update it to the current ' |
| 59 'location of our native APIs.', |
| 60 non_existing_paths)] |
| 61 return [] |
| 62 |
| 63 |
| 64 def _CheckNativeApiHeaderChanges(input_api, output_api): |
| 65 """Checks to remind proper changing of native APIs.""" |
| 66 files = [] |
| 67 for f in input_api.AffectedSourceFiles(input_api.FilterSourceFile): |
| 68 if f.LocalPath().endswith('.h'): |
| 69 for path in NATIVE_API_DIRS: |
| 70 if os.path.dirname(f.LocalPath()) == path: |
| 71 files.append(f) |
| 72 |
| 73 if files: |
| 74 return [output_api.PresubmitPromptWarning( |
| 75 'You seem to be changing native API header files. Please make sure ' |
| 76 'you:\n' |
| 77 ' 1. Make compatible changes that don\'t break existing clients.\n' |
| 78 ' 2. Mark the old APIs as deprecated.\n' |
| 79 ' 3. Create a timeline and plan for when the deprecated method will ' |
| 80 'be removed (preferably 3 months or so).\n' |
| 81 ' 4. Update/inform existing downstream code owners to stop using the ' |
| 82 'deprecated APIs: \n' |
| 83 'send announcement to discuss-webrtc@googlegroups.com and ' |
| 84 'webrtc-users@google.com.\n' |
| 85 ' 5. (after ~3 months) remove the deprecated API.\n' |
| 86 'Related files:', |
| 87 files)] |
| 88 return [] |
| 89 |
| 22 | 90 |
| 23 def _CheckNoIOStreamInHeaders(input_api, output_api): | 91 def _CheckNoIOStreamInHeaders(input_api, output_api): |
| 24 """Checks to make sure no .h files include <iostream>.""" | 92 """Checks to make sure no .h files include <iostream>.""" |
| 25 files = [] | 93 files = [] |
| 26 pattern = input_api.re.compile(r'^#include\s*<iostream>', | 94 pattern = input_api.re.compile(r'^#include\s*<iostream>', |
| 27 input_api.re.MULTILINE) | 95 input_api.re.MULTILINE) |
| 28 for f in input_api.AffectedSourceFiles(input_api.FilterSourceFile): | 96 for f in input_api.AffectedSourceFiles(input_api.FilterSourceFile): |
| 29 if not f.LocalPath().endswith('.h'): | 97 if not f.LocalPath().endswith('.h'): |
| 30 continue | 98 continue |
| 31 contents = input_api.ReadFile(f) | 99 contents = input_api.ReadFile(f) |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 317 long_lines_sources = lambda x: input_api.FilterSourceFile(x, | 385 long_lines_sources = lambda x: input_api.FilterSourceFile(x, |
| 318 black_list=(r'.+\.gyp$', r'.+\.gypi$', r'.+\.gn$', r'.+\.gni$', 'DEPS')) | 386 black_list=(r'.+\.gyp$', r'.+\.gypi$', r'.+\.gn$', r'.+\.gni$', 'DEPS')) |
| 319 results.extend(input_api.canned_checks.CheckLongLines( | 387 results.extend(input_api.canned_checks.CheckLongLines( |
| 320 input_api, output_api, maxlen=80, source_file_filter=long_lines_sources)) | 388 input_api, output_api, maxlen=80, source_file_filter=long_lines_sources)) |
| 321 results.extend(input_api.canned_checks.CheckChangeHasNoTabs( | 389 results.extend(input_api.canned_checks.CheckChangeHasNoTabs( |
| 322 input_api, output_api)) | 390 input_api, output_api)) |
| 323 results.extend(input_api.canned_checks.CheckChangeHasNoStrayWhitespace( | 391 results.extend(input_api.canned_checks.CheckChangeHasNoStrayWhitespace( |
| 324 input_api, output_api)) | 392 input_api, output_api)) |
| 325 results.extend(input_api.canned_checks.CheckChangeTodoHasOwner( | 393 results.extend(input_api.canned_checks.CheckChangeTodoHasOwner( |
| 326 input_api, output_api)) | 394 input_api, output_api)) |
| 395 results.extend(_CheckApprovedFilesLintClean(input_api, output_api)) |
| 396 results.extend(_CheckNativeApiHeaderChanges(input_api, output_api)) |
| 327 results.extend(_CheckNoIOStreamInHeaders(input_api, output_api)) | 397 results.extend(_CheckNoIOStreamInHeaders(input_api, output_api)) |
| 328 results.extend(_CheckNoFRIEND_TEST(input_api, output_api)) | 398 results.extend(_CheckNoFRIEND_TEST(input_api, output_api)) |
| 329 results.extend(_CheckGypChanges(input_api, output_api)) | 399 results.extend(_CheckGypChanges(input_api, output_api)) |
| 330 results.extend(_CheckUnwantedDependencies(input_api, output_api)) | 400 results.extend(_CheckUnwantedDependencies(input_api, output_api)) |
| 331 results.extend(_RunPythonTests(input_api, output_api)) | 401 results.extend(_RunPythonTests(input_api, output_api)) |
| 332 return results | 402 return results |
| 333 | 403 |
| 334 | 404 |
| 335 def CheckChangeOnUpload(input_api, output_api): | 405 def CheckChangeOnUpload(input_api, output_api): |
| 336 results = [] | 406 results = [] |
| 337 results.extend(_CommonChecks(input_api, output_api)) | 407 results.extend(_CommonChecks(input_api, output_api)) |
| 338 results.extend( | 408 results.extend( |
| 339 input_api.canned_checks.CheckGNFormatted(input_api, output_api)) | 409 input_api.canned_checks.CheckGNFormatted(input_api, output_api)) |
| 340 return results | 410 return results |
| 341 | 411 |
| 342 | 412 |
| 343 def CheckChangeOnCommit(input_api, output_api): | 413 def CheckChangeOnCommit(input_api, output_api): |
| 344 results = [] | 414 results = [] |
| 345 results.extend(_CommonChecks(input_api, output_api)) | 415 results.extend(_CommonChecks(input_api, output_api)) |
| 416 results.extend(_VerifyNativeApiHeadersListIsValid(input_api, output_api)) |
| 346 results.extend(input_api.canned_checks.CheckOwners(input_api, output_api)) | 417 results.extend(input_api.canned_checks.CheckOwners(input_api, output_api)) |
| 347 results.extend(input_api.canned_checks.CheckChangeWasUploaded( | 418 results.extend(input_api.canned_checks.CheckChangeWasUploaded( |
| 348 input_api, output_api)) | 419 input_api, output_api)) |
| 349 results.extend(input_api.canned_checks.CheckChangeHasDescription( | 420 results.extend(input_api.canned_checks.CheckChangeHasDescription( |
| 350 input_api, output_api)) | 421 input_api, output_api)) |
| 351 results.extend(input_api.canned_checks.CheckChangeHasBugField( | 422 results.extend(input_api.canned_checks.CheckChangeHasBugField( |
| 352 input_api, output_api)) | 423 input_api, output_api)) |
| 353 results.extend(input_api.canned_checks.CheckChangeHasTestField( | 424 results.extend(input_api.canned_checks.CheckChangeHasTestField( |
| 354 input_api, output_api)) | 425 input_api, output_api)) |
| 355 results.extend(input_api.canned_checks.CheckTreeIsOpen( | 426 results.extend(input_api.canned_checks.CheckTreeIsOpen( |
| (...skipping 18 matching lines...) Expand all Loading... |
| 374 for builder in masters[master]: | 445 for builder in masters[master]: |
| 375 if 'presubmit' in builder: | 446 if 'presubmit' in builder: |
| 376 # Do not trigger presubmit builders, since they're likely to fail | 447 # Do not trigger presubmit builders, since they're likely to fail |
| 377 # (e.g. OWNERS checks before finished code review), and we're running | 448 # (e.g. OWNERS checks before finished code review), and we're running |
| 378 # local presubmit anyway. | 449 # local presubmit anyway. |
| 379 pass | 450 pass |
| 380 else: | 451 else: |
| 381 try_config[master][builder] = ['defaulttests'] | 452 try_config[master][builder] = ['defaulttests'] |
| 382 | 453 |
| 383 return try_config | 454 return try_config |
| OLD | NEW |