libv8 7.3.492.27.1 → 8.4.255.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +11 -14
- data/CHANGELOG.md +10 -0
- data/README.md +10 -11
- data/Rakefile +30 -36
- data/ext/libv8/builder.rb +1 -1
- data/lib/libv8/version.rb +1 -1
- data/libv8.gemspec +1 -3
- data/vendor/depot_tools/{cipd.ps1 → .cipd_impl.ps1} +0 -0
- data/vendor/depot_tools/.gitattributes +1 -1
- data/vendor/depot_tools/.gitignore +7 -2
- data/vendor/depot_tools/.style.yapf +3 -1
- data/vendor/depot_tools/.vpython +55 -0
- data/vendor/depot_tools/.vpython3 +23 -0
- data/vendor/depot_tools/CROS_OWNERS +3 -1
- data/vendor/depot_tools/GOMA_OWNERS +9 -0
- data/vendor/depot_tools/LUCI_OWNERS +5 -0
- data/vendor/depot_tools/OWNERS +21 -6
- data/vendor/depot_tools/PRESUBMIT.py +35 -18
- data/vendor/depot_tools/README.git-cl.md +0 -14
- data/vendor/depot_tools/README.md +1 -1
- data/vendor/depot_tools/WATCHLISTS +2 -2
- data/vendor/depot_tools/auth.py +60 -772
- data/vendor/depot_tools/autoninja +12 -6
- data/vendor/depot_tools/autoninja.bat +14 -6
- data/vendor/depot_tools/autoninja.py +64 -27
- data/vendor/depot_tools/bb +1 -1
- data/vendor/depot_tools/bootstrap/{win/README.md → README.md} +28 -14
- data/vendor/depot_tools/bootstrap/{win/win_tools.py → bootstrap.py} +60 -43
- data/vendor/depot_tools/bootstrap/{win/git-bash.template.sh → git-bash.template.sh} +1 -1
- data/vendor/depot_tools/bootstrap/{win/git.template.bat → git.template.bat} +0 -0
- data/vendor/depot_tools/bootstrap/manifest.txt +27 -0
- data/vendor/depot_tools/bootstrap/manifest_bleeding_edge.txt +27 -0
- data/vendor/depot_tools/bootstrap/{win/profile.d.python.sh → profile.d.python.sh} +0 -0
- data/vendor/depot_tools/bootstrap/{win/python27.bleeding_edge.bat → python27.bat} +0 -0
- data/vendor/depot_tools/bootstrap/{win/python27.new.bat → python3.bat} +3 -3
- data/vendor/depot_tools/bootstrap/{win/win_tools.bat → win_tools.bat} +21 -16
- data/vendor/depot_tools/bootstrap_python3 +35 -0
- data/vendor/depot_tools/cbuildbot +1 -1
- data/vendor/depot_tools/chrome_set_ver +1 -1
- data/vendor/depot_tools/cipd +43 -39
- data/vendor/depot_tools/cipd.bat +2 -2
- data/vendor/depot_tools/cipd_client_version +1 -1
- data/vendor/depot_tools/cipd_client_version.digests +15 -14
- data/vendor/depot_tools/cipd_manifest.txt +31 -8
- data/vendor/depot_tools/cipd_manifest.versions +278 -158
- data/vendor/depot_tools/cit.py +9 -7
- data/vendor/depot_tools/clang_format.py +4 -1
- data/vendor/depot_tools/clang_format_merge_driver.py +10 -8
- data/vendor/depot_tools/compile_single_file.py +7 -2
- data/vendor/depot_tools/cpplint.py +51 -45
- data/vendor/depot_tools/cros +87 -0
- data/vendor/depot_tools/cros_sdk +1 -1
- data/vendor/depot_tools/crosjobs +13 -0
- data/vendor/depot_tools/detect_host_arch.py +0 -1
- data/vendor/depot_tools/dirmd +12 -0
- data/vendor/depot_tools/dirmd.bat +7 -0
- data/vendor/depot_tools/download_from_google_storage.py +47 -27
- data/vendor/depot_tools/ensure_bootstrap +14 -0
- data/vendor/depot_tools/fetch +14 -1
- data/vendor/depot_tools/fetch.bat +14 -1
- data/vendor/depot_tools/fetch.py +5 -7
- data/vendor/depot_tools/fetch_configs/chromium.py +6 -4
- data/vendor/depot_tools/fetch_configs/devtools-frontend.py +44 -0
- data/vendor/depot_tools/fetch_configs/ios_internal.py +10 -19
- data/vendor/depot_tools/fix_encoding.py +19 -5
- data/vendor/depot_tools/gclient +28 -12
- data/vendor/depot_tools/gclient-new-workdir.py +2 -0
- data/vendor/depot_tools/gclient.bat +18 -1
- data/vendor/depot_tools/gclient.py +160 -119
- data/vendor/depot_tools/gclient_eval.py +119 -107
- data/vendor/depot_tools/gclient_paths.py +67 -57
- data/vendor/depot_tools/gclient_scm.py +181 -159
- data/vendor/depot_tools/gclient_utils.py +177 -124
- data/vendor/depot_tools/gerrit_client.py +21 -13
- data/vendor/depot_tools/gerrit_util.py +188 -228
- data/vendor/depot_tools/git-cache +1 -1
- data/vendor/depot_tools/git-cl +1 -1
- data/vendor/depot_tools/git-drover +1 -1
- data/vendor/depot_tools/git-find-releases +1 -1
- data/vendor/depot_tools/git-footers +1 -1
- data/vendor/depot_tools/git-freeze +1 -1
- data/vendor/depot_tools/git-hyper-blame +1 -1
- data/vendor/depot_tools/git-map +1 -1
- data/vendor/depot_tools/git-map-branches +1 -1
- data/vendor/depot_tools/git-mark-merge-base +1 -1
- data/vendor/depot_tools/git-nav-downstream +1 -1
- data/vendor/depot_tools/git-new-branch +1 -1
- data/vendor/depot_tools/git-number +1 -1
- data/vendor/depot_tools/git-rebase-update +1 -1
- data/vendor/depot_tools/git-rename-branch +1 -1
- data/vendor/depot_tools/git-reparent-branch +1 -1
- data/vendor/depot_tools/git-retry +1 -1
- data/vendor/depot_tools/git-squash-branch +1 -1
- data/vendor/depot_tools/git-thaw +1 -1
- data/vendor/depot_tools/git-upstream-diff +1 -1
- data/vendor/depot_tools/git_cache.py +255 -360
- data/vendor/depot_tools/git_cl.py +1562 -2059
- data/vendor/depot_tools/git_cl_completion.sh +16 -2
- data/vendor/depot_tools/git_common.py +77 -32
- data/vendor/depot_tools/git_drover.py +17 -8
- data/vendor/depot_tools/git_find_releases.py +11 -9
- data/vendor/depot_tools/git_footers.py +13 -9
- data/vendor/depot_tools/git_freezer.py +3 -1
- data/vendor/depot_tools/git_hyper_blame.py +25 -32
- data/vendor/depot_tools/git_map.py +115 -93
- data/vendor/depot_tools/git_map_branches.py +11 -10
- data/vendor/depot_tools/git_mark_merge_base.py +8 -6
- data/vendor/depot_tools/git_nav_downstream.py +9 -6
- data/vendor/depot_tools/git_new_branch.py +39 -33
- data/vendor/depot_tools/git_number.py +28 -17
- data/vendor/depot_tools/git_rebase_update.py +50 -49
- data/vendor/depot_tools/git_rename_branch.py +2 -2
- data/vendor/depot_tools/git_reparent_branch.py +8 -6
- data/vendor/depot_tools/git_upstream_diff.py +4 -2
- data/vendor/depot_tools/gn.py +6 -4
- data/vendor/depot_tools/goma_auth +12 -0
- data/vendor/depot_tools/goma_auth.bat +8 -0
- data/vendor/depot_tools/goma_ctl +12 -0
- data/vendor/depot_tools/goma_ctl.bat +8 -0
- data/vendor/depot_tools/gsutil.py +5 -2
- data/vendor/depot_tools/gsutil.py.bat +8 -0
- data/vendor/depot_tools/gsutil.vpython +3 -1
- data/vendor/depot_tools/infra/config/OWNERS +2 -2
- data/vendor/depot_tools/infra/config/recipes.cfg +3 -2
- data/vendor/depot_tools/led +1 -1
- data/vendor/depot_tools/lockfile.py +116 -0
- data/vendor/depot_tools/luci-auth +1 -1
- data/vendor/depot_tools/lucicfg +1 -1
- data/vendor/depot_tools/mac_toolchain +1 -1
- data/vendor/depot_tools/man/html/depot_tools.html +1 -1
- data/vendor/depot_tools/man/html/depot_tools_tutorial.html +31 -25
- data/vendor/depot_tools/man/html/git-cl.html +1 -1
- data/vendor/depot_tools/man/html/git-drover.html +18 -18
- data/vendor/depot_tools/man/html/git-footers.html +1 -1
- data/vendor/depot_tools/man/html/git-freeze.html +3 -3
- data/vendor/depot_tools/man/html/git-hyper-blame.html +1 -1
- data/vendor/depot_tools/man/html/git-map-branches.html +2 -2
- data/vendor/depot_tools/man/html/git-map.html +1 -1
- data/vendor/depot_tools/man/html/git-mark-merge-base.html +1 -1
- data/vendor/depot_tools/man/html/git-nav-downstream.html +3 -3
- data/vendor/depot_tools/man/html/git-nav-upstream.html +12 -6
- data/vendor/depot_tools/man/html/git-new-branch.html +1 -1
- data/vendor/depot_tools/man/html/git-rebase-update.html +20 -1
- data/vendor/depot_tools/man/html/git-rename-branch.html +1 -1
- data/vendor/depot_tools/man/html/git-reparent-branch.html +1 -1
- data/vendor/depot_tools/man/html/git-retry.html +1 -1
- data/vendor/depot_tools/man/html/git-squash-branch.html +1 -1
- data/vendor/depot_tools/man/html/git-thaw.html +1 -1
- data/vendor/depot_tools/man/html/git-upstream-diff.html +10 -6
- data/vendor/depot_tools/man/man1/git-cl.1 +4 -4
- data/vendor/depot_tools/man/man1/git-drover.1 +21 -21
- data/vendor/depot_tools/man/man1/git-footers.1 +4 -4
- data/vendor/depot_tools/man/man1/git-freeze.1 +6 -6
- data/vendor/depot_tools/man/man1/git-hyper-blame.1 +4 -4
- data/vendor/depot_tools/man/man1/git-map-branches.1 +4 -4
- data/vendor/depot_tools/man/man1/git-map.1 +4 -4
- data/vendor/depot_tools/man/man1/git-mark-merge-base.1 +4 -4
- data/vendor/depot_tools/man/man1/git-nav-downstream.1 +6 -6
- data/vendor/depot_tools/man/man1/git-nav-upstream.1 +15 -9
- data/vendor/depot_tools/man/man1/git-new-branch.1 +3 -3
- data/vendor/depot_tools/man/man1/git-rebase-update.1 +14 -4
- data/vendor/depot_tools/man/man1/git-rename-branch.1 +4 -4
- data/vendor/depot_tools/man/man1/git-reparent-branch.1 +4 -4
- data/vendor/depot_tools/man/man1/git-retry.1 +4 -4
- data/vendor/depot_tools/man/man1/git-squash-branch.1 +4 -4
- data/vendor/depot_tools/man/man1/git-thaw.1 +4 -4
- data/vendor/depot_tools/man/man1/git-upstream-diff.1 +7 -13
- data/vendor/depot_tools/man/man7/depot_tools.7 +4 -4
- data/vendor/depot_tools/man/man7/depot_tools_tutorial.7 +31 -25
- data/vendor/depot_tools/man/src/common_demo_functions.sh +2 -2
- data/vendor/depot_tools/man/src/depot_tools_tutorial.txt +3 -3
- data/vendor/depot_tools/man/src/filter_demo_output.py +4 -2
- data/vendor/depot_tools/man/src/git-new-branch.txt +2 -1
- data/vendor/depot_tools/man/src/git-rebase-update.txt +8 -1
- data/vendor/depot_tools/metrics.README.md +8 -5
- data/vendor/depot_tools/metrics.py +7 -6
- data/vendor/depot_tools/metrics_utils.py +4 -14
- data/vendor/depot_tools/my_activity.py +85 -251
- data/vendor/depot_tools/ninja +1 -0
- data/vendor/depot_tools/ninja-mac +0 -0
- data/vendor/depot_tools/ninjalog_uploader.py +146 -145
- data/vendor/depot_tools/ninjalog_uploader_wrapper.py +69 -60
- data/vendor/depot_tools/owners.py +156 -43
- data/vendor/depot_tools/owners_finder.py +28 -14
- data/vendor/depot_tools/post_build_ninja_summary.py +76 -48
- data/vendor/depot_tools/presubmit_canned_checks.py +293 -106
- data/vendor/depot_tools/presubmit_support.py +527 -333
- data/vendor/depot_tools/prpc +1 -1
- data/vendor/depot_tools/pylint +2 -12
- data/vendor/depot_tools/pylint-1.5 +78 -0
- data/vendor/depot_tools/pylint-1.6 +78 -0
- data/vendor/depot_tools/pylint-1.7 +78 -0
- data/vendor/depot_tools/pylint-1.8 +78 -0
- data/vendor/depot_tools/pylint-1.9 +78 -0
- data/vendor/depot_tools/{depot-tools-auth.bat → pylint.bat} +2 -2
- data/vendor/depot_tools/pylint_main.py +45 -0
- data/vendor/depot_tools/pylintrc +14 -1
- data/vendor/depot_tools/python-bin/python3 +7 -0
- data/vendor/depot_tools/python_runner.sh +13 -8
- data/vendor/depot_tools/rdb +12 -0
- data/vendor/depot_tools/rdb.bat +7 -0
- data/vendor/depot_tools/recipes/OWNERS +0 -1
- data/vendor/depot_tools/recipes/README.recipes.md +218 -151
- data/vendor/depot_tools/recipes/recipe_modules/OWNERS +1 -1
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +17 -16
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +127 -78
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +19 -4
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +18 -3
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +19 -4
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +28 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/input_commit_with_id_without_repo.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/multiple_patch_refs.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +35 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{with_manifest_name.json → no_cp_checkout_HEAD.json} +25 -15
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_branch_head.json +65 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_specific_commit.json +65 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_master.json +65 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/refs.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/resolve_chromium_fixed_version.json +117 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail.json +17 -11
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +41 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +24 -11
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +35 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +35 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +38 -11
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +36 -11
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +35 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +35 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +35 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/unrecognized_commit_repo.json +0 -5
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_tags.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +95 -22
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +187 -114
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/test_api.py +2 -2
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/do_not_retry_patch_failures_in_cq.py +42 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/ensure_checkout.py +1 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/__init__.py +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/api.py +2 -2
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic_pkg.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-failed.json +2 -4
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-many-instances.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/mac64.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_file.json +26 -6
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_mode.json +23 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_verfile.json +23 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/win64.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk arch.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk bits.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_32.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_64.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_32.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_64.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_mips_64.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/mac_intel_64.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_32.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_64.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/test_api.py +1 -1
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +4 -1
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +4 -2
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +3 -1
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +4 -2
- data/vendor/depot_tools/recipes/recipe_modules/gclient/__init__.py +2 -1
- data/vendor/depot_tools/recipes/recipe_modules/gclient/api.py +82 -13
- data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +23 -11
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/basic.json +3 -4
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/revision.json +3 -6
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/tryserver.json +3 -4
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.py +7 -7
- data/vendor/depot_tools/recipes/recipe_modules/gclient/resources/diff_deps.py +16 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/test_api.py +4 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/basic.json +55 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/dont have revision yet.json +84 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/no change, exception.json +83 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/windows.json +55 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.py +88 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/patch_project.py +9 -21
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/sync_failure.py +24 -0
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/api.py +2 -1
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.expected/basic.json +7 -12
- data/vendor/depot_tools/recipes/recipe_modules/git/__init__.py +0 -2
- data/vendor/depot_tools/recipes/recipe_modules/git/api.py +9 -17
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_branch.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_file_name.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_hash.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_ref.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_submodule_update_force.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_tags.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/can_fail_build.json +3 -13
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cannot_fail_build.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cat-file_test.json +4 -12
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_delta.json +2 -10
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_failed.json +1 -7
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output.json +1 -7
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output_fails_build.json +0 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/curl_trace_file.json +3 -10
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/git-cache-checkout.json +3 -11
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/platform_win.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/rebase_failed.json +3 -13
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/remote_not_origin.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/set_got_revision.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.py +0 -5
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/__init__.py +1 -1
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/api.py +7 -13
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.expected/basic.json +21 -16
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.py +1 -2
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/api.py +1 -1
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.expected/basic.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/resources/gerrit_client.py +2 -2
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.expected/basic.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/api.py +23 -8
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.expected/basic.json +52 -1
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.py +15 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/__init__.py +1 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/api.py +32 -8
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/ancient_version.json +83 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/automatic_version.json +83 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/explicit_version.json +83 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/linux.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/mac.json +5 -4
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/win.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.py +21 -2
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/__init__.py +20 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/api.py +235 -3
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.expected/basic.json +13 -5
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.py +5 -1
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/properties.proto +14 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/test_api.py +19 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/tests/execute.py +247 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/tests/prepare.py +49 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +33 -45
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/basic_tags.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch.json +64 -21
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch_and_target_ref.json +64 -21
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +1 -22
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +1 -22
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.py +5 -32
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_fetch_ref_timeout.py +29 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_owner.expected/basic.json +5 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_owner.py +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_target_ref.py +32 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/linux.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/mac.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/win.json +2 -1
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.py +1 -6
- data/vendor/depot_tools/recipes/recipes.py +49 -28
- data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +11 -6
- data/vendor/depot_tools/repo +698 -540
- data/vendor/depot_tools/roll-dep +14 -1
- data/vendor/depot_tools/roll-dep.bat +10 -1
- data/vendor/depot_tools/roll_dep.py +15 -10
- data/vendor/depot_tools/scm.py +95 -75
- data/vendor/depot_tools/setup_color.py +36 -2
- data/vendor/depot_tools/split_cl.py +44 -32
- data/vendor/depot_tools/subcommand.py +6 -6
- data/vendor/depot_tools/subprocess2.py +38 -322
- data/vendor/depot_tools/third_party/colorama/LICENSE.txt +0 -1
- data/vendor/depot_tools/third_party/colorama/README.chromium +4 -5
- data/vendor/depot_tools/third_party/colorama/README.rst +346 -0
- data/vendor/depot_tools/third_party/colorama/__init__.py +3 -4
- data/vendor/depot_tools/third_party/colorama/ansi.py +82 -30
- data/vendor/depot_tools/third_party/colorama/ansitowin32.py +105 -37
- data/vendor/depot_tools/third_party/colorama/initialise.py +39 -15
- data/vendor/depot_tools/third_party/colorama/win32.py +46 -28
- data/vendor/depot_tools/third_party/colorama/winterm.py +80 -31
- data/vendor/depot_tools/update_depot_tools +18 -8
- data/vendor/depot_tools/update_depot_tools.bat +19 -15
- data/vendor/depot_tools/upload_metrics.py +7 -6
- data/vendor/depot_tools/upload_to_google_storage.py +23 -16
- data/vendor/depot_tools/vpython +4 -4
- data/vendor/depot_tools/vpython.bat +1 -1
- data/vendor/depot_tools/vpython3 +55 -0
- data/vendor/depot_tools/vpython3.bat +12 -0
- data/vendor/depot_tools/watchlists.py +14 -11
- data/vendor/depot_tools/weekly +4 -2
- data/vendor/depot_tools/win32imports.py +61 -0
- data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +49 -41
- data/vendor/depot_tools/win_toolchain/package_from_installed.py +142 -149
- data/vendor/depot_tools/wtf +5 -3
- data/vendor/depot_tools/yapf +5 -1
- metadata +68 -343
- data/vendor/depot_tools/README.testing +0 -23
- data/vendor/depot_tools/annotated_gclient.py +0 -89
- data/vendor/depot_tools/appengine_mapper.py +0 -23
- data/vendor/depot_tools/bootstrap/win/manifest.txt +0 -20
- data/vendor/depot_tools/bootstrap/win/manifest_bleeding_edge.txt +0 -20
- data/vendor/depot_tools/bootstrap/win/pylint.new.bat +0 -7
- data/vendor/depot_tools/buildbucket.py +0 -186
- data/vendor/depot_tools/checkout.py +0 -431
- data/vendor/depot_tools/cros +0 -1
- data/vendor/depot_tools/dart_format.py +0 -58
- data/vendor/depot_tools/depot-tools-auth +0 -8
- data/vendor/depot_tools/depot-tools-auth.py +0 -102
- data/vendor/depot_tools/my_reviews.py +0 -396
- data/vendor/depot_tools/patch.py +0 -548
- data/vendor/depot_tools/pylint.py +0 -30
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/buildbot.json +0 -239
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_luci.json +0 -222
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/__init__.py +0 -4
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/api.py +0 -29
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/basic.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_linux.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_mac.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_win.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_linux.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_mac.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_win.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_linux.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_mac.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_win.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.py +0 -33
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/path_config.py +0 -66
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/set_failure_hash_with_no_steps.json +0 -11
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch.json +0 -45
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch_luci.json +0 -45
- data/vendor/depot_tools/rietveld.py +0 -779
- data/vendor/depot_tools/roll-dep-svn +0 -8
- data/vendor/depot_tools/roll-dep-svn.bat +0 -12
- data/vendor/depot_tools/roll_dep_svn.py +0 -430
- data/vendor/depot_tools/support/chromite_wrapper +0 -96
- data/vendor/depot_tools/third_party/boto/LICENSE +0 -18
- data/vendor/depot_tools/third_party/boto/README.chromium +0 -43
- data/vendor/depot_tools/third_party/boto/README.rst +0 -163
- data/vendor/depot_tools/third_party/boto/__init__.py +0 -793
- data/vendor/depot_tools/third_party/boto/auth.py +0 -682
- data/vendor/depot_tools/third_party/boto/auth_handler.py +0 -58
- data/vendor/depot_tools/third_party/boto/cacerts/__init__.py +0 -22
- data/vendor/depot_tools/third_party/boto/cacerts/cacerts.txt +0 -2183
- data/vendor/depot_tools/third_party/boto/compat.py +0 -28
- data/vendor/depot_tools/third_party/boto/connection.py +0 -1081
- data/vendor/depot_tools/third_party/boto/contrib/__init__.py +0 -22
- data/vendor/depot_tools/third_party/boto/contrib/ymlmessage.py +0 -52
- data/vendor/depot_tools/third_party/boto/core/README +0 -58
- data/vendor/depot_tools/third_party/boto/core/__init__.py +0 -23
- data/vendor/depot_tools/third_party/boto/core/auth.py +0 -78
- data/vendor/depot_tools/third_party/boto/core/credentials.py +0 -154
- data/vendor/depot_tools/third_party/boto/core/dictresponse.py +0 -178
- data/vendor/depot_tools/third_party/boto/core/service.py +0 -67
- data/vendor/depot_tools/third_party/boto/datapipeline/__init__.py +0 -0
- data/vendor/depot_tools/third_party/boto/datapipeline/exceptions.py +0 -42
- data/vendor/depot_tools/third_party/boto/datapipeline/layer1.py +0 -546
- data/vendor/depot_tools/third_party/boto/ecs/__init__.py +0 -90
- data/vendor/depot_tools/third_party/boto/ecs/item.py +0 -153
- data/vendor/depot_tools/third_party/boto/exception.py +0 -476
- data/vendor/depot_tools/third_party/boto/file/README +0 -49
- data/vendor/depot_tools/third_party/boto/file/__init__.py +0 -28
- data/vendor/depot_tools/third_party/boto/file/bucket.py +0 -112
- data/vendor/depot_tools/third_party/boto/file/connection.py +0 -33
- data/vendor/depot_tools/third_party/boto/file/key.py +0 -199
- data/vendor/depot_tools/third_party/boto/file/simpleresultset.py +0 -30
- data/vendor/depot_tools/third_party/boto/fps/__init__.py +0 -21
- data/vendor/depot_tools/third_party/boto/fps/connection.py +0 -369
- data/vendor/depot_tools/third_party/boto/fps/exception.py +0 -344
- data/vendor/depot_tools/third_party/boto/fps/response.py +0 -175
- data/vendor/depot_tools/third_party/boto/gs/__init__.py +0 -22
- data/vendor/depot_tools/third_party/boto/gs/acl.py +0 -304
- data/vendor/depot_tools/third_party/boto/gs/bucket.py +0 -870
- data/vendor/depot_tools/third_party/boto/gs/bucketlistresultset.py +0 -64
- data/vendor/depot_tools/third_party/boto/gs/connection.py +0 -103
- data/vendor/depot_tools/third_party/boto/gs/cors.py +0 -169
- data/vendor/depot_tools/third_party/boto/gs/key.py +0 -704
- data/vendor/depot_tools/third_party/boto/gs/resumable_upload_handler.py +0 -659
- data/vendor/depot_tools/third_party/boto/gs/user.py +0 -54
- data/vendor/depot_tools/third_party/boto/handler.py +0 -44
- data/vendor/depot_tools/third_party/boto/https_connection.py +0 -124
- data/vendor/depot_tools/third_party/boto/jsonresponse.py +0 -163
- data/vendor/depot_tools/third_party/boto/manage/__init__.py +0 -23
- data/vendor/depot_tools/third_party/boto/manage/cmdshell.py +0 -241
- data/vendor/depot_tools/third_party/boto/manage/propget.py +0 -64
- data/vendor/depot_tools/third_party/boto/manage/server.py +0 -556
- data/vendor/depot_tools/third_party/boto/manage/task.py +0 -175
- data/vendor/depot_tools/third_party/boto/manage/test_manage.py +0 -34
- data/vendor/depot_tools/third_party/boto/manage/volume.py +0 -420
- data/vendor/depot_tools/third_party/boto/mashups/__init__.py +0 -23
- data/vendor/depot_tools/third_party/boto/mashups/interactive.py +0 -97
- data/vendor/depot_tools/third_party/boto/mashups/iobject.py +0 -115
- data/vendor/depot_tools/third_party/boto/mashups/order.py +0 -211
- data/vendor/depot_tools/third_party/boto/mashups/server.py +0 -395
- data/vendor/depot_tools/third_party/boto/plugin.py +0 -90
- data/vendor/depot_tools/third_party/boto/provider.py +0 -337
- data/vendor/depot_tools/third_party/boto/pyami/__init__.py +0 -22
- data/vendor/depot_tools/third_party/boto/pyami/bootstrap.py +0 -134
- data/vendor/depot_tools/third_party/boto/pyami/config.py +0 -229
- data/vendor/depot_tools/third_party/boto/pyami/copybot.cfg +0 -60
- data/vendor/depot_tools/third_party/boto/pyami/copybot.py +0 -97
- data/vendor/depot_tools/third_party/boto/pyami/helloworld.py +0 -28
- data/vendor/depot_tools/third_party/boto/pyami/launch_ami.py +0 -178
- data/vendor/depot_tools/third_party/boto/pyami/scriptbase.py +0 -44
- data/vendor/depot_tools/third_party/boto/pyami/startup.py +0 -60
- data/vendor/depot_tools/third_party/boto/regioninfo.py +0 -63
- data/vendor/depot_tools/third_party/boto/resultset.py +0 -169
- data/vendor/depot_tools/third_party/boto/roboto/__init__.py +0 -1
- data/vendor/depot_tools/third_party/boto/roboto/awsqueryrequest.py +0 -504
- data/vendor/depot_tools/third_party/boto/roboto/awsqueryservice.py +0 -121
- data/vendor/depot_tools/third_party/boto/roboto/param.py +0 -147
- data/vendor/depot_tools/third_party/boto/s3/__init__.py +0 -84
- data/vendor/depot_tools/third_party/boto/s3/acl.py +0 -164
- data/vendor/depot_tools/third_party/boto/s3/bucket.py +0 -1634
- data/vendor/depot_tools/third_party/boto/s3/bucketlistresultset.py +0 -139
- data/vendor/depot_tools/third_party/boto/s3/bucketlogging.py +0 -83
- data/vendor/depot_tools/third_party/boto/s3/connection.py +0 -540
- data/vendor/depot_tools/third_party/boto/s3/cors.py +0 -210
- data/vendor/depot_tools/third_party/boto/s3/deletemarker.py +0 -55
- data/vendor/depot_tools/third_party/boto/s3/key.py +0 -1712
- data/vendor/depot_tools/third_party/boto/s3/keyfile.py +0 -134
- data/vendor/depot_tools/third_party/boto/s3/lifecycle.py +0 -231
- data/vendor/depot_tools/third_party/boto/s3/multidelete.py +0 -138
- data/vendor/depot_tools/third_party/boto/s3/multipart.py +0 -315
- data/vendor/depot_tools/third_party/boto/s3/prefix.py +0 -42
- data/vendor/depot_tools/third_party/boto/s3/resumable_download_handler.py +0 -339
- data/vendor/depot_tools/third_party/boto/s3/tagging.py +0 -71
- data/vendor/depot_tools/third_party/boto/s3/user.py +0 -49
- data/vendor/depot_tools/third_party/boto/s3/website.py +0 -237
- data/vendor/depot_tools/third_party/boto/services/__init__.py +0 -23
- data/vendor/depot_tools/third_party/boto/services/bs.py +0 -179
- data/vendor/depot_tools/third_party/boto/services/message.py +0 -58
- data/vendor/depot_tools/third_party/boto/services/result.py +0 -136
- data/vendor/depot_tools/third_party/boto/services/service.py +0 -161
- data/vendor/depot_tools/third_party/boto/services/servicedef.py +0 -91
- data/vendor/depot_tools/third_party/boto/services/sonofmmm.cfg +0 -43
- data/vendor/depot_tools/third_party/boto/services/sonofmmm.py +0 -81
- data/vendor/depot_tools/third_party/boto/services/submit.py +0 -88
- data/vendor/depot_tools/third_party/boto/ses/__init__.py +0 -54
- data/vendor/depot_tools/third_party/boto/ses/connection.py +0 -521
- data/vendor/depot_tools/third_party/boto/ses/exceptions.py +0 -77
- data/vendor/depot_tools/third_party/boto/storage_uri.py +0 -835
- data/vendor/depot_tools/third_party/boto/sts/__init__.py +0 -55
- data/vendor/depot_tools/third_party/boto/sts/connection.py +0 -207
- data/vendor/depot_tools/third_party/boto/sts/credentials.py +0 -215
- data/vendor/depot_tools/third_party/boto/utils.py +0 -927
- data/vendor/depot_tools/third_party/colorama/README.txt +0 -304
- data/vendor/depot_tools/third_party/fancy_urllib/README +0 -22
- data/vendor/depot_tools/third_party/fancy_urllib/__init__.py +0 -460
- data/vendor/depot_tools/third_party/logilab/README.chromium +0 -6
- data/vendor/depot_tools/third_party/logilab/__init__.py +0 -0
- data/vendor/depot_tools/third_party/logilab/astroid/LICENSE.txt +0 -340
- data/vendor/depot_tools/third_party/logilab/astroid/README.chromium +0 -11
- data/vendor/depot_tools/third_party/logilab/astroid/__init__.py +0 -136
- data/vendor/depot_tools/third_party/logilab/astroid/__pkginfo__.py +0 -42
- data/vendor/depot_tools/third_party/logilab/astroid/arguments.py +0 -233
- data/vendor/depot_tools/third_party/logilab/astroid/as_string.py +0 -548
- data/vendor/depot_tools/third_party/logilab/astroid/astpeephole.py +0 -86
- data/vendor/depot_tools/third_party/logilab/astroid/bases.py +0 -636
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_builtin_inference.py +0 -336
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_dateutil.py +0 -15
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_gi.py +0 -195
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_mechanize.py +0 -18
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_nose.py +0 -82
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_numpy.py +0 -62
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_pytest.py +0 -76
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_qt.py +0 -44
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_six.py +0 -288
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_ssl.py +0 -65
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_stdlib.py +0 -473
- data/vendor/depot_tools/third_party/logilab/astroid/builder.py +0 -263
- data/vendor/depot_tools/third_party/logilab/astroid/context.py +0 -81
- data/vendor/depot_tools/third_party/logilab/astroid/decorators.py +0 -75
- data/vendor/depot_tools/third_party/logilab/astroid/exceptions.py +0 -71
- data/vendor/depot_tools/third_party/logilab/astroid/inference.py +0 -359
- data/vendor/depot_tools/third_party/logilab/astroid/manager.py +0 -267
- data/vendor/depot_tools/third_party/logilab/astroid/mixins.py +0 -147
- data/vendor/depot_tools/third_party/logilab/astroid/modutils.py +0 -741
- data/vendor/depot_tools/third_party/logilab/astroid/node_classes.py +0 -1053
- data/vendor/depot_tools/third_party/logilab/astroid/nodes.py +0 -87
- data/vendor/depot_tools/third_party/logilab/astroid/objects.py +0 -186
- data/vendor/depot_tools/third_party/logilab/astroid/protocols.py +0 -470
- data/vendor/depot_tools/third_party/logilab/astroid/raw_building.py +0 -390
- data/vendor/depot_tools/third_party/logilab/astroid/rebuilder.py +0 -989
- data/vendor/depot_tools/third_party/logilab/astroid/scoped_nodes.py +0 -1716
- data/vendor/depot_tools/third_party/logilab/astroid/test_utils.py +0 -201
- data/vendor/depot_tools/third_party/logilab/astroid/transforms.py +0 -96
- data/vendor/depot_tools/third_party/logilab/astroid/util.py +0 -89
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/LICENSE +0 -19
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/README.chromium +0 -11
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/__init__.py +0 -20
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/cext.c +0 -1421
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/compat.py +0 -9
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/simple.py +0 -246
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/slots.py +0 -414
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/utils.py +0 -13
- data/vendor/depot_tools/third_party/logilab/wrapt/LICENSE +0 -24
- data/vendor/depot_tools/third_party/logilab/wrapt/README.chromium +0 -11
- data/vendor/depot_tools/third_party/logilab/wrapt/__init__.py +0 -19
- data/vendor/depot_tools/third_party/logilab/wrapt/_wrappers.c +0 -2729
- data/vendor/depot_tools/third_party/logilab/wrapt/arguments.py +0 -96
- data/vendor/depot_tools/third_party/logilab/wrapt/decorators.py +0 -512
- data/vendor/depot_tools/third_party/logilab/wrapt/importer.py +0 -228
- data/vendor/depot_tools/third_party/logilab/wrapt/wrappers.py +0 -901
- data/vendor/depot_tools/third_party/mock/LICENSE.txt +0 -26
- data/vendor/depot_tools/third_party/mock/README.chromium +0 -24
- data/vendor/depot_tools/third_party/mock/__init__.py +0 -2366
- data/vendor/depot_tools/third_party/oauth2client/LICENSE +0 -202
- data/vendor/depot_tools/third_party/oauth2client/MODIFICATIONS.diff +0 -66
- data/vendor/depot_tools/third_party/oauth2client/README.chromium +0 -15
- data/vendor/depot_tools/third_party/oauth2client/__init__.py +0 -5
- data/vendor/depot_tools/third_party/oauth2client/anyjson.py +0 -32
- data/vendor/depot_tools/third_party/oauth2client/appengine.py +0 -963
- data/vendor/depot_tools/third_party/oauth2client/client.py +0 -1363
- data/vendor/depot_tools/third_party/oauth2client/clientsecrets.py +0 -153
- data/vendor/depot_tools/third_party/oauth2client/crypt.py +0 -377
- data/vendor/depot_tools/third_party/oauth2client/django_orm.py +0 -134
- data/vendor/depot_tools/third_party/oauth2client/file.py +0 -124
- data/vendor/depot_tools/third_party/oauth2client/gce.py +0 -90
- data/vendor/depot_tools/third_party/oauth2client/keyring_storage.py +0 -109
- data/vendor/depot_tools/third_party/oauth2client/locked_file.py +0 -373
- data/vendor/depot_tools/third_party/oauth2client/multistore_file.py +0 -465
- data/vendor/depot_tools/third_party/oauth2client/old_run.py +0 -160
- data/vendor/depot_tools/third_party/oauth2client/tools.py +0 -243
- data/vendor/depot_tools/third_party/oauth2client/util.py +0 -196
- data/vendor/depot_tools/third_party/oauth2client/xsrfutil.py +0 -113
- data/vendor/depot_tools/third_party/protobuf26/README.chromium +0 -23
- data/vendor/depot_tools/third_party/protobuf26/__init__.py +0 -0
- data/vendor/depot_tools/third_party/protobuf26/compiler/__init__.py +0 -0
- data/vendor/depot_tools/third_party/protobuf26/compiler/plugin_pb2.py +0 -184
- data/vendor/depot_tools/third_party/protobuf26/descriptor.py +0 -849
- data/vendor/depot_tools/third_party/protobuf26/descriptor_database.py +0 -137
- data/vendor/depot_tools/third_party/protobuf26/descriptor_pb2.py +0 -1522
- data/vendor/depot_tools/third_party/protobuf26/descriptor_pool.py +0 -643
- data/vendor/depot_tools/third_party/protobuf26/internal/__init__.py +0 -0
- data/vendor/depot_tools/third_party/protobuf26/internal/api_implementation.py +0 -89
- data/vendor/depot_tools/third_party/protobuf26/internal/containers.py +0 -269
- data/vendor/depot_tools/third_party/protobuf26/internal/cpp_message.py +0 -663
- data/vendor/depot_tools/third_party/protobuf26/internal/decoder.py +0 -831
- data/vendor/depot_tools/third_party/protobuf26/internal/encoder.py +0 -788
- data/vendor/depot_tools/third_party/protobuf26/internal/enum_type_wrapper.py +0 -89
- data/vendor/depot_tools/third_party/protobuf26/internal/message_listener.py +0 -78
- data/vendor/depot_tools/third_party/protobuf26/internal/python_message.py +0 -1247
- data/vendor/depot_tools/third_party/protobuf26/internal/type_checkers.py +0 -328
- data/vendor/depot_tools/third_party/protobuf26/internal/wire_format.py +0 -268
- data/vendor/depot_tools/third_party/protobuf26/message.py +0 -284
- data/vendor/depot_tools/third_party/protobuf26/message_factory.py +0 -155
- data/vendor/depot_tools/third_party/protobuf26/reflection.py +0 -205
- data/vendor/depot_tools/third_party/protobuf26/service.py +0 -226
- data/vendor/depot_tools/third_party/protobuf26/service_reflection.py +0 -284
- data/vendor/depot_tools/third_party/protobuf26/symbol_database.py +0 -185
- data/vendor/depot_tools/third_party/protobuf26/text_encoding.py +0 -110
- data/vendor/depot_tools/third_party/protobuf26/text_format.py +0 -873
- data/vendor/depot_tools/third_party/pylint.py +0 -37
- data/vendor/depot_tools/third_party/pylint/LICENSE.txt +0 -340
- data/vendor/depot_tools/third_party/pylint/README.chromium +0 -30
- data/vendor/depot_tools/third_party/pylint/__init__.py +0 -46
- data/vendor/depot_tools/third_party/pylint/__main__.py +0 -3
- data/vendor/depot_tools/third_party/pylint/__pkginfo__.py +0 -80
- data/vendor/depot_tools/third_party/pylint/checkers/__init__.py +0 -123
- data/vendor/depot_tools/third_party/pylint/checkers/async.py +0 -82
- data/vendor/depot_tools/third_party/pylint/checkers/base.py +0 -2010
- data/vendor/depot_tools/third_party/pylint/checkers/classes.py +0 -1120
- data/vendor/depot_tools/third_party/pylint/checkers/design_analysis.py +0 -348
- data/vendor/depot_tools/third_party/pylint/checkers/exceptions.py +0 -369
- data/vendor/depot_tools/third_party/pylint/checkers/format.py +0 -993
- data/vendor/depot_tools/third_party/pylint/checkers/imports.py +0 -654
- data/vendor/depot_tools/third_party/pylint/checkers/logging.py +0 -258
- data/vendor/depot_tools/third_party/pylint/checkers/misc.py +0 -105
- data/vendor/depot_tools/third_party/pylint/checkers/newstyle.py +0 -169
- data/vendor/depot_tools/third_party/pylint/checkers/python3.py +0 -591
- data/vendor/depot_tools/third_party/pylint/checkers/raw_metrics.py +0 -129
- data/vendor/depot_tools/third_party/pylint/checkers/similar.py +0 -371
- data/vendor/depot_tools/third_party/pylint/checkers/spelling.py +0 -264
- data/vendor/depot_tools/third_party/pylint/checkers/stdlib.py +0 -280
- data/vendor/depot_tools/third_party/pylint/checkers/strings.py +0 -618
- data/vendor/depot_tools/third_party/pylint/checkers/typecheck.py +0 -974
- data/vendor/depot_tools/third_party/pylint/checkers/utils.py +0 -741
- data/vendor/depot_tools/third_party/pylint/checkers/variables.py +0 -1191
- data/vendor/depot_tools/third_party/pylint/config.py +0 -820
- data/vendor/depot_tools/third_party/pylint/epylint.py +0 -181
- data/vendor/depot_tools/third_party/pylint/extensions/__init__.py +0 -0
- data/vendor/depot_tools/third_party/pylint/extensions/check_docs.py +0 -311
- data/vendor/depot_tools/third_party/pylint/extensions/check_elif.py +0 -62
- data/vendor/depot_tools/third_party/pylint/graph.py +0 -179
- data/vendor/depot_tools/third_party/pylint/gui.py +0 -531
- data/vendor/depot_tools/third_party/pylint/interfaces.py +0 -102
- data/vendor/depot_tools/third_party/pylint/lint.py +0 -1381
- data/vendor/depot_tools/third_party/pylint/pyreverse/__init__.py +0 -5
- data/vendor/depot_tools/third_party/pylint/pyreverse/diadefslib.py +0 -230
- data/vendor/depot_tools/third_party/pylint/pyreverse/diagrams.py +0 -258
- data/vendor/depot_tools/third_party/pylint/pyreverse/inspector.py +0 -372
- data/vendor/depot_tools/third_party/pylint/pyreverse/main.py +0 -147
- data/vendor/depot_tools/third_party/pylint/pyreverse/utils.py +0 -210
- data/vendor/depot_tools/third_party/pylint/pyreverse/vcgutils.py +0 -198
- data/vendor/depot_tools/third_party/pylint/pyreverse/writer.py +0 -198
- data/vendor/depot_tools/third_party/pylint/reporters/__init__.py +0 -149
- data/vendor/depot_tools/third_party/pylint/reporters/guireporter.py +0 -27
- data/vendor/depot_tools/third_party/pylint/reporters/html.py +0 -108
- data/vendor/depot_tools/third_party/pylint/reporters/json.py +0 -64
- data/vendor/depot_tools/third_party/pylint/reporters/text.py +0 -237
- data/vendor/depot_tools/third_party/pylint/reporters/ureports/__init__.py +0 -106
- data/vendor/depot_tools/third_party/pylint/reporters/ureports/html_writer.py +0 -93
- data/vendor/depot_tools/third_party/pylint/reporters/ureports/nodes.py +0 -181
- data/vendor/depot_tools/third_party/pylint/reporters/ureports/text_writer.py +0 -99
- data/vendor/depot_tools/third_party/pylint/testutils.py +0 -414
- data/vendor/depot_tools/third_party/pylint/utils.py +0 -1148
- data/vendor/depot_tools/third_party/pymox/COPYING +0 -202
- data/vendor/depot_tools/third_party/pymox/MANIFEST.in +0 -5
- data/vendor/depot_tools/third_party/pymox/README +0 -56
- data/vendor/depot_tools/third_party/pymox/__init__.py +0 -0
- data/vendor/depot_tools/third_party/pymox/mox.py +0 -1643
- data/vendor/depot_tools/third_party/pymox/mox_test.py +0 -1708
- data/vendor/depot_tools/third_party/pymox/mox_test_helper.py +0 -76
- data/vendor/depot_tools/third_party/pymox/setup.py +0 -14
- data/vendor/depot_tools/third_party/pymox/stubout.py +0 -142
- data/vendor/depot_tools/third_party/pymox/stubout_test.py +0 -47
- data/vendor/depot_tools/third_party/pymox/stubout_testee.py +0 -2
- data/vendor/depot_tools/third_party/simplejson/LICENSE.txt +0 -19
- data/vendor/depot_tools/third_party/simplejson/PKG-INFO +0 -29
- data/vendor/depot_tools/third_party/simplejson/__init__.py +0 -437
- data/vendor/depot_tools/third_party/simplejson/decoder.py +0 -421
- data/vendor/depot_tools/third_party/simplejson/encoder.py +0 -501
- data/vendor/depot_tools/third_party/simplejson/ordered_dict.py +0 -119
- data/vendor/depot_tools/third_party/simplejson/scanner.py +0 -77
- data/vendor/depot_tools/third_party/simplejson/tool.py +0 -39
- data/vendor/depot_tools/third_party/upload.py +0 -2565
|
@@ -4,37 +4,44 @@
|
|
|
4
4
|
|
|
5
5
|
"""Generic presubmit checks that can be reused by other presubmit checks."""
|
|
6
6
|
|
|
7
|
+
from __future__ import print_function
|
|
8
|
+
|
|
7
9
|
import os as _os
|
|
8
10
|
_HERE = _os.path.dirname(_os.path.abspath(__file__))
|
|
9
11
|
|
|
12
|
+
# These filters will be disabled if callers do not explicitly supply a
|
|
13
|
+
# (possibly-empty) list. Ideally over time this list could be driven to zero.
|
|
14
|
+
# TODO(pkasting): If some of these look like "should never enable", move them
|
|
15
|
+
# to OFF_UNLESS_MANUALLY_ENABLED_LINT_FILTERS.
|
|
16
|
+
#
|
|
10
17
|
# Justifications for each filter:
|
|
11
18
|
#
|
|
12
|
-
# - build/include : Too many; fix in the future
|
|
13
|
-
#
|
|
14
|
-
# - build/
|
|
15
|
-
# -
|
|
19
|
+
# - build/include : Too many; fix in the future
|
|
20
|
+
# TODO(pkasting): Try enabling subcategories
|
|
21
|
+
# - build/include_order : Not happening; #ifdefed includes
|
|
22
|
+
# - build/namespaces : TODO(pkasting): Try re-enabling
|
|
23
|
+
# - readability/casting : Mistakes a whole bunch of function pointers
|
|
16
24
|
# - runtime/int : Can be fixed long term; volume of errors too high
|
|
17
|
-
# -
|
|
18
|
-
|
|
19
|
-
DEFAULT_LINT_FILTERS = [
|
|
25
|
+
# - whitespace/braces : We have a lot of explicit scoping in chrome code
|
|
26
|
+
OFF_BY_DEFAULT_LINT_FILTERS = [
|
|
20
27
|
'-build/include',
|
|
21
28
|
'-build/include_order',
|
|
22
|
-
'-build/
|
|
29
|
+
'-build/namespaces',
|
|
23
30
|
'-readability/casting',
|
|
24
31
|
'-runtime/int',
|
|
25
|
-
'-runtime/virtual',
|
|
26
32
|
'-whitespace/braces',
|
|
27
33
|
]
|
|
28
34
|
|
|
29
|
-
# These filters will
|
|
30
|
-
#
|
|
35
|
+
# These filters will be disabled unless callers explicitly enable them, because
|
|
36
|
+
# they are undesirable in some way.
|
|
31
37
|
#
|
|
32
38
|
# Justifications for each filter:
|
|
33
|
-
# - build/c++11 :
|
|
34
|
-
#
|
|
35
|
-
#
|
|
36
|
-
|
|
39
|
+
# - build/c++11 : Include file and feature blocklists are
|
|
40
|
+
# google3-specific
|
|
41
|
+
# - runtime/references : No longer banned by Google style guide
|
|
42
|
+
OFF_UNLESS_MANUALLY_ENABLED_LINT_FILTERS = [
|
|
37
43
|
'-build/c++11',
|
|
44
|
+
'-runtime/references',
|
|
38
45
|
]
|
|
39
46
|
|
|
40
47
|
### Description checks
|
|
@@ -47,6 +54,22 @@ def CheckChangeHasBugField(input_api, output_api):
|
|
|
47
54
|
return [output_api.PresubmitNotifyResult(
|
|
48
55
|
'If this change has an associated bug, add Bug: [bug number].')]
|
|
49
56
|
|
|
57
|
+
def CheckChangeHasNoUnwantedTags(input_api, output_api):
|
|
58
|
+
UNWANTED_TAGS = {
|
|
59
|
+
'FIXED': {
|
|
60
|
+
'why': 'is not supported',
|
|
61
|
+
'instead': 'Use "Fixed:" instead.'
|
|
62
|
+
},
|
|
63
|
+
# TODO: BUG, ISSUE
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
errors = []
|
|
67
|
+
for tag, desc in UNWANTED_TAGS.items():
|
|
68
|
+
if tag in input_api.change.tags:
|
|
69
|
+
subs = tag, desc['why'], desc.get('instead', '')
|
|
70
|
+
errors.append(('%s= %s. %s' % subs).rstrip())
|
|
71
|
+
|
|
72
|
+
return [output_api.PresubmitError('\n'.join(errors))] if errors else []
|
|
50
73
|
|
|
51
74
|
def CheckDoNotSubmitInDescription(input_api, output_api):
|
|
52
75
|
"""Checks that the user didn't add 'DO NOT ''SUBMIT' to the CL description.
|
|
@@ -122,8 +145,14 @@ def CheckDoNotSubmitInFiles(input_api, output_api):
|
|
|
122
145
|
# We want to check every text file, not just source files.
|
|
123
146
|
file_filter = lambda x : x
|
|
124
147
|
keyword = 'DO NOT ''SUBMIT'
|
|
125
|
-
|
|
126
|
-
|
|
148
|
+
def DoNotSubmitRule(extension, line):
|
|
149
|
+
try:
|
|
150
|
+
return keyword not in line
|
|
151
|
+
# Fallback to True for non-text content
|
|
152
|
+
except UnicodeDecodeError:
|
|
153
|
+
return True
|
|
154
|
+
|
|
155
|
+
errors = _FindNewViolationsOfRule(DoNotSubmitRule, input_api, file_filter)
|
|
127
156
|
text = '\n'.join('Found %s in %s' % (keyword, loc) for loc in errors)
|
|
128
157
|
if text:
|
|
129
158
|
return [output_api.PresubmitError(text)]
|
|
@@ -141,9 +170,11 @@ def CheckChangeLintsClean(input_api, output_api, source_file_filter=None,
|
|
|
141
170
|
# pylint: disable=protected-access
|
|
142
171
|
cpplint._cpplint_state.ResetErrorCounts()
|
|
143
172
|
|
|
144
|
-
|
|
145
|
-
lint_filters
|
|
146
|
-
|
|
173
|
+
filters = OFF_UNLESS_MANUALLY_ENABLED_LINT_FILTERS[:]
|
|
174
|
+
if lint_filters is None:
|
|
175
|
+
lint_filters = OFF_BY_DEFAULT_LINT_FILTERS
|
|
176
|
+
filters.extend(lint_filters)
|
|
177
|
+
cpplint._SetFilters(','.join(filters))
|
|
147
178
|
|
|
148
179
|
# We currently are more strict with normal code than unit tests; 4 and 5 are
|
|
149
180
|
# the verbosity level that would normally be passed to cpplint.py through
|
|
@@ -227,7 +258,7 @@ def CheckGenderNeutral(input_api, output_api, source_file_filter=None):
|
|
|
227
258
|
submitted.
|
|
228
259
|
"""
|
|
229
260
|
gendered_re = input_api.re.compile(
|
|
230
|
-
'(^|\s|\(|\[)([Hh]e|[Hh]is|[Hh]ers?|[Hh]im|[Ss]he|[Gg]uys?)\\b')
|
|
261
|
+
r'(^|\s|\(|\[)([Hh]e|[Hh]is|[Hh]ers?|[Hh]im|[Ss]he|[Gg]uys?)\\b')
|
|
231
262
|
|
|
232
263
|
errors = []
|
|
233
264
|
for f in input_api.AffectedFiles(include_deletes=False,
|
|
@@ -328,7 +359,7 @@ def CheckChangeHasNoTabs(input_api, output_api, source_file_filter=None):
|
|
|
328
359
|
"""Checks that there are no tab characters in any of the text files to be
|
|
329
360
|
submitted.
|
|
330
361
|
"""
|
|
331
|
-
# In addition to the filter, make sure that makefiles are
|
|
362
|
+
# In addition to the filter, make sure that makefiles are skipped.
|
|
332
363
|
if not source_file_filter:
|
|
333
364
|
# It's the default filter.
|
|
334
365
|
source_file_filter = input_api.FilterSourceFile
|
|
@@ -392,7 +423,9 @@ def CheckLongLines(input_api, output_api, maxlen, source_file_filter=None):
|
|
|
392
423
|
JAVA_FILE_EXTS = ('java',)
|
|
393
424
|
JAVA_EXCEPTIONS = ('import ', 'package ')
|
|
394
425
|
JS_FILE_EXTS = ('js',)
|
|
395
|
-
JS_EXCEPTIONS = ("GEN('#include",)
|
|
426
|
+
JS_EXCEPTIONS = ("GEN('#include", 'import ')
|
|
427
|
+
TS_FILE_EXTS = ('ts',)
|
|
428
|
+
TS_EXCEPTIONS = ('import ')
|
|
396
429
|
OBJC_FILE_EXTS = ('h', 'm', 'mm')
|
|
397
430
|
OBJC_EXCEPTIONS = ('#define', '#endif', '#if', '#import', '#include',
|
|
398
431
|
'#pragma')
|
|
@@ -404,6 +437,7 @@ def CheckLongLines(input_api, output_api, maxlen, source_file_filter=None):
|
|
|
404
437
|
(HTML_FILE_EXTS, HTML_EXCEPTIONS),
|
|
405
438
|
(JAVA_FILE_EXTS, JAVA_EXCEPTIONS),
|
|
406
439
|
(JS_FILE_EXTS, JS_EXCEPTIONS),
|
|
440
|
+
(TS_FILE_EXTS, TS_EXCEPTIONS),
|
|
407
441
|
(OBJC_FILE_EXTS, OBJC_EXCEPTIONS),
|
|
408
442
|
(PY_FILE_EXTS, PY_EXCEPTIONS),
|
|
409
443
|
]
|
|
@@ -552,7 +586,7 @@ def CheckTreeIsOpen(input_api, output_api,
|
|
|
552
586
|
return []
|
|
553
587
|
try:
|
|
554
588
|
if json_url:
|
|
555
|
-
connection = input_api.
|
|
589
|
+
connection = input_api.urllib_request.urlopen(json_url)
|
|
556
590
|
status = input_api.json.loads(connection.read())
|
|
557
591
|
connection.close()
|
|
558
592
|
if not status['can_commit_freely']:
|
|
@@ -561,7 +595,7 @@ def CheckTreeIsOpen(input_api, output_api,
|
|
|
561
595
|
return [output_api.PresubmitError(short_text, long_text=long_text)]
|
|
562
596
|
else:
|
|
563
597
|
# TODO(bradnelson): drop this once all users are gone.
|
|
564
|
-
connection = input_api.
|
|
598
|
+
connection = input_api.urllib_request.urlopen(url)
|
|
565
599
|
status = connection.read()
|
|
566
600
|
connection.close()
|
|
567
601
|
if input_api.re.match(closed, status):
|
|
@@ -574,12 +608,17 @@ def CheckTreeIsOpen(input_api, output_api,
|
|
|
574
608
|
return []
|
|
575
609
|
|
|
576
610
|
def GetUnitTestsInDirectory(
|
|
577
|
-
input_api, output_api, directory,
|
|
611
|
+
input_api, output_api, directory, files_to_check=None, files_to_skip=None,
|
|
612
|
+
env=None, run_on_python2=True, run_on_python3=True, whitelist=None,
|
|
613
|
+
blacklist=None, allowlist=None, blocklist=None):
|
|
578
614
|
"""Lists all files in a directory and runs them. Doesn't recurse.
|
|
579
615
|
|
|
580
|
-
It's mainly a wrapper for RunUnitTests. Use
|
|
616
|
+
It's mainly a wrapper for RunUnitTests. Use allowlist and blocklist to filter
|
|
581
617
|
tests accordingly.
|
|
582
618
|
"""
|
|
619
|
+
# TODO(https://crbug.com/1098560): Add warnings before removing bc.
|
|
620
|
+
files_to_check = files_to_check or allowlist or whitelist
|
|
621
|
+
files_to_skip = files_to_skip or blocklist or blacklist
|
|
583
622
|
unit_tests = []
|
|
584
623
|
test_path = input_api.os_path.abspath(
|
|
585
624
|
input_api.os_path.join(input_api.PresubmitLocalPath(), directory))
|
|
@@ -593,9 +632,9 @@ def GetUnitTestsInDirectory(
|
|
|
593
632
|
fullpath = input_api.os_path.join(test_path, filename)
|
|
594
633
|
if not input_api.os_path.isfile(fullpath):
|
|
595
634
|
continue
|
|
596
|
-
if
|
|
635
|
+
if files_to_check and not check(filename, files_to_check):
|
|
597
636
|
continue
|
|
598
|
-
if
|
|
637
|
+
if files_to_skip and check(filename, files_to_skip):
|
|
599
638
|
continue
|
|
600
639
|
unit_tests.append(input_api.os_path.join(directory, filename))
|
|
601
640
|
to_run += 1
|
|
@@ -604,17 +643,27 @@ def GetUnitTestsInDirectory(
|
|
|
604
643
|
if not to_run:
|
|
605
644
|
return [
|
|
606
645
|
output_api.PresubmitPromptWarning(
|
|
607
|
-
'Out of %d files, found none that matched
|
|
608
|
-
% (found,
|
|
646
|
+
'Out of %d files, found none that matched c=%r, s=%r in directory %s'
|
|
647
|
+
% (found, files_to_check, files_to_skip, directory))
|
|
609
648
|
]
|
|
610
|
-
return GetUnitTests(
|
|
649
|
+
return GetUnitTests(
|
|
650
|
+
input_api, output_api, unit_tests, env, run_on_python2, run_on_python3)
|
|
611
651
|
|
|
612
652
|
|
|
613
|
-
def GetUnitTests(
|
|
653
|
+
def GetUnitTests(
|
|
654
|
+
input_api, output_api, unit_tests, env=None, run_on_python2=True,
|
|
655
|
+
run_on_python3=True):
|
|
614
656
|
"""Runs all unit tests in a directory.
|
|
615
657
|
|
|
616
658
|
On Windows, sys.executable is used for unit tests ending with ".py".
|
|
617
659
|
"""
|
|
660
|
+
assert run_on_python3 or run_on_python2, (
|
|
661
|
+
'At least one of "run_on_python2" or "run_on_python3" must be set.')
|
|
662
|
+
def has_py3_shebang(test):
|
|
663
|
+
with open(test) as f:
|
|
664
|
+
maybe_shebang = f.readline()
|
|
665
|
+
return maybe_shebang.startswith('#!') and 'python3' in maybe_shebang
|
|
666
|
+
|
|
618
667
|
# We don't want to hinder users from uploading incomplete patches.
|
|
619
668
|
if input_api.is_committing:
|
|
620
669
|
message_type = output_api.PresubmitError
|
|
@@ -629,24 +678,47 @@ def GetUnitTests(input_api, output_api, unit_tests, env=None):
|
|
|
629
678
|
kwargs = {'cwd': input_api.PresubmitLocalPath()}
|
|
630
679
|
if env:
|
|
631
680
|
kwargs['env'] = env
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
681
|
+
if not unit_test.endswith('.py'):
|
|
682
|
+
results.append(input_api.Command(
|
|
683
|
+
name=unit_test,
|
|
684
|
+
cmd=cmd,
|
|
685
|
+
kwargs=kwargs,
|
|
686
|
+
message=message_type))
|
|
687
|
+
else:
|
|
688
|
+
if has_py3_shebang(unit_test) and run_on_python3:
|
|
689
|
+
results.append(input_api.Command(
|
|
690
|
+
name=unit_test,
|
|
691
|
+
cmd=cmd,
|
|
692
|
+
kwargs=kwargs,
|
|
693
|
+
message=message_type,
|
|
694
|
+
python3=True))
|
|
695
|
+
if run_on_python2:
|
|
696
|
+
results.append(input_api.Command(
|
|
697
|
+
name=unit_test,
|
|
698
|
+
cmd=cmd,
|
|
699
|
+
kwargs=kwargs,
|
|
700
|
+
message=message_type))
|
|
637
701
|
return results
|
|
638
702
|
|
|
639
703
|
|
|
640
704
|
def GetUnitTestsRecursively(input_api, output_api, directory,
|
|
641
|
-
|
|
705
|
+
files_to_check=None, files_to_skip=None,
|
|
706
|
+
run_on_python2=True, run_on_python3=True,
|
|
707
|
+
whitelist=None, blacklist=None, allowlist=None,
|
|
708
|
+
blocklist=None):
|
|
642
709
|
"""Gets all files in the directory tree (git repo) that match the whitelist.
|
|
643
710
|
|
|
644
711
|
Restricts itself to only find files within the Change's source repo, not
|
|
645
712
|
dependencies.
|
|
646
713
|
"""
|
|
714
|
+
files_to_check = files_to_check or allowlist or whitelist
|
|
715
|
+
files_to_skip = files_to_skip or blocklist or blacklist
|
|
716
|
+
assert files_to_check is not None
|
|
717
|
+
assert files_to_skip is not None
|
|
718
|
+
|
|
647
719
|
def check(filename):
|
|
648
|
-
return (any(input_api.re.match(f, filename) for f in
|
|
649
|
-
not any(input_api.re.match(f, filename) for f in
|
|
720
|
+
return (any(input_api.re.match(f, filename) for f in files_to_check) and
|
|
721
|
+
not any(input_api.re.match(f, filename) for f in files_to_skip))
|
|
650
722
|
|
|
651
723
|
tests = []
|
|
652
724
|
|
|
@@ -660,11 +732,13 @@ def GetUnitTestsRecursively(input_api, output_api, directory,
|
|
|
660
732
|
if not to_run:
|
|
661
733
|
return [
|
|
662
734
|
output_api.PresubmitPromptWarning(
|
|
663
|
-
'Out of %d files, found none that matched
|
|
664
|
-
% (found,
|
|
735
|
+
'Out of %d files, found none that matched c=%r, s=%r in directory %s'
|
|
736
|
+
% (found, files_to_check, files_to_skip, directory))
|
|
665
737
|
]
|
|
666
738
|
|
|
667
|
-
return GetUnitTests(input_api, output_api, tests
|
|
739
|
+
return GetUnitTests(input_api, output_api, tests,
|
|
740
|
+
run_on_python2=run_on_python2,
|
|
741
|
+
run_on_python3=run_on_python3)
|
|
668
742
|
|
|
669
743
|
|
|
670
744
|
def GetPythonUnitTests(input_api, output_api, unit_tests):
|
|
@@ -699,6 +773,9 @@ def GetPythonUnitTests(input_api, output_api, unit_tests):
|
|
|
699
773
|
backpath = [
|
|
700
774
|
'.', input_api.os_path.pathsep.join(['..'] * (cwd.count('/') + 1))
|
|
701
775
|
]
|
|
776
|
+
# We convert to str, since on Windows on Python 2 only strings are allowed
|
|
777
|
+
# as environment variables, but literals are unicode since we're importing
|
|
778
|
+
# unicode_literals from __future__.
|
|
702
779
|
if env.get('PYTHONPATH'):
|
|
703
780
|
backpath.append(env.get('PYTHONPATH'))
|
|
704
781
|
env['PYTHONPATH'] = input_api.os_path.pathsep.join((backpath))
|
|
@@ -740,7 +817,7 @@ def RunPythonUnitTests(input_api, *args, **kwargs):
|
|
|
740
817
|
GetPythonUnitTests(input_api, *args, **kwargs), False)
|
|
741
818
|
|
|
742
819
|
|
|
743
|
-
def _FetchAllFiles(input_api,
|
|
820
|
+
def _FetchAllFiles(input_api, files_to_check, files_to_skip):
|
|
744
821
|
"""Hack to fetch all files."""
|
|
745
822
|
# We cannot use AffectedFiles here because we want to test every python
|
|
746
823
|
# file on each single python change. It's because a change in a python file
|
|
@@ -759,26 +836,30 @@ def _FetchAllFiles(input_api, white_list, black_list):
|
|
|
759
836
|
path_len = len(input_api.PresubmitLocalPath())
|
|
760
837
|
for dirpath, dirnames, filenames in input_api.os_walk(
|
|
761
838
|
input_api.PresubmitLocalPath()):
|
|
762
|
-
# Passes dirnames in
|
|
839
|
+
# Passes dirnames in block list to speed up search.
|
|
763
840
|
for item in dirnames[:]:
|
|
764
841
|
filepath = input_api.os_path.join(dirpath, item)[path_len + 1:]
|
|
765
|
-
if Find(filepath,
|
|
842
|
+
if Find(filepath, files_to_skip):
|
|
766
843
|
dirnames.remove(item)
|
|
767
844
|
for item in filenames:
|
|
768
845
|
filepath = input_api.os_path.join(dirpath, item)[path_len + 1:]
|
|
769
|
-
if Find(filepath,
|
|
846
|
+
if Find(filepath, files_to_check) and not Find(filepath, files_to_skip):
|
|
770
847
|
files.append(filepath)
|
|
771
848
|
return files
|
|
772
849
|
|
|
773
850
|
|
|
774
|
-
def GetPylint(input_api, output_api,
|
|
775
|
-
disabled_warnings=None, extra_paths_list=None, pylintrc=None
|
|
851
|
+
def GetPylint(input_api, output_api, files_to_check=None, files_to_skip=None,
|
|
852
|
+
disabled_warnings=None, extra_paths_list=None, pylintrc=None,
|
|
853
|
+
white_list=None, black_list=None, allow_list=None,
|
|
854
|
+
block_list=None):
|
|
776
855
|
"""Run pylint on python files.
|
|
777
856
|
|
|
778
|
-
The default
|
|
857
|
+
The default files_to_check enforces looking only at *.py files.
|
|
779
858
|
"""
|
|
780
|
-
|
|
781
|
-
|
|
859
|
+
files_to_check = tuple(files_to_check or allow_list or white_list or
|
|
860
|
+
(r'.*\.py$',))
|
|
861
|
+
files_to_skip = tuple(files_to_skip or block_list or black_list or
|
|
862
|
+
input_api.DEFAULT_FILES_TO_SKIP)
|
|
782
863
|
extra_paths_list = extra_paths_list or []
|
|
783
864
|
|
|
784
865
|
if input_api.is_committing:
|
|
@@ -802,7 +883,7 @@ def GetPylint(input_api, output_api, white_list=None, black_list=None,
|
|
|
802
883
|
input_api.PresubmitLocalPath(), input_api.change.RepositoryRoot()), '')
|
|
803
884
|
return input_api.re.escape(prefix) + regex
|
|
804
885
|
src_filter = lambda x: input_api.FilterSourceFile(
|
|
805
|
-
x, map(rel_path,
|
|
886
|
+
x, map(rel_path, files_to_check), map(rel_path, files_to_skip))
|
|
806
887
|
if not input_api.AffectedSourceFiles(src_filter):
|
|
807
888
|
input_api.logging.info('Skipping pylint: no matching changes.')
|
|
808
889
|
return []
|
|
@@ -815,7 +896,7 @@ def GetPylint(input_api, output_api, white_list=None, black_list=None,
|
|
|
815
896
|
if disabled_warnings:
|
|
816
897
|
extra_args.extend(['-d', ','.join(disabled_warnings)])
|
|
817
898
|
|
|
818
|
-
files = _FetchAllFiles(input_api,
|
|
899
|
+
files = _FetchAllFiles(input_api, files_to_check, files_to_skip)
|
|
819
900
|
if not files:
|
|
820
901
|
return []
|
|
821
902
|
files.sort()
|
|
@@ -823,8 +904,7 @@ def GetPylint(input_api, output_api, white_list=None, black_list=None,
|
|
|
823
904
|
input_api.logging.info('Running pylint on %d files', len(files))
|
|
824
905
|
input_api.logging.debug('Running pylint on: %s', files)
|
|
825
906
|
env = input_api.environ.copy()
|
|
826
|
-
env['PYTHONPATH'] = input_api.os_path.pathsep.join(
|
|
827
|
-
extra_paths_list).encode('utf8')
|
|
907
|
+
env['PYTHONPATH'] = input_api.os_path.pathsep.join(extra_paths_list)
|
|
828
908
|
env.pop('VPYTHON_CLEAR_PYTHONPATH', None)
|
|
829
909
|
input_api.logging.debug(' with extra PYTHONPATH: %r', extra_paths_list)
|
|
830
910
|
|
|
@@ -832,9 +912,20 @@ def GetPylint(input_api, output_api, white_list=None, black_list=None,
|
|
|
832
912
|
# Windows needs help running python files so we explicitly specify
|
|
833
913
|
# the interpreter to use. It also has limitations on the size of
|
|
834
914
|
# the command-line, so we pass arguments via a pipe.
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
915
|
+
tool = input_api.os_path.join(_HERE, 'pylint')
|
|
916
|
+
kwargs = {'env': env}
|
|
917
|
+
if input_api.platform == 'win32':
|
|
918
|
+
# On Windows, scripts on the current directory take precedence over PATH.
|
|
919
|
+
# When `pylint.bat` calls `vpython`, it will execute the `vpython` of the
|
|
920
|
+
# depot_tools under test instead of the one in the bot.
|
|
921
|
+
# As a workaround, we run the tests from the parent directory instead.
|
|
922
|
+
cwd = input_api.change.RepositoryRoot()
|
|
923
|
+
if input_api.os_path.basename(cwd) == 'depot_tools':
|
|
924
|
+
kwargs['cwd'] = input_api.os_path.dirname(cwd)
|
|
925
|
+
flist = [input_api.os_path.join('depot_tools', f) for f in flist]
|
|
926
|
+
tool += '.bat'
|
|
927
|
+
|
|
928
|
+
cmd = [tool, '--args-on-stdin']
|
|
838
929
|
if len(flist) == 1:
|
|
839
930
|
description = flist[0]
|
|
840
931
|
else:
|
|
@@ -848,10 +939,12 @@ def GetPylint(input_api, output_api, white_list=None, black_list=None,
|
|
|
848
939
|
args.append('--jobs=%s' % input_api.cpu_count)
|
|
849
940
|
description += ' on %d cores' % input_api.cpu_count
|
|
850
941
|
|
|
942
|
+
kwargs['stdin'] = '\n'.join(args + flist)
|
|
943
|
+
|
|
851
944
|
return input_api.Command(
|
|
852
945
|
name='Pylint (%s)' % description,
|
|
853
946
|
cmd=cmd,
|
|
854
|
-
kwargs=
|
|
947
|
+
kwargs=kwargs,
|
|
855
948
|
message=error_type)
|
|
856
949
|
|
|
857
950
|
# Always run pylint and pass it all the py files at once.
|
|
@@ -891,7 +984,7 @@ def RunPylint(input_api, *args, **kwargs):
|
|
|
891
984
|
def CheckBuildbotPendingBuilds(input_api, output_api, url, max_pendings,
|
|
892
985
|
ignored):
|
|
893
986
|
try:
|
|
894
|
-
connection = input_api.
|
|
987
|
+
connection = input_api.urllib_request.urlopen(url)
|
|
895
988
|
raw_data = connection.read()
|
|
896
989
|
connection.close()
|
|
897
990
|
except IOError:
|
|
@@ -904,7 +997,7 @@ def CheckBuildbotPendingBuilds(input_api, output_api, url, max_pendings,
|
|
|
904
997
|
'looking up buildbot status')]
|
|
905
998
|
|
|
906
999
|
out = []
|
|
907
|
-
for (builder_name, builder) in data.
|
|
1000
|
+
for (builder_name, builder) in data.items():
|
|
908
1001
|
if builder_name in ignored:
|
|
909
1002
|
continue
|
|
910
1003
|
if builder.get('state', '') == 'offline':
|
|
@@ -942,7 +1035,27 @@ def CheckOwnersFormat(input_api, output_api):
|
|
|
942
1035
|
def CheckOwners(input_api, output_api, source_file_filter=None):
|
|
943
1036
|
affected_files = set([f.LocalPath() for f in
|
|
944
1037
|
input_api.change.AffectedFiles(file_filter=source_file_filter)])
|
|
945
|
-
|
|
1038
|
+
owners_db = input_api.owners_db
|
|
1039
|
+
owners_db.override_files = input_api.change.OriginalOwnersFiles()
|
|
1040
|
+
owner_email, reviewers = GetCodereviewOwnerAndReviewers(
|
|
1041
|
+
input_api,
|
|
1042
|
+
owners_db.email_regexp,
|
|
1043
|
+
approval_needed=input_api.is_committing)
|
|
1044
|
+
|
|
1045
|
+
owner_email = owner_email or input_api.change.author_email
|
|
1046
|
+
|
|
1047
|
+
finder = input_api.owners_finder(
|
|
1048
|
+
affected_files,
|
|
1049
|
+
input_api.change.RepositoryRoot(),
|
|
1050
|
+
owner_email,
|
|
1051
|
+
reviewers,
|
|
1052
|
+
fopen=open,
|
|
1053
|
+
os_path=input_api.os_path,
|
|
1054
|
+
email_postfix='',
|
|
1055
|
+
disable_color=True,
|
|
1056
|
+
override_files=input_api.change.OriginalOwnersFiles())
|
|
1057
|
+
missing_files = finder.unreviewed_files
|
|
1058
|
+
affects_owners = any('OWNERS' in name for name in missing_files)
|
|
946
1059
|
|
|
947
1060
|
if input_api.is_committing:
|
|
948
1061
|
if input_api.tbr and not affects_owners:
|
|
@@ -963,29 +1076,12 @@ def CheckOwners(input_api, output_api, source_file_filter=None):
|
|
|
963
1076
|
needed = 'OWNER reviewers'
|
|
964
1077
|
output_fn = output_api.PresubmitNotifyResult
|
|
965
1078
|
|
|
966
|
-
owners_db = input_api.owners_db
|
|
967
|
-
owners_db.override_files = input_api.change.OriginalOwnersFiles()
|
|
968
|
-
owner_email, reviewers = GetCodereviewOwnerAndReviewers(
|
|
969
|
-
input_api,
|
|
970
|
-
owners_db.email_regexp,
|
|
971
|
-
approval_needed=input_api.is_committing)
|
|
972
|
-
|
|
973
|
-
owner_email = owner_email or input_api.change.author_email
|
|
974
|
-
|
|
975
|
-
finder = input_api.owners_finder(
|
|
976
|
-
affected_files, input_api.change.RepositoryRoot(),
|
|
977
|
-
owner_email, reviewers, fopen=file, os_path=input_api.os_path,
|
|
978
|
-
email_postfix='', disable_color=True,
|
|
979
|
-
override_files=input_api.change.OriginalOwnersFiles())
|
|
980
|
-
missing_files = finder.unreviewed_files
|
|
981
|
-
|
|
982
1079
|
if missing_files:
|
|
983
1080
|
output_list = [
|
|
984
1081
|
output_fn('Missing %s for these files:\n %s' %
|
|
985
1082
|
(needed, '\n '.join(sorted(missing_files))))]
|
|
986
1083
|
if input_api.tbr and affects_owners:
|
|
987
|
-
output_list.append(output_fn('
|
|
988
|
-
'be ignored.'))
|
|
1084
|
+
output_list.append(output_fn('TBR for OWNERS files are ignored.'))
|
|
989
1085
|
if not input_api.is_committing:
|
|
990
1086
|
suggested_owners = owners_db.reviewers_for(missing_files, owner_email)
|
|
991
1087
|
owners_with_comments = []
|
|
@@ -1078,7 +1174,7 @@ def PanProjectChecks(input_api, output_api,
|
|
|
1078
1174
|
# 2006-20xx string used on the oldest files. 2006-20xx is deprecated, but
|
|
1079
1175
|
# tolerated on old files.
|
|
1080
1176
|
current_year = int(input_api.time.strftime('%Y'))
|
|
1081
|
-
allowed_years = (str(s) for s in reversed(
|
|
1177
|
+
allowed_years = (str(s) for s in reversed(range(2006, current_year + 1)))
|
|
1082
1178
|
years_re = '(' + '|'.join(allowed_years) + '|2006-2008|2006-2009|2006-2010)'
|
|
1083
1179
|
|
|
1084
1180
|
# The (c) is deprecated, but tolerate it until it's removed from all files.
|
|
@@ -1094,24 +1190,27 @@ def PanProjectChecks(input_api, output_api,
|
|
|
1094
1190
|
}
|
|
1095
1191
|
|
|
1096
1192
|
results = []
|
|
1097
|
-
# This code loads the default
|
|
1098
|
-
# and add our
|
|
1193
|
+
# This code loads the default skip list (e.g. third_party, experimental, etc)
|
|
1194
|
+
# and add our skip list (breakpad, skia and v8 are still not following
|
|
1099
1195
|
# google style and are not really living this repository).
|
|
1100
1196
|
# See presubmit_support.py InputApi.FilterSourceFile for the (simple) usage.
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
sources = lambda x: input_api.FilterSourceFile(x,
|
|
1197
|
+
files_to_skip = input_api.DEFAULT_FILES_TO_SKIP + excluded_paths
|
|
1198
|
+
files_to_check = input_api.DEFAULT_FILES_TO_CHECK + text_files
|
|
1199
|
+
sources = lambda x: input_api.FilterSourceFile(x, files_to_skip=files_to_skip)
|
|
1104
1200
|
text_files = lambda x: input_api.FilterSourceFile(
|
|
1105
|
-
x,
|
|
1201
|
+
x, files_to_skip=files_to_skip, files_to_check=files_to_check)
|
|
1106
1202
|
|
|
1107
1203
|
snapshot_memory = []
|
|
1108
1204
|
def snapshot(msg):
|
|
1109
1205
|
"""Measures & prints performance warning if a rule is running slow."""
|
|
1110
|
-
|
|
1206
|
+
if input_api.sys.version_info.major == 2:
|
|
1207
|
+
dt2 = input_api.time.clock()
|
|
1208
|
+
else:
|
|
1209
|
+
dt2 = input_api.time.process_time()
|
|
1111
1210
|
if snapshot_memory:
|
|
1112
1211
|
delta_ms = int(1000*(dt2 - snapshot_memory[0]))
|
|
1113
1212
|
if delta_ms > 500:
|
|
1114
|
-
print
|
|
1213
|
+
print(" %s took a long time: %dms" % (snapshot_memory[1], delta_ms))
|
|
1115
1214
|
snapshot_memory[:] = (dt2, msg)
|
|
1116
1215
|
|
|
1117
1216
|
snapshot("checking owners files format")
|
|
@@ -1148,6 +1247,10 @@ def PanProjectChecks(input_api, output_api,
|
|
|
1148
1247
|
snapshot("checking do not submit in files")
|
|
1149
1248
|
results.extend(input_api.canned_checks.CheckDoNotSubmitInFiles(
|
|
1150
1249
|
input_api, output_api))
|
|
1250
|
+
if input_api.change.scm == 'git':
|
|
1251
|
+
snapshot("checking for commit objects in tree")
|
|
1252
|
+
results.extend(input_api.canned_checks.CheckForCommitObjects(
|
|
1253
|
+
input_api, output_api))
|
|
1151
1254
|
snapshot("done")
|
|
1152
1255
|
return results
|
|
1153
1256
|
|
|
@@ -1155,6 +1258,7 @@ def PanProjectChecks(input_api, output_api,
|
|
|
1155
1258
|
def CheckPatchFormatted(input_api,
|
|
1156
1259
|
output_api,
|
|
1157
1260
|
bypass_warnings=True,
|
|
1261
|
+
check_clang_format=True,
|
|
1158
1262
|
check_js=False,
|
|
1159
1263
|
check_python=None,
|
|
1160
1264
|
result_factory=None):
|
|
@@ -1162,6 +1266,9 @@ def CheckPatchFormatted(input_api,
|
|
|
1162
1266
|
import git_cl
|
|
1163
1267
|
|
|
1164
1268
|
display_args = []
|
|
1269
|
+
if not check_clang_format:
|
|
1270
|
+
display_args.append('--no-clang-format')
|
|
1271
|
+
|
|
1165
1272
|
if check_js:
|
|
1166
1273
|
display_args.append('--js')
|
|
1167
1274
|
|
|
@@ -1278,7 +1385,7 @@ def CheckCIPDPackages(input_api, output_api, platforms, packages):
|
|
|
1278
1385
|
manifest = []
|
|
1279
1386
|
for p in platforms:
|
|
1280
1387
|
manifest.append('$VerifiedPlatform %s' % (p,))
|
|
1281
|
-
for k, v in packages.
|
|
1388
|
+
for k, v in packages.items():
|
|
1282
1389
|
manifest.append('%s %s' % (k, v))
|
|
1283
1390
|
return CheckCIPDManifest(input_api, output_api, content='\n'.join(manifest))
|
|
1284
1391
|
|
|
@@ -1306,6 +1413,57 @@ def CheckCIPDClientDigests(input_api, output_api, client_version_file):
|
|
|
1306
1413
|
output_api.PresubmitError)
|
|
1307
1414
|
|
|
1308
1415
|
|
|
1416
|
+
def CheckForCommitObjects(input_api, output_api):
|
|
1417
|
+
"""Validates that there are no commit objects in the repository.
|
|
1418
|
+
|
|
1419
|
+
Commit objects are put into the git tree typically by submodule tooling.
|
|
1420
|
+
Because we use gclient to handle external repository references instead,
|
|
1421
|
+
we want to avoid this. Having commit objects in the tree can confuse git
|
|
1422
|
+
tooling in some scenarios into thinking that the tree is dirty (e.g. the
|
|
1423
|
+
presence of a DEPS subrepo at a location where a commit object is stored
|
|
1424
|
+
in the tree).
|
|
1425
|
+
|
|
1426
|
+
Args:
|
|
1427
|
+
input_api: Bag of input related interfaces.
|
|
1428
|
+
output_api: Bag of output related interfaces.
|
|
1429
|
+
|
|
1430
|
+
Returns:
|
|
1431
|
+
A presubmit error if a commit object is present in the tree.
|
|
1432
|
+
"""
|
|
1433
|
+
|
|
1434
|
+
def parse_tree_entry(ent):
|
|
1435
|
+
"""Splits a tree entry into components
|
|
1436
|
+
|
|
1437
|
+
Args:
|
|
1438
|
+
ent: a tree entry in the form "filemode type hash\tname"
|
|
1439
|
+
|
|
1440
|
+
Returns:
|
|
1441
|
+
The tree entry split into component parts
|
|
1442
|
+
"""
|
|
1443
|
+
tabparts = ent.split('\t', 1)
|
|
1444
|
+
spaceparts = tabparts[0].split(' ', 2)
|
|
1445
|
+
return (spaceparts[0], spaceparts[1], spaceparts[2], tabparts[1])
|
|
1446
|
+
|
|
1447
|
+
full_tree = input_api.subprocess.check_output(
|
|
1448
|
+
['git', 'ls-tree', '-r', '--full-tree', 'HEAD'],
|
|
1449
|
+
cwd=input_api.PresubmitLocalPath()
|
|
1450
|
+
)
|
|
1451
|
+
tree_entries = full_tree.split('\n')
|
|
1452
|
+
tree_entries = filter(lambda x: len(x) > 0, tree_entries)
|
|
1453
|
+
tree_entries = map(parse_tree_entry, tree_entries)
|
|
1454
|
+
bad_tree_entries = filter(lambda x: x[1] == 'commit', tree_entries)
|
|
1455
|
+
bad_tree_entries = map(lambda x: x[3], bad_tree_entries)
|
|
1456
|
+
if len(bad_tree_entries) > 0:
|
|
1457
|
+
return [output_api.PresubmitError(
|
|
1458
|
+
'Commit objects present within tree.\n'
|
|
1459
|
+
'This may be due to submodule-related interactions; the presence of a\n'
|
|
1460
|
+
'commit object in the tree may lead to odd situations where files are\n'
|
|
1461
|
+
'inconsistently checked-out. Remove these commit entries and validate\n'
|
|
1462
|
+
'your changeset again:\n',
|
|
1463
|
+
bad_tree_entries)]
|
|
1464
|
+
return []
|
|
1465
|
+
|
|
1466
|
+
|
|
1309
1467
|
def CheckVPythonSpec(input_api, output_api, file_filter=None):
|
|
1310
1468
|
"""Validates any changed .vpython files with vpython verification tool.
|
|
1311
1469
|
|
|
@@ -1340,7 +1498,6 @@ def CheckChangedLUCIConfigs(input_api, output_api):
|
|
|
1340
1498
|
import base64
|
|
1341
1499
|
import json
|
|
1342
1500
|
import logging
|
|
1343
|
-
import urllib2
|
|
1344
1501
|
|
|
1345
1502
|
import auth
|
|
1346
1503
|
import git_cl
|
|
@@ -1369,30 +1526,28 @@ def CheckChangedLUCIConfigs(input_api, output_api):
|
|
|
1369
1526
|
|
|
1370
1527
|
# authentication
|
|
1371
1528
|
try:
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
acc_tkn = authenticator.get_access_token()
|
|
1375
|
-
except auth.AuthenticationError as e:
|
|
1529
|
+
acc_tkn = auth.Authenticator().get_access_token()
|
|
1530
|
+
except auth.LoginRequiredError as e:
|
|
1376
1531
|
return [output_api.PresubmitError(
|
|
1377
1532
|
'Error in authenticating user.', long_text=str(e))]
|
|
1378
1533
|
|
|
1379
1534
|
def request(endpoint, body=None):
|
|
1380
1535
|
api_url = ('https://%s/_ah/api/config/v1/%s'
|
|
1381
1536
|
% (LUCI_CONFIG_HOST_NAME, endpoint))
|
|
1382
|
-
req =
|
|
1537
|
+
req = input_api.urllib_request.Request(api_url)
|
|
1383
1538
|
req.add_header('Authorization', 'Bearer %s' % acc_tkn.token)
|
|
1384
1539
|
if body is not None:
|
|
1385
1540
|
req.add_header('Content-Type', 'application/json')
|
|
1386
|
-
req.
|
|
1387
|
-
return json.load(
|
|
1541
|
+
req.data = json.dumps(body).encode('utf-8')
|
|
1542
|
+
return json.load(input_api.urllib_request.urlopen(req))
|
|
1388
1543
|
|
|
1389
1544
|
try:
|
|
1390
1545
|
config_sets = request('config-sets').get('config_sets')
|
|
1391
|
-
except
|
|
1546
|
+
except input_api.urllib_error.HTTPError as e:
|
|
1392
1547
|
return [output_api.PresubmitError(
|
|
1393
1548
|
'Config set request to luci-config failed', long_text=str(e))]
|
|
1394
1549
|
if not config_sets:
|
|
1395
|
-
return [output_api.
|
|
1550
|
+
return [output_api.PresubmitPromptWarning('No config_sets were returned')]
|
|
1396
1551
|
loc_pref = '%s/+/%s/' % (remote_host_url, remote_branch)
|
|
1397
1552
|
logging.debug('Derived location prefix: %s', loc_pref)
|
|
1398
1553
|
dir_to_config_set = {
|
|
@@ -1401,25 +1556,40 @@ def CheckChangedLUCIConfigs(input_api, output_api):
|
|
|
1401
1556
|
if cs['location'].startswith(loc_pref) or
|
|
1402
1557
|
('%s/' % cs['location']) == loc_pref
|
|
1403
1558
|
}
|
|
1559
|
+
if not dir_to_config_set:
|
|
1560
|
+
warning_long_text_lines = [
|
|
1561
|
+
'No config_set found for %s.' % loc_pref,
|
|
1562
|
+
'Found the following:',
|
|
1563
|
+
]
|
|
1564
|
+
for loc in sorted(cs['location'] for cs in config_sets):
|
|
1565
|
+
warning_long_text_lines.append(' %s' % loc)
|
|
1566
|
+
warning_long_text_lines.append('')
|
|
1567
|
+
warning_long_text_lines.append(
|
|
1568
|
+
'If the requested location is internal,'
|
|
1569
|
+
' the requester may not have access.')
|
|
1570
|
+
|
|
1571
|
+
return [output_api.PresubmitPromptWarning(
|
|
1572
|
+
warning_long_text_lines[0],
|
|
1573
|
+
long_text='\n'.join(warning_long_text_lines))]
|
|
1404
1574
|
cs_to_files = collections.defaultdict(list)
|
|
1405
1575
|
for f in input_api.AffectedFiles(include_deletes=False):
|
|
1406
1576
|
# windows
|
|
1407
1577
|
file_path = f.LocalPath().replace(_os.sep, '/')
|
|
1408
1578
|
logging.debug('Affected file path: %s', file_path)
|
|
1409
|
-
for dr, cs in dir_to_config_set.
|
|
1579
|
+
for dr, cs in dir_to_config_set.items():
|
|
1410
1580
|
if dr == '/' or file_path.startswith(dr):
|
|
1411
1581
|
cs_to_files[cs].append({
|
|
1412
1582
|
'path': file_path[len(dr):] if dr != '/' else file_path,
|
|
1413
1583
|
'content': base64.b64encode(
|
|
1414
|
-
'\n'.join(f.NewContents()).encode('utf-8'))
|
|
1584
|
+
'\n'.join(f.NewContents()).encode('utf-8')).decode('utf-8')
|
|
1415
1585
|
})
|
|
1416
1586
|
outputs = []
|
|
1417
|
-
for cs, f in cs_to_files.
|
|
1587
|
+
for cs, f in cs_to_files.items():
|
|
1418
1588
|
try:
|
|
1419
1589
|
# TODO(myjang): parallelize
|
|
1420
1590
|
res = request(
|
|
1421
1591
|
'validate-config', body={'config_set': cs, 'files': f})
|
|
1422
|
-
except
|
|
1592
|
+
except input_api.urllib_error.HTTPError as e:
|
|
1423
1593
|
return [output_api.PresubmitError(
|
|
1424
1594
|
'Validation request to luci-config failed', long_text=str(e))]
|
|
1425
1595
|
for msg in res.get('messages', []):
|
|
@@ -1466,3 +1636,20 @@ def CheckLucicfgGenOutput(input_api, output_api, entry_script):
|
|
|
1466
1636
|
},
|
|
1467
1637
|
output_api.PresubmitError)
|
|
1468
1638
|
]
|
|
1639
|
+
|
|
1640
|
+
def CheckJsonParses(input_api, output_api):
|
|
1641
|
+
"""Verifies that all JSON files at least parse as valid JSON."""
|
|
1642
|
+
import json
|
|
1643
|
+
affected_files = input_api.AffectedFiles(
|
|
1644
|
+
include_deletes=False,
|
|
1645
|
+
file_filter=lambda x: x.LocalPath().endswith('.json'))
|
|
1646
|
+
warnings = []
|
|
1647
|
+
for f in affected_files:
|
|
1648
|
+
with open(f.AbsoluteLocalPath()) as j:
|
|
1649
|
+
try:
|
|
1650
|
+
json.load(j)
|
|
1651
|
+
except ValueError:
|
|
1652
|
+
# Just a warning for now, in case people are using JSON5 somewhere.
|
|
1653
|
+
warnings.append(output_api.PresubmitPromptWarning(
|
|
1654
|
+
'%s does not appear to be valid JSON.' % f.LocalPath()))
|
|
1655
|
+
return warnings
|