libv8 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 +7 -0
- data/.gitignore +19 -0
- data/.gitmodules +3 -0
- data/.rspec +3 -0
- data/.travis.yml +45 -0
- data/CHANGELOG.md +111 -0
- data/Gemfile +4 -0
- data/README.md +152 -0
- data/Rakefile +125 -0
- data/appveyor.yml.disabled +36 -0
- data/ext/libv8/arch.rb +20 -0
- data/ext/libv8/builder.rb +106 -0
- data/ext/libv8/extconf.rb +7 -0
- data/ext/libv8/location.rb +89 -0
- data/ext/libv8/paths.rb +28 -0
- data/lib/libv8.rb +9 -0
- data/lib/libv8/version.rb +3 -0
- data/libv8.gemspec +30 -0
- data/scaleway.png +0 -0
- data/spec/location_spec.rb +69 -0
- data/spec/spec_helper.rb +4 -0
- data/thefrontside.png +0 -0
- data/vendor/depot_tools/.cipd_impl.ps1 +129 -0
- data/vendor/depot_tools/.gitattributes +55 -0
- data/vendor/depot_tools/.gitignore +92 -0
- data/vendor/depot_tools/.style.yapf +4 -0
- data/vendor/depot_tools/.vpython +55 -0
- data/vendor/depot_tools/.vpython3 +23 -0
- data/vendor/depot_tools/CROS_OWNERS +7 -0
- data/vendor/depot_tools/GOMA_OWNERS +9 -0
- data/vendor/depot_tools/LICENSE +27 -0
- data/vendor/depot_tools/LUCI_OWNERS +5 -0
- data/vendor/depot_tools/OWNERS +39 -0
- data/vendor/depot_tools/PRESUBMIT.py +150 -0
- data/vendor/depot_tools/README.gclient.md +67 -0
- data/vendor/depot_tools/README.git-cl.md +99 -0
- data/vendor/depot_tools/README.md +78 -0
- data/vendor/depot_tools/WATCHLISTS +26 -0
- data/vendor/depot_tools/auth.py +163 -0
- data/vendor/depot_tools/autoninja +36 -0
- data/vendor/depot_tools/autoninja.bat +33 -0
- data/vendor/depot_tools/autoninja.py +148 -0
- data/vendor/depot_tools/bb +12 -0
- data/vendor/depot_tools/bb.bat +7 -0
- data/vendor/depot_tools/bootstrap/README.md +155 -0
- data/vendor/depot_tools/bootstrap/bootstrap.py +356 -0
- data/vendor/depot_tools/bootstrap/git-bash.template.sh +12 -0
- data/vendor/depot_tools/bootstrap/git.template.bat +5 -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/profile.d.python.sh +20 -0
- data/vendor/depot_tools/bootstrap/python27.bat +46 -0
- data/vendor/depot_tools/bootstrap/python3.bat +46 -0
- data/vendor/depot_tools/bootstrap/win_tools.bat +79 -0
- data/vendor/depot_tools/bootstrap_python3 +35 -0
- data/vendor/depot_tools/breakpad.py +12 -0
- data/vendor/depot_tools/cbuildbot +1 -0
- data/vendor/depot_tools/chrome_set_ver +1 -0
- data/vendor/depot_tools/cipd +247 -0
- data/vendor/depot_tools/cipd.bat +67 -0
- data/vendor/depot_tools/cipd_bin_setup.bat +6 -0
- data/vendor/depot_tools/cipd_bin_setup.sh +22 -0
- data/vendor/depot_tools/cipd_client_version +1 -0
- data/vendor/depot_tools/cipd_client_version.digests +22 -0
- data/vendor/depot_tools/cipd_manifest.txt +63 -0
- data/vendor/depot_tools/cipd_manifest.versions +438 -0
- data/vendor/depot_tools/cit +8 -0
- data/vendor/depot_tools/cit.bat +12 -0
- data/vendor/depot_tools/cit.py +167 -0
- data/vendor/depot_tools/clang-format +8 -0
- data/vendor/depot_tools/clang-format.bat +12 -0
- data/vendor/depot_tools/clang_format.py +79 -0
- data/vendor/depot_tools/clang_format_merge_driver +8 -0
- data/vendor/depot_tools/clang_format_merge_driver.bat +12 -0
- data/vendor/depot_tools/clang_format_merge_driver.py +69 -0
- data/vendor/depot_tools/codereview.settings +6 -0
- data/vendor/depot_tools/compile_single_file +8 -0
- data/vendor/depot_tools/compile_single_file.bat +11 -0
- data/vendor/depot_tools/compile_single_file.py +79 -0
- data/vendor/depot_tools/cpplint.bat +11 -0
- data/vendor/depot_tools/cpplint.py +6097 -0
- data/vendor/depot_tools/cpplint_chromium.py +50 -0
- data/vendor/depot_tools/cros +87 -0
- data/vendor/depot_tools/cros_sdk +1 -0
- data/vendor/depot_tools/crosjobs +13 -0
- data/vendor/depot_tools/detect_host_arch.py +55 -0
- data/vendor/depot_tools/dirmd +12 -0
- data/vendor/depot_tools/dirmd.bat +7 -0
- data/vendor/depot_tools/download_from_google_storage +8 -0
- data/vendor/depot_tools/download_from_google_storage.bat +12 -0
- data/vendor/depot_tools/download_from_google_storage.py +634 -0
- data/vendor/depot_tools/ensure_bootstrap +53 -0
- data/vendor/depot_tools/fetch +21 -0
- data/vendor/depot_tools/fetch.bat +28 -0
- data/vendor/depot_tools/fetch.py +319 -0
- data/vendor/depot_tools/fetch_configs/android.py +34 -0
- data/vendor/depot_tools/fetch_configs/android_internal.py +34 -0
- data/vendor/depot_tools/fetch_configs/breakpad.py +44 -0
- data/vendor/depot_tools/fetch_configs/chromium.py +66 -0
- data/vendor/depot_tools/fetch_configs/config_util.py +52 -0
- data/vendor/depot_tools/fetch_configs/crashpad.py +41 -0
- data/vendor/depot_tools/fetch_configs/dart.py +45 -0
- data/vendor/depot_tools/fetch_configs/depot_tools.py +44 -0
- data/vendor/depot_tools/fetch_configs/devtools-frontend.py +44 -0
- data/vendor/depot_tools/fetch_configs/goma_client.py +41 -0
- data/vendor/depot_tools/fetch_configs/gyp.py +41 -0
- data/vendor/depot_tools/fetch_configs/infra.py +40 -0
- data/vendor/depot_tools/fetch_configs/infra_internal.py +45 -0
- data/vendor/depot_tools/fetch_configs/inspector_protocol.py +40 -0
- data/vendor/depot_tools/fetch_configs/ios.py +34 -0
- data/vendor/depot_tools/fetch_configs/ios_internal.py +39 -0
- data/vendor/depot_tools/fetch_configs/nacl.py +48 -0
- data/vendor/depot_tools/fetch_configs/naclports.py +47 -0
- data/vendor/depot_tools/fetch_configs/node-ci.py +41 -0
- data/vendor/depot_tools/fetch_configs/pdfium.py +40 -0
- data/vendor/depot_tools/fetch_configs/skia.py +41 -0
- data/vendor/depot_tools/fetch_configs/skia_buildbot.py +41 -0
- data/vendor/depot_tools/fetch_configs/syzygy.py +41 -0
- data/vendor/depot_tools/fetch_configs/v8.py +44 -0
- data/vendor/depot_tools/fetch_configs/webrtc.py +52 -0
- data/vendor/depot_tools/fetch_configs/webrtc_android.py +34 -0
- data/vendor/depot_tools/fetch_configs/webrtc_ios.py +34 -0
- data/vendor/depot_tools/fix_encoding.py +385 -0
- data/vendor/depot_tools/gclient +38 -0
- data/vendor/depot_tools/gclient-new-workdir.py +124 -0
- data/vendor/depot_tools/gclient.bat +32 -0
- data/vendor/depot_tools/gclient.py +3198 -0
- data/vendor/depot_tools/gclient_completion.sh +76 -0
- data/vendor/depot_tools/gclient_eval.py +891 -0
- data/vendor/depot_tools/gclient_paths.py +152 -0
- data/vendor/depot_tools/gclient_scm.py +1615 -0
- data/vendor/depot_tools/gclient_utils.py +1280 -0
- data/vendor/depot_tools/gerrit_client.py +151 -0
- data/vendor/depot_tools/gerrit_util.py +996 -0
- data/vendor/depot_tools/git-cache +6 -0
- data/vendor/depot_tools/git-cl +6 -0
- data/vendor/depot_tools/git-crrev-parse +53 -0
- data/vendor/depot_tools/git-drover +6 -0
- data/vendor/depot_tools/git-find-releases +6 -0
- data/vendor/depot_tools/git-footers +6 -0
- data/vendor/depot_tools/git-freeze +8 -0
- data/vendor/depot_tools/git-gs +9 -0
- data/vendor/depot_tools/git-hyper-blame +6 -0
- data/vendor/depot_tools/git-map +6 -0
- data/vendor/depot_tools/git-map-branches +6 -0
- data/vendor/depot_tools/git-mark-merge-base +6 -0
- data/vendor/depot_tools/git-nav-downstream +6 -0
- data/vendor/depot_tools/git-nav-upstream +6 -0
- data/vendor/depot_tools/git-new-branch +6 -0
- data/vendor/depot_tools/git-number +6 -0
- data/vendor/depot_tools/git-rebase-update +6 -0
- data/vendor/depot_tools/git-rename-branch +6 -0
- data/vendor/depot_tools/git-reparent-branch +6 -0
- data/vendor/depot_tools/git-retry +8 -0
- data/vendor/depot_tools/git-runhooks +23 -0
- data/vendor/depot_tools/git-squash-branch +6 -0
- data/vendor/depot_tools/git-templates/description +3 -0
- data/vendor/depot_tools/git-templates/hooks/applypatch-msg +4 -0
- data/vendor/depot_tools/git-templates/hooks/post-applypatch +4 -0
- data/vendor/depot_tools/git-templates/hooks/post-checkout +4 -0
- data/vendor/depot_tools/git-templates/hooks/post-commit +4 -0
- data/vendor/depot_tools/git-templates/hooks/post-merge +4 -0
- data/vendor/depot_tools/git-templates/hooks/post-update +4 -0
- data/vendor/depot_tools/git-templates/hooks/pre-applypatch +4 -0
- data/vendor/depot_tools/git-templates/hooks/pre-auto-gc +4 -0
- data/vendor/depot_tools/git-templates/hooks/pre-commit +4 -0
- data/vendor/depot_tools/git-templates/hooks/pre-rebase +4 -0
- data/vendor/depot_tools/git-templates/hooks/prepare-commit-msg +4 -0
- data/vendor/depot_tools/git-templates/info/exclude +6 -0
- data/vendor/depot_tools/git-thaw +13 -0
- data/vendor/depot_tools/git-upstream-diff +9 -0
- data/vendor/depot_tools/git_cache.py +786 -0
- data/vendor/depot_tools/git_cl.py +5158 -0
- data/vendor/depot_tools/git_cl_completion.sh +48 -0
- data/vendor/depot_tools/git_common.py +1101 -0
- data/vendor/depot_tools/git_dates.py +62 -0
- data/vendor/depot_tools/git_drover.py +469 -0
- data/vendor/depot_tools/git_find_releases.py +67 -0
- data/vendor/depot_tools/git_footers.py +261 -0
- data/vendor/depot_tools/git_freezer.py +40 -0
- data/vendor/depot_tools/git_hyper_blame.py +391 -0
- data/vendor/depot_tools/git_map.py +166 -0
- data/vendor/depot_tools/git_map_branches.py +354 -0
- data/vendor/depot_tools/git_mark_merge_base.py +73 -0
- data/vendor/depot_tools/git_nav_downstream.py +69 -0
- data/vendor/depot_tools/git_new_branch.py +82 -0
- data/vendor/depot_tools/git_number.py +301 -0
- data/vendor/depot_tools/git_rebase_update.py +351 -0
- data/vendor/depot_tools/git_rename_branch.py +55 -0
- data/vendor/depot_tools/git_reparent_branch.py +101 -0
- data/vendor/depot_tools/git_retry.py +181 -0
- data/vendor/depot_tools/git_squash_branch.py +28 -0
- data/vendor/depot_tools/git_upstream_diff.py +64 -0
- data/vendor/depot_tools/gn +8 -0
- data/vendor/depot_tools/gn.bat +12 -0
- data/vendor/depot_tools/gn.py +78 -0
- 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 +190 -0
- data/vendor/depot_tools/gsutil.py.bat +23 -0
- data/vendor/depot_tools/gsutil.vpython +120 -0
- data/vendor/depot_tools/infra/README.md +1 -0
- data/vendor/depot_tools/infra/config/OWNERS +7 -0
- data/vendor/depot_tools/infra/config/README.md +1 -0
- data/vendor/depot_tools/infra/config/recipes.cfg +26 -0
- data/vendor/depot_tools/led +12 -0
- data/vendor/depot_tools/led.bat +7 -0
- data/vendor/depot_tools/lockfile.py +116 -0
- data/vendor/depot_tools/luci-auth +13 -0
- data/vendor/depot_tools/luci-auth.bat +8 -0
- data/vendor/depot_tools/lucicfg +12 -0
- data/vendor/depot_tools/lucicfg.bat +7 -0
- data/vendor/depot_tools/mac_toolchain +12 -0
- data/vendor/depot_tools/man/html/depot_tools.html +934 -0
- data/vendor/depot_tools/man/html/depot_tools_tutorial.html +1593 -0
- data/vendor/depot_tools/man/html/git-cl.html +1033 -0
- data/vendor/depot_tools/man/html/git-drover.html +1048 -0
- data/vendor/depot_tools/man/html/git-footers.html +878 -0
- data/vendor/depot_tools/man/html/git-freeze.html +859 -0
- data/vendor/depot_tools/man/html/git-hyper-blame.html +878 -0
- data/vendor/depot_tools/man/html/git-map-branches.html +904 -0
- data/vendor/depot_tools/man/html/git-map.html +887 -0
- data/vendor/depot_tools/man/html/git-mark-merge-base.html +826 -0
- data/vendor/depot_tools/man/html/git-nav-downstream.html +844 -0
- data/vendor/depot_tools/man/html/git-nav-upstream.html +853 -0
- data/vendor/depot_tools/man/html/git-new-branch.html +932 -0
- data/vendor/depot_tools/man/html/git-rebase-update.html +961 -0
- data/vendor/depot_tools/man/html/git-rename-branch.html +794 -0
- data/vendor/depot_tools/man/html/git-reparent-branch.html +847 -0
- data/vendor/depot_tools/man/html/git-retry.html +858 -0
- data/vendor/depot_tools/man/html/git-squash-branch.html +881 -0
- data/vendor/depot_tools/man/html/git-thaw.html +794 -0
- data/vendor/depot_tools/man/html/git-upstream-diff.html +923 -0
- data/vendor/depot_tools/man/man1/git-cl.1 +198 -0
- data/vendor/depot_tools/man/man1/git-drover.1 +330 -0
- data/vendor/depot_tools/man/man1/git-footers.1 +144 -0
- data/vendor/depot_tools/man/man1/git-freeze.1 +113 -0
- data/vendor/depot_tools/man/man1/git-hyper-blame.1 +128 -0
- data/vendor/depot_tools/man/man1/git-map-branches.1 +210 -0
- data/vendor/depot_tools/man/man1/git-map.1 +179 -0
- data/vendor/depot_tools/man/man1/git-mark-merge-base.1 +69 -0
- data/vendor/depot_tools/man/man1/git-nav-downstream.1 +112 -0
- data/vendor/depot_tools/man/man1/git-nav-upstream.1 +122 -0
- data/vendor/depot_tools/man/man1/git-new-branch.1 +176 -0
- data/vendor/depot_tools/man/man1/git-rebase-update.1 +177 -0
- data/vendor/depot_tools/man/man1/git-rename-branch.1 +53 -0
- data/vendor/depot_tools/man/man1/git-reparent-branch.1 +93 -0
- data/vendor/depot_tools/man/man1/git-retry.1 +108 -0
- data/vendor/depot_tools/man/man1/git-squash-branch.1 +129 -0
- data/vendor/depot_tools/man/man1/git-thaw.1 +54 -0
- data/vendor/depot_tools/man/man1/git-upstream-diff.1 +153 -0
- data/vendor/depot_tools/man/man7/depot_tools.7 +139 -0
- data/vendor/depot_tools/man/man7/depot_tools_tutorial.7 +1061 -0
- data/vendor/depot_tools/man/push_to_gs.sh +4 -0
- data/vendor/depot_tools/man/src/.gitignore +5 -0
- data/vendor/depot_tools/man/src/_aliases.txt +5 -0
- data/vendor/depot_tools/man/src/_footer.txt +8 -0
- data/vendor/depot_tools/man/src/_git-cl_desc.helper.txt +1 -0
- data/vendor/depot_tools/man/src/_git-drover_desc.helper.txt +2 -0
- data/vendor/depot_tools/man/src/_git-footers_desc.helper.txt +1 -0
- data/vendor/depot_tools/man/src/_git-freeze_desc.helper.txt +1 -0
- data/vendor/depot_tools/man/src/_git-hyper-blame_desc.helper.txt +1 -0
- data/vendor/depot_tools/man/src/_git-map-branches_desc.helper.txt +4 -0
- data/vendor/depot_tools/man/src/_git-map_desc.helper.txt +3 -0
- data/vendor/depot_tools/man/src/_git-mark-merge-base_desc.helper.txt +1 -0
- data/vendor/depot_tools/man/src/_git-nav-downstream_desc.helper.txt +1 -0
- data/vendor/depot_tools/man/src/_git-nav-upstream_desc.helper.txt +1 -0
- data/vendor/depot_tools/man/src/_git-new-branch_desc.helper.txt +1 -0
- data/vendor/depot_tools/man/src/_git-rebase-update_desc.helper.txt +1 -0
- data/vendor/depot_tools/man/src/_git-rename-branch_desc.helper.txt +1 -0
- data/vendor/depot_tools/man/src/_git-reparent-branch_desc.helper.txt +1 -0
- data/vendor/depot_tools/man/src/_git-retry_desc.helper.txt +2 -0
- data/vendor/depot_tools/man/src/_git-squash-branch_desc.helper.txt +1 -0
- data/vendor/depot_tools/man/src/_git-thaw_desc.helper.txt +2 -0
- data/vendor/depot_tools/man/src/_git-upstream-diff_desc.helper.txt +1 -0
- data/vendor/depot_tools/man/src/_helper_prefix.txt +1 -0
- data/vendor/depot_tools/man/src/asciidoc-override.css +7 -0
- data/vendor/depot_tools/man/src/common_demo_functions.sh +84 -0
- data/vendor/depot_tools/man/src/demo_repo.sh +43 -0
- data/vendor/depot_tools/man/src/depot_tools.txt +28 -0
- data/vendor/depot_tools/man/src/depot_tools_tutorial.demo.walkthrough.sh +155 -0
- data/vendor/depot_tools/man/src/depot_tools_tutorial.txt +432 -0
- data/vendor/depot_tools/man/src/filter_demo_output.py +141 -0
- data/vendor/depot_tools/man/src/git-cl.txt +119 -0
- data/vendor/depot_tools/man/src/git-drover.demo.1.sh +22 -0
- data/vendor/depot_tools/man/src/git-drover.demo.2.sh +23 -0
- data/vendor/depot_tools/man/src/git-drover.demo.3.sh +27 -0
- data/vendor/depot_tools/man/src/git-drover.demo.4.sh +39 -0
- data/vendor/depot_tools/man/src/git-drover.demo.common.sh +19 -0
- data/vendor/depot_tools/man/src/git-drover.txt +102 -0
- data/vendor/depot_tools/man/src/git-footers.demo.1.sh +17 -0
- data/vendor/depot_tools/man/src/git-footers.txt +71 -0
- data/vendor/depot_tools/man/src/git-freeze.demo.1.sh +23 -0
- data/vendor/depot_tools/man/src/git-freeze.txt +54 -0
- data/vendor/depot_tools/man/src/git-hyper-blame.demo.1.sh +3 -0
- data/vendor/depot_tools/man/src/git-hyper-blame.demo.2.sh +4 -0
- data/vendor/depot_tools/man/src/git-hyper-blame.demo.common.sh +57 -0
- data/vendor/depot_tools/man/src/git-hyper-blame.txt +85 -0
- data/vendor/depot_tools/man/src/git-map-branches.demo.1.sh +8 -0
- data/vendor/depot_tools/man/src/git-map-branches.txt +64 -0
- data/vendor/depot_tools/man/src/git-map.demo.1.sh +3 -0
- data/vendor/depot_tools/man/src/git-map.txt +67 -0
- data/vendor/depot_tools/man/src/git-mark-merge-base.txt +46 -0
- data/vendor/depot_tools/man/src/git-nav-downstream.demo.1.sh +12 -0
- data/vendor/depot_tools/man/src/git-nav-downstream.txt +40 -0
- data/vendor/depot_tools/man/src/git-nav-upstream.demo.1.sh +12 -0
- data/vendor/depot_tools/man/src/git-nav-upstream.txt +39 -0
- data/vendor/depot_tools/man/src/git-new-branch.demo.1.sh +17 -0
- data/vendor/depot_tools/man/src/git-new-branch.txt +82 -0
- data/vendor/depot_tools/man/src/git-rebase-update.txt +141 -0
- data/vendor/depot_tools/man/src/git-rename-branch.txt +28 -0
- data/vendor/depot_tools/man/src/git-reparent-branch.txt +61 -0
- data/vendor/depot_tools/man/src/git-retry.txt +67 -0
- data/vendor/depot_tools/man/src/git-squash-branch.demo.1.sh +12 -0
- data/vendor/depot_tools/man/src/git-squash-branch.txt +59 -0
- data/vendor/depot_tools/man/src/git-thaw.txt +29 -0
- data/vendor/depot_tools/man/src/git-upstream-diff.txt +107 -0
- data/vendor/depot_tools/man/src/make_docs.sh +260 -0
- data/vendor/depot_tools/man/src/prep_demo_repo.sh +103 -0
- data/vendor/depot_tools/metrics.README.md +101 -0
- data/vendor/depot_tools/metrics.py +297 -0
- data/vendor/depot_tools/metrics_utils.py +293 -0
- data/vendor/depot_tools/my_activity.py +971 -0
- data/vendor/depot_tools/ninja +44 -0
- data/vendor/depot_tools/ninja-linux32 +0 -0
- data/vendor/depot_tools/ninja-linux64 +0 -0
- data/vendor/depot_tools/ninja-mac +0 -0
- data/vendor/depot_tools/ninja.exe +0 -0
- data/vendor/depot_tools/ninjalog.README.md +64 -0
- data/vendor/depot_tools/ninjalog_uploader.py +233 -0
- data/vendor/depot_tools/ninjalog_uploader_wrapper.py +125 -0
- data/vendor/depot_tools/owners.py +641 -0
- data/vendor/depot_tools/owners_finder.py +385 -0
- data/vendor/depot_tools/post_build_ninja_summary.py +350 -0
- data/vendor/depot_tools/presubmit_canned_checks.py +1655 -0
- data/vendor/depot_tools/presubmit_support.py +1923 -0
- data/vendor/depot_tools/profile.xml +8 -0
- data/vendor/depot_tools/prpc +13 -0
- data/vendor/depot_tools/prpc.bat +8 -0
- data/vendor/depot_tools/pylint +9 -0
- 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/pylint.bat +12 -0
- data/vendor/depot_tools/pylint_main.py +45 -0
- data/vendor/depot_tools/pylintrc +349 -0
- data/vendor/depot_tools/python-bin/python3 +7 -0
- data/vendor/depot_tools/python_runner.sh +60 -0
- data/vendor/depot_tools/rdb +12 -0
- data/vendor/depot_tools/rdb.bat +7 -0
- data/vendor/depot_tools/recipes/OWNERS +4 -0
- data/vendor/depot_tools/recipes/README.recipes.md +1079 -0
- data/vendor/depot_tools/recipes/recipe_modules/OWNERS +1 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/OWNERS +2 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +38 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +516 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +117 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +117 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +118 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +211 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +194 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +211 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +211 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/input_commit_with_id_without_repo.json +210 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/multiple_patch_refs.json +214 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +265 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_HEAD.json +65 -0
- 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 +212 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +210 -0
- 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 +95 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +209 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +193 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +265 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +261 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +261 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +265 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +265 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +265 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +265 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/unrecognized_commit_repo.json +8 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_tags.json +211 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +308 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/__init__.py +0 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +1258 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/test_api.py +93 -0
- 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 +35 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/__init__.py +9 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/api.py +455 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic.json +403 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic_pkg.json +403 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-failed.json +82 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-many-instances.json +411 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/mac64.json +403 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_file.json +315 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_mode.json +313 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_verfile.json +313 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/win64.json +403 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.py +187 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk arch.json +5 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk bits.json +5 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_32.json +12 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_64.json +12 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_32.json +12 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_64.json +12 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_mips_64.json +12 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/mac_intel_64.json +12 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_32.json +12 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_64.json +12 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.py +59 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/test_api.py +93 -0
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/__init__.py +9 -0
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +75 -0
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +83 -0
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +83 -0
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +83 -0
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.py +55 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/__init__.py +13 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/api.py +428 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +462 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/basic.json +238 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/revision.json +240 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/tryserver.json +238 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.py +95 -0
- 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 +36 -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 +92 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/sync_failure.py +24 -0
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/__init__.py +8 -0
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/api.py +178 -0
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.expected/basic.json +284 -0
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.py +73 -0
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/test_api.py +53 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/__init__.py +11 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/api.py +405 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic.json +217 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_branch.json +217 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_file_name.json +219 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_hash.json +216 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_ref.json +217 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_submodule_update_force.json +218 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_tags.json +218 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/can_fail_build.json +164 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cannot_fail_build.json +220 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cat-file_test.json +239 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_delta.json +290 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_failed.json +220 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output.json +222 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output_fails_build.json +111 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/curl_trace_file.json +218 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/git-cache-checkout.json +265 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/platform_win.json +217 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/rebase_failed.json +221 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/remote_not_origin.json +219 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/set_got_revision.json +218 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.py +170 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/resources/git_setup.py +52 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/test_api.py +18 -0
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/__init__.py +5 -0
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/api.py +50 -0
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/config.py +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.expected/basic.json +105 -0
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.py +47 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/OWNERS +2 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/__init__.py +12 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/api.py +257 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.expected/basic.json +596 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.py +93 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/resources/gerrit_client.py +251 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/test_api.py +95 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.expected/basic.json +5 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.py +49 -0
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/__init__.py +4 -0
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/api.py +222 -0
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.expected/basic.json +247 -0
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.py +92 -0
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/resources/gsutil_smart_retry.py +69 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/__init__.py +36 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/api.py +140 -0
- 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 +21 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/mac.json +83 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/win.json +21 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.py +42 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/__init__.py +27 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/api.py +251 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.expected/basic.json +27 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.py +19 -0
- 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/__init__.py +18 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +264 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/basic_tags.json +57 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch.json +190 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch_and_target_ref.json +190 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +21 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.py +95 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/test_api.py +14 -0
- 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/__init__.py +25 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/api.py +137 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/linux.json +21 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/mac.json +21 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/win.json +108 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.py +21 -0
- data/vendor/depot_tools/recipes/recipes.py +249 -0
- data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +175 -0
- data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.py +56 -0
- data/vendor/depot_tools/recipes/trigger_recipe_roller.txt +13 -0
- data/vendor/depot_tools/repo +1194 -0
- data/vendor/depot_tools/roll-dep +21 -0
- data/vendor/depot_tools/roll-dep.bat +21 -0
- data/vendor/depot_tools/roll_dep.py +282 -0
- data/vendor/depot_tools/scm.py +415 -0
- data/vendor/depot_tools/setup_color.py +130 -0
- data/vendor/depot_tools/split_cl.py +263 -0
- data/vendor/depot_tools/subcommand.py +261 -0
- data/vendor/depot_tools/subprocess2.py +258 -0
- data/vendor/depot_tools/third_party/__init__.py +5 -0
- data/vendor/depot_tools/third_party/colorama/LICENSE.txt +27 -0
- data/vendor/depot_tools/third_party/colorama/README.chromium +12 -0
- data/vendor/depot_tools/third_party/colorama/README.rst +346 -0
- data/vendor/depot_tools/third_party/colorama/__init__.py +6 -0
- data/vendor/depot_tools/third_party/colorama/ansi.py +102 -0
- data/vendor/depot_tools/third_party/colorama/ansitowin32.py +257 -0
- data/vendor/depot_tools/third_party/colorama/initialise.py +80 -0
- data/vendor/depot_tools/third_party/colorama/win32.py +152 -0
- data/vendor/depot_tools/third_party/colorama/winterm.py +169 -0
- data/vendor/depot_tools/third_party/coverage/AUTHORS.txt +43 -0
- data/vendor/depot_tools/third_party/coverage/PKG-INFO +41 -0
- data/vendor/depot_tools/third_party/coverage/README.chromium +13 -0
- data/vendor/depot_tools/third_party/coverage/__init__.py +120 -0
- data/vendor/depot_tools/third_party/coverage/__main__.py +4 -0
- data/vendor/depot_tools/third_party/coverage/annotate.py +101 -0
- data/vendor/depot_tools/third_party/coverage/backward.py +184 -0
- data/vendor/depot_tools/third_party/coverage/bytecode.py +75 -0
- data/vendor/depot_tools/third_party/coverage/cmdline.py +740 -0
- data/vendor/depot_tools/third_party/coverage/codeunit.py +145 -0
- data/vendor/depot_tools/third_party/coverage/collector.py +353 -0
- data/vendor/depot_tools/third_party/coverage/config.py +213 -0
- data/vendor/depot_tools/third_party/coverage/control.py +776 -0
- data/vendor/depot_tools/third_party/coverage/data.py +278 -0
- data/vendor/depot_tools/third_party/coverage/debug.py +54 -0
- data/vendor/depot_tools/third_party/coverage/execfile.py +171 -0
- data/vendor/depot_tools/third_party/coverage/files.py +309 -0
- data/vendor/depot_tools/third_party/coverage/fullcoverage/encodings.py +57 -0
- data/vendor/depot_tools/third_party/coverage/html.py +387 -0
- data/vendor/depot_tools/third_party/coverage/htmlfiles/coverage_html.js +376 -0
- data/vendor/depot_tools/third_party/coverage/htmlfiles/index.html +104 -0
- data/vendor/depot_tools/third_party/coverage/htmlfiles/jquery-1.4.3.min.js +166 -0
- data/vendor/depot_tools/third_party/coverage/htmlfiles/jquery.hotkeys.js +99 -0
- data/vendor/depot_tools/third_party/coverage/htmlfiles/jquery.isonscreen.js +53 -0
- data/vendor/depot_tools/third_party/coverage/htmlfiles/jquery.min.js +166 -0
- data/vendor/depot_tools/third_party/coverage/htmlfiles/jquery.tablesorter.min.js +2 -0
- data/vendor/depot_tools/third_party/coverage/htmlfiles/keybd_closed.png +0 -0
- data/vendor/depot_tools/third_party/coverage/htmlfiles/keybd_open.png +0 -0
- data/vendor/depot_tools/third_party/coverage/htmlfiles/pyfile.html +90 -0
- data/vendor/depot_tools/third_party/coverage/htmlfiles/style.css +300 -0
- data/vendor/depot_tools/third_party/coverage/misc.py +163 -0
- data/vendor/depot_tools/third_party/coverage/parser.py +666 -0
- data/vendor/depot_tools/third_party/coverage/phystokens.py +208 -0
- data/vendor/depot_tools/third_party/coverage/report.py +92 -0
- data/vendor/depot_tools/third_party/coverage/results.py +286 -0
- data/vendor/depot_tools/third_party/coverage/summary.py +86 -0
- data/vendor/depot_tools/third_party/coverage/templite.py +166 -0
- data/vendor/depot_tools/third_party/coverage/version.py +9 -0
- data/vendor/depot_tools/third_party/coverage/xmlreport.py +155 -0
- data/vendor/depot_tools/third_party/httplib2/LICENSE +1339 -0
- data/vendor/depot_tools/third_party/httplib2/README.chromium +15 -0
- data/vendor/depot_tools/third_party/httplib2/__init__.py +1780 -0
- data/vendor/depot_tools/third_party/httplib2/cacerts.txt +2196 -0
- data/vendor/depot_tools/third_party/httplib2/iri2uri.py +110 -0
- data/vendor/depot_tools/third_party/httplib2/socks.py +448 -0
- data/vendor/depot_tools/third_party/repo/COPYING +202 -0
- data/vendor/depot_tools/third_party/repo/README.chromium +4 -0
- data/vendor/depot_tools/third_party/repo/__init__.py +0 -0
- data/vendor/depot_tools/third_party/repo/progress.py +117 -0
- data/vendor/depot_tools/third_party/retry_decorator/LICENSE.google +30 -0
- data/vendor/depot_tools/third_party/retry_decorator/__init__.py +0 -0
- data/vendor/depot_tools/third_party/retry_decorator/decorators.py +45 -0
- data/vendor/depot_tools/third_party/schema/.editorconfig +15 -0
- data/vendor/depot_tools/third_party/schema/.gitignore +174 -0
- data/vendor/depot_tools/third_party/schema/.travis.yml +37 -0
- data/vendor/depot_tools/third_party/schema/LICENSE-MIT +19 -0
- data/vendor/depot_tools/third_party/schema/MANIFEST.in +1 -0
- data/vendor/depot_tools/third_party/schema/README.chromium +12 -0
- data/vendor/depot_tools/third_party/schema/README.rst +382 -0
- data/vendor/depot_tools/third_party/schema/__init__.py +1 -0
- data/vendor/depot_tools/third_party/schema/schema.py +338 -0
- data/vendor/depot_tools/third_party/schema/setup.cfg +5 -0
- data/vendor/depot_tools/third_party/schema/setup.py +30 -0
- data/vendor/depot_tools/third_party/schema/test_schema.py +556 -0
- data/vendor/depot_tools/third_party/schema/tox.ini +33 -0
- data/vendor/depot_tools/third_party/six/LICENSE.txt +18 -0
- data/vendor/depot_tools/third_party/six/README.chromium +10 -0
- data/vendor/depot_tools/third_party/six/__init__.py +762 -0
- data/vendor/depot_tools/update_depot_tools +138 -0
- data/vendor/depot_tools/update_depot_tools.bat +65 -0
- data/vendor/depot_tools/update_depot_tools_toggle.py +38 -0
- data/vendor/depot_tools/upload_metrics.py +26 -0
- data/vendor/depot_tools/upload_to_google_storage.py +306 -0
- data/vendor/depot_tools/vpython +42 -0
- data/vendor/depot_tools/vpython.bat +7 -0
- data/vendor/depot_tools/vpython3 +55 -0
- data/vendor/depot_tools/vpython3.bat +12 -0
- data/vendor/depot_tools/watchlists.py +141 -0
- data/vendor/depot_tools/weekly +54 -0
- data/vendor/depot_tools/win32imports.py +61 -0
- data/vendor/depot_tools/win_toolchain/OWNERS +2 -0
- data/vendor/depot_tools/win_toolchain/README.md +74 -0
- data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +599 -0
- data/vendor/depot_tools/win_toolchain/package_from_installed.py +524 -0
- data/vendor/depot_tools/wtf +81 -0
- data/vendor/depot_tools/yapf +21 -0
- data/vendor/depot_tools/yapf.bat +12 -0
- data/vendor/depot_tools/zsh-goodies/README +6 -0
- data/vendor/depot_tools/zsh-goodies/_gclient +14 -0
- metadata +729 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright (c) 2016 The Chromium Authors. All rights reserved.
|
|
3
|
+
# Use of this source code is governed by a BSD-style license that can be
|
|
4
|
+
# found in the LICENSE file.
|
|
5
|
+
|
|
6
|
+
from __future__ import print_function
|
|
7
|
+
|
|
8
|
+
import ctypes
|
|
9
|
+
import os
|
|
10
|
+
import platform
|
|
11
|
+
import subprocess
|
|
12
|
+
import sys
|
|
13
|
+
from third_party import colorama
|
|
14
|
+
|
|
15
|
+
IS_TTY = None
|
|
16
|
+
OUT_TYPE = 'unknown'
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def enable_native_ansi():
|
|
20
|
+
"""Enables native ANSI sequences in console. Windows 10 only.
|
|
21
|
+
|
|
22
|
+
Returns whether successful.
|
|
23
|
+
"""
|
|
24
|
+
kernel32 = ctypes.windll.kernel32
|
|
25
|
+
ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x04
|
|
26
|
+
|
|
27
|
+
out_handle = kernel32.GetStdHandle(subprocess.STD_OUTPUT_HANDLE)
|
|
28
|
+
|
|
29
|
+
# GetConsoleMode fails if the terminal isn't native.
|
|
30
|
+
mode = ctypes.wintypes.DWORD()
|
|
31
|
+
if kernel32.GetConsoleMode(out_handle, ctypes.byref(mode)) == 0:
|
|
32
|
+
return False
|
|
33
|
+
|
|
34
|
+
if not (mode.value & ENABLE_VIRTUAL_TERMINAL_PROCESSING):
|
|
35
|
+
if kernel32.SetConsoleMode(
|
|
36
|
+
out_handle, mode.value | ENABLE_VIRTUAL_TERMINAL_PROCESSING) == 0:
|
|
37
|
+
print(
|
|
38
|
+
'kernel32.SetConsoleMode to enable ANSI sequences failed',
|
|
39
|
+
file=sys.stderr)
|
|
40
|
+
return False
|
|
41
|
+
|
|
42
|
+
return True
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def init():
|
|
46
|
+
# should_wrap instructs colorama to wrap stdout/stderr with an ASNI colorcode
|
|
47
|
+
# interpreter that converts them to SetConsoleTextAttribute calls. This only
|
|
48
|
+
# should be True in cases where we're connected to cmd.exe's console. Setting
|
|
49
|
+
# this to True on non-windows systems has no effect.
|
|
50
|
+
should_wrap = False
|
|
51
|
+
global IS_TTY, OUT_TYPE
|
|
52
|
+
IS_TTY = sys.stdout.isatty()
|
|
53
|
+
if IS_TTY:
|
|
54
|
+
# Yay! We detected a console in the normal way. It doesn't really matter
|
|
55
|
+
# if it's windows or not, we win.
|
|
56
|
+
OUT_TYPE = 'console'
|
|
57
|
+
should_wrap = True
|
|
58
|
+
elif sys.platform.startswith('win'):
|
|
59
|
+
# assume this is some sort of file
|
|
60
|
+
OUT_TYPE = 'file (win)'
|
|
61
|
+
|
|
62
|
+
import msvcrt
|
|
63
|
+
h = msvcrt.get_osfhandle(sys.stdout.fileno())
|
|
64
|
+
# h is the win32 HANDLE for stdout.
|
|
65
|
+
ftype = ctypes.windll.kernel32.GetFileType(h)
|
|
66
|
+
if ftype == 2: # FILE_TYPE_CHAR
|
|
67
|
+
# This is a normal cmd console, but we'll only get here if we're running
|
|
68
|
+
# inside a `git command` which is actually git->bash->command. Not sure
|
|
69
|
+
# why isatty doesn't detect this case.
|
|
70
|
+
OUT_TYPE = 'console (cmd via msys)'
|
|
71
|
+
IS_TTY = True
|
|
72
|
+
should_wrap = True
|
|
73
|
+
elif ftype == 3: # FILE_TYPE_PIPE
|
|
74
|
+
OUT_TYPE = 'pipe (win)'
|
|
75
|
+
# This is some kind of pipe on windows. This could either be a real pipe
|
|
76
|
+
# or this could be msys using a pipe to emulate a pty. We use the same
|
|
77
|
+
# algorithm that msys-git uses to determine if it's connected to a pty or
|
|
78
|
+
# not.
|
|
79
|
+
|
|
80
|
+
# This function and the structures are defined in the MSDN documentation
|
|
81
|
+
# using the same names.
|
|
82
|
+
def NT_SUCCESS(status):
|
|
83
|
+
# The first two bits of status are the severity. The success
|
|
84
|
+
# severities are 0 and 1, and the !success severities are 2 and 3.
|
|
85
|
+
# Therefore since ctypes interprets the default restype of the call
|
|
86
|
+
# to be an 'C int' (which is guaranteed to be signed 32 bits), All
|
|
87
|
+
# success codes are positive, and all !success codes are negative.
|
|
88
|
+
return status >= 0
|
|
89
|
+
|
|
90
|
+
class UNICODE_STRING(ctypes.Structure):
|
|
91
|
+
_fields_ = [('Length', ctypes.c_ushort),
|
|
92
|
+
('MaximumLength', ctypes.c_ushort),
|
|
93
|
+
('Buffer', ctypes.c_wchar_p)]
|
|
94
|
+
|
|
95
|
+
class OBJECT_NAME_INFORMATION(ctypes.Structure):
|
|
96
|
+
_fields_ = [('Name', UNICODE_STRING),
|
|
97
|
+
('NameBuffer', ctypes.c_wchar_p)]
|
|
98
|
+
|
|
99
|
+
buf = ctypes.create_string_buffer(1024)
|
|
100
|
+
# Ask NT what the name of the object our stdout HANDLE is. It would be
|
|
101
|
+
# possible to use GetFileInformationByHandleEx, but it's only available
|
|
102
|
+
# on Vista+. If you're reading this in 2017 or later, feel free to
|
|
103
|
+
# refactor this out.
|
|
104
|
+
#
|
|
105
|
+
# The '1' here is ObjectNameInformation
|
|
106
|
+
if NT_SUCCESS(ctypes.windll.ntdll.NtQueryObject(h, 1, buf, len(buf)-2,
|
|
107
|
+
None)):
|
|
108
|
+
out = OBJECT_NAME_INFORMATION.from_buffer(buf)
|
|
109
|
+
name = out.Name.Buffer.split('\\')[-1]
|
|
110
|
+
IS_TTY = name.startswith('msys-') and '-pty' in name
|
|
111
|
+
if IS_TTY:
|
|
112
|
+
OUT_TYPE = 'bash (msys)'
|
|
113
|
+
else:
|
|
114
|
+
# A normal file, or an unknown file type.
|
|
115
|
+
pass
|
|
116
|
+
else:
|
|
117
|
+
# This is non-windows, so we trust isatty.
|
|
118
|
+
OUT_TYPE = 'pipe or file'
|
|
119
|
+
|
|
120
|
+
# Enable native ANSI color codes on Windows 10.
|
|
121
|
+
if IS_TTY and platform.release() == '10':
|
|
122
|
+
if enable_native_ansi():
|
|
123
|
+
should_wrap = False
|
|
124
|
+
|
|
125
|
+
colorama.init(wrap=should_wrap)
|
|
126
|
+
|
|
127
|
+
if __name__ == '__main__':
|
|
128
|
+
init()
|
|
129
|
+
print('IS_TTY:', IS_TTY)
|
|
130
|
+
print('OUT_TYPE:', OUT_TYPE)
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright 2017 The Chromium Authors. All rights reserved.
|
|
3
|
+
# Use of this source code is governed by a BSD-style license that can be
|
|
4
|
+
# found in the LICENSE file.
|
|
5
|
+
|
|
6
|
+
"""Splits a branch into smaller branches and uploads CLs."""
|
|
7
|
+
|
|
8
|
+
from __future__ import print_function
|
|
9
|
+
|
|
10
|
+
import collections
|
|
11
|
+
import os
|
|
12
|
+
import re
|
|
13
|
+
import subprocess2
|
|
14
|
+
import sys
|
|
15
|
+
import tempfile
|
|
16
|
+
|
|
17
|
+
import gclient_utils
|
|
18
|
+
import git_footers
|
|
19
|
+
import owners
|
|
20
|
+
import owners_finder
|
|
21
|
+
import scm
|
|
22
|
+
|
|
23
|
+
import git_common as git
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# If a call to `git cl split` will generate more than this number of CLs, the
|
|
27
|
+
# command will prompt the user to make sure they know what they're doing. Large
|
|
28
|
+
# numbers of CLs generated by `git cl split` have caused infrastructure issues
|
|
29
|
+
# in the past.
|
|
30
|
+
CL_SPLIT_FORCE_LIMIT = 10
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def ReadFile(file_path):
|
|
34
|
+
"""Returns the content of |file_path|."""
|
|
35
|
+
with open(file_path) as f:
|
|
36
|
+
content = f.read()
|
|
37
|
+
return content
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def EnsureInGitRepository():
|
|
41
|
+
"""Throws an exception if the current directory is not a git repository."""
|
|
42
|
+
git.run('rev-parse')
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def CreateBranchForDirectory(prefix, directory, upstream):
|
|
46
|
+
"""Creates a branch named |prefix| + "_" + |directory| + "_split".
|
|
47
|
+
|
|
48
|
+
Return false if the branch already exists. |upstream| is used as upstream for
|
|
49
|
+
the created branch.
|
|
50
|
+
"""
|
|
51
|
+
existing_branches = set(git.branches(use_limit = False))
|
|
52
|
+
branch_name = prefix + '_' + directory + '_split'
|
|
53
|
+
if branch_name in existing_branches:
|
|
54
|
+
return False
|
|
55
|
+
git.run('checkout', '-t', upstream, '-b', branch_name)
|
|
56
|
+
return True
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def FormatDescriptionOrComment(txt, directory):
|
|
60
|
+
"""Replaces $directory with |directory| in |txt|."""
|
|
61
|
+
return txt.replace('$directory', '/' + directory)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def AddUploadedByGitClSplitToDescription(description):
|
|
65
|
+
"""Adds a 'This CL was uploaded by git cl split.' line to |description|.
|
|
66
|
+
|
|
67
|
+
The line is added before footers, or at the end of |description| if it has no
|
|
68
|
+
footers.
|
|
69
|
+
"""
|
|
70
|
+
split_footers = git_footers.split_footers(description)
|
|
71
|
+
lines = split_footers[0]
|
|
72
|
+
if not lines[-1] or lines[-1].isspace():
|
|
73
|
+
lines = lines + ['']
|
|
74
|
+
lines = lines + ['This CL was uploaded by git cl split.']
|
|
75
|
+
if split_footers[1]:
|
|
76
|
+
lines += [''] + split_footers[1]
|
|
77
|
+
return '\n'.join(lines)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def UploadCl(refactor_branch, refactor_branch_upstream, directory, files,
|
|
81
|
+
description, comment, reviewers, changelist, cmd_upload,
|
|
82
|
+
cq_dry_run, enable_auto_submit, repository_root):
|
|
83
|
+
"""Uploads a CL with all changes to |files| in |refactor_branch|.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
refactor_branch: Name of the branch that contains the changes to upload.
|
|
87
|
+
refactor_branch_upstream: Name of the upstream of |refactor_branch|.
|
|
88
|
+
directory: Path to the directory that contains the OWNERS file for which
|
|
89
|
+
to upload a CL.
|
|
90
|
+
files: List of AffectedFile instances to include in the uploaded CL.
|
|
91
|
+
description: Description of the uploaded CL.
|
|
92
|
+
comment: Comment to post on the uploaded CL.
|
|
93
|
+
reviewers: A set of reviewers for the CL.
|
|
94
|
+
changelist: The Changelist class.
|
|
95
|
+
cmd_upload: The function associated with the git cl upload command.
|
|
96
|
+
cq_dry_run: If CL uploads should also do a cq dry run.
|
|
97
|
+
enable_auto_submit: If CL uploads should also enable auto submit.
|
|
98
|
+
"""
|
|
99
|
+
# Create a branch.
|
|
100
|
+
if not CreateBranchForDirectory(
|
|
101
|
+
refactor_branch, directory, refactor_branch_upstream):
|
|
102
|
+
print('Skipping ' + directory + ' for which a branch already exists.')
|
|
103
|
+
return
|
|
104
|
+
|
|
105
|
+
# Checkout all changes to files in |files|.
|
|
106
|
+
deleted_files = []
|
|
107
|
+
modified_files = []
|
|
108
|
+
for action, f in files:
|
|
109
|
+
abspath = os.path.abspath(os.path.join(repository_root, f))
|
|
110
|
+
if action == 'D':
|
|
111
|
+
deleted_files.append(abspath)
|
|
112
|
+
else:
|
|
113
|
+
modified_files.append(abspath)
|
|
114
|
+
|
|
115
|
+
if deleted_files:
|
|
116
|
+
git.run(*['rm'] + deleted_files)
|
|
117
|
+
if modified_files:
|
|
118
|
+
git.run(*['checkout', refactor_branch, '--'] + modified_files)
|
|
119
|
+
|
|
120
|
+
# Commit changes. The temporary file is created with delete=False so that it
|
|
121
|
+
# can be deleted manually after git has read it rather than automatically
|
|
122
|
+
# when it is closed.
|
|
123
|
+
with gclient_utils.temporary_file() as tmp_file:
|
|
124
|
+
gclient_utils.FileWrite(
|
|
125
|
+
tmp_file, FormatDescriptionOrComment(description, directory))
|
|
126
|
+
git.run('commit', '-F', tmp_file)
|
|
127
|
+
|
|
128
|
+
# Upload a CL.
|
|
129
|
+
upload_args = ['-f', '-r', ','.join(reviewers)]
|
|
130
|
+
if cq_dry_run:
|
|
131
|
+
upload_args.append('--cq-dry-run')
|
|
132
|
+
if not comment:
|
|
133
|
+
upload_args.append('--send-mail')
|
|
134
|
+
if enable_auto_submit:
|
|
135
|
+
upload_args.append('--enable-auto-submit')
|
|
136
|
+
print('Uploading CL for ' + directory + '.')
|
|
137
|
+
cmd_upload(upload_args)
|
|
138
|
+
if comment:
|
|
139
|
+
changelist().AddComment(FormatDescriptionOrComment(comment, directory),
|
|
140
|
+
publish=True)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def GetFilesSplitByOwners(owners_database, files):
|
|
144
|
+
"""Returns a map of files split by OWNERS file.
|
|
145
|
+
|
|
146
|
+
Returns:
|
|
147
|
+
A map where keys are paths to directories containing an OWNERS file and
|
|
148
|
+
values are lists of files sharing an OWNERS file.
|
|
149
|
+
"""
|
|
150
|
+
files_split_by_owners = collections.defaultdict(list)
|
|
151
|
+
for action, path in files:
|
|
152
|
+
enclosing_dir = owners_database.enclosing_dir_with_owners(path)
|
|
153
|
+
files_split_by_owners[enclosing_dir].append((action, path))
|
|
154
|
+
return files_split_by_owners
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def PrintClInfo(cl_index, num_cls, directory, file_paths, description,
|
|
158
|
+
reviewers):
|
|
159
|
+
"""Prints info about a CL.
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
cl_index: The index of this CL in the list of CLs to upload.
|
|
163
|
+
num_cls: The total number of CLs that will be uploaded.
|
|
164
|
+
directory: Path to the directory that contains the OWNERS file for which
|
|
165
|
+
to upload a CL.
|
|
166
|
+
file_paths: A list of files in this CL.
|
|
167
|
+
description: The CL description.
|
|
168
|
+
reviewers: A set of reviewers for this CL.
|
|
169
|
+
"""
|
|
170
|
+
description_lines = FormatDescriptionOrComment(description,
|
|
171
|
+
directory).splitlines()
|
|
172
|
+
indented_description = '\n'.join([' ' + l for l in description_lines])
|
|
173
|
+
|
|
174
|
+
print('CL {}/{}'.format(cl_index, num_cls))
|
|
175
|
+
print('Path: {}'.format(directory))
|
|
176
|
+
print('Reviewers: {}'.format(', '.join(reviewers)))
|
|
177
|
+
print('\n' + indented_description + '\n')
|
|
178
|
+
print('\n'.join(file_paths))
|
|
179
|
+
print()
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def SplitCl(description_file, comment_file, changelist, cmd_upload, dry_run,
|
|
183
|
+
cq_dry_run, enable_auto_submit, repository_root):
|
|
184
|
+
""""Splits a branch into smaller branches and uploads CLs.
|
|
185
|
+
|
|
186
|
+
Args:
|
|
187
|
+
description_file: File containing the description of uploaded CLs.
|
|
188
|
+
comment_file: File containing the comment of uploaded CLs.
|
|
189
|
+
changelist: The Changelist class.
|
|
190
|
+
cmd_upload: The function associated with the git cl upload command.
|
|
191
|
+
dry_run: Whether this is a dry run (no branches or CLs created).
|
|
192
|
+
cq_dry_run: If CL uploads should also do a cq dry run.
|
|
193
|
+
enable_auto_submit: If CL uploads should also enable auto submit.
|
|
194
|
+
|
|
195
|
+
Returns:
|
|
196
|
+
0 in case of success. 1 in case of error.
|
|
197
|
+
"""
|
|
198
|
+
description = AddUploadedByGitClSplitToDescription(ReadFile(description_file))
|
|
199
|
+
comment = ReadFile(comment_file) if comment_file else None
|
|
200
|
+
|
|
201
|
+
try:
|
|
202
|
+
EnsureInGitRepository()
|
|
203
|
+
|
|
204
|
+
cl = changelist()
|
|
205
|
+
upstream = cl.GetCommonAncestorWithUpstream()
|
|
206
|
+
files = [
|
|
207
|
+
(action.strip(), f)
|
|
208
|
+
for action, f in scm.GIT.CaptureStatus(repository_root, upstream)
|
|
209
|
+
]
|
|
210
|
+
|
|
211
|
+
if not files:
|
|
212
|
+
print('Cannot split an empty CL.')
|
|
213
|
+
return 1
|
|
214
|
+
|
|
215
|
+
author = git.run('config', 'user.email').strip() or None
|
|
216
|
+
refactor_branch = git.current_branch()
|
|
217
|
+
assert refactor_branch, "Can't run from detached branch."
|
|
218
|
+
refactor_branch_upstream = git.upstream(refactor_branch)
|
|
219
|
+
assert refactor_branch_upstream, \
|
|
220
|
+
"Branch %s must have an upstream." % refactor_branch
|
|
221
|
+
|
|
222
|
+
owners_database = owners.Database(repository_root, open, os.path)
|
|
223
|
+
owners_database.load_data_needed_for([f for _, f in files])
|
|
224
|
+
|
|
225
|
+
files_split_by_owners = GetFilesSplitByOwners(owners_database, files)
|
|
226
|
+
|
|
227
|
+
num_cls = len(files_split_by_owners)
|
|
228
|
+
print('Will split current branch (' + refactor_branch + ') into ' +
|
|
229
|
+
str(num_cls) + ' CLs.\n')
|
|
230
|
+
if cq_dry_run and num_cls > CL_SPLIT_FORCE_LIMIT:
|
|
231
|
+
print(
|
|
232
|
+
'This will generate "%r" CLs. This many CLs can potentially generate'
|
|
233
|
+
' too much load on the build infrastructure. Please email'
|
|
234
|
+
' infra-dev@chromium.org to ensure that this won\'t break anything.'
|
|
235
|
+
' The infra team reserves the right to cancel your jobs if they are'
|
|
236
|
+
' overloading the CQ.' % num_cls)
|
|
237
|
+
answer = gclient_utils.AskForData('Proceed? (y/n):')
|
|
238
|
+
if answer.lower() != 'y':
|
|
239
|
+
return 0
|
|
240
|
+
|
|
241
|
+
for cl_index, (directory, files) in \
|
|
242
|
+
enumerate(files_split_by_owners.items(), 1):
|
|
243
|
+
# Use '/' as a path separator in the branch name and the CL description
|
|
244
|
+
# and comment.
|
|
245
|
+
directory = directory.replace(os.path.sep, '/')
|
|
246
|
+
file_paths = [f for _, f in files]
|
|
247
|
+
reviewers = owners_database.reviewers_for(file_paths, author)
|
|
248
|
+
|
|
249
|
+
if dry_run:
|
|
250
|
+
PrintClInfo(cl_index, num_cls, directory, file_paths, description,
|
|
251
|
+
reviewers)
|
|
252
|
+
else:
|
|
253
|
+
UploadCl(refactor_branch, refactor_branch_upstream, directory, files,
|
|
254
|
+
description, comment, reviewers, changelist, cmd_upload,
|
|
255
|
+
cq_dry_run, enable_auto_submit, repository_root)
|
|
256
|
+
|
|
257
|
+
# Go back to the original branch.
|
|
258
|
+
git.run('checkout', refactor_branch)
|
|
259
|
+
|
|
260
|
+
except subprocess2.CalledProcessError as cpe:
|
|
261
|
+
sys.stderr.write(cpe.stderr)
|
|
262
|
+
return 1
|
|
263
|
+
return 0
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# Copyright 2013 The Chromium Authors. All rights reserved.
|
|
2
|
+
# Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
# found in the LICENSE file.
|
|
4
|
+
|
|
5
|
+
"""Manages subcommands in a script.
|
|
6
|
+
|
|
7
|
+
Each subcommand should look like this:
|
|
8
|
+
@usage('[pet name]')
|
|
9
|
+
def CMDpet(parser, args):
|
|
10
|
+
'''Prints a pet.
|
|
11
|
+
|
|
12
|
+
Many people likes pet. This command prints a pet for your pleasure.
|
|
13
|
+
'''
|
|
14
|
+
parser.add_option('--color', help='color of your pet')
|
|
15
|
+
options, args = parser.parse_args(args)
|
|
16
|
+
if len(args) != 1:
|
|
17
|
+
parser.error('A pet name is required')
|
|
18
|
+
pet = args[0]
|
|
19
|
+
if options.color:
|
|
20
|
+
print('Nice %s %d' % (options.color, pet))
|
|
21
|
+
else:
|
|
22
|
+
print('Nice %s' % pet)
|
|
23
|
+
return 0
|
|
24
|
+
|
|
25
|
+
Explanation:
|
|
26
|
+
- usage decorator alters the 'usage: %prog' line in the command's help.
|
|
27
|
+
- docstring is used to both short help line and long help line.
|
|
28
|
+
- parser can be augmented with arguments.
|
|
29
|
+
- return the exit code.
|
|
30
|
+
- Every function in the specified module with a name starting with 'CMD' will
|
|
31
|
+
be a subcommand.
|
|
32
|
+
- The module's docstring will be used in the default 'help' page.
|
|
33
|
+
- If a command has no docstring, it will not be listed in the 'help' page.
|
|
34
|
+
Useful to keep compatibility commands around or aliases.
|
|
35
|
+
- If a command is an alias to another one, it won't be documented. E.g.:
|
|
36
|
+
CMDoldname = CMDnewcmd
|
|
37
|
+
will result in oldname not being documented but supported and redirecting to
|
|
38
|
+
newcmd. Make it a real function that calls the old function if you want it
|
|
39
|
+
to be documented.
|
|
40
|
+
- CMDfoo_bar will be command 'foo-bar'.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
import difflib
|
|
44
|
+
import sys
|
|
45
|
+
import textwrap
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def usage(more):
|
|
49
|
+
"""Adds a 'usage_more' property to a CMD function."""
|
|
50
|
+
def hook(fn):
|
|
51
|
+
fn.usage_more = more
|
|
52
|
+
return fn
|
|
53
|
+
return hook
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def epilog(text):
|
|
57
|
+
"""Adds an 'epilog' property to a CMD function.
|
|
58
|
+
|
|
59
|
+
It will be shown in the epilog. Usually useful for examples.
|
|
60
|
+
"""
|
|
61
|
+
def hook(fn):
|
|
62
|
+
fn.epilog = text
|
|
63
|
+
return fn
|
|
64
|
+
return hook
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def CMDhelp(parser, args):
|
|
68
|
+
"""Prints list of commands or help for a specific command."""
|
|
69
|
+
# This is the default help implementation. It can be disabled or overridden if
|
|
70
|
+
# wanted.
|
|
71
|
+
if not any(i in ('-h', '--help') for i in args):
|
|
72
|
+
args = args + ['--help']
|
|
73
|
+
parser.parse_args(args)
|
|
74
|
+
# Never gets there.
|
|
75
|
+
assert False
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def _get_color_module():
|
|
79
|
+
"""Returns the colorama module if available.
|
|
80
|
+
|
|
81
|
+
If so, assumes colors are supported and return the module handle.
|
|
82
|
+
"""
|
|
83
|
+
return sys.modules.get('colorama') or sys.modules.get('third_party.colorama')
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _function_to_name(name):
|
|
87
|
+
"""Returns the name of a CMD function."""
|
|
88
|
+
return name[3:].replace('_', '-')
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
class CommandDispatcher(object):
|
|
92
|
+
def __init__(self, module):
|
|
93
|
+
"""module is the name of the main python module where to look for commands.
|
|
94
|
+
|
|
95
|
+
The python builtin variable __name__ MUST be used for |module|. If the
|
|
96
|
+
script is executed in the form 'python script.py', __name__ == '__main__'
|
|
97
|
+
and sys.modules['script'] doesn't exist. On the other hand if it is unit
|
|
98
|
+
tested, __main__ will be the unit test's module so it has to reference to
|
|
99
|
+
itself with 'script'. __name__ always match the right value.
|
|
100
|
+
"""
|
|
101
|
+
self.module = sys.modules[module]
|
|
102
|
+
|
|
103
|
+
def enumerate_commands(self):
|
|
104
|
+
"""Returns a dict of command and their handling function.
|
|
105
|
+
|
|
106
|
+
The commands must be in the '__main__' modules. To import a command from a
|
|
107
|
+
submodule, use:
|
|
108
|
+
from mysubcommand import CMDfoo
|
|
109
|
+
|
|
110
|
+
Automatically adds 'help' if not already defined.
|
|
111
|
+
|
|
112
|
+
Normalizes '_' in the commands to '-'.
|
|
113
|
+
|
|
114
|
+
A command can be effectively disabled by defining a global variable to None,
|
|
115
|
+
e.g.:
|
|
116
|
+
CMDhelp = None
|
|
117
|
+
"""
|
|
118
|
+
cmds = dict(
|
|
119
|
+
(_function_to_name(name), getattr(self.module, name))
|
|
120
|
+
for name in dir(self.module) if name.startswith('CMD'))
|
|
121
|
+
cmds.setdefault('help', CMDhelp)
|
|
122
|
+
return cmds
|
|
123
|
+
|
|
124
|
+
def find_nearest_command(self, name_asked):
|
|
125
|
+
"""Retrieves the function to handle a command as supplied by the user.
|
|
126
|
+
|
|
127
|
+
It automatically tries to guess the _intended command_ by handling typos
|
|
128
|
+
and/or incomplete names.
|
|
129
|
+
"""
|
|
130
|
+
commands = self.enumerate_commands()
|
|
131
|
+
name_to_dash = name_asked.replace('_', '-')
|
|
132
|
+
if name_to_dash in commands:
|
|
133
|
+
return commands[name_to_dash]
|
|
134
|
+
|
|
135
|
+
# An exact match was not found. Try to be smart and look if there's
|
|
136
|
+
# something similar.
|
|
137
|
+
commands_with_prefix = [c for c in commands if c.startswith(name_asked)]
|
|
138
|
+
if len(commands_with_prefix) == 1:
|
|
139
|
+
return commands[commands_with_prefix[0]]
|
|
140
|
+
|
|
141
|
+
# A #closeenough approximation of levenshtein distance.
|
|
142
|
+
def close_enough(a, b):
|
|
143
|
+
return difflib.SequenceMatcher(a=a, b=b).ratio()
|
|
144
|
+
|
|
145
|
+
hamming_commands = sorted(
|
|
146
|
+
((close_enough(c, name_asked), c) for c in commands),
|
|
147
|
+
reverse=True)
|
|
148
|
+
if (hamming_commands[0][0] - hamming_commands[1][0]) < 0.3:
|
|
149
|
+
# Too ambiguous.
|
|
150
|
+
return
|
|
151
|
+
|
|
152
|
+
if hamming_commands[0][0] < 0.8:
|
|
153
|
+
# Not similar enough. Don't be a fool and run a random command.
|
|
154
|
+
return
|
|
155
|
+
|
|
156
|
+
return commands[hamming_commands[0][1]]
|
|
157
|
+
|
|
158
|
+
def _gen_commands_list(self):
|
|
159
|
+
"""Generates the short list of supported commands."""
|
|
160
|
+
commands = self.enumerate_commands()
|
|
161
|
+
docs = sorted(
|
|
162
|
+
(cmd_name, self._create_command_summary(cmd_name, handler))
|
|
163
|
+
for cmd_name, handler in commands.items())
|
|
164
|
+
# Skip commands without a docstring.
|
|
165
|
+
docs = [i for i in docs if i[1]]
|
|
166
|
+
# Then calculate maximum length for alignment:
|
|
167
|
+
length = max(len(c) for c in commands)
|
|
168
|
+
|
|
169
|
+
# Look if color is supported.
|
|
170
|
+
colors = _get_color_module()
|
|
171
|
+
green = reset = ''
|
|
172
|
+
if colors:
|
|
173
|
+
green = colors.Fore.GREEN
|
|
174
|
+
reset = colors.Fore.RESET
|
|
175
|
+
return (
|
|
176
|
+
'Commands are:\n' +
|
|
177
|
+
''.join(
|
|
178
|
+
' %s%-*s%s %s\n' % (green, length, cmd_name, reset, doc)
|
|
179
|
+
for cmd_name, doc in docs))
|
|
180
|
+
|
|
181
|
+
def _add_command_usage(self, parser, command):
|
|
182
|
+
"""Modifies an OptionParser object with the function's documentation."""
|
|
183
|
+
cmd_name = _function_to_name(command.__name__)
|
|
184
|
+
if cmd_name == 'help':
|
|
185
|
+
cmd_name = '<command>'
|
|
186
|
+
# Use the module's docstring as the description for the 'help' command if
|
|
187
|
+
# available.
|
|
188
|
+
parser.description = (self.module.__doc__ or '').rstrip()
|
|
189
|
+
if parser.description:
|
|
190
|
+
parser.description += '\n\n'
|
|
191
|
+
parser.description += self._gen_commands_list()
|
|
192
|
+
# Do not touch epilog.
|
|
193
|
+
else:
|
|
194
|
+
# Use the command's docstring if available. For commands, unlike module
|
|
195
|
+
# docstring, realign.
|
|
196
|
+
lines = (command.__doc__ or '').rstrip().splitlines()
|
|
197
|
+
if lines[:1]:
|
|
198
|
+
rest = textwrap.dedent('\n'.join(lines[1:]))
|
|
199
|
+
parser.description = '\n'.join((lines[0], rest))
|
|
200
|
+
else:
|
|
201
|
+
parser.description = lines[0] if lines else ''
|
|
202
|
+
if parser.description:
|
|
203
|
+
parser.description += '\n'
|
|
204
|
+
parser.epilog = getattr(command, 'epilog', None)
|
|
205
|
+
if parser.epilog:
|
|
206
|
+
parser.epilog = '\n' + parser.epilog.strip() + '\n'
|
|
207
|
+
|
|
208
|
+
more = getattr(command, 'usage_more', '')
|
|
209
|
+
extra = '' if not more else ' ' + more
|
|
210
|
+
parser.set_usage('usage: %%prog %s [options]%s' % (cmd_name, extra))
|
|
211
|
+
|
|
212
|
+
@staticmethod
|
|
213
|
+
def _create_command_summary(cmd_name, command):
|
|
214
|
+
"""Creates a oneliner summary from the command's docstring."""
|
|
215
|
+
if cmd_name != _function_to_name(command.__name__):
|
|
216
|
+
# Skip aliases. For example using at module level:
|
|
217
|
+
# CMDfoo = CMDbar
|
|
218
|
+
return ''
|
|
219
|
+
doc = command.__doc__ or ''
|
|
220
|
+
line = doc.split('\n', 1)[0].rstrip('.')
|
|
221
|
+
if not line:
|
|
222
|
+
return line
|
|
223
|
+
return (line[0].lower() + line[1:]).strip()
|
|
224
|
+
|
|
225
|
+
def execute(self, parser, args):
|
|
226
|
+
"""Dispatches execution to the right command.
|
|
227
|
+
|
|
228
|
+
Fallbacks to 'help' if not disabled.
|
|
229
|
+
"""
|
|
230
|
+
# Unconditionally disable format_description() and format_epilog().
|
|
231
|
+
# Technically, a formatter should be used but it's not worth (yet) the
|
|
232
|
+
# trouble.
|
|
233
|
+
parser.format_description = lambda _: parser.description or ''
|
|
234
|
+
parser.format_epilog = lambda _: parser.epilog or ''
|
|
235
|
+
|
|
236
|
+
if args:
|
|
237
|
+
if args[0] in ('-h', '--help') and len(args) > 1:
|
|
238
|
+
# Reverse the argument order so 'tool --help cmd' is rewritten to
|
|
239
|
+
# 'tool cmd --help'.
|
|
240
|
+
args = [args[1], args[0]] + args[2:]
|
|
241
|
+
command = self.find_nearest_command(args[0])
|
|
242
|
+
if command:
|
|
243
|
+
if command.__name__ == 'CMDhelp' and len(args) > 1:
|
|
244
|
+
# Reverse the argument order so 'tool help cmd' is rewritten to
|
|
245
|
+
# 'tool cmd --help'. Do it here since we want 'tool help cmd' to work
|
|
246
|
+
# too.
|
|
247
|
+
args = [args[1], '--help'] + args[2:]
|
|
248
|
+
command = self.find_nearest_command(args[0]) or command
|
|
249
|
+
|
|
250
|
+
# "fix" the usage and the description now that we know the subcommand.
|
|
251
|
+
self._add_command_usage(parser, command)
|
|
252
|
+
return command(parser, args[1:])
|
|
253
|
+
|
|
254
|
+
cmdhelp = self.enumerate_commands().get('help')
|
|
255
|
+
if cmdhelp:
|
|
256
|
+
# Not a known command. Default to help.
|
|
257
|
+
self._add_command_usage(parser, cmdhelp)
|
|
258
|
+
return cmdhelp(parser, args)
|
|
259
|
+
|
|
260
|
+
# Nothing can be done.
|
|
261
|
+
return 2
|