libv8 6.7.288.46.1 → 7.3.492.27.0beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/CHANGELOG.md +4 -0
- data/README.md +2 -0
- data/ext/libv8/builder.rb +6 -2
- data/lib/libv8/version.rb +1 -1
- data/vendor/depot_tools/.gitattributes +1 -0
- data/vendor/depot_tools/.gitignore +7 -0
- data/vendor/depot_tools/CROS_OWNERS +5 -0
- data/vendor/depot_tools/OWNERS +12 -1
- data/vendor/depot_tools/PRESUBMIT.py +16 -9
- data/vendor/depot_tools/README.md +9 -2
- data/vendor/depot_tools/autoninja +14 -6
- data/vendor/depot_tools/autoninja.bat +11 -1
- data/vendor/depot_tools/autoninja.py +40 -18
- data/vendor/depot_tools/bb +12 -0
- data/vendor/depot_tools/bb.bat +7 -0
- data/vendor/depot_tools/bootstrap/win/manifest.txt +1 -1
- data/vendor/depot_tools/bootstrap/win/manifest_bleeding_edge.txt +1 -1
- data/vendor/depot_tools/bootstrap/win/win_tools.py +2 -1
- data/vendor/depot_tools/buildbucket.py +57 -4
- data/vendor/depot_tools/cipd +157 -44
- data/vendor/depot_tools/cipd.bat +51 -14
- data/vendor/depot_tools/cipd.ps1 +104 -42
- data/vendor/depot_tools/cipd_client_version +1 -1
- data/vendor/depot_tools/cipd_client_version.digests +21 -0
- data/vendor/depot_tools/cipd_manifest.txt +19 -6
- data/vendor/depot_tools/cipd_manifest.versions +318 -0
- data/vendor/depot_tools/clang_format.py +4 -4
- data/vendor/depot_tools/cpplint.py +44 -199
- data/vendor/depot_tools/dart_format.py +2 -2
- data/vendor/depot_tools/detect_host_arch.py +8 -3
- data/vendor/depot_tools/download_from_google_storage.py +47 -39
- data/vendor/depot_tools/fetch.py +30 -18
- data/vendor/depot_tools/fetch_configs/android_internal.py +34 -0
- data/vendor/depot_tools/fetch_configs/chromium.py +18 -1
- data/vendor/depot_tools/fetch_configs/config_util.py +4 -2
- data/vendor/depot_tools/fetch_configs/inspector_protocol.py +40 -0
- data/vendor/depot_tools/fetch_configs/node-ci.py +41 -0
- data/vendor/depot_tools/fix_encoding.py +3 -3
- data/vendor/depot_tools/gclient +1 -1
- data/vendor/depot_tools/gclient.py +415 -198
- data/vendor/depot_tools/gclient_eval.py +220 -171
- data/vendor/depot_tools/gclient_paths.py +142 -0
- data/vendor/depot_tools/gclient_scm.py +200 -51
- data/vendor/depot_tools/gclient_utils.py +88 -191
- data/vendor/depot_tools/gerrit_client.py +13 -0
- data/vendor/depot_tools/gerrit_util.py +158 -23
- data/vendor/depot_tools/git-nav-upstream +1 -1
- data/vendor/depot_tools/git_cache.py +77 -24
- data/vendor/depot_tools/git_cl.py +705 -1099
- data/vendor/depot_tools/git_common.py +9 -6
- data/vendor/depot_tools/git_map_branches.py +19 -2
- data/vendor/depot_tools/git_nav_downstream.py +3 -4
- data/vendor/depot_tools/git_rebase_update.py +14 -0
- data/vendor/depot_tools/git_reparent_branch.py +8 -2
- data/vendor/depot_tools/gn.py +38 -3
- data/vendor/depot_tools/gsutil.py +8 -3
- data/vendor/depot_tools/gsutil.py.bat +15 -0
- data/vendor/depot_tools/gsutil.vpython +16 -0
- data/vendor/depot_tools/infra/config/OWNERS +0 -1
- data/vendor/depot_tools/infra/config/recipes.cfg +3 -2
- data/vendor/depot_tools/lucicfg +12 -0
- data/vendor/depot_tools/lucicfg.bat +7 -0
- data/vendor/depot_tools/man/html/git-map-branches.html +34 -2
- data/vendor/depot_tools/man/html/git-new-branch.html +40 -32
- data/vendor/depot_tools/man/man1/git-map-branches.1 +24 -5
- data/vendor/depot_tools/man/man1/git-new-branch.1 +35 -27
- data/vendor/depot_tools/man/src/git-map-branches.demo.1.sh +1 -0
- data/vendor/depot_tools/man/src/git-map-branches.txt +10 -0
- data/vendor/depot_tools/man/src/git-new-branch.demo.1.sh +9 -4
- data/vendor/depot_tools/man/src/git-new-branch.txt +1 -1
- data/vendor/depot_tools/metrics.README.md +98 -0
- data/vendor/depot_tools/metrics.py +296 -0
- data/vendor/depot_tools/metrics_utils.py +303 -0
- data/vendor/depot_tools/my_activity.py +91 -29
- data/vendor/depot_tools/ninja +1 -1
- data/vendor/depot_tools/ninjalog.README.md +64 -0
- data/vendor/depot_tools/ninjalog_uploader.py +232 -0
- data/vendor/depot_tools/ninjalog_uploader_wrapper.py +116 -0
- data/vendor/depot_tools/owners.py +30 -13
- data/vendor/depot_tools/owners_finder.py +5 -2
- data/vendor/depot_tools/presubmit_canned_checks.py +188 -29
- data/vendor/depot_tools/presubmit_support.py +18 -41
- data/vendor/depot_tools/pylintrc +23 -19
- data/vendor/depot_tools/recipes/OWNERS +2 -0
- data/vendor/depot_tools/recipes/README.recipes.md +344 -151
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/OWNERS +2 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +2 -16
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +141 -99
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +5 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +5 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +6 -98
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +45 -5
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{tryjob.json → input_commit_with_id_without_repo.json} +6 -11
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{tryjob_empty_revision.json → multiple_patch_refs.json} +8 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +19 -29
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{trychange.json → refs.json} +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail.json +51 -6
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +50 -6
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +51 -6
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +17 -25
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +17 -25
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +18 -26
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +18 -26
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +26 -28
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +45 -5
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +17 -25
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/unrecognized_commit_repo.json +13 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name.json +13 -152
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_tags.json +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +185 -202
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +52 -157
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/test_api.py +5 -14
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/ensure_checkout.py +34 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/api.py +14 -2
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic_pkg.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-failed.json +7 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-many-instances.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/mac64.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_file.json +9 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_mode.json +9 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_verfile.json +9 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/win64.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk arch.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk bits.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_32.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_64.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_32.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_64.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_mips_64.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/mac_intel_64.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_32.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_64.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +13 -8
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +18 -12
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +18 -12
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +18 -12
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.py +3 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/__init__.py +1 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/api.py +58 -46
- data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +65 -22
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/basic.json +20 -21
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/buildbot.json +20 -21
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/revision.json +20 -21
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/tryserver.json +20 -21
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.py +5 -2
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/patch_project.py +62 -14
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/api.py +24 -38
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.expected/basic.json +56 -50
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.py +15 -9
- data/vendor/depot_tools/recipes/recipe_modules/git/__init__.py +4 -1
- data/vendor/depot_tools/recipes/recipe_modules/git/api.py +34 -22
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_branch.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_file_name.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_hash.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_luci.json +222 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_ref.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_submodule_update_force.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_tags.json +224 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/can_fail_build.json +10 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cannot_fail_build.json +5 -7
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cat-file_test.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_delta.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_failed.json +5 -7
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output_fails_build.json +10 -5
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/curl_trace_file.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/git-cache-checkout.json +8 -9
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/platform_win.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/rebase_failed.json +12 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/remote_not_origin.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/set_got_revision.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.py +27 -11
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/api.py +1 -1
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.expected/basic.json +12 -13
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/__init__.py +5 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/api.py +120 -5
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.expected/basic.json +45 -3
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.py +25 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/resources/gerrit_client.py +56 -4
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.expected/basic.json +6 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.py +49 -0
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/api.py +24 -13
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.expected/basic.json +13 -14
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/basic.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_linux.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_mac.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_win.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_linux.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_mac.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_win.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_linux.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_mac.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_win.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/path_config.py +1 -2
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/__init__.py +35 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/api.py +116 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/linux.json +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/mac.json +82 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/win.json +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.py +23 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/__init__.py +1 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/api.py +2 -7
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.expected/basic.json +7 -6
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/__init__.py +1 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +117 -8
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/basic_tags.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/set_failure_hash_with_no_steps.json +7 -4
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch.json +98 -7
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch_and_target_ref.json +147 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch.json +8 -5
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch_luci.json +8 -5
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +9 -6
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +9 -6
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.py +27 -2
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/test_api.py +14 -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 +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/mac.json +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/win.json +107 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.py +26 -0
- data/vendor/depot_tools/recipes/recipes.py +37 -27
- data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +7 -10
- data/vendor/depot_tools/repo +34 -8
- data/vendor/depot_tools/roll_dep.py +52 -49
- data/vendor/depot_tools/scm.py +38 -23
- data/vendor/depot_tools/setup_color.py +4 -2
- data/vendor/depot_tools/split_cl.py +32 -4
- data/vendor/depot_tools/subprocess2.py +22 -4
- data/vendor/depot_tools/third_party/httplib2/README.chromium +2 -2
- data/vendor/depot_tools/third_party/httplib2/__init__.py +242 -158
- data/vendor/depot_tools/third_party/httplib2/cacerts.txt +57 -44
- data/vendor/depot_tools/third_party/httplib2/socks.py +15 -5
- data/vendor/depot_tools/third_party/logilab/README.chromium +2 -4
- data/vendor/depot_tools/third_party/logilab/astroid/README.chromium +2 -1
- data/vendor/depot_tools/third_party/logilab/astroid/__init__.py +10 -5
- data/vendor/depot_tools/third_party/logilab/astroid/__pkginfo__.py +5 -5
- data/vendor/depot_tools/third_party/logilab/astroid/arguments.py +233 -0
- data/vendor/depot_tools/third_party/logilab/astroid/as_string.py +82 -33
- data/vendor/depot_tools/third_party/logilab/astroid/bases.py +137 -153
- data/vendor/depot_tools/third_party/logilab/astroid/brain/{builtin_inference.py → brain_builtin_inference.py} +117 -26
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_dateutil.py +15 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/{py2gi.py → brain_gi.py} +48 -8
- data/vendor/depot_tools/third_party/logilab/astroid/brain/{py2mechanize.py → brain_mechanize.py} +0 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/{pynose.py → brain_nose.py} +4 -1
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_numpy.py +62 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_pytest.py +76 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_qt.py +44 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/{pysix_moves.py → brain_six.py} +28 -1
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_ssl.py +65 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_stdlib.py +473 -0
- data/vendor/depot_tools/third_party/logilab/astroid/builder.py +104 -81
- data/vendor/depot_tools/third_party/logilab/astroid/context.py +81 -0
- data/vendor/depot_tools/third_party/logilab/astroid/decorators.py +75 -0
- data/vendor/depot_tools/third_party/logilab/astroid/exceptions.py +20 -0
- data/vendor/depot_tools/third_party/logilab/astroid/inference.py +137 -183
- data/vendor/depot_tools/third_party/logilab/astroid/manager.py +45 -169
- data/vendor/depot_tools/third_party/logilab/astroid/mixins.py +37 -14
- data/vendor/depot_tools/third_party/logilab/astroid/modutils.py +112 -41
- data/vendor/depot_tools/third_party/logilab/astroid/node_classes.py +243 -156
- data/vendor/depot_tools/third_party/logilab/astroid/nodes.py +35 -22
- data/vendor/depot_tools/third_party/logilab/astroid/objects.py +186 -0
- data/vendor/depot_tools/third_party/logilab/astroid/protocols.py +157 -102
- data/vendor/depot_tools/third_party/logilab/astroid/raw_building.py +32 -8
- data/vendor/depot_tools/third_party/logilab/astroid/rebuilder.py +372 -309
- data/vendor/depot_tools/third_party/logilab/astroid/scoped_nodes.py +652 -420
- data/vendor/depot_tools/third_party/logilab/astroid/test_utils.py +4 -21
- data/vendor/depot_tools/third_party/logilab/astroid/transforms.py +96 -0
- data/vendor/depot_tools/third_party/logilab/astroid/util.py +89 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/LICENSE +19 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/README.chromium +11 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/__init__.py +20 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/cext.c +1421 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/compat.py +9 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/simple.py +246 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/slots.py +414 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/utils.py +13 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/LICENSE +24 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/README.chromium +11 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/__init__.py +19 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/_wrappers.c +2729 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/arguments.py +96 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/decorators.py +512 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/importer.py +228 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/wrappers.py +901 -0
- data/vendor/depot_tools/third_party/pylint/README.chromium +2 -25
- data/vendor/depot_tools/third_party/pylint/__pkginfo__.py +13 -3
- data/vendor/depot_tools/third_party/pylint/checkers/__init__.py +1 -2
- data/vendor/depot_tools/third_party/pylint/checkers/async.py +82 -0
- data/vendor/depot_tools/third_party/pylint/checkers/base.py +893 -119
- data/vendor/depot_tools/third_party/pylint/checkers/classes.py +342 -204
- data/vendor/depot_tools/third_party/pylint/checkers/design_analysis.py +51 -34
- data/vendor/depot_tools/third_party/pylint/checkers/exceptions.py +84 -47
- data/vendor/depot_tools/third_party/pylint/checkers/format.py +55 -30
- data/vendor/depot_tools/third_party/pylint/checkers/imports.py +314 -73
- data/vendor/depot_tools/third_party/pylint/checkers/logging.py +10 -8
- data/vendor/depot_tools/third_party/pylint/checkers/misc.py +2 -1
- data/vendor/depot_tools/third_party/pylint/checkers/newstyle.py +45 -48
- data/vendor/depot_tools/third_party/pylint/checkers/python3.py +31 -21
- data/vendor/depot_tools/third_party/pylint/checkers/raw_metrics.py +3 -3
- data/vendor/depot_tools/third_party/pylint/checkers/similar.py +4 -5
- data/vendor/depot_tools/third_party/pylint/checkers/spelling.py +24 -10
- data/vendor/depot_tools/third_party/pylint/checkers/stdlib.py +120 -56
- data/vendor/depot_tools/third_party/pylint/checkers/strings.py +38 -35
- data/vendor/depot_tools/third_party/pylint/checkers/typecheck.py +485 -138
- data/vendor/depot_tools/third_party/pylint/checkers/utils.py +319 -142
- data/vendor/depot_tools/third_party/pylint/checkers/variables.py +329 -207
- data/vendor/depot_tools/third_party/pylint/config.py +739 -76
- data/vendor/depot_tools/third_party/pylint/epylint.py +9 -5
- data/vendor/depot_tools/third_party/pylint/extensions/__init__.py +0 -0
- data/vendor/depot_tools/third_party/pylint/extensions/check_docs.py +311 -0
- data/vendor/depot_tools/third_party/pylint/extensions/check_elif.py +62 -0
- data/vendor/depot_tools/third_party/{logilab/common → pylint}/graph.py +30 -133
- data/vendor/depot_tools/third_party/pylint/gui.py +2 -2
- data/vendor/depot_tools/third_party/pylint/interfaces.py +21 -3
- data/vendor/depot_tools/third_party/pylint/lint.py +123 -140
- data/vendor/depot_tools/third_party/pylint/pyreverse/diadefslib.py +10 -13
- data/vendor/depot_tools/third_party/pylint/pyreverse/diagrams.py +15 -4
- data/vendor/depot_tools/third_party/pylint/pyreverse/inspector.py +372 -0
- data/vendor/depot_tools/third_party/pylint/pyreverse/main.py +30 -7
- data/vendor/depot_tools/third_party/pylint/pyreverse/utils.py +80 -2
- data/vendor/depot_tools/third_party/{logilab/common → pylint/pyreverse}/vcgutils.py +19 -37
- data/vendor/depot_tools/third_party/pylint/pyreverse/writer.py +3 -4
- data/vendor/depot_tools/third_party/pylint/reporters/__init__.py +34 -18
- data/vendor/depot_tools/third_party/pylint/reporters/guireporter.py +1 -1
- data/vendor/depot_tools/third_party/pylint/reporters/html.py +10 -3
- data/vendor/depot_tools/third_party/pylint/reporters/json.py +10 -4
- data/vendor/depot_tools/third_party/pylint/reporters/text.py +94 -3
- data/vendor/depot_tools/third_party/pylint/reporters/ureports/__init__.py +106 -0
- data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/html_writer.py +17 -57
- data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/nodes.py +52 -74
- data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/text_writer.py +14 -60
- data/vendor/depot_tools/third_party/pylint/testutils.py +22 -20
- data/vendor/depot_tools/third_party/pylint/utils.py +268 -44
- data/vendor/depot_tools/third_party/repo/progress.py +42 -0
- data/vendor/depot_tools/update_depot_tools +1 -1
- data/vendor/depot_tools/upload_metrics.py +25 -0
- data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +45 -15
- data/vendor/depot_tools/win_toolchain/package_from_installed.py +71 -24
- data/vendor/depot_tools/yapf +1 -1
- data/vendor/depot_tools/yapf.bat +1 -1
- metadata +92 -77
- data/vendor/depot_tools/git-crsync +0 -3
- data/vendor/depot_tools/infra/config/cq.cfg +0 -32
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/apply_gerrit_ref.json +0 -29
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/apply_gerrit_ref_custom.json +0 -29
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/buildbot.json +0 -105
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/shallow.json +0 -195
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle_deprecated.json +0 -248
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8.json +0 -248
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name_no_patch.json +0 -105
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/apply_gerrit.py +0 -33
- data/vendor/depot_tools/third_party/logilab/astroid/brain/py2pytest.py +0 -31
- data/vendor/depot_tools/third_party/logilab/astroid/brain/py2qt4.py +0 -22
- data/vendor/depot_tools/third_party/logilab/astroid/brain/py2stdlib.py +0 -334
- data/vendor/depot_tools/third_party/logilab/astroid/inspector.py +0 -273
- data/vendor/depot_tools/third_party/logilab/astroid/utils.py +0 -239
- data/vendor/depot_tools/third_party/logilab/common/LICENSE.txt +0 -339
- data/vendor/depot_tools/third_party/logilab/common/README.chromium +0 -11
- data/vendor/depot_tools/third_party/logilab/common/__init__.py +0 -175
- data/vendor/depot_tools/third_party/logilab/common/__pkginfo__.py +0 -57
- data/vendor/depot_tools/third_party/logilab/common/cache.py +0 -114
- data/vendor/depot_tools/third_party/logilab/common/changelog.py +0 -238
- data/vendor/depot_tools/third_party/logilab/common/clcommands.py +0 -334
- data/vendor/depot_tools/third_party/logilab/common/cli.py +0 -211
- data/vendor/depot_tools/third_party/logilab/common/compat.py +0 -78
- data/vendor/depot_tools/third_party/logilab/common/configuration.py +0 -1105
- data/vendor/depot_tools/third_party/logilab/common/contexts.py +0 -5
- data/vendor/depot_tools/third_party/logilab/common/corbautils.py +0 -117
- data/vendor/depot_tools/third_party/logilab/common/daemon.py +0 -101
- data/vendor/depot_tools/third_party/logilab/common/date.py +0 -335
- data/vendor/depot_tools/third_party/logilab/common/dbf.py +0 -231
- data/vendor/depot_tools/third_party/logilab/common/debugger.py +0 -214
- data/vendor/depot_tools/third_party/logilab/common/decorators.py +0 -281
- data/vendor/depot_tools/third_party/logilab/common/deprecation.py +0 -189
- data/vendor/depot_tools/third_party/logilab/common/fileutils.py +0 -404
- data/vendor/depot_tools/third_party/logilab/common/interface.py +0 -71
- data/vendor/depot_tools/third_party/logilab/common/logging_ext.py +0 -195
- data/vendor/depot_tools/third_party/logilab/common/modutils.py +0 -702
- data/vendor/depot_tools/third_party/logilab/common/optik_ext.py +0 -392
- data/vendor/depot_tools/third_party/logilab/common/optparser.py +0 -92
- data/vendor/depot_tools/third_party/logilab/common/proc.py +0 -277
- data/vendor/depot_tools/third_party/logilab/common/pyro_ext.py +0 -180
- data/vendor/depot_tools/third_party/logilab/common/pytest.py +0 -1199
- data/vendor/depot_tools/third_party/logilab/common/registry.py +0 -1119
- data/vendor/depot_tools/third_party/logilab/common/shellutils.py +0 -462
- data/vendor/depot_tools/third_party/logilab/common/sphinx_ext.py +0 -87
- data/vendor/depot_tools/third_party/logilab/common/sphinxutils.py +0 -122
- data/vendor/depot_tools/third_party/logilab/common/table.py +0 -929
- data/vendor/depot_tools/third_party/logilab/common/tasksqueue.py +0 -101
- data/vendor/depot_tools/third_party/logilab/common/testlib.py +0 -1392
- data/vendor/depot_tools/third_party/logilab/common/textutils.py +0 -537
- data/vendor/depot_tools/third_party/logilab/common/tree.py +0 -369
- data/vendor/depot_tools/third_party/logilab/common/umessage.py +0 -194
- data/vendor/depot_tools/third_party/logilab/common/ureports/__init__.py +0 -172
- data/vendor/depot_tools/third_party/logilab/common/ureports/docbook_writer.py +0 -140
- data/vendor/depot_tools/third_party/logilab/common/urllib2ext.py +0 -89
- data/vendor/depot_tools/third_party/logilab/common/visitor.py +0 -109
- data/vendor/depot_tools/third_party/logilab/common/xmlrpcutils.py +0 -131
- data/vendor/depot_tools/third_party/logilab/common/xmlutils.py +0 -61
@@ -88,6 +88,19 @@ def CMDchanges(parser, args):
|
|
88
88
|
write_result(result, opt)
|
89
89
|
|
90
90
|
|
91
|
+
@subcommand.usage('')
|
92
|
+
def CMDabandon(parser, args):
|
93
|
+
parser.add_option('-c', '--change', type=int, help='change number')
|
94
|
+
parser.add_option('-m', '--message', default='', help='reason for abandoning')
|
95
|
+
|
96
|
+
(opt, args) = parser.parse_args(args)
|
97
|
+
result = gerrit_util.AbandonChange(
|
98
|
+
urlparse.urlparse(opt.host).netloc,
|
99
|
+
opt.change, opt.message)
|
100
|
+
logging.info(result)
|
101
|
+
write_result(result, opt)
|
102
|
+
|
103
|
+
|
91
104
|
class OptionParser(optparse.OptionParser):
|
92
105
|
"""Creates the option parse and add --verbose support."""
|
93
106
|
def __init__(self, *args, **kwargs):
|
@@ -16,6 +16,7 @@ import json
|
|
16
16
|
import logging
|
17
17
|
import netrc
|
18
18
|
import os
|
19
|
+
import random
|
19
20
|
import re
|
20
21
|
import socket
|
21
22
|
import stat
|
@@ -25,16 +26,20 @@ import time
|
|
25
26
|
import urllib
|
26
27
|
import urlparse
|
27
28
|
from cStringIO import StringIO
|
29
|
+
from multiprocessing.pool import ThreadPool
|
28
30
|
|
29
31
|
import auth
|
30
32
|
import gclient_utils
|
33
|
+
import metrics
|
34
|
+
import metrics_utils
|
31
35
|
import subprocess2
|
32
36
|
from third_party import httplib2
|
33
37
|
|
34
38
|
LOGGER = logging.getLogger()
|
35
|
-
# With a starting sleep time of 1
|
36
|
-
# total tries, the sleep time between the first and last tries will be
|
37
|
-
|
39
|
+
# With a starting sleep time of 1.5 seconds, 2^n exponential backoff, and seven
|
40
|
+
# total tries, the sleep time between the first and last tries will be 94.5 sec.
|
41
|
+
# TODO(crbug.com/881860): Lower this when crbug.com/877717 is fixed.
|
42
|
+
TRY_LIMIT = 7
|
38
43
|
|
39
44
|
|
40
45
|
# Controls the transport protocol used to communicate with gerrit.
|
@@ -102,9 +107,27 @@ class CookiesAuthenticator(Authenticator):
|
|
102
107
|
Expected case for developer workstations.
|
103
108
|
"""
|
104
109
|
|
110
|
+
_EMPTY = object()
|
111
|
+
|
105
112
|
def __init__(self):
|
106
|
-
|
107
|
-
|
113
|
+
# Credentials will be loaded lazily on first use. This ensures Authenticator
|
114
|
+
# get() can always construct an authenticator, even if something is broken.
|
115
|
+
# This allows 'creds-check' to proceed to actually checking creds later,
|
116
|
+
# rigorously (instead of blowing up with a cryptic error if they are wrong).
|
117
|
+
self._netrc = self._EMPTY
|
118
|
+
self._gitcookies = self._EMPTY
|
119
|
+
|
120
|
+
@property
|
121
|
+
def netrc(self):
|
122
|
+
if self._netrc is self._EMPTY:
|
123
|
+
self._netrc = self._get_netrc()
|
124
|
+
return self._netrc
|
125
|
+
|
126
|
+
@property
|
127
|
+
def gitcookies(self):
|
128
|
+
if self._gitcookies is self._EMPTY:
|
129
|
+
self._gitcookies = self._get_gitcookies()
|
130
|
+
return self._gitcookies
|
108
131
|
|
109
132
|
@classmethod
|
110
133
|
def get_new_password_url(cls, host):
|
@@ -117,6 +140,10 @@ class CookiesAuthenticator(Authenticator):
|
|
117
140
|
|
118
141
|
@classmethod
|
119
142
|
def get_new_password_message(cls, host):
|
143
|
+
if host is None:
|
144
|
+
return ('Git host for gerrit upload is unknown. Check your remote '
|
145
|
+
'and the branch your branch is tracking. This tool assumes '
|
146
|
+
'that you are using a git server at *.googlesource.com.')
|
120
147
|
assert not host.startswith('http')
|
121
148
|
# Assume *.googlesource.com pattern.
|
122
149
|
parts = host.split('.')
|
@@ -134,16 +161,17 @@ class CookiesAuthenticator(Authenticator):
|
|
134
161
|
def _get_netrc(cls):
|
135
162
|
# Buffer the '.netrc' path. Use an empty file if it doesn't exist.
|
136
163
|
path = cls.get_netrc_path()
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
164
|
+
if not os.path.exists(path):
|
165
|
+
return netrc.netrc(os.devnull)
|
166
|
+
|
167
|
+
st = os.stat(path)
|
168
|
+
if st.st_mode & (stat.S_IRWXG | stat.S_IRWXO):
|
169
|
+
print >> sys.stderr, (
|
170
|
+
'WARNING: netrc file %s cannot be used because its file '
|
171
|
+
'permissions are insecure. netrc file permissions should be '
|
172
|
+
'600.' % path)
|
173
|
+
with open(path) as fd:
|
174
|
+
content = fd.read()
|
147
175
|
|
148
176
|
# Load the '.netrc' file. We strip comments from it because processing them
|
149
177
|
# can trigger a bug in Windows. See crbug.com/664664.
|
@@ -198,11 +226,13 @@ class CookiesAuthenticator(Authenticator):
|
|
198
226
|
continue
|
199
227
|
domain, xpath, key, value = fields[0], fields[2], fields[5], fields[6]
|
200
228
|
if xpath == '/' and key == 'o':
|
201
|
-
|
202
|
-
|
229
|
+
if value.startswith('git-'):
|
230
|
+
login, secret_token = value.split('=', 1)
|
231
|
+
gitcookies[domain] = (login, secret_token)
|
232
|
+
else:
|
233
|
+
gitcookies[domain] = ('', value)
|
203
234
|
except (IndexError, ValueError, TypeError) as exc:
|
204
235
|
LOGGER.warning(exc)
|
205
|
-
|
206
236
|
return gitcookies
|
207
237
|
|
208
238
|
def _get_auth_for_host(self, host):
|
@@ -214,7 +244,10 @@ class CookiesAuthenticator(Authenticator):
|
|
214
244
|
def get_auth_header(self, host):
|
215
245
|
a = self._get_auth_for_host(host)
|
216
246
|
if a:
|
217
|
-
|
247
|
+
if a[0]:
|
248
|
+
return 'Basic %s' % (base64.b64encode('%s:%s' % (a[0], a[2])))
|
249
|
+
else:
|
250
|
+
return 'Bearer %s' % a[2]
|
218
251
|
return None
|
219
252
|
|
220
253
|
def get_auth_email(self, host):
|
@@ -359,6 +392,8 @@ def CreateHttpConn(host, path, reqtype='GET', headers=None, body=None):
|
|
359
392
|
if body:
|
360
393
|
LOGGER.debug(body)
|
361
394
|
conn = GetConnectionObject()
|
395
|
+
# HACK: httplib.Http has no such attribute; we store req_host here for later
|
396
|
+
# use in ReadHttpResponse.
|
362
397
|
conn.req_host = host
|
363
398
|
conn.req_params = {
|
364
399
|
'uri': urlparse.urljoin('%s://%s' % (GERRIT_PROTOCOL, host), url),
|
@@ -378,10 +413,18 @@ def ReadHttpResponse(conn, accept_statuses=frozenset([200])):
|
|
378
413
|
Common additions include 204, 400, and 404.
|
379
414
|
Returns: A string buffer containing the connection's reply.
|
380
415
|
"""
|
381
|
-
sleep_time = 1
|
416
|
+
sleep_time = 1.5
|
382
417
|
for idx in range(TRY_LIMIT):
|
418
|
+
before_response = time.time()
|
383
419
|
response, contents = conn.request(**conn.req_params)
|
384
420
|
|
421
|
+
response_time = time.time() - before_response
|
422
|
+
metrics.collector.add_repeated(
|
423
|
+
'http_requests',
|
424
|
+
metrics_utils.extract_http_metrics(
|
425
|
+
conn.req_params['uri'], conn.req_params['method'], response.status,
|
426
|
+
response_time))
|
427
|
+
|
385
428
|
# Check if this is an authentication issue.
|
386
429
|
www_authenticate = response.get('www-authenticate')
|
387
430
|
if (response.status in (httplib.UNAUTHORIZED, httplib.FOUND) and
|
@@ -413,11 +456,23 @@ def ReadHttpResponse(conn, accept_statuses=frozenset([200])):
|
|
413
456
|
conn.req_host, conn.req_params['method'],
|
414
457
|
conn.req_params['uri'],
|
415
458
|
http_version, http_version, response.status, response.reason)
|
459
|
+
if response.status == 404:
|
460
|
+
# TODO(crbug/881860): remove this hack.
|
461
|
+
# HACK: try different Gerrit mirror as a workaround for potentially
|
462
|
+
# out-of-date mirror hit through default routing.
|
463
|
+
if conn.req_host == 'chromium-review.googlesource.com':
|
464
|
+
conn.req_params['uri'] = _UseGerritMirror(
|
465
|
+
conn.req_params['uri'], 'chromium-review.googlesource.com')
|
466
|
+
# And don't increase sleep_time in this case, since we suspect we've
|
467
|
+
# just asked wrong git mirror before.
|
468
|
+
sleep_time /= 2.0
|
469
|
+
|
416
470
|
if TRY_LIMIT - idx > 1:
|
417
471
|
LOGGER.info('Will retry in %d seconds (%d more times)...',
|
418
472
|
sleep_time, TRY_LIMIT - idx - 1)
|
419
473
|
time.sleep(sleep_time)
|
420
474
|
sleep_time = sleep_time * 2
|
475
|
+
# end of retries loop
|
421
476
|
if response.status not in accept_statuses:
|
422
477
|
if response.status in (401, 403):
|
423
478
|
print('Your Gerrit credentials might be misconfigured. Try: \n'
|
@@ -562,6 +617,18 @@ def GetGerritFetchUrl(host):
|
|
562
617
|
return '%s://%s/' % (GERRIT_PROTOCOL, host)
|
563
618
|
|
564
619
|
|
620
|
+
def GetCodeReviewTbrScore(host, project):
|
621
|
+
"""Given a gerrit host name and project, return the Code-Review score for TBR.
|
622
|
+
"""
|
623
|
+
conn = CreateHttpConn(host, '/projects/%s' % urllib.quote(project, safe=''))
|
624
|
+
project = ReadHttpJsonResponse(conn)
|
625
|
+
if ('labels' not in project
|
626
|
+
or 'Code-Review' not in project['labels']
|
627
|
+
or 'values' not in project['labels']['Code-Review']):
|
628
|
+
return 1
|
629
|
+
return max([int(x) for x in project['labels']['Code-Review']['values']])
|
630
|
+
|
631
|
+
|
565
632
|
def GetChangePageUrl(host, change_number):
|
566
633
|
"""Given a gerrit host name and change number, return change page url."""
|
567
634
|
return '%s://%s/#/c/%d/' % (GERRIT_PROTOCOL, host, change_number)
|
@@ -621,6 +688,12 @@ def GetChangeComments(host, change):
|
|
621
688
|
return ReadHttpJsonResponse(CreateHttpConn(host, path))
|
622
689
|
|
623
690
|
|
691
|
+
def GetChangeRobotComments(host, change):
|
692
|
+
"""Get the line- and file-level robot comments on a change."""
|
693
|
+
path = 'changes/%s/robotcomments' % change
|
694
|
+
return ReadHttpJsonResponse(CreateHttpConn(host, path))
|
695
|
+
|
696
|
+
|
624
697
|
def AbandonChange(host, change, msg=''):
|
625
698
|
"""Abandon a gerrit change."""
|
626
699
|
path = 'changes/%s/abandon' % change
|
@@ -863,11 +936,34 @@ def GetAccountDetails(host, account_id='self'):
|
|
863
936
|
|
864
937
|
Documentation:
|
865
938
|
https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#get-account
|
939
|
+
|
940
|
+
Returns None if account is not found (i.e., Gerrit returned 404).
|
866
941
|
"""
|
867
|
-
if account_id != 'self':
|
868
|
-
account_id = int(account_id)
|
869
942
|
conn = CreateHttpConn(host, '/accounts/%s' % account_id)
|
870
|
-
return ReadHttpJsonResponse(conn)
|
943
|
+
return ReadHttpJsonResponse(conn, accept_statuses=[200, 404])
|
944
|
+
|
945
|
+
|
946
|
+
def ValidAccounts(host, accounts, max_threads=10):
|
947
|
+
"""Returns a mapping from valid account to its details.
|
948
|
+
|
949
|
+
Invalid accounts, either not existing or without unique match,
|
950
|
+
are not present as returned dictionary keys.
|
951
|
+
"""
|
952
|
+
assert not isinstance(accounts, basestring), type(accounts)
|
953
|
+
accounts = list(set(accounts))
|
954
|
+
if not accounts:
|
955
|
+
return {}
|
956
|
+
def get_one(account):
|
957
|
+
try:
|
958
|
+
return account, GetAccountDetails(host, account)
|
959
|
+
except GerritError:
|
960
|
+
return None, None
|
961
|
+
valid = {}
|
962
|
+
with contextlib.closing(ThreadPool(min(max_threads, len(accounts)))) as pool:
|
963
|
+
for account, details in pool.map(get_one, accounts):
|
964
|
+
if account and details:
|
965
|
+
valid[account] = details
|
966
|
+
return valid
|
871
967
|
|
872
968
|
|
873
969
|
def PercentEncodeForGitRef(original):
|
@@ -899,3 +995,42 @@ def tempdir():
|
|
899
995
|
finally:
|
900
996
|
if tdir:
|
901
997
|
gclient_utils.rmtree(tdir)
|
998
|
+
|
999
|
+
|
1000
|
+
def ChangeIdentifier(project, change_number):
|
1001
|
+
"""Returns change identifier "project~number" suitable for |change| arg of
|
1002
|
+
this module API.
|
1003
|
+
|
1004
|
+
Such format is allows for more efficient Gerrit routing of HTTP requests,
|
1005
|
+
comparing to specifying just change_number.
|
1006
|
+
"""
|
1007
|
+
assert int(change_number)
|
1008
|
+
return '%s~%s' % (urllib.quote(project, safe=''), change_number)
|
1009
|
+
|
1010
|
+
|
1011
|
+
# TODO(crbug/881860): remove this hack.
|
1012
|
+
_GERRIT_MIRROR_PREFIXES = ['us1', 'us2', 'us3', 'eu1']
|
1013
|
+
assert all(3 == len(p) for p in _GERRIT_MIRROR_PREFIXES)
|
1014
|
+
|
1015
|
+
|
1016
|
+
def _UseGerritMirror(url, host):
|
1017
|
+
"""Returns new url which uses randomly selected mirror for a gerrit host.
|
1018
|
+
|
1019
|
+
url's host should be for a given host or a result of prior call to this
|
1020
|
+
function.
|
1021
|
+
|
1022
|
+
Assumes url has a single occurence of the host substring.
|
1023
|
+
"""
|
1024
|
+
assert host in url
|
1025
|
+
suffix = '-mirror-' + host
|
1026
|
+
prefixes = set(_GERRIT_MIRROR_PREFIXES)
|
1027
|
+
prefix_len = len(_GERRIT_MIRROR_PREFIXES[0])
|
1028
|
+
st = url.find(suffix)
|
1029
|
+
if st == -1:
|
1030
|
+
actual_host = host
|
1031
|
+
else:
|
1032
|
+
# Already uses some mirror.
|
1033
|
+
assert st >= prefix_len, (uri, host, st, prefix_len)
|
1034
|
+
prefixes.remove(url[st-prefix_len:st])
|
1035
|
+
actual_host = url[st-prefix_len:st+len(suffix)]
|
1036
|
+
return url.replace(actual_host, random.choice(list(prefixes)) + suffix)
|
@@ -6,6 +6,7 @@
|
|
6
6
|
"""A git command for managing a local cache of git repositories."""
|
7
7
|
|
8
8
|
from __future__ import print_function
|
9
|
+
|
9
10
|
import contextlib
|
10
11
|
import errno
|
11
12
|
import logging
|
@@ -17,7 +18,12 @@ import threading
|
|
17
18
|
import time
|
18
19
|
import subprocess
|
19
20
|
import sys
|
20
|
-
|
21
|
+
|
22
|
+
try:
|
23
|
+
import urlparse
|
24
|
+
except ImportError: # For Py3 compatibility
|
25
|
+
import urllib.parse as urlparse
|
26
|
+
|
21
27
|
import zipfile
|
22
28
|
|
23
29
|
from download_from_google_storage import Gsutil
|
@@ -195,6 +201,11 @@ class Mirror(object):
|
|
195
201
|
os.path.dirname(os.path.abspath(__file__)), 'gsutil.py')
|
196
202
|
cachepath_lock = threading.Lock()
|
197
203
|
|
204
|
+
UNSET_CACHEPATH = object()
|
205
|
+
|
206
|
+
# Used for tests
|
207
|
+
_GIT_CONFIG_LOCATION = []
|
208
|
+
|
198
209
|
@staticmethod
|
199
210
|
def parse_fetch_spec(spec):
|
200
211
|
"""Parses and canonicalizes a fetch spec.
|
@@ -234,9 +245,14 @@ class Mirror(object):
|
|
234
245
|
|
235
246
|
@property
|
236
247
|
def bootstrap_bucket(self):
|
248
|
+
b = os.getenv('OVERRIDE_BOOTSTRAP_BUCKET')
|
249
|
+
if b:
|
250
|
+
return b
|
237
251
|
u = urlparse.urlparse(self.url)
|
238
252
|
if u.netloc == 'chromium.googlesource.com':
|
239
253
|
return 'chromium-git-cache'
|
254
|
+
# TODO(tandrii): delete once LUCI migration is completed.
|
255
|
+
# Only public hosts will be supported going forward.
|
240
256
|
elif u.netloc == 'chrome-internal.googlesource.com':
|
241
257
|
return 'chrome-git-cache'
|
242
258
|
# Not recognized.
|
@@ -253,6 +269,10 @@ class Mirror(object):
|
|
253
269
|
norm_url = parsed.netloc + parsed.path
|
254
270
|
if norm_url.endswith('.git'):
|
255
271
|
norm_url = norm_url[:-len('.git')]
|
272
|
+
|
273
|
+
# Use the same dir for authenticated URLs and unauthenticated URLs.
|
274
|
+
norm_url = norm_url.replace('googlesource.com/a/', 'googlesource.com/')
|
275
|
+
|
256
276
|
return norm_url.replace('-', '--').replace('/', '-').lower()
|
257
277
|
|
258
278
|
@staticmethod
|
@@ -272,14 +292,18 @@ class Mirror(object):
|
|
272
292
|
if not hasattr(cls, 'cachepath'):
|
273
293
|
try:
|
274
294
|
cachepath = subprocess.check_output(
|
275
|
-
[cls.git_exe, 'config'
|
295
|
+
[cls.git_exe, 'config'] +
|
296
|
+
cls._GIT_CONFIG_LOCATION +
|
297
|
+
['cache.cachepath']).strip()
|
276
298
|
except subprocess.CalledProcessError:
|
277
|
-
cachepath =
|
278
|
-
if not cachepath:
|
279
|
-
raise RuntimeError(
|
280
|
-
'No global cache.cachepath git configuration found.')
|
299
|
+
cachepath = os.environ.get('GIT_CACHE_PATH', cls.UNSET_CACHEPATH)
|
281
300
|
setattr(cls, 'cachepath', cachepath)
|
282
|
-
|
301
|
+
|
302
|
+
ret = getattr(cls, 'cachepath')
|
303
|
+
if ret is cls.UNSET_CACHEPATH:
|
304
|
+
raise RuntimeError('No cache.cachepath git configuration or '
|
305
|
+
'$GIT_CACHE_PATH is set.')
|
306
|
+
return ret
|
283
307
|
|
284
308
|
def Rename(self, src, dst):
|
285
309
|
# This is somehow racy on Windows.
|
@@ -302,10 +326,19 @@ class Mirror(object):
|
|
302
326
|
self.print('running "git %s" in "%s"' % (' '.join(cmd), cwd))
|
303
327
|
gclient_utils.CheckCallAndFilter([self.git_exe] + cmd, **kwargs)
|
304
328
|
|
305
|
-
def config(self, cwd=None):
|
329
|
+
def config(self, cwd=None, reset_fetch_config=False):
|
306
330
|
if cwd is None:
|
307
331
|
cwd = self.mirror_path
|
308
332
|
|
333
|
+
if reset_fetch_config:
|
334
|
+
try:
|
335
|
+
self.RunGit(['config', '--unset-all', 'remote.origin.fetch'], cwd=cwd)
|
336
|
+
except subprocess.CalledProcessError as e:
|
337
|
+
# If exit code was 5, it means we attempted to unset a config that
|
338
|
+
# didn't exist. Ignore it.
|
339
|
+
if e.returncode != 5:
|
340
|
+
raise
|
341
|
+
|
309
342
|
# Don't run git-gc in a daemon. Bad things can happen if it gets killed.
|
310
343
|
try:
|
311
344
|
self.RunGit(['config', 'gc.autodetach', '0'], cwd=cwd)
|
@@ -339,21 +372,34 @@ class Mirror(object):
|
|
339
372
|
"""
|
340
373
|
if not self.bootstrap_bucket:
|
341
374
|
return False
|
342
|
-
python_fallback =
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
python_fallback = True
|
349
|
-
elif not gclient_utils.FindExecutable('unzip'):
|
350
|
-
python_fallback = True
|
375
|
+
python_fallback = (
|
376
|
+
(sys.platform.startswith('win') and
|
377
|
+
not gclient_utils.FindExecutable('7z')) or
|
378
|
+
(not gclient_utils.FindExecutable('unzip')) or
|
379
|
+
('ZIP64_SUPPORT' not in subprocess.check_output(["unzip", "-v"]))
|
380
|
+
)
|
351
381
|
|
352
382
|
gs_folder = 'gs://%s/%s' % (self.bootstrap_bucket, self.basedir)
|
353
383
|
gsutil = Gsutil(self.gsutil_exe, boto_path=None)
|
354
384
|
# Get the most recent version of the zipfile.
|
355
385
|
_, ls_out, ls_err = gsutil.check_call('ls', gs_folder)
|
356
|
-
|
386
|
+
|
387
|
+
def compare_filenames(a, b):
|
388
|
+
# |a| and |b| look like gs://.../.../9999.zip. They both have the same
|
389
|
+
# gs://bootstrap_bucket/basedir/ prefix because they come from the same
|
390
|
+
# `gsutil ls`.
|
391
|
+
# This function only compares the numeral parts before .zip.
|
392
|
+
regex_pattern = r'/(\d+)\.zip$'
|
393
|
+
match_a = re.search(regex_pattern, a)
|
394
|
+
match_b = re.search(regex_pattern, b)
|
395
|
+
if (match_a is not None) and (match_b is not None):
|
396
|
+
num_a = int(match_a.group(1))
|
397
|
+
num_b = int(match_b.group(1))
|
398
|
+
return cmp(num_a, num_b)
|
399
|
+
# If it doesn't match the format, fallback to string comparison.
|
400
|
+
return cmp(a, b)
|
401
|
+
|
402
|
+
ls_out_sorted = sorted(ls_out.splitlines(), cmp=compare_filenames)
|
357
403
|
if not ls_out_sorted:
|
358
404
|
# This repo is not on Google Storage.
|
359
405
|
self.print('No bootstrap file for %s found in %s, stderr:\n %s' %
|
@@ -499,8 +545,8 @@ class Mirror(object):
|
|
499
545
|
'Shallow fetch requested, but repo cache already exists.')
|
500
546
|
return tempdir
|
501
547
|
|
502
|
-
def _fetch(self, rundir, verbose, depth):
|
503
|
-
self.config(rundir)
|
548
|
+
def _fetch(self, rundir, verbose, depth, reset_fetch_config):
|
549
|
+
self.config(rundir, reset_fetch_config)
|
504
550
|
v = []
|
505
551
|
d = []
|
506
552
|
if verbose:
|
@@ -522,7 +568,8 @@ class Mirror(object):
|
|
522
568
|
logging.warn('Fetch of %s failed' % spec)
|
523
569
|
|
524
570
|
def populate(self, depth=None, shallow=False, bootstrap=False,
|
525
|
-
verbose=False, ignore_lock=False, lock_timeout=0
|
571
|
+
verbose=False, ignore_lock=False, lock_timeout=0,
|
572
|
+
reset_fetch_config=False):
|
526
573
|
assert self.GetCachePath()
|
527
574
|
if shallow and not depth:
|
528
575
|
depth = 10000
|
@@ -536,14 +583,14 @@ class Mirror(object):
|
|
536
583
|
try:
|
537
584
|
tempdir = self._ensure_bootstrapped(depth, bootstrap)
|
538
585
|
rundir = tempdir or self.mirror_path
|
539
|
-
self._fetch(rundir, verbose, depth)
|
586
|
+
self._fetch(rundir, verbose, depth, reset_fetch_config)
|
540
587
|
except ClobberNeeded:
|
541
588
|
# This is a major failure, we need to clean and force a bootstrap.
|
542
589
|
gclient_utils.rmtree(rundir)
|
543
590
|
self.print(GIT_CACHE_CORRUPT_MESSAGE)
|
544
591
|
tempdir = self._ensure_bootstrapped(depth, bootstrap, force=True)
|
545
592
|
assert tempdir
|
546
|
-
self._fetch(tempdir, verbose, depth)
|
593
|
+
self._fetch(tempdir, verbose, depth, reset_fetch_config)
|
547
594
|
finally:
|
548
595
|
if tempdir:
|
549
596
|
if os.path.exists(self.mirror_path):
|
@@ -684,6 +731,8 @@ def CMDpopulate(parser, args):
|
|
684
731
|
parser.add_option('--ignore_locks', '--ignore-locks',
|
685
732
|
action='store_true',
|
686
733
|
help='Don\'t try to lock repository')
|
734
|
+
parser.add_option('--reset-fetch-config', action='store_true', default=False,
|
735
|
+
help='Reset the fetch config before populating the cache.')
|
687
736
|
|
688
737
|
options, args = parser.parse_args(args)
|
689
738
|
if not len(args) == 1:
|
@@ -697,6 +746,7 @@ def CMDpopulate(parser, args):
|
|
697
746
|
'bootstrap': not options.no_bootstrap,
|
698
747
|
'ignore_lock': options.ignore_locks,
|
699
748
|
'lock_timeout': options.timeout,
|
749
|
+
'reset_fetch_config': options.reset_fetch_config,
|
700
750
|
}
|
701
751
|
if options.depth:
|
702
752
|
kwargs['depth'] = options.depth
|
@@ -795,7 +845,10 @@ class OptionParser(optparse.OptionParser):
|
|
795
845
|
def __init__(self, *args, **kwargs):
|
796
846
|
optparse.OptionParser.__init__(self, *args, prog='git cache', **kwargs)
|
797
847
|
self.add_option('-c', '--cache-dir',
|
798
|
-
help=
|
848
|
+
help=(
|
849
|
+
'Path to the directory containing the caches. Normally '
|
850
|
+
'deduced from git config cache.cachepath or '
|
851
|
+
'$GIT_CACHE_PATH.'))
|
799
852
|
self.add_option('-v', '--verbose', action='count', default=1,
|
800
853
|
help='Increase verbosity (can be passed multiple times)')
|
801
854
|
self.add_option('-q', '--quiet', action='store_true',
|