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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Use of this source code is governed by a BSD-style license that can be
|
|
3
3
|
# found in the LICENSE file.
|
|
4
4
|
|
|
5
|
-
"""A database of OWNERS files.
|
|
5
|
+
r"""A database of OWNERS files.
|
|
6
6
|
|
|
7
7
|
OWNERS files indicate who is allowed to approve changes in a specific directory
|
|
8
8
|
(or who is allowed to make changes without needing approval of another OWNER).
|
|
@@ -59,9 +59,16 @@ Examples for all of these combinations can be found in tests/owners_unittest.py.
|
|
|
59
59
|
|
|
60
60
|
import collections
|
|
61
61
|
import fnmatch
|
|
62
|
+
import os
|
|
62
63
|
import random
|
|
63
64
|
import re
|
|
64
65
|
|
|
66
|
+
try:
|
|
67
|
+
# This fallback applies for all versions of Python before 3.3
|
|
68
|
+
import collections.abc as collections_abc
|
|
69
|
+
except ImportError:
|
|
70
|
+
import collections as collections_abc
|
|
71
|
+
|
|
65
72
|
|
|
66
73
|
# If this is present by itself on a line, this means that everyone can review.
|
|
67
74
|
EVERYONE = '*'
|
|
@@ -77,12 +84,12 @@ GLOBAL_STATUS = '*'
|
|
|
77
84
|
|
|
78
85
|
|
|
79
86
|
def _assert_is_collection(obj):
|
|
80
|
-
assert not isinstance(obj,
|
|
87
|
+
assert not isinstance(obj, str)
|
|
81
88
|
# Module 'collections' has no 'Iterable' member
|
|
82
89
|
# pylint: disable=no-member
|
|
83
|
-
if hasattr(
|
|
84
|
-
assert (isinstance(obj,
|
|
85
|
-
isinstance(obj,
|
|
90
|
+
if hasattr(collections_abc, 'Iterable') and hasattr(collections_abc, 'Sized'):
|
|
91
|
+
assert (isinstance(obj, collections_abc.Iterable) and
|
|
92
|
+
isinstance(obj, collections_abc.Sized))
|
|
86
93
|
|
|
87
94
|
|
|
88
95
|
class SyntaxErrorInOwnersFile(Exception):
|
|
@@ -125,7 +132,9 @@ class Database(object):
|
|
|
125
132
|
# Mapping of owners to the paths or globs they own.
|
|
126
133
|
self._owners_to_paths = {EVERYONE: set()}
|
|
127
134
|
|
|
128
|
-
#
|
|
135
|
+
# Mappings of directories -> globs in the directory -> owners
|
|
136
|
+
# Example: "chrome/browser" -> "chrome/browser/*.h" -> ("john", "maria")
|
|
137
|
+
# Paths used as keys must use slashes as the separator, even on Windows.
|
|
129
138
|
self._paths_to_owners = {}
|
|
130
139
|
|
|
131
140
|
# Mapping reviewers to the preceding comment per file in the OWNERS files.
|
|
@@ -134,9 +143,15 @@ class Database(object):
|
|
|
134
143
|
# Cache of compiled regexes for _fnmatch()
|
|
135
144
|
self._fnmatch_cache = {}
|
|
136
145
|
|
|
137
|
-
#
|
|
146
|
+
# Sets of paths that stop us from looking above them for owners.
|
|
138
147
|
# (This is implicitly true for the root directory).
|
|
139
|
-
|
|
148
|
+
#
|
|
149
|
+
# The implementation is a mapping:
|
|
150
|
+
# Directory -> globs in the directory,
|
|
151
|
+
#
|
|
152
|
+
# Example:
|
|
153
|
+
# 'ui/events/devices/mojo' -> 'ui/events/devices/mojo/*_struct_traits*.*'
|
|
154
|
+
self._stop_looking = {'': set([''])}
|
|
140
155
|
|
|
141
156
|
# Set of files which have already been read.
|
|
142
157
|
self.read_files = set()
|
|
@@ -219,23 +234,61 @@ class Database(object):
|
|
|
219
234
|
|
|
220
235
|
def load_data_needed_for(self, files):
|
|
221
236
|
self._read_global_comments()
|
|
237
|
+
visited_dirs = set()
|
|
222
238
|
for f in files:
|
|
239
|
+
# Always use slashes as separators.
|
|
240
|
+
f = f.replace(os.sep, '/')
|
|
223
241
|
dirpath = self.os_path.dirname(f)
|
|
224
|
-
while not
|
|
242
|
+
while dirpath not in visited_dirs:
|
|
243
|
+
visited_dirs.add(dirpath)
|
|
244
|
+
|
|
245
|
+
obj_owners = self._owners_for(dirpath)
|
|
246
|
+
if obj_owners:
|
|
247
|
+
break
|
|
225
248
|
self._read_owners(self.os_path.join(dirpath, 'OWNERS'))
|
|
226
249
|
if self._should_stop_looking(dirpath):
|
|
227
250
|
break
|
|
251
|
+
|
|
228
252
|
dirpath = self.os_path.dirname(dirpath)
|
|
229
253
|
|
|
230
254
|
def _should_stop_looking(self, objname):
|
|
231
|
-
|
|
232
|
-
|
|
255
|
+
dirname = objname
|
|
256
|
+
while True:
|
|
257
|
+
if dirname in self._stop_looking:
|
|
258
|
+
if any(self._fnmatch(objname, stop_looking)
|
|
259
|
+
for stop_looking in self._stop_looking[dirname]):
|
|
260
|
+
return True
|
|
261
|
+
up_dirname = self.os_path.dirname(dirname)
|
|
262
|
+
if up_dirname == dirname:
|
|
263
|
+
break
|
|
264
|
+
dirname = up_dirname
|
|
265
|
+
return False
|
|
266
|
+
|
|
267
|
+
def _get_root_affected_dir(self, obj_name):
|
|
268
|
+
"""Returns the deepest directory/path that is affected by a file pattern
|
|
269
|
+
|obj_name|."""
|
|
270
|
+
root_affected_dir = obj_name
|
|
271
|
+
while '*' in root_affected_dir:
|
|
272
|
+
root_affected_dir = self.os_path.dirname(root_affected_dir)
|
|
273
|
+
return root_affected_dir
|
|
233
274
|
|
|
234
275
|
def _owners_for(self, objname):
|
|
235
276
|
obj_owners = set()
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
277
|
+
|
|
278
|
+
# Possibly relevant rules can be found stored at every directory
|
|
279
|
+
# level so iterate upwards, looking for them.
|
|
280
|
+
dirname = objname
|
|
281
|
+
while True:
|
|
282
|
+
dir_owner_rules = self._paths_to_owners.get(dirname)
|
|
283
|
+
if dir_owner_rules:
|
|
284
|
+
for owned_path, path_owners in dir_owner_rules.items():
|
|
285
|
+
if self._fnmatch(objname, owned_path):
|
|
286
|
+
obj_owners |= path_owners
|
|
287
|
+
up_dirname = self.os_path.dirname(dirname)
|
|
288
|
+
if up_dirname == dirname:
|
|
289
|
+
break
|
|
290
|
+
dirname = up_dirname
|
|
291
|
+
|
|
239
292
|
return obj_owners
|
|
240
293
|
|
|
241
294
|
def _read_owners(self, path):
|
|
@@ -268,7 +321,7 @@ class Database(object):
|
|
|
268
321
|
line = line.strip()
|
|
269
322
|
if line.startswith('#'):
|
|
270
323
|
if is_toplevel:
|
|
271
|
-
m = re.match('#\s*OWNERS_STATUS\s+=\s+(.+)$', line)
|
|
324
|
+
m = re.match(r'#\s*OWNERS_STATUS\s+=\s+(.+)$', line)
|
|
272
325
|
if m:
|
|
273
326
|
self._status_file = m.group(1).strip()
|
|
274
327
|
continue
|
|
@@ -293,7 +346,8 @@ class Database(object):
|
|
|
293
346
|
|
|
294
347
|
previous_line_was_blank = False
|
|
295
348
|
if line == 'set noparent':
|
|
296
|
-
self._stop_looking.
|
|
349
|
+
self._stop_looking.setdefault(
|
|
350
|
+
self._get_root_affected_dir(dirpath), set()).add(dirpath)
|
|
297
351
|
continue
|
|
298
352
|
|
|
299
353
|
m = re.match('per-file (.+)=(.+)', line)
|
|
@@ -363,8 +417,12 @@ class Database(object):
|
|
|
363
417
|
'cannot parse status entry: "%s"' % line.strip())
|
|
364
418
|
|
|
365
419
|
def _add_entry(self, owned_paths, directive, owners_path, lineno, comment):
|
|
420
|
+
# Consistently uses paths with slashes as the keys or else Windows will
|
|
421
|
+
# break in surprising and untested ways.
|
|
422
|
+
owned_paths = owned_paths.replace(os.sep, '/')
|
|
366
423
|
if directive == 'set noparent':
|
|
367
|
-
self._stop_looking.
|
|
424
|
+
self._stop_looking.setdefault(
|
|
425
|
+
self._get_root_affected_dir(owned_paths), set()).add(owned_paths)
|
|
368
426
|
elif directive.startswith('file:'):
|
|
369
427
|
include_file = self._resolve_include(directive[5:], owners_path, lineno)
|
|
370
428
|
if not include_file:
|
|
@@ -374,13 +432,17 @@ class Database(object):
|
|
|
374
432
|
included_owners = self._read_just_the_owners(include_file)
|
|
375
433
|
for owner in included_owners:
|
|
376
434
|
self._owners_to_paths.setdefault(owner, set()).add(owned_paths)
|
|
377
|
-
self._paths_to_owners.setdefault(
|
|
435
|
+
self._paths_to_owners.setdefault(
|
|
436
|
+
self._get_root_affected_dir(owned_paths), {}).setdefault(
|
|
437
|
+
owned_paths, set()).add(owner)
|
|
378
438
|
elif self.email_regexp.match(directive) or directive == EVERYONE:
|
|
379
439
|
if comment:
|
|
380
440
|
self.comments.setdefault(directive, {})
|
|
381
441
|
self.comments[directive][owned_paths] = comment
|
|
382
442
|
self._owners_to_paths.setdefault(directive, set()).add(owned_paths)
|
|
383
|
-
self._paths_to_owners.setdefault(
|
|
443
|
+
self._paths_to_owners.setdefault(
|
|
444
|
+
self._get_root_affected_dir(owned_paths), {}).setdefault(
|
|
445
|
+
owned_paths, set()).add(directive)
|
|
384
446
|
else:
|
|
385
447
|
raise SyntaxErrorInOwnersFile(owners_path, lineno,
|
|
386
448
|
('"%s" is not a "set noparent", file include, "*", '
|
|
@@ -392,7 +454,7 @@ class Database(object):
|
|
|
392
454
|
else:
|
|
393
455
|
assert start.startswith(self.root)
|
|
394
456
|
start = self.os_path.dirname(self.os_path.relpath(start, self.root))
|
|
395
|
-
include_path = self.os_path.join(start, path)
|
|
457
|
+
include_path = self.os_path.normpath(self.os_path.join(start, path))
|
|
396
458
|
|
|
397
459
|
if include_path in self.override_files:
|
|
398
460
|
return include_path
|
|
@@ -429,6 +491,10 @@ class Database(object):
|
|
|
429
491
|
line.startswith('per-file')):
|
|
430
492
|
continue
|
|
431
493
|
|
|
494
|
+
# If the line ends with a comment, strip the comment.
|
|
495
|
+
line, _delim, _comment = line.partition('#')
|
|
496
|
+
line = line.strip()
|
|
497
|
+
|
|
432
498
|
if self.email_regexp.match(line) or line == EVERYONE:
|
|
433
499
|
owners.add(line)
|
|
434
500
|
continue
|
|
@@ -455,7 +521,7 @@ class Database(object):
|
|
|
455
521
|
# Now that we've used `owner` and covered all their dirs, remove them
|
|
456
522
|
# from consideration.
|
|
457
523
|
del all_possible_owners[owner]
|
|
458
|
-
for o, dirs in all_possible_owners.items():
|
|
524
|
+
for o, dirs in list(all_possible_owners.items()):
|
|
459
525
|
new_dirs = [(d, dist) for (d, dist) in dirs if d not in dirs_to_remove]
|
|
460
526
|
if not new_dirs:
|
|
461
527
|
del all_possible_owners[o]
|
|
@@ -463,33 +529,71 @@ class Database(object):
|
|
|
463
529
|
all_possible_owners[o] = new_dirs
|
|
464
530
|
return suggested_owners
|
|
465
531
|
|
|
466
|
-
def
|
|
532
|
+
def _all_possible_owners_for_dir_or_file(self, dir_or_file, author,
|
|
533
|
+
cache):
|
|
534
|
+
"""Returns a dict of {potential owner: (dir_or_file, distance)} mappings.
|
|
535
|
+
"""
|
|
536
|
+
assert not dir_or_file.startswith("/")
|
|
537
|
+
res = cache.get(dir_or_file)
|
|
538
|
+
if res is None:
|
|
539
|
+
res = {}
|
|
540
|
+
dirname = dir_or_file
|
|
541
|
+
for owner in self._owners_for(dirname):
|
|
542
|
+
if author and owner == author:
|
|
543
|
+
continue
|
|
544
|
+
res.setdefault(owner, [])
|
|
545
|
+
res[owner] = (dir_or_file, 1)
|
|
546
|
+
if not self._should_stop_looking(dirname):
|
|
547
|
+
dirname = self.os_path.dirname(dirname)
|
|
548
|
+
|
|
549
|
+
parent_res = self._all_possible_owners_for_dir_or_file(dirname,
|
|
550
|
+
author, cache)
|
|
551
|
+
|
|
552
|
+
# Merge the parent information with our information, adjusting
|
|
553
|
+
# distances as necessary, and replacing the parent directory
|
|
554
|
+
# names with our names.
|
|
555
|
+
for owner, par_dir_and_distances in parent_res.items():
|
|
556
|
+
if owner in res:
|
|
557
|
+
# If the same person is in multiple OWNERS files above a given
|
|
558
|
+
# directory, only count the closest one.
|
|
559
|
+
continue
|
|
560
|
+
parent_distance = par_dir_and_distances[1]
|
|
561
|
+
res[owner] = (dir_or_file, parent_distance + 1)
|
|
562
|
+
|
|
563
|
+
cache[dir_or_file] = res
|
|
564
|
+
|
|
565
|
+
return res
|
|
566
|
+
|
|
567
|
+
def all_possible_owners(self, dirs_and_files, author):
|
|
467
568
|
"""Returns a dict of {potential owner: (dir, distance)} mappings.
|
|
468
569
|
|
|
469
570
|
A distance of 1 is the lowest/closest possible distance (which makes the
|
|
470
571
|
subsequent math easier).
|
|
471
572
|
"""
|
|
573
|
+
|
|
574
|
+
all_possible_owners_for_dir_or_file_cache = {}
|
|
472
575
|
all_possible_owners = {}
|
|
473
|
-
for current_dir in
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
if self._should_stop_looking(dirname):
|
|
486
|
-
break
|
|
487
|
-
dirname = self.os_path.dirname(dirname)
|
|
488
|
-
distance += 1
|
|
576
|
+
for current_dir in dirs_and_files:
|
|
577
|
+
# Always use slashes as separators.
|
|
578
|
+
current_dir = current_dir.replace(os.sep, '/')
|
|
579
|
+
dir_owners = self._all_possible_owners_for_dir_or_file(
|
|
580
|
+
current_dir, author,
|
|
581
|
+
all_possible_owners_for_dir_or_file_cache)
|
|
582
|
+
for owner, dir_and_distance in dir_owners.items():
|
|
583
|
+
if owner in all_possible_owners:
|
|
584
|
+
all_possible_owners[owner].append(dir_and_distance)
|
|
585
|
+
else:
|
|
586
|
+
all_possible_owners[owner] = [dir_and_distance]
|
|
587
|
+
|
|
489
588
|
return all_possible_owners
|
|
490
589
|
|
|
491
590
|
def _fnmatch(self, filename, pattern):
|
|
492
|
-
"""Same as fnmatch.fnmatch(), but
|
|
591
|
+
"""Same as fnmatch.fnmatch(), but internally caches the compiled regexes."""
|
|
592
|
+
# Make sure backslashes are never used in the filename. The regex
|
|
593
|
+
# expressions generated by fnmatch.translate don't handle matching slashes
|
|
594
|
+
# to backslashes.
|
|
595
|
+
filename = filename.replace(os.sep, '/')
|
|
596
|
+
assert pattern.count('\\') == 0, 'Backslashes found in %s' % pattern
|
|
493
597
|
matcher = self._fnmatch_cache.get(pattern)
|
|
494
598
|
if matcher is None:
|
|
495
599
|
matcher = re.compile(fnmatch.translate(pattern)).match
|
|
@@ -521,8 +625,17 @@ class Database(object):
|
|
|
521
625
|
total_costs_by_owner = Database.total_costs_by_owner(all_possible_owners,
|
|
522
626
|
dirs)
|
|
523
627
|
# Return the lowest cost owner. In the case of a tie, pick one randomly.
|
|
524
|
-
lowest_cost = min(total_costs_by_owner.
|
|
525
|
-
lowest_cost_owners =
|
|
526
|
-
|
|
527
|
-
|
|
628
|
+
lowest_cost = min(total_costs_by_owner.values())
|
|
629
|
+
lowest_cost_owners = [
|
|
630
|
+
owner for owner, cost in total_costs_by_owner.items()
|
|
631
|
+
if cost == lowest_cost]
|
|
528
632
|
return random.Random().choice(lowest_cost_owners)
|
|
633
|
+
|
|
634
|
+
def owners_rooted_at_file(self, filename):
|
|
635
|
+
"""Returns a set of all owners transitively listed in filename.
|
|
636
|
+
|
|
637
|
+
This function returns a set of all the owners either listed in filename, or
|
|
638
|
+
in a file transitively included by filename. Lines that are not plain owners
|
|
639
|
+
(i.e. per-file owners) are ignored.
|
|
640
|
+
"""
|
|
641
|
+
return self._read_just_the_owners(filename)
|
|
@@ -4,9 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
"""Interactive tool for finding reviewers/owners for a change."""
|
|
6
6
|
|
|
7
|
+
from __future__ import print_function
|
|
8
|
+
|
|
7
9
|
import os
|
|
8
10
|
import copy
|
|
9
11
|
import owners as owners_module
|
|
12
|
+
import random
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
import gclient_utils
|
|
10
16
|
|
|
11
17
|
|
|
12
18
|
def first(iterable):
|
|
@@ -123,7 +129,7 @@ class OwnersFinder(object):
|
|
|
123
129
|
self.list_owners(self.owners_queue)
|
|
124
130
|
break
|
|
125
131
|
elif inp == 'p' or inp == 'pick':
|
|
126
|
-
self.pick_owner(
|
|
132
|
+
self.pick_owner(gclient_utils.AskForData('Pick an owner: '))
|
|
127
133
|
break
|
|
128
134
|
elif inp.startswith('p ') or inp.startswith('pick '):
|
|
129
135
|
self.pick_owner(inp.split(' ', 2)[1].strip())
|
|
@@ -159,9 +165,12 @@ class OwnersFinder(object):
|
|
|
159
165
|
self.selected_owners = set()
|
|
160
166
|
self.deselected_owners = set()
|
|
161
167
|
|
|
162
|
-
#
|
|
163
|
-
|
|
164
|
-
|
|
168
|
+
# Randomize owners' names so that if many reviewers have identical scores
|
|
169
|
+
# they will be randomly ordered to avoid bias.
|
|
170
|
+
owners = list(self.owners_to_files.keys())
|
|
171
|
+
random.shuffle(owners)
|
|
172
|
+
self.owners_queue = sorted(owners,
|
|
173
|
+
key=lambda owner: self.owners_score[owner])
|
|
165
174
|
self.find_mandatory_owners()
|
|
166
175
|
|
|
167
176
|
def select_owner(self, owner, findMandatoryOwners=True):
|
|
@@ -325,14 +334,19 @@ class OwnersFinder(object):
|
|
|
325
334
|
# Print results
|
|
326
335
|
self.writeln()
|
|
327
336
|
self.writeln()
|
|
328
|
-
self.
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
self.writeln(
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
self.
|
|
337
|
+
if len(self.selected_owners) == 0:
|
|
338
|
+
self.writeln('This change list already has owner-reviewers for all '
|
|
339
|
+
'files.')
|
|
340
|
+
self.writeln('Use --ignore-current if you want to ignore them.')
|
|
341
|
+
else:
|
|
342
|
+
self.writeln('** You selected these owners **')
|
|
343
|
+
self.writeln()
|
|
344
|
+
for owner in self.selected_owners:
|
|
345
|
+
self.writeln(self.bold_name(owner) + ':')
|
|
346
|
+
self.indent()
|
|
347
|
+
for file_name in sorted(self.owners_to_files[owner]):
|
|
348
|
+
self.writeln(file_name)
|
|
349
|
+
self.unindent()
|
|
336
350
|
|
|
337
351
|
def bold(self, text):
|
|
338
352
|
return self.COLOR_BOLD + text + self.COLOR_RESET
|
|
@@ -354,7 +368,7 @@ class OwnersFinder(object):
|
|
|
354
368
|
return ' ' * self.indentation
|
|
355
369
|
|
|
356
370
|
def writeln(self, text=''):
|
|
357
|
-
print
|
|
371
|
+
print(self.print_indent() + text)
|
|
358
372
|
|
|
359
373
|
def hr(self):
|
|
360
374
|
self.writeln('=====================')
|
|
@@ -367,5 +381,5 @@ class OwnersFinder(object):
|
|
|
367
381
|
|
|
368
382
|
def input_command(self, owner):
|
|
369
383
|
self.writeln('Add ' + self.bold_name(owner) + ' as your reviewer? ')
|
|
370
|
-
return
|
|
384
|
+
return gclient_utils.AskForData(
|
|
371
385
|
'[yes/no/Defer/pick/files/owners/quit/restart]: ').lower()
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
#!/usr/bin/env vpython
|
|
1
2
|
# Copyright (c) 2018 The Chromium Authors. All rights reserved.
|
|
2
3
|
# Use of this source code is governed by a BSD-style license that can be
|
|
3
4
|
# found in the LICENSE file.
|
|
@@ -24,26 +25,20 @@ Typical output looks like this:
|
|
|
24
25
|
ninja.exe -C out\debug_component base -j 960 -l 48 -d keeprsp
|
|
25
26
|
ninja: Entering directory `out\debug_component'
|
|
26
27
|
[1 processes, 1/1 @ 0.3/s : 3.092s ] Regenerating ninja files
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
0.1 s weighted time to generate 1 .stamp files (0.1 s CPU time)
|
|
42
|
-
0.2 s weighted time to generate 1 .h files (0.2 s CPU time)
|
|
43
|
-
1.7 s weighted time to generate 1 PEFile files (1.7 s CPU time)
|
|
44
|
-
24.3 s weighted time to generate 19 .obj files (233.4 s CPU time)
|
|
45
|
-
26.3 s weighted time (235.5 s CPU time, 9.0x parallelism)
|
|
46
|
-
23 build steps completed, average of 0.88/s
|
|
28
|
+
Longest build steps:
|
|
29
|
+
0.1 weighted s to build obj/base/base/trace_log.obj (6.7 s elapsed time)
|
|
30
|
+
0.2 weighted s to build nasm.exe, nasm.exe.pdb (0.2 s elapsed time)
|
|
31
|
+
0.3 weighted s to build obj/base/base/win_util.obj (12.4 s elapsed time)
|
|
32
|
+
1.2 weighted s to build base.dll, base.dll.lib (1.2 s elapsed time)
|
|
33
|
+
Time by build-step type:
|
|
34
|
+
0.0 s weighted time to generate 6 .lib files (0.3 s elapsed time sum)
|
|
35
|
+
0.1 s weighted time to generate 25 .stamp files (1.2 s elapsed time sum)
|
|
36
|
+
0.2 s weighted time to generate 20 .o files (2.8 s elapsed time sum)
|
|
37
|
+
1.7 s weighted time to generate 4 PEFile (linking) files (2.0 s elapsed
|
|
38
|
+
time sum)
|
|
39
|
+
23.9 s weighted time to generate 770 .obj files (974.8 s elapsed time sum)
|
|
40
|
+
26.1 s weighted time (982.9 s elapsed time sum, 37.7x parallelism)
|
|
41
|
+
839 build steps completed, average of 32.17/s
|
|
47
42
|
|
|
48
43
|
If no gn clean has been done then results will be for the last non-NULL
|
|
49
44
|
invocation of ninja. Ideas for future statistics, and implementations are
|
|
@@ -56,8 +51,11 @@ will have a weighted time that is the same or similar to its elapsed time. A
|
|
|
56
51
|
compile that runs in parallel with 999 other compiles will have a weighted time
|
|
57
52
|
that is tiny."""
|
|
58
53
|
|
|
54
|
+
from __future__ import print_function
|
|
55
|
+
|
|
59
56
|
import argparse
|
|
60
57
|
import errno
|
|
58
|
+
import fnmatch
|
|
61
59
|
import os
|
|
62
60
|
import sys
|
|
63
61
|
|
|
@@ -65,7 +63,7 @@ import sys
|
|
|
65
63
|
# The number of long build times to report:
|
|
66
64
|
long_count = 10
|
|
67
65
|
# The number of long times by extension to report
|
|
68
|
-
long_ext_count =
|
|
66
|
+
long_ext_count = 10
|
|
69
67
|
|
|
70
68
|
|
|
71
69
|
class Target:
|
|
@@ -100,7 +98,7 @@ class Target:
|
|
|
100
98
|
# Allow for modest floating-point errors
|
|
101
99
|
epsilon = 0.000002
|
|
102
100
|
if (self.weighted_duration > self.Duration() + epsilon):
|
|
103
|
-
print
|
|
101
|
+
print('%s > %s?' % (self.weighted_duration, self.Duration()))
|
|
104
102
|
assert(self.weighted_duration <= self.Duration() + epsilon)
|
|
105
103
|
return self.weighted_duration
|
|
106
104
|
|
|
@@ -166,37 +164,54 @@ def ReadTargets(log, show_all):
|
|
|
166
164
|
return targets_dict.values()
|
|
167
165
|
|
|
168
166
|
|
|
169
|
-
def GetExtension(target):
|
|
167
|
+
def GetExtension(target, extra_patterns):
|
|
170
168
|
"""Return the file extension that best represents a target.
|
|
171
169
|
|
|
172
170
|
For targets that generate multiple outputs it is important to return a
|
|
173
171
|
consistent 'canonical' extension. Ultimately the goal is to group build steps
|
|
174
172
|
by type."""
|
|
175
173
|
for output in target.targets:
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
174
|
+
if extra_patterns:
|
|
175
|
+
for fn_pattern in extra_patterns.split(';'):
|
|
176
|
+
if fnmatch.fnmatch(output, '*' + fn_pattern + '*'):
|
|
177
|
+
return fn_pattern
|
|
180
178
|
# Not a true extension, but a good grouping.
|
|
181
179
|
if output.endswith('type_mappings'):
|
|
182
180
|
extension = 'type_mappings'
|
|
183
181
|
break
|
|
184
|
-
|
|
182
|
+
|
|
183
|
+
# Capture two extensions if present. For example: file.javac.jar should be
|
|
184
|
+
# distinguished from file.interface.jar.
|
|
185
|
+
root, ext1 = os.path.splitext(output)
|
|
186
|
+
_, ext2 = os.path.splitext(root)
|
|
187
|
+
extension = ext2 + ext1 # Preserve the order in the file name.
|
|
188
|
+
|
|
185
189
|
if len(extension) == 0:
|
|
186
190
|
extension = '(no extension found)'
|
|
187
|
-
|
|
191
|
+
|
|
192
|
+
if ext1 in ['.pdb', '.dll', '.exe']:
|
|
188
193
|
extension = 'PEFile (linking)'
|
|
189
194
|
# Make sure that .dll and .exe are grouped together and that the
|
|
190
195
|
# .dll.lib files don't cause these to be listed as libraries
|
|
191
196
|
break
|
|
192
|
-
if
|
|
197
|
+
if ext1 in ['.so', '.TOC']:
|
|
193
198
|
extension = '.so (linking)'
|
|
194
199
|
# Attempt to identify linking, avoid identifying as '.TOC'
|
|
195
200
|
break
|
|
201
|
+
# Make sure .obj files don't get categorized as mojo files
|
|
202
|
+
if ext1 in ['.obj', '.o']:
|
|
203
|
+
break
|
|
204
|
+
# Jars are the canonical output of java targets.
|
|
205
|
+
if ext1 == '.jar':
|
|
206
|
+
break
|
|
207
|
+
# Normalize all mojo related outputs to 'mojo'.
|
|
208
|
+
if output.count('.mojom') > 0:
|
|
209
|
+
extension = 'mojo'
|
|
210
|
+
break
|
|
196
211
|
return extension
|
|
197
212
|
|
|
198
213
|
|
|
199
|
-
def SummarizeEntries(entries):
|
|
214
|
+
def SummarizeEntries(entries, extra_step_types):
|
|
200
215
|
"""Print a summary of the passed in list of Target objects."""
|
|
201
216
|
|
|
202
217
|
# Create a list that is in order by time stamp and has entries for the
|
|
@@ -256,16 +271,16 @@ def SummarizeEntries(entries):
|
|
|
256
271
|
|
|
257
272
|
# Warn if the sum of weighted times is off by more than half a second.
|
|
258
273
|
if abs(length - weighted_total) > 500:
|
|
259
|
-
print
|
|
260
|
-
length, weighted_total)
|
|
274
|
+
print('Discrepancy!!! Length = %.3f, weighted total = %.3f' % (
|
|
275
|
+
length, weighted_total))
|
|
261
276
|
|
|
262
277
|
# Print the slowest build steps (by weighted time).
|
|
263
|
-
print
|
|
278
|
+
print(' Longest build steps:')
|
|
264
279
|
entries.sort(key=lambda x: x.WeightedDuration())
|
|
265
280
|
for target in entries[-long_count:]:
|
|
266
|
-
print
|
|
281
|
+
print(' %8.1f weighted s to build %s (%.1f s elapsed time)' % (
|
|
267
282
|
target.WeightedDuration(),
|
|
268
|
-
target.DescribeTargets(), target.Duration())
|
|
283
|
+
target.DescribeTargets(), target.Duration()))
|
|
269
284
|
|
|
270
285
|
# Sum up the time by file extension/type of the output file
|
|
271
286
|
count_by_ext = {}
|
|
@@ -273,27 +288,27 @@ def SummarizeEntries(entries):
|
|
|
273
288
|
weighted_time_by_ext = {}
|
|
274
289
|
# Scan through all of the targets to build up per-extension statistics.
|
|
275
290
|
for target in entries:
|
|
276
|
-
extension = GetExtension(target)
|
|
291
|
+
extension = GetExtension(target, extra_step_types)
|
|
277
292
|
time_by_ext[extension] = time_by_ext.get(extension, 0) + target.Duration()
|
|
278
293
|
weighted_time_by_ext[extension] = weighted_time_by_ext.get(extension,
|
|
279
294
|
0) + target.WeightedDuration()
|
|
280
295
|
count_by_ext[extension] = count_by_ext.get(extension, 0) + 1
|
|
281
296
|
|
|
282
|
-
print
|
|
297
|
+
print(' Time by build-step type:')
|
|
283
298
|
# Copy to a list with extension name and total time swapped, to (time, ext)
|
|
284
299
|
weighted_time_by_ext_sorted = sorted((y, x) for (x, y) in
|
|
285
300
|
weighted_time_by_ext.items())
|
|
286
301
|
# Print the slowest build target types (by weighted time):
|
|
287
302
|
for time, extension in weighted_time_by_ext_sorted[-long_ext_count:]:
|
|
288
|
-
print
|
|
289
|
-
'(%1.1f s
|
|
290
|
-
extension, time_by_ext[extension])
|
|
303
|
+
print(' %8.1f s weighted time to generate %d %s files '
|
|
304
|
+
'(%1.1f s elapsed time sum)' % (time, count_by_ext[extension],
|
|
305
|
+
extension, time_by_ext[extension]))
|
|
291
306
|
|
|
292
|
-
print
|
|
293
|
-
length, total_cpu_time,
|
|
294
|
-
total_cpu_time * 1.0 / length)
|
|
295
|
-
print
|
|
296
|
-
len(entries), len(entries) / (length))
|
|
307
|
+
print(' %.1f s weighted time (%.1f s elapsed time sum, %1.1fx '
|
|
308
|
+
'parallelism)' % (length, total_cpu_time,
|
|
309
|
+
total_cpu_time * 1.0 / length))
|
|
310
|
+
print(' %d build steps completed, average of %1.2f/s' % (
|
|
311
|
+
len(entries), len(entries) / (length)))
|
|
297
312
|
|
|
298
313
|
|
|
299
314
|
def main():
|
|
@@ -301,6 +316,10 @@ def main():
|
|
|
301
316
|
parser = argparse.ArgumentParser()
|
|
302
317
|
parser.add_argument('-C', dest='build_directory',
|
|
303
318
|
help='Build directory.')
|
|
319
|
+
parser.add_argument(
|
|
320
|
+
'-s',
|
|
321
|
+
'--step-types',
|
|
322
|
+
help='semicolon separated fnmatch patterns for build-step grouping')
|
|
304
323
|
parser.add_argument('--log-file',
|
|
305
324
|
help="specific ninja log file to analyze.")
|
|
306
325
|
args, _extra_args = parser.parse_known_args()
|
|
@@ -308,13 +327,22 @@ def main():
|
|
|
308
327
|
log_file = os.path.join(args.build_directory, log_file)
|
|
309
328
|
if args.log_file:
|
|
310
329
|
log_file = args.log_file
|
|
330
|
+
if not args.step_types:
|
|
331
|
+
# Offer a convenient way to add extra step types automatically, including
|
|
332
|
+
# when this script is run by autoninja. get() returns None if the variable
|
|
333
|
+
# isn't set.
|
|
334
|
+
args.step_types = os.environ.get('chromium_step_types')
|
|
335
|
+
if args.step_types:
|
|
336
|
+
# Make room for the extra build types.
|
|
337
|
+
global long_ext_count
|
|
338
|
+
long_ext_count += len(args.step_types.split(';'))
|
|
311
339
|
|
|
312
340
|
try:
|
|
313
341
|
with open(log_file, 'r') as log:
|
|
314
342
|
entries = ReadTargets(log, False)
|
|
315
|
-
SummarizeEntries(entries)
|
|
343
|
+
SummarizeEntries(entries, args.step_types)
|
|
316
344
|
except IOError:
|
|
317
|
-
print
|
|
345
|
+
print('Log file %r not found, no build summary created.' % log_file)
|
|
318
346
|
return errno.ENOENT
|
|
319
347
|
|
|
320
348
|
|