libv8 7.3.492.27.0 → 8.4.255.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +11 -14
- data/CHANGELOG.md +10 -0
- data/README.md +10 -11
- data/Rakefile +30 -36
- data/ext/libv8/builder.rb +1 -1
- data/lib/libv8/version.rb +1 -1
- data/libv8.gemspec +1 -3
- data/vendor/depot_tools/{cipd.ps1 → .cipd_impl.ps1} +0 -0
- data/vendor/depot_tools/.gitattributes +1 -1
- data/vendor/depot_tools/.gitignore +7 -2
- data/vendor/depot_tools/.style.yapf +3 -1
- data/vendor/depot_tools/.vpython +55 -0
- data/vendor/depot_tools/.vpython3 +23 -0
- data/vendor/depot_tools/CROS_OWNERS +3 -1
- data/vendor/depot_tools/GOMA_OWNERS +9 -0
- data/vendor/depot_tools/LUCI_OWNERS +5 -0
- data/vendor/depot_tools/OWNERS +21 -6
- data/vendor/depot_tools/PRESUBMIT.py +35 -18
- data/vendor/depot_tools/README.git-cl.md +0 -14
- data/vendor/depot_tools/README.md +1 -1
- data/vendor/depot_tools/WATCHLISTS +2 -2
- data/vendor/depot_tools/auth.py +60 -772
- data/vendor/depot_tools/autoninja +12 -6
- data/vendor/depot_tools/autoninja.bat +14 -6
- data/vendor/depot_tools/autoninja.py +64 -27
- data/vendor/depot_tools/bb +1 -1
- data/vendor/depot_tools/bootstrap/{win/README.md → README.md} +28 -14
- data/vendor/depot_tools/bootstrap/{win/win_tools.py → bootstrap.py} +60 -43
- data/vendor/depot_tools/bootstrap/{win/git-bash.template.sh → git-bash.template.sh} +1 -1
- data/vendor/depot_tools/bootstrap/{win/git.template.bat → git.template.bat} +0 -0
- data/vendor/depot_tools/bootstrap/manifest.txt +27 -0
- data/vendor/depot_tools/bootstrap/manifest_bleeding_edge.txt +27 -0
- data/vendor/depot_tools/bootstrap/{win/profile.d.python.sh → profile.d.python.sh} +0 -0
- data/vendor/depot_tools/bootstrap/{win/python27.bleeding_edge.bat → python27.bat} +0 -0
- data/vendor/depot_tools/bootstrap/{win/python27.new.bat → python3.bat} +3 -3
- data/vendor/depot_tools/bootstrap/{win/win_tools.bat → win_tools.bat} +21 -16
- data/vendor/depot_tools/bootstrap_python3 +35 -0
- data/vendor/depot_tools/cbuildbot +1 -1
- data/vendor/depot_tools/chrome_set_ver +1 -1
- data/vendor/depot_tools/cipd +43 -39
- data/vendor/depot_tools/cipd.bat +2 -2
- data/vendor/depot_tools/cipd_client_version +1 -1
- data/vendor/depot_tools/cipd_client_version.digests +15 -14
- data/vendor/depot_tools/cipd_manifest.txt +31 -8
- data/vendor/depot_tools/cipd_manifest.versions +278 -158
- data/vendor/depot_tools/cit.py +9 -7
- data/vendor/depot_tools/clang_format.py +4 -1
- data/vendor/depot_tools/clang_format_merge_driver.py +10 -8
- data/vendor/depot_tools/compile_single_file.py +7 -2
- data/vendor/depot_tools/cpplint.py +51 -45
- data/vendor/depot_tools/cros +87 -0
- data/vendor/depot_tools/cros_sdk +1 -1
- data/vendor/depot_tools/crosjobs +13 -0
- data/vendor/depot_tools/detect_host_arch.py +0 -1
- data/vendor/depot_tools/dirmd +12 -0
- data/vendor/depot_tools/dirmd.bat +7 -0
- data/vendor/depot_tools/download_from_google_storage.py +47 -27
- data/vendor/depot_tools/ensure_bootstrap +14 -0
- data/vendor/depot_tools/fetch +14 -1
- data/vendor/depot_tools/fetch.bat +14 -1
- data/vendor/depot_tools/fetch.py +5 -7
- data/vendor/depot_tools/fetch_configs/chromium.py +6 -4
- data/vendor/depot_tools/fetch_configs/devtools-frontend.py +44 -0
- data/vendor/depot_tools/fetch_configs/ios_internal.py +10 -19
- data/vendor/depot_tools/fix_encoding.py +19 -5
- data/vendor/depot_tools/gclient +28 -12
- data/vendor/depot_tools/gclient-new-workdir.py +2 -0
- data/vendor/depot_tools/gclient.bat +18 -1
- data/vendor/depot_tools/gclient.py +160 -119
- data/vendor/depot_tools/gclient_eval.py +119 -107
- data/vendor/depot_tools/gclient_paths.py +67 -57
- data/vendor/depot_tools/gclient_scm.py +181 -159
- data/vendor/depot_tools/gclient_utils.py +177 -124
- data/vendor/depot_tools/gerrit_client.py +21 -13
- data/vendor/depot_tools/gerrit_util.py +188 -228
- data/vendor/depot_tools/git-cache +1 -1
- data/vendor/depot_tools/git-cl +1 -1
- data/vendor/depot_tools/git-drover +1 -1
- data/vendor/depot_tools/git-find-releases +1 -1
- data/vendor/depot_tools/git-footers +1 -1
- data/vendor/depot_tools/git-freeze +1 -1
- data/vendor/depot_tools/git-hyper-blame +1 -1
- data/vendor/depot_tools/git-map +1 -1
- data/vendor/depot_tools/git-map-branches +1 -1
- data/vendor/depot_tools/git-mark-merge-base +1 -1
- data/vendor/depot_tools/git-nav-downstream +1 -1
- data/vendor/depot_tools/git-new-branch +1 -1
- data/vendor/depot_tools/git-number +1 -1
- data/vendor/depot_tools/git-rebase-update +1 -1
- data/vendor/depot_tools/git-rename-branch +1 -1
- data/vendor/depot_tools/git-reparent-branch +1 -1
- data/vendor/depot_tools/git-retry +1 -1
- data/vendor/depot_tools/git-squash-branch +1 -1
- data/vendor/depot_tools/git-thaw +1 -1
- data/vendor/depot_tools/git-upstream-diff +1 -1
- data/vendor/depot_tools/git_cache.py +255 -360
- data/vendor/depot_tools/git_cl.py +1562 -2059
- data/vendor/depot_tools/git_cl_completion.sh +16 -2
- data/vendor/depot_tools/git_common.py +77 -32
- data/vendor/depot_tools/git_drover.py +17 -8
- data/vendor/depot_tools/git_find_releases.py +11 -9
- data/vendor/depot_tools/git_footers.py +13 -9
- data/vendor/depot_tools/git_freezer.py +3 -1
- data/vendor/depot_tools/git_hyper_blame.py +25 -32
- data/vendor/depot_tools/git_map.py +115 -93
- data/vendor/depot_tools/git_map_branches.py +11 -10
- data/vendor/depot_tools/git_mark_merge_base.py +8 -6
- data/vendor/depot_tools/git_nav_downstream.py +9 -6
- data/vendor/depot_tools/git_new_branch.py +39 -33
- data/vendor/depot_tools/git_number.py +28 -17
- data/vendor/depot_tools/git_rebase_update.py +50 -49
- data/vendor/depot_tools/git_rename_branch.py +2 -2
- data/vendor/depot_tools/git_reparent_branch.py +8 -6
- data/vendor/depot_tools/git_upstream_diff.py +4 -2
- data/vendor/depot_tools/gn.py +6 -4
- data/vendor/depot_tools/goma_auth +12 -0
- data/vendor/depot_tools/goma_auth.bat +8 -0
- data/vendor/depot_tools/goma_ctl +12 -0
- data/vendor/depot_tools/goma_ctl.bat +8 -0
- data/vendor/depot_tools/gsutil.py +5 -2
- data/vendor/depot_tools/gsutil.py.bat +8 -0
- data/vendor/depot_tools/gsutil.vpython +3 -1
- data/vendor/depot_tools/infra/config/OWNERS +2 -2
- data/vendor/depot_tools/infra/config/recipes.cfg +3 -2
- data/vendor/depot_tools/led +1 -1
- data/vendor/depot_tools/lockfile.py +116 -0
- data/vendor/depot_tools/luci-auth +1 -1
- data/vendor/depot_tools/lucicfg +1 -1
- data/vendor/depot_tools/mac_toolchain +1 -1
- data/vendor/depot_tools/man/html/depot_tools.html +1 -1
- data/vendor/depot_tools/man/html/depot_tools_tutorial.html +31 -25
- data/vendor/depot_tools/man/html/git-cl.html +1 -1
- data/vendor/depot_tools/man/html/git-drover.html +18 -18
- data/vendor/depot_tools/man/html/git-footers.html +1 -1
- data/vendor/depot_tools/man/html/git-freeze.html +3 -3
- data/vendor/depot_tools/man/html/git-hyper-blame.html +1 -1
- data/vendor/depot_tools/man/html/git-map-branches.html +2 -2
- data/vendor/depot_tools/man/html/git-map.html +1 -1
- data/vendor/depot_tools/man/html/git-mark-merge-base.html +1 -1
- data/vendor/depot_tools/man/html/git-nav-downstream.html +3 -3
- data/vendor/depot_tools/man/html/git-nav-upstream.html +12 -6
- data/vendor/depot_tools/man/html/git-new-branch.html +1 -1
- data/vendor/depot_tools/man/html/git-rebase-update.html +20 -1
- data/vendor/depot_tools/man/html/git-rename-branch.html +1 -1
- data/vendor/depot_tools/man/html/git-reparent-branch.html +1 -1
- data/vendor/depot_tools/man/html/git-retry.html +1 -1
- data/vendor/depot_tools/man/html/git-squash-branch.html +1 -1
- data/vendor/depot_tools/man/html/git-thaw.html +1 -1
- data/vendor/depot_tools/man/html/git-upstream-diff.html +10 -6
- data/vendor/depot_tools/man/man1/git-cl.1 +4 -4
- data/vendor/depot_tools/man/man1/git-drover.1 +21 -21
- data/vendor/depot_tools/man/man1/git-footers.1 +4 -4
- data/vendor/depot_tools/man/man1/git-freeze.1 +6 -6
- data/vendor/depot_tools/man/man1/git-hyper-blame.1 +4 -4
- data/vendor/depot_tools/man/man1/git-map-branches.1 +4 -4
- data/vendor/depot_tools/man/man1/git-map.1 +4 -4
- data/vendor/depot_tools/man/man1/git-mark-merge-base.1 +4 -4
- data/vendor/depot_tools/man/man1/git-nav-downstream.1 +6 -6
- data/vendor/depot_tools/man/man1/git-nav-upstream.1 +15 -9
- data/vendor/depot_tools/man/man1/git-new-branch.1 +3 -3
- data/vendor/depot_tools/man/man1/git-rebase-update.1 +14 -4
- data/vendor/depot_tools/man/man1/git-rename-branch.1 +4 -4
- data/vendor/depot_tools/man/man1/git-reparent-branch.1 +4 -4
- data/vendor/depot_tools/man/man1/git-retry.1 +4 -4
- data/vendor/depot_tools/man/man1/git-squash-branch.1 +4 -4
- data/vendor/depot_tools/man/man1/git-thaw.1 +4 -4
- data/vendor/depot_tools/man/man1/git-upstream-diff.1 +7 -13
- data/vendor/depot_tools/man/man7/depot_tools.7 +4 -4
- data/vendor/depot_tools/man/man7/depot_tools_tutorial.7 +31 -25
- data/vendor/depot_tools/man/src/common_demo_functions.sh +2 -2
- data/vendor/depot_tools/man/src/depot_tools_tutorial.txt +3 -3
- data/vendor/depot_tools/man/src/filter_demo_output.py +4 -2
- data/vendor/depot_tools/man/src/git-new-branch.txt +2 -1
- data/vendor/depot_tools/man/src/git-rebase-update.txt +8 -1
- data/vendor/depot_tools/metrics.README.md +8 -5
- data/vendor/depot_tools/metrics.py +7 -6
- data/vendor/depot_tools/metrics_utils.py +4 -14
- data/vendor/depot_tools/my_activity.py +85 -251
- data/vendor/depot_tools/ninja +1 -0
- data/vendor/depot_tools/ninja-mac +0 -0
- data/vendor/depot_tools/ninjalog_uploader.py +146 -145
- data/vendor/depot_tools/ninjalog_uploader_wrapper.py +69 -60
- data/vendor/depot_tools/owners.py +156 -43
- data/vendor/depot_tools/owners_finder.py +28 -14
- data/vendor/depot_tools/post_build_ninja_summary.py +76 -48
- data/vendor/depot_tools/presubmit_canned_checks.py +293 -106
- data/vendor/depot_tools/presubmit_support.py +527 -333
- data/vendor/depot_tools/prpc +1 -1
- data/vendor/depot_tools/pylint +2 -12
- data/vendor/depot_tools/pylint-1.5 +78 -0
- data/vendor/depot_tools/pylint-1.6 +78 -0
- data/vendor/depot_tools/pylint-1.7 +78 -0
- data/vendor/depot_tools/pylint-1.8 +78 -0
- data/vendor/depot_tools/pylint-1.9 +78 -0
- data/vendor/depot_tools/{depot-tools-auth.bat → pylint.bat} +2 -2
- data/vendor/depot_tools/pylint_main.py +45 -0
- data/vendor/depot_tools/pylintrc +14 -1
- data/vendor/depot_tools/python-bin/python3 +7 -0
- data/vendor/depot_tools/python_runner.sh +13 -8
- data/vendor/depot_tools/rdb +12 -0
- data/vendor/depot_tools/rdb.bat +7 -0
- data/vendor/depot_tools/recipes/OWNERS +0 -1
- data/vendor/depot_tools/recipes/README.recipes.md +218 -151
- data/vendor/depot_tools/recipes/recipe_modules/OWNERS +1 -1
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +17 -16
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +127 -78
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +19 -4
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +18 -3
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +19 -4
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +28 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/input_commit_with_id_without_repo.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/multiple_patch_refs.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +35 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{with_manifest_name.json → no_cp_checkout_HEAD.json} +25 -15
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_branch_head.json +65 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_specific_commit.json +65 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_master.json +65 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/refs.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/resolve_chromium_fixed_version.json +117 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail.json +17 -11
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +41 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +24 -11
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +35 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +35 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +38 -11
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +36 -11
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +35 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +35 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +35 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/unrecognized_commit_repo.json +0 -5
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_tags.json +29 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +95 -22
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +187 -114
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/test_api.py +2 -2
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/do_not_retry_patch_failures_in_cq.py +42 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/ensure_checkout.py +1 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/__init__.py +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/api.py +2 -2
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic_pkg.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-failed.json +2 -4
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-many-instances.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/mac64.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_file.json +26 -6
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_mode.json +23 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_verfile.json +23 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/win64.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk arch.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk bits.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_32.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_64.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_32.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_64.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_mips_64.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/mac_intel_64.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_32.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_64.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/cipd/test_api.py +1 -1
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +4 -1
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +4 -2
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +3 -1
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +4 -2
- data/vendor/depot_tools/recipes/recipe_modules/gclient/__init__.py +2 -1
- data/vendor/depot_tools/recipes/recipe_modules/gclient/api.py +82 -13
- data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +23 -11
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/basic.json +3 -4
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/revision.json +3 -6
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/tryserver.json +3 -4
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.py +7 -7
- data/vendor/depot_tools/recipes/recipe_modules/gclient/resources/diff_deps.py +16 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/test_api.py +4 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/basic.json +55 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/dont have revision yet.json +84 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/no change, exception.json +83 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/windows.json +55 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.py +88 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/patch_project.py +9 -21
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/sync_failure.py +24 -0
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/api.py +2 -1
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.expected/basic.json +7 -12
- data/vendor/depot_tools/recipes/recipe_modules/git/__init__.py +0 -2
- data/vendor/depot_tools/recipes/recipe_modules/git/api.py +9 -17
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_branch.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_file_name.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_hash.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_ref.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_submodule_update_force.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_tags.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/can_fail_build.json +3 -13
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cannot_fail_build.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cat-file_test.json +4 -12
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_delta.json +2 -10
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_failed.json +1 -7
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output.json +1 -7
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output_fails_build.json +0 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/curl_trace_file.json +3 -10
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/git-cache-checkout.json +3 -11
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/platform_win.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/rebase_failed.json +3 -13
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/remote_not_origin.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/set_got_revision.json +2 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.py +0 -5
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/__init__.py +1 -1
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/api.py +7 -13
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.expected/basic.json +21 -16
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.py +1 -2
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/api.py +1 -1
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.expected/basic.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/resources/gerrit_client.py +2 -2
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.expected/basic.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/api.py +23 -8
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.expected/basic.json +52 -1
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.py +15 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/__init__.py +1 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/api.py +32 -8
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/ancient_version.json +83 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/automatic_version.json +83 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/explicit_version.json +83 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/linux.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/mac.json +5 -4
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/win.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.py +21 -2
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/__init__.py +20 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/api.py +235 -3
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.expected/basic.json +13 -5
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.py +5 -1
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/properties.proto +14 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/test_api.py +19 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/tests/execute.py +247 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/tests/prepare.py +49 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +33 -45
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/basic_tags.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch.json +64 -21
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch_and_target_ref.json +64 -21
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +1 -22
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +1 -22
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.py +5 -32
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_fetch_ref_timeout.py +29 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_owner.expected/basic.json +5 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_owner.py +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_target_ref.py +32 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/linux.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/mac.json +0 -1
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/win.json +2 -1
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.py +1 -6
- data/vendor/depot_tools/recipes/recipes.py +49 -28
- data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +11 -6
- data/vendor/depot_tools/repo +698 -540
- data/vendor/depot_tools/roll-dep +14 -1
- data/vendor/depot_tools/roll-dep.bat +10 -1
- data/vendor/depot_tools/roll_dep.py +15 -10
- data/vendor/depot_tools/scm.py +95 -75
- data/vendor/depot_tools/setup_color.py +36 -2
- data/vendor/depot_tools/split_cl.py +44 -32
- data/vendor/depot_tools/subcommand.py +6 -6
- data/vendor/depot_tools/subprocess2.py +38 -322
- data/vendor/depot_tools/third_party/colorama/LICENSE.txt +0 -1
- data/vendor/depot_tools/third_party/colorama/README.chromium +4 -5
- data/vendor/depot_tools/third_party/colorama/README.rst +346 -0
- data/vendor/depot_tools/third_party/colorama/__init__.py +3 -4
- data/vendor/depot_tools/third_party/colorama/ansi.py +82 -30
- data/vendor/depot_tools/third_party/colorama/ansitowin32.py +105 -37
- data/vendor/depot_tools/third_party/colorama/initialise.py +39 -15
- data/vendor/depot_tools/third_party/colorama/win32.py +46 -28
- data/vendor/depot_tools/third_party/colorama/winterm.py +80 -31
- data/vendor/depot_tools/update_depot_tools +18 -8
- data/vendor/depot_tools/update_depot_tools.bat +19 -15
- data/vendor/depot_tools/upload_metrics.py +7 -6
- data/vendor/depot_tools/upload_to_google_storage.py +23 -16
- data/vendor/depot_tools/vpython +4 -4
- data/vendor/depot_tools/vpython.bat +1 -1
- data/vendor/depot_tools/vpython3 +55 -0
- data/vendor/depot_tools/vpython3.bat +12 -0
- data/vendor/depot_tools/watchlists.py +14 -11
- data/vendor/depot_tools/weekly +4 -2
- data/vendor/depot_tools/win32imports.py +61 -0
- data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +49 -41
- data/vendor/depot_tools/win_toolchain/package_from_installed.py +142 -149
- data/vendor/depot_tools/wtf +5 -3
- data/vendor/depot_tools/yapf +5 -1
- metadata +68 -343
- data/vendor/depot_tools/README.testing +0 -23
- data/vendor/depot_tools/annotated_gclient.py +0 -89
- data/vendor/depot_tools/appengine_mapper.py +0 -23
- data/vendor/depot_tools/bootstrap/win/manifest.txt +0 -20
- data/vendor/depot_tools/bootstrap/win/manifest_bleeding_edge.txt +0 -20
- data/vendor/depot_tools/bootstrap/win/pylint.new.bat +0 -7
- data/vendor/depot_tools/buildbucket.py +0 -186
- data/vendor/depot_tools/checkout.py +0 -431
- data/vendor/depot_tools/cros +0 -1
- data/vendor/depot_tools/dart_format.py +0 -58
- data/vendor/depot_tools/depot-tools-auth +0 -8
- data/vendor/depot_tools/depot-tools-auth.py +0 -102
- data/vendor/depot_tools/my_reviews.py +0 -396
- data/vendor/depot_tools/patch.py +0 -548
- data/vendor/depot_tools/pylint.py +0 -30
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/buildbot.json +0 -239
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_luci.json +0 -222
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/__init__.py +0 -4
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/api.py +0 -29
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/basic.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_linux.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_mac.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_win.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_linux.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_mac.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_win.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_linux.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_mac.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_win.json +0 -15
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.py +0 -33
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/path_config.py +0 -66
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/set_failure_hash_with_no_steps.json +0 -11
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch.json +0 -45
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch_luci.json +0 -45
- data/vendor/depot_tools/rietveld.py +0 -779
- data/vendor/depot_tools/roll-dep-svn +0 -8
- data/vendor/depot_tools/roll-dep-svn.bat +0 -12
- data/vendor/depot_tools/roll_dep_svn.py +0 -430
- data/vendor/depot_tools/support/chromite_wrapper +0 -96
- data/vendor/depot_tools/third_party/boto/LICENSE +0 -18
- data/vendor/depot_tools/third_party/boto/README.chromium +0 -43
- data/vendor/depot_tools/third_party/boto/README.rst +0 -163
- data/vendor/depot_tools/third_party/boto/__init__.py +0 -793
- data/vendor/depot_tools/third_party/boto/auth.py +0 -682
- data/vendor/depot_tools/third_party/boto/auth_handler.py +0 -58
- data/vendor/depot_tools/third_party/boto/cacerts/__init__.py +0 -22
- data/vendor/depot_tools/third_party/boto/cacerts/cacerts.txt +0 -2183
- data/vendor/depot_tools/third_party/boto/compat.py +0 -28
- data/vendor/depot_tools/third_party/boto/connection.py +0 -1081
- data/vendor/depot_tools/third_party/boto/contrib/__init__.py +0 -22
- data/vendor/depot_tools/third_party/boto/contrib/ymlmessage.py +0 -52
- data/vendor/depot_tools/third_party/boto/core/README +0 -58
- data/vendor/depot_tools/third_party/boto/core/__init__.py +0 -23
- data/vendor/depot_tools/third_party/boto/core/auth.py +0 -78
- data/vendor/depot_tools/third_party/boto/core/credentials.py +0 -154
- data/vendor/depot_tools/third_party/boto/core/dictresponse.py +0 -178
- data/vendor/depot_tools/third_party/boto/core/service.py +0 -67
- data/vendor/depot_tools/third_party/boto/datapipeline/__init__.py +0 -0
- data/vendor/depot_tools/third_party/boto/datapipeline/exceptions.py +0 -42
- data/vendor/depot_tools/third_party/boto/datapipeline/layer1.py +0 -546
- data/vendor/depot_tools/third_party/boto/ecs/__init__.py +0 -90
- data/vendor/depot_tools/third_party/boto/ecs/item.py +0 -153
- data/vendor/depot_tools/third_party/boto/exception.py +0 -476
- data/vendor/depot_tools/third_party/boto/file/README +0 -49
- data/vendor/depot_tools/third_party/boto/file/__init__.py +0 -28
- data/vendor/depot_tools/third_party/boto/file/bucket.py +0 -112
- data/vendor/depot_tools/third_party/boto/file/connection.py +0 -33
- data/vendor/depot_tools/third_party/boto/file/key.py +0 -199
- data/vendor/depot_tools/third_party/boto/file/simpleresultset.py +0 -30
- data/vendor/depot_tools/third_party/boto/fps/__init__.py +0 -21
- data/vendor/depot_tools/third_party/boto/fps/connection.py +0 -369
- data/vendor/depot_tools/third_party/boto/fps/exception.py +0 -344
- data/vendor/depot_tools/third_party/boto/fps/response.py +0 -175
- data/vendor/depot_tools/third_party/boto/gs/__init__.py +0 -22
- data/vendor/depot_tools/third_party/boto/gs/acl.py +0 -304
- data/vendor/depot_tools/third_party/boto/gs/bucket.py +0 -870
- data/vendor/depot_tools/third_party/boto/gs/bucketlistresultset.py +0 -64
- data/vendor/depot_tools/third_party/boto/gs/connection.py +0 -103
- data/vendor/depot_tools/third_party/boto/gs/cors.py +0 -169
- data/vendor/depot_tools/third_party/boto/gs/key.py +0 -704
- data/vendor/depot_tools/third_party/boto/gs/resumable_upload_handler.py +0 -659
- data/vendor/depot_tools/third_party/boto/gs/user.py +0 -54
- data/vendor/depot_tools/third_party/boto/handler.py +0 -44
- data/vendor/depot_tools/third_party/boto/https_connection.py +0 -124
- data/vendor/depot_tools/third_party/boto/jsonresponse.py +0 -163
- data/vendor/depot_tools/third_party/boto/manage/__init__.py +0 -23
- data/vendor/depot_tools/third_party/boto/manage/cmdshell.py +0 -241
- data/vendor/depot_tools/third_party/boto/manage/propget.py +0 -64
- data/vendor/depot_tools/third_party/boto/manage/server.py +0 -556
- data/vendor/depot_tools/third_party/boto/manage/task.py +0 -175
- data/vendor/depot_tools/third_party/boto/manage/test_manage.py +0 -34
- data/vendor/depot_tools/third_party/boto/manage/volume.py +0 -420
- data/vendor/depot_tools/third_party/boto/mashups/__init__.py +0 -23
- data/vendor/depot_tools/third_party/boto/mashups/interactive.py +0 -97
- data/vendor/depot_tools/third_party/boto/mashups/iobject.py +0 -115
- data/vendor/depot_tools/third_party/boto/mashups/order.py +0 -211
- data/vendor/depot_tools/third_party/boto/mashups/server.py +0 -395
- data/vendor/depot_tools/third_party/boto/plugin.py +0 -90
- data/vendor/depot_tools/third_party/boto/provider.py +0 -337
- data/vendor/depot_tools/third_party/boto/pyami/__init__.py +0 -22
- data/vendor/depot_tools/third_party/boto/pyami/bootstrap.py +0 -134
- data/vendor/depot_tools/third_party/boto/pyami/config.py +0 -229
- data/vendor/depot_tools/third_party/boto/pyami/copybot.cfg +0 -60
- data/vendor/depot_tools/third_party/boto/pyami/copybot.py +0 -97
- data/vendor/depot_tools/third_party/boto/pyami/helloworld.py +0 -28
- data/vendor/depot_tools/third_party/boto/pyami/launch_ami.py +0 -178
- data/vendor/depot_tools/third_party/boto/pyami/scriptbase.py +0 -44
- data/vendor/depot_tools/third_party/boto/pyami/startup.py +0 -60
- data/vendor/depot_tools/third_party/boto/regioninfo.py +0 -63
- data/vendor/depot_tools/third_party/boto/resultset.py +0 -169
- data/vendor/depot_tools/third_party/boto/roboto/__init__.py +0 -1
- data/vendor/depot_tools/third_party/boto/roboto/awsqueryrequest.py +0 -504
- data/vendor/depot_tools/third_party/boto/roboto/awsqueryservice.py +0 -121
- data/vendor/depot_tools/third_party/boto/roboto/param.py +0 -147
- data/vendor/depot_tools/third_party/boto/s3/__init__.py +0 -84
- data/vendor/depot_tools/third_party/boto/s3/acl.py +0 -164
- data/vendor/depot_tools/third_party/boto/s3/bucket.py +0 -1634
- data/vendor/depot_tools/third_party/boto/s3/bucketlistresultset.py +0 -139
- data/vendor/depot_tools/third_party/boto/s3/bucketlogging.py +0 -83
- data/vendor/depot_tools/third_party/boto/s3/connection.py +0 -540
- data/vendor/depot_tools/third_party/boto/s3/cors.py +0 -210
- data/vendor/depot_tools/third_party/boto/s3/deletemarker.py +0 -55
- data/vendor/depot_tools/third_party/boto/s3/key.py +0 -1712
- data/vendor/depot_tools/third_party/boto/s3/keyfile.py +0 -134
- data/vendor/depot_tools/third_party/boto/s3/lifecycle.py +0 -231
- data/vendor/depot_tools/third_party/boto/s3/multidelete.py +0 -138
- data/vendor/depot_tools/third_party/boto/s3/multipart.py +0 -315
- data/vendor/depot_tools/third_party/boto/s3/prefix.py +0 -42
- data/vendor/depot_tools/third_party/boto/s3/resumable_download_handler.py +0 -339
- data/vendor/depot_tools/third_party/boto/s3/tagging.py +0 -71
- data/vendor/depot_tools/third_party/boto/s3/user.py +0 -49
- data/vendor/depot_tools/third_party/boto/s3/website.py +0 -237
- data/vendor/depot_tools/third_party/boto/services/__init__.py +0 -23
- data/vendor/depot_tools/third_party/boto/services/bs.py +0 -179
- data/vendor/depot_tools/third_party/boto/services/message.py +0 -58
- data/vendor/depot_tools/third_party/boto/services/result.py +0 -136
- data/vendor/depot_tools/third_party/boto/services/service.py +0 -161
- data/vendor/depot_tools/third_party/boto/services/servicedef.py +0 -91
- data/vendor/depot_tools/third_party/boto/services/sonofmmm.cfg +0 -43
- data/vendor/depot_tools/third_party/boto/services/sonofmmm.py +0 -81
- data/vendor/depot_tools/third_party/boto/services/submit.py +0 -88
- data/vendor/depot_tools/third_party/boto/ses/__init__.py +0 -54
- data/vendor/depot_tools/third_party/boto/ses/connection.py +0 -521
- data/vendor/depot_tools/third_party/boto/ses/exceptions.py +0 -77
- data/vendor/depot_tools/third_party/boto/storage_uri.py +0 -835
- data/vendor/depot_tools/third_party/boto/sts/__init__.py +0 -55
- data/vendor/depot_tools/third_party/boto/sts/connection.py +0 -207
- data/vendor/depot_tools/third_party/boto/sts/credentials.py +0 -215
- data/vendor/depot_tools/third_party/boto/utils.py +0 -927
- data/vendor/depot_tools/third_party/colorama/README.txt +0 -304
- data/vendor/depot_tools/third_party/fancy_urllib/README +0 -22
- data/vendor/depot_tools/third_party/fancy_urllib/__init__.py +0 -460
- data/vendor/depot_tools/third_party/logilab/README.chromium +0 -6
- data/vendor/depot_tools/third_party/logilab/__init__.py +0 -0
- data/vendor/depot_tools/third_party/logilab/astroid/LICENSE.txt +0 -340
- data/vendor/depot_tools/third_party/logilab/astroid/README.chromium +0 -11
- data/vendor/depot_tools/third_party/logilab/astroid/__init__.py +0 -136
- data/vendor/depot_tools/third_party/logilab/astroid/__pkginfo__.py +0 -42
- data/vendor/depot_tools/third_party/logilab/astroid/arguments.py +0 -233
- data/vendor/depot_tools/third_party/logilab/astroid/as_string.py +0 -548
- data/vendor/depot_tools/third_party/logilab/astroid/astpeephole.py +0 -86
- data/vendor/depot_tools/third_party/logilab/astroid/bases.py +0 -636
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_builtin_inference.py +0 -336
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_dateutil.py +0 -15
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_gi.py +0 -195
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_mechanize.py +0 -18
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_nose.py +0 -82
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_numpy.py +0 -62
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_pytest.py +0 -76
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_qt.py +0 -44
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_six.py +0 -288
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_ssl.py +0 -65
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_stdlib.py +0 -473
- data/vendor/depot_tools/third_party/logilab/astroid/builder.py +0 -263
- data/vendor/depot_tools/third_party/logilab/astroid/context.py +0 -81
- data/vendor/depot_tools/third_party/logilab/astroid/decorators.py +0 -75
- data/vendor/depot_tools/third_party/logilab/astroid/exceptions.py +0 -71
- data/vendor/depot_tools/third_party/logilab/astroid/inference.py +0 -359
- data/vendor/depot_tools/third_party/logilab/astroid/manager.py +0 -267
- data/vendor/depot_tools/third_party/logilab/astroid/mixins.py +0 -147
- data/vendor/depot_tools/third_party/logilab/astroid/modutils.py +0 -741
- data/vendor/depot_tools/third_party/logilab/astroid/node_classes.py +0 -1053
- data/vendor/depot_tools/third_party/logilab/astroid/nodes.py +0 -87
- data/vendor/depot_tools/third_party/logilab/astroid/objects.py +0 -186
- data/vendor/depot_tools/third_party/logilab/astroid/protocols.py +0 -470
- data/vendor/depot_tools/third_party/logilab/astroid/raw_building.py +0 -390
- data/vendor/depot_tools/third_party/logilab/astroid/rebuilder.py +0 -989
- data/vendor/depot_tools/third_party/logilab/astroid/scoped_nodes.py +0 -1716
- data/vendor/depot_tools/third_party/logilab/astroid/test_utils.py +0 -201
- data/vendor/depot_tools/third_party/logilab/astroid/transforms.py +0 -96
- data/vendor/depot_tools/third_party/logilab/astroid/util.py +0 -89
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/LICENSE +0 -19
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/README.chromium +0 -11
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/__init__.py +0 -20
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/cext.c +0 -1421
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/compat.py +0 -9
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/simple.py +0 -246
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/slots.py +0 -414
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/utils.py +0 -13
- data/vendor/depot_tools/third_party/logilab/wrapt/LICENSE +0 -24
- data/vendor/depot_tools/third_party/logilab/wrapt/README.chromium +0 -11
- data/vendor/depot_tools/third_party/logilab/wrapt/__init__.py +0 -19
- data/vendor/depot_tools/third_party/logilab/wrapt/_wrappers.c +0 -2729
- data/vendor/depot_tools/third_party/logilab/wrapt/arguments.py +0 -96
- data/vendor/depot_tools/third_party/logilab/wrapt/decorators.py +0 -512
- data/vendor/depot_tools/third_party/logilab/wrapt/importer.py +0 -228
- data/vendor/depot_tools/third_party/logilab/wrapt/wrappers.py +0 -901
- data/vendor/depot_tools/third_party/mock/LICENSE.txt +0 -26
- data/vendor/depot_tools/third_party/mock/README.chromium +0 -24
- data/vendor/depot_tools/third_party/mock/__init__.py +0 -2366
- data/vendor/depot_tools/third_party/oauth2client/LICENSE +0 -202
- data/vendor/depot_tools/third_party/oauth2client/MODIFICATIONS.diff +0 -66
- data/vendor/depot_tools/third_party/oauth2client/README.chromium +0 -15
- data/vendor/depot_tools/third_party/oauth2client/__init__.py +0 -5
- data/vendor/depot_tools/third_party/oauth2client/anyjson.py +0 -32
- data/vendor/depot_tools/third_party/oauth2client/appengine.py +0 -963
- data/vendor/depot_tools/third_party/oauth2client/client.py +0 -1363
- data/vendor/depot_tools/third_party/oauth2client/clientsecrets.py +0 -153
- data/vendor/depot_tools/third_party/oauth2client/crypt.py +0 -377
- data/vendor/depot_tools/third_party/oauth2client/django_orm.py +0 -134
- data/vendor/depot_tools/third_party/oauth2client/file.py +0 -124
- data/vendor/depot_tools/third_party/oauth2client/gce.py +0 -90
- data/vendor/depot_tools/third_party/oauth2client/keyring_storage.py +0 -109
- data/vendor/depot_tools/third_party/oauth2client/locked_file.py +0 -373
- data/vendor/depot_tools/third_party/oauth2client/multistore_file.py +0 -465
- data/vendor/depot_tools/third_party/oauth2client/old_run.py +0 -160
- data/vendor/depot_tools/third_party/oauth2client/tools.py +0 -243
- data/vendor/depot_tools/third_party/oauth2client/util.py +0 -196
- data/vendor/depot_tools/third_party/oauth2client/xsrfutil.py +0 -113
- data/vendor/depot_tools/third_party/protobuf26/README.chromium +0 -23
- data/vendor/depot_tools/third_party/protobuf26/__init__.py +0 -0
- data/vendor/depot_tools/third_party/protobuf26/compiler/__init__.py +0 -0
- data/vendor/depot_tools/third_party/protobuf26/compiler/plugin_pb2.py +0 -184
- data/vendor/depot_tools/third_party/protobuf26/descriptor.py +0 -849
- data/vendor/depot_tools/third_party/protobuf26/descriptor_database.py +0 -137
- data/vendor/depot_tools/third_party/protobuf26/descriptor_pb2.py +0 -1522
- data/vendor/depot_tools/third_party/protobuf26/descriptor_pool.py +0 -643
- data/vendor/depot_tools/third_party/protobuf26/internal/__init__.py +0 -0
- data/vendor/depot_tools/third_party/protobuf26/internal/api_implementation.py +0 -89
- data/vendor/depot_tools/third_party/protobuf26/internal/containers.py +0 -269
- data/vendor/depot_tools/third_party/protobuf26/internal/cpp_message.py +0 -663
- data/vendor/depot_tools/third_party/protobuf26/internal/decoder.py +0 -831
- data/vendor/depot_tools/third_party/protobuf26/internal/encoder.py +0 -788
- data/vendor/depot_tools/third_party/protobuf26/internal/enum_type_wrapper.py +0 -89
- data/vendor/depot_tools/third_party/protobuf26/internal/message_listener.py +0 -78
- data/vendor/depot_tools/third_party/protobuf26/internal/python_message.py +0 -1247
- data/vendor/depot_tools/third_party/protobuf26/internal/type_checkers.py +0 -328
- data/vendor/depot_tools/third_party/protobuf26/internal/wire_format.py +0 -268
- data/vendor/depot_tools/third_party/protobuf26/message.py +0 -284
- data/vendor/depot_tools/third_party/protobuf26/message_factory.py +0 -155
- data/vendor/depot_tools/third_party/protobuf26/reflection.py +0 -205
- data/vendor/depot_tools/third_party/protobuf26/service.py +0 -226
- data/vendor/depot_tools/third_party/protobuf26/service_reflection.py +0 -284
- data/vendor/depot_tools/third_party/protobuf26/symbol_database.py +0 -185
- data/vendor/depot_tools/third_party/protobuf26/text_encoding.py +0 -110
- data/vendor/depot_tools/third_party/protobuf26/text_format.py +0 -873
- data/vendor/depot_tools/third_party/pylint.py +0 -37
- data/vendor/depot_tools/third_party/pylint/LICENSE.txt +0 -340
- data/vendor/depot_tools/third_party/pylint/README.chromium +0 -30
- data/vendor/depot_tools/third_party/pylint/__init__.py +0 -46
- data/vendor/depot_tools/third_party/pylint/__main__.py +0 -3
- data/vendor/depot_tools/third_party/pylint/__pkginfo__.py +0 -80
- data/vendor/depot_tools/third_party/pylint/checkers/__init__.py +0 -123
- data/vendor/depot_tools/third_party/pylint/checkers/async.py +0 -82
- data/vendor/depot_tools/third_party/pylint/checkers/base.py +0 -2010
- data/vendor/depot_tools/third_party/pylint/checkers/classes.py +0 -1120
- data/vendor/depot_tools/third_party/pylint/checkers/design_analysis.py +0 -348
- data/vendor/depot_tools/third_party/pylint/checkers/exceptions.py +0 -369
- data/vendor/depot_tools/third_party/pylint/checkers/format.py +0 -993
- data/vendor/depot_tools/third_party/pylint/checkers/imports.py +0 -654
- data/vendor/depot_tools/third_party/pylint/checkers/logging.py +0 -258
- data/vendor/depot_tools/third_party/pylint/checkers/misc.py +0 -105
- data/vendor/depot_tools/third_party/pylint/checkers/newstyle.py +0 -169
- data/vendor/depot_tools/third_party/pylint/checkers/python3.py +0 -591
- data/vendor/depot_tools/third_party/pylint/checkers/raw_metrics.py +0 -129
- data/vendor/depot_tools/third_party/pylint/checkers/similar.py +0 -371
- data/vendor/depot_tools/third_party/pylint/checkers/spelling.py +0 -264
- data/vendor/depot_tools/third_party/pylint/checkers/stdlib.py +0 -280
- data/vendor/depot_tools/third_party/pylint/checkers/strings.py +0 -618
- data/vendor/depot_tools/third_party/pylint/checkers/typecheck.py +0 -974
- data/vendor/depot_tools/third_party/pylint/checkers/utils.py +0 -741
- data/vendor/depot_tools/third_party/pylint/checkers/variables.py +0 -1191
- data/vendor/depot_tools/third_party/pylint/config.py +0 -820
- data/vendor/depot_tools/third_party/pylint/epylint.py +0 -181
- data/vendor/depot_tools/third_party/pylint/extensions/__init__.py +0 -0
- data/vendor/depot_tools/third_party/pylint/extensions/check_docs.py +0 -311
- data/vendor/depot_tools/third_party/pylint/extensions/check_elif.py +0 -62
- data/vendor/depot_tools/third_party/pylint/graph.py +0 -179
- data/vendor/depot_tools/third_party/pylint/gui.py +0 -531
- data/vendor/depot_tools/third_party/pylint/interfaces.py +0 -102
- data/vendor/depot_tools/third_party/pylint/lint.py +0 -1381
- data/vendor/depot_tools/third_party/pylint/pyreverse/__init__.py +0 -5
- data/vendor/depot_tools/third_party/pylint/pyreverse/diadefslib.py +0 -230
- data/vendor/depot_tools/third_party/pylint/pyreverse/diagrams.py +0 -258
- data/vendor/depot_tools/third_party/pylint/pyreverse/inspector.py +0 -372
- data/vendor/depot_tools/third_party/pylint/pyreverse/main.py +0 -147
- data/vendor/depot_tools/third_party/pylint/pyreverse/utils.py +0 -210
- data/vendor/depot_tools/third_party/pylint/pyreverse/vcgutils.py +0 -198
- data/vendor/depot_tools/third_party/pylint/pyreverse/writer.py +0 -198
- data/vendor/depot_tools/third_party/pylint/reporters/__init__.py +0 -149
- data/vendor/depot_tools/third_party/pylint/reporters/guireporter.py +0 -27
- data/vendor/depot_tools/third_party/pylint/reporters/html.py +0 -108
- data/vendor/depot_tools/third_party/pylint/reporters/json.py +0 -64
- data/vendor/depot_tools/third_party/pylint/reporters/text.py +0 -237
- data/vendor/depot_tools/third_party/pylint/reporters/ureports/__init__.py +0 -106
- data/vendor/depot_tools/third_party/pylint/reporters/ureports/html_writer.py +0 -93
- data/vendor/depot_tools/third_party/pylint/reporters/ureports/nodes.py +0 -181
- data/vendor/depot_tools/third_party/pylint/reporters/ureports/text_writer.py +0 -99
- data/vendor/depot_tools/third_party/pylint/testutils.py +0 -414
- data/vendor/depot_tools/third_party/pylint/utils.py +0 -1148
- data/vendor/depot_tools/third_party/pymox/COPYING +0 -202
- data/vendor/depot_tools/third_party/pymox/MANIFEST.in +0 -5
- data/vendor/depot_tools/third_party/pymox/README +0 -56
- data/vendor/depot_tools/third_party/pymox/__init__.py +0 -0
- data/vendor/depot_tools/third_party/pymox/mox.py +0 -1643
- data/vendor/depot_tools/third_party/pymox/mox_test.py +0 -1708
- data/vendor/depot_tools/third_party/pymox/mox_test_helper.py +0 -76
- data/vendor/depot_tools/third_party/pymox/setup.py +0 -14
- data/vendor/depot_tools/third_party/pymox/stubout.py +0 -142
- data/vendor/depot_tools/third_party/pymox/stubout_test.py +0 -47
- data/vendor/depot_tools/third_party/pymox/stubout_testee.py +0 -2
- data/vendor/depot_tools/third_party/simplejson/LICENSE.txt +0 -19
- data/vendor/depot_tools/third_party/simplejson/PKG-INFO +0 -29
- data/vendor/depot_tools/third_party/simplejson/__init__.py +0 -437
- data/vendor/depot_tools/third_party/simplejson/decoder.py +0 -421
- data/vendor/depot_tools/third_party/simplejson/encoder.py +0 -501
- data/vendor/depot_tools/third_party/simplejson/ordered_dict.py +0 -119
- data/vendor/depot_tools/third_party/simplejson/scanner.py +0 -77
- data/vendor/depot_tools/third_party/simplejson/tool.py +0 -39
- data/vendor/depot_tools/third_party/upload.py +0 -2565
data/vendor/depot_tools/git-cl
CHANGED
data/vendor/depot_tools/git-map
CHANGED
data/vendor/depot_tools/git-thaw
CHANGED
|
@@ -13,21 +13,20 @@ import logging
|
|
|
13
13
|
import optparse
|
|
14
14
|
import os
|
|
15
15
|
import re
|
|
16
|
+
import subprocess
|
|
17
|
+
import sys
|
|
16
18
|
import tempfile
|
|
17
19
|
import threading
|
|
18
20
|
import time
|
|
19
|
-
import subprocess
|
|
20
|
-
import sys
|
|
21
21
|
|
|
22
22
|
try:
|
|
23
23
|
import urlparse
|
|
24
24
|
except ImportError: # For Py3 compatibility
|
|
25
25
|
import urllib.parse as urlparse
|
|
26
26
|
|
|
27
|
-
import zipfile
|
|
28
|
-
|
|
29
27
|
from download_from_google_storage import Gsutil
|
|
30
28
|
import gclient_utils
|
|
29
|
+
import lockfile
|
|
31
30
|
import subcommand
|
|
32
31
|
|
|
33
32
|
# Analogous to gc.autopacklimit git config.
|
|
@@ -42,9 +41,6 @@ except NameError:
|
|
|
42
41
|
class WinErr(Exception):
|
|
43
42
|
pass
|
|
44
43
|
|
|
45
|
-
class LockError(Exception):
|
|
46
|
-
pass
|
|
47
|
-
|
|
48
44
|
class ClobberNeeded(Exception):
|
|
49
45
|
pass
|
|
50
46
|
|
|
@@ -71,7 +67,7 @@ def exponential_backoff_retry(fn, excs=(Exception,), name=None, count=10,
|
|
|
71
67
|
Returns: The return value of the successful fn.
|
|
72
68
|
"""
|
|
73
69
|
printerr = printerr or logging.warning
|
|
74
|
-
for i in
|
|
70
|
+
for i in range(count):
|
|
75
71
|
try:
|
|
76
72
|
return fn()
|
|
77
73
|
except excs as e:
|
|
@@ -84,116 +80,6 @@ def exponential_backoff_retry(fn, excs=(Exception,), name=None, count=10,
|
|
|
84
80
|
sleep_time *= 2
|
|
85
81
|
|
|
86
82
|
|
|
87
|
-
class Lockfile(object):
|
|
88
|
-
"""Class to represent a cross-platform process-specific lockfile."""
|
|
89
|
-
|
|
90
|
-
def __init__(self, path, timeout=0):
|
|
91
|
-
self.path = os.path.abspath(path)
|
|
92
|
-
self.timeout = timeout
|
|
93
|
-
self.lockfile = self.path + ".lock"
|
|
94
|
-
self.pid = os.getpid()
|
|
95
|
-
|
|
96
|
-
def _read_pid(self):
|
|
97
|
-
"""Read the pid stored in the lockfile.
|
|
98
|
-
|
|
99
|
-
Note: This method is potentially racy. By the time it returns the lockfile
|
|
100
|
-
may have been unlocked, removed, or stolen by some other process.
|
|
101
|
-
"""
|
|
102
|
-
try:
|
|
103
|
-
with open(self.lockfile, 'r') as f:
|
|
104
|
-
pid = int(f.readline().strip())
|
|
105
|
-
except (IOError, ValueError):
|
|
106
|
-
pid = None
|
|
107
|
-
return pid
|
|
108
|
-
|
|
109
|
-
def _make_lockfile(self):
|
|
110
|
-
"""Safely creates a lockfile containing the current pid."""
|
|
111
|
-
open_flags = (os.O_CREAT | os.O_EXCL | os.O_WRONLY)
|
|
112
|
-
fd = os.open(self.lockfile, open_flags, 0o644)
|
|
113
|
-
f = os.fdopen(fd, 'w')
|
|
114
|
-
print(self.pid, file=f)
|
|
115
|
-
f.close()
|
|
116
|
-
|
|
117
|
-
def _remove_lockfile(self):
|
|
118
|
-
"""Delete the lockfile. Complains (implicitly) if it doesn't exist.
|
|
119
|
-
|
|
120
|
-
See gclient_utils.py:rmtree docstring for more explanation on the
|
|
121
|
-
windows case.
|
|
122
|
-
"""
|
|
123
|
-
if sys.platform == 'win32':
|
|
124
|
-
lockfile = os.path.normcase(self.lockfile)
|
|
125
|
-
|
|
126
|
-
def delete():
|
|
127
|
-
exitcode = subprocess.call(['cmd.exe', '/c',
|
|
128
|
-
'del', '/f', '/q', lockfile])
|
|
129
|
-
if exitcode != 0:
|
|
130
|
-
raise LockError('Failed to remove lock: %s' % (lockfile,))
|
|
131
|
-
exponential_backoff_retry(
|
|
132
|
-
delete,
|
|
133
|
-
excs=(LockError,),
|
|
134
|
-
name='del [%s]' % (lockfile,))
|
|
135
|
-
else:
|
|
136
|
-
os.remove(self.lockfile)
|
|
137
|
-
|
|
138
|
-
def lock(self):
|
|
139
|
-
"""Acquire the lock.
|
|
140
|
-
|
|
141
|
-
This will block with a deadline of self.timeout seconds.
|
|
142
|
-
"""
|
|
143
|
-
elapsed = 0
|
|
144
|
-
while True:
|
|
145
|
-
try:
|
|
146
|
-
self._make_lockfile()
|
|
147
|
-
return
|
|
148
|
-
except OSError as e:
|
|
149
|
-
if elapsed < self.timeout:
|
|
150
|
-
sleep_time = max(10, min(3, self.timeout - elapsed))
|
|
151
|
-
logging.info('Could not create git cache lockfile; '
|
|
152
|
-
'will retry after sleep(%d).', sleep_time);
|
|
153
|
-
elapsed += sleep_time
|
|
154
|
-
time.sleep(sleep_time)
|
|
155
|
-
continue
|
|
156
|
-
if e.errno == errno.EEXIST:
|
|
157
|
-
raise LockError("%s is already locked" % self.path)
|
|
158
|
-
else:
|
|
159
|
-
raise LockError("Failed to create %s (err %s)" % (self.path, e.errno))
|
|
160
|
-
|
|
161
|
-
def unlock(self):
|
|
162
|
-
"""Release the lock."""
|
|
163
|
-
try:
|
|
164
|
-
if not self.is_locked():
|
|
165
|
-
raise LockError("%s is not locked" % self.path)
|
|
166
|
-
if not self.i_am_locking():
|
|
167
|
-
raise LockError("%s is locked, but not by me" % self.path)
|
|
168
|
-
self._remove_lockfile()
|
|
169
|
-
except WinErr:
|
|
170
|
-
# Windows is unreliable when it comes to file locking. YMMV.
|
|
171
|
-
pass
|
|
172
|
-
|
|
173
|
-
def break_lock(self):
|
|
174
|
-
"""Remove the lock, even if it was created by someone else."""
|
|
175
|
-
try:
|
|
176
|
-
self._remove_lockfile()
|
|
177
|
-
return True
|
|
178
|
-
except OSError as exc:
|
|
179
|
-
if exc.errno == errno.ENOENT:
|
|
180
|
-
return False
|
|
181
|
-
else:
|
|
182
|
-
raise
|
|
183
|
-
|
|
184
|
-
def is_locked(self):
|
|
185
|
-
"""Test if the file is locked by anyone.
|
|
186
|
-
|
|
187
|
-
Note: This method is potentially racy. By the time it returns the lockfile
|
|
188
|
-
may have been unlocked, removed, or stolen by some other process.
|
|
189
|
-
"""
|
|
190
|
-
return os.path.exists(self.lockfile)
|
|
191
|
-
|
|
192
|
-
def i_am_locking(self):
|
|
193
|
-
"""Test if the file is locked by this process."""
|
|
194
|
-
return self.is_locked() and self.pid == self._read_pid()
|
|
195
|
-
|
|
196
|
-
|
|
197
83
|
class Mirror(object):
|
|
198
84
|
|
|
199
85
|
git_exe = 'git.bat' if sys.platform.startswith('win') else 'git'
|
|
@@ -251,13 +137,13 @@ class Mirror(object):
|
|
|
251
137
|
u = urlparse.urlparse(self.url)
|
|
252
138
|
if u.netloc == 'chromium.googlesource.com':
|
|
253
139
|
return 'chromium-git-cache'
|
|
254
|
-
# TODO(tandrii): delete once LUCI migration is completed.
|
|
255
|
-
# Only public hosts will be supported going forward.
|
|
256
|
-
elif u.netloc == 'chrome-internal.googlesource.com':
|
|
257
|
-
return 'chrome-git-cache'
|
|
258
140
|
# Not recognized.
|
|
259
141
|
return None
|
|
260
142
|
|
|
143
|
+
@property
|
|
144
|
+
def _gs_path(self):
|
|
145
|
+
return 'gs://%s/v2/%s' % (self.bootstrap_bucket, self.basedir)
|
|
146
|
+
|
|
261
147
|
@classmethod
|
|
262
148
|
def FromPath(cls, path):
|
|
263
149
|
return cls(cls.CacheDirToUrl(path))
|
|
@@ -265,6 +151,11 @@ class Mirror(object):
|
|
|
265
151
|
@staticmethod
|
|
266
152
|
def UrlToCacheDir(url):
|
|
267
153
|
"""Convert a git url to a normalized form for the cache dir path."""
|
|
154
|
+
if os.path.isdir(url):
|
|
155
|
+
# Ignore the drive letter in Windows
|
|
156
|
+
url = os.path.splitdrive(url)[1]
|
|
157
|
+
return url.replace('-', '--').replace(os.sep, '-')
|
|
158
|
+
|
|
268
159
|
parsed = urlparse.urlparse(url)
|
|
269
160
|
norm_url = parsed.netloc + parsed.path
|
|
270
161
|
if norm_url.endswith('.git'):
|
|
@@ -294,7 +185,7 @@ class Mirror(object):
|
|
|
294
185
|
cachepath = subprocess.check_output(
|
|
295
186
|
[cls.git_exe, 'config'] +
|
|
296
187
|
cls._GIT_CONFIG_LOCATION +
|
|
297
|
-
['cache.cachepath']).strip()
|
|
188
|
+
['cache.cachepath']).decode('utf-8', 'ignore').strip()
|
|
298
189
|
except subprocess.CalledProcessError:
|
|
299
190
|
cachepath = os.environ.get('GIT_CACHE_PATH', cls.UNSET_CACHEPATH)
|
|
300
191
|
setattr(cls, 'cachepath', cachepath)
|
|
@@ -305,6 +196,23 @@ class Mirror(object):
|
|
|
305
196
|
'$GIT_CACHE_PATH is set.')
|
|
306
197
|
return ret
|
|
307
198
|
|
|
199
|
+
@staticmethod
|
|
200
|
+
def _GetMostRecentCacheDirectory(ls_out_set):
|
|
201
|
+
ready_file_pattern = re.compile(r'.*/(\d+).ready$')
|
|
202
|
+
ready_dirs = []
|
|
203
|
+
|
|
204
|
+
for name in ls_out_set:
|
|
205
|
+
m = ready_file_pattern.match(name)
|
|
206
|
+
# Given <path>/<number>.ready,
|
|
207
|
+
# we are interested in <path>/<number> directory
|
|
208
|
+
if m and (name[:-len('.ready')] + '/') in ls_out_set:
|
|
209
|
+
ready_dirs.append((int(m.group(1)), name[:-len('.ready')]))
|
|
210
|
+
|
|
211
|
+
if not ready_dirs:
|
|
212
|
+
return None
|
|
213
|
+
|
|
214
|
+
return max(ready_dirs)[1]
|
|
215
|
+
|
|
308
216
|
def Rename(self, src, dst):
|
|
309
217
|
# This is somehow racy on Windows.
|
|
310
218
|
# Catching OSError because WindowsError isn't portable and
|
|
@@ -372,87 +280,42 @@ class Mirror(object):
|
|
|
372
280
|
"""
|
|
373
281
|
if not self.bootstrap_bucket:
|
|
374
282
|
return False
|
|
375
|
-
|
|
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
|
-
)
|
|
381
|
-
|
|
382
|
-
gs_folder = 'gs://%s/%s' % (self.bootstrap_bucket, self.basedir)
|
|
283
|
+
|
|
383
284
|
gsutil = Gsutil(self.gsutil_exe, boto_path=None)
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
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)
|
|
403
|
-
if not ls_out_sorted:
|
|
404
|
-
# This repo is not on Google Storage.
|
|
285
|
+
|
|
286
|
+
# Get the most recent version of the directory.
|
|
287
|
+
# This is determined from the most recent version of a .ready file.
|
|
288
|
+
# The .ready file is only uploaded when an entire directory has been
|
|
289
|
+
# uploaded to GS.
|
|
290
|
+
_, ls_out, ls_err = gsutil.check_call('ls', self._gs_path)
|
|
291
|
+
ls_out_set = set(ls_out.strip().splitlines())
|
|
292
|
+
latest_dir = self._GetMostRecentCacheDirectory(ls_out_set)
|
|
293
|
+
|
|
294
|
+
if not latest_dir:
|
|
405
295
|
self.print('No bootstrap file for %s found in %s, stderr:\n %s' %
|
|
406
296
|
(self.mirror_path, self.bootstrap_bucket,
|
|
407
|
-
|
|
297
|
+
' '.join((ls_err or '').splitlines(True))))
|
|
408
298
|
return False
|
|
409
|
-
latest_checkout = ls_out_sorted[-1]
|
|
410
299
|
|
|
411
|
-
# Download zip file to a temporary directory.
|
|
412
300
|
try:
|
|
301
|
+
# create new temporary directory locally
|
|
413
302
|
tempdir = tempfile.mkdtemp(prefix='_cache_tmp', dir=self.GetCachePath())
|
|
414
|
-
self.
|
|
303
|
+
self.RunGit(['init', '--bare'], cwd=tempdir)
|
|
304
|
+
self.print('Downloading files in %s/* into %s.' %
|
|
305
|
+
(latest_dir, tempdir))
|
|
415
306
|
with self.print_duration_of('download'):
|
|
416
|
-
code = gsutil.call('cp',
|
|
307
|
+
code = gsutil.call('-m', 'cp', '-r', latest_dir + "/*",
|
|
308
|
+
tempdir)
|
|
417
309
|
if code:
|
|
418
310
|
return False
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
with self.print_duration_of('unzip'):
|
|
423
|
-
if not python_fallback:
|
|
424
|
-
if sys.platform.startswith('win'):
|
|
425
|
-
cmd = ['7z', 'x', '-o%s' % directory, '-tzip', filename]
|
|
426
|
-
else:
|
|
427
|
-
cmd = ['unzip', filename, '-d', directory]
|
|
428
|
-
retcode = subprocess.call(cmd)
|
|
429
|
-
else:
|
|
430
|
-
try:
|
|
431
|
-
with zipfile.ZipFile(filename, 'r') as f:
|
|
432
|
-
f.printdir()
|
|
433
|
-
f.extractall(directory)
|
|
434
|
-
except Exception as e:
|
|
435
|
-
self.print('Encountered error: %s' % str(e), file=sys.stderr)
|
|
436
|
-
retcode = 1
|
|
437
|
-
else:
|
|
438
|
-
retcode = 0
|
|
439
|
-
finally:
|
|
440
|
-
# Clean up the downloaded zipfile.
|
|
441
|
-
#
|
|
442
|
-
# This is somehow racy on Windows.
|
|
443
|
-
# Catching OSError because WindowsError isn't portable and
|
|
444
|
-
# pylint complains.
|
|
445
|
-
exponential_backoff_retry(
|
|
446
|
-
lambda: gclient_utils.rm_file_or_tree(tempdir),
|
|
447
|
-
excs=(OSError,),
|
|
448
|
-
name='rmtree [%s]' % (tempdir,),
|
|
449
|
-
printerr=self.print)
|
|
450
|
-
|
|
451
|
-
if retcode:
|
|
452
|
-
self.print(
|
|
453
|
-
'Extracting bootstrap zipfile %s failed.\n'
|
|
454
|
-
'Resuming normal operations.' % filename)
|
|
311
|
+
except Exception as e:
|
|
312
|
+
self.print('Encountered error: %s' % str(e), file=sys.stderr)
|
|
313
|
+
gclient_utils.rmtree(tempdir)
|
|
455
314
|
return False
|
|
315
|
+
# delete the old directory
|
|
316
|
+
if os.path.exists(directory):
|
|
317
|
+
gclient_utils.rmtree(directory)
|
|
318
|
+
self.Rename(tempdir, directory)
|
|
456
319
|
return True
|
|
457
320
|
|
|
458
321
|
def contains_revision(self, revision):
|
|
@@ -493,7 +356,7 @@ class Mirror(object):
|
|
|
493
356
|
try:
|
|
494
357
|
config_fetchspecs = subprocess.check_output(
|
|
495
358
|
[self.git_exe, 'config', '--get-all', 'remote.origin.fetch'],
|
|
496
|
-
cwd=self.mirror_path)
|
|
359
|
+
cwd=self.mirror_path).decode('utf-8', 'ignore')
|
|
497
360
|
for fetchspec in config_fetchspecs.splitlines():
|
|
498
361
|
self.fetch_specs.add(self.parse_fetch_spec(fetchspec))
|
|
499
362
|
except subprocess.CalledProcessError:
|
|
@@ -502,61 +365,77 @@ class Mirror(object):
|
|
|
502
365
|
'%s and "git cache fetch" again.'
|
|
503
366
|
% os.path.join(self.mirror_path, 'config'))
|
|
504
367
|
|
|
505
|
-
def _ensure_bootstrapped(
|
|
506
|
-
|
|
368
|
+
def _ensure_bootstrapped(
|
|
369
|
+
self, depth, bootstrap, reset_fetch_config, force=False):
|
|
507
370
|
pack_dir = os.path.join(self.mirror_path, 'objects', 'pack')
|
|
508
371
|
pack_files = []
|
|
509
|
-
|
|
510
372
|
if os.path.isdir(pack_dir):
|
|
511
373
|
pack_files = [f for f in os.listdir(pack_dir) if f.endswith('.pack')]
|
|
512
|
-
self.print('%s has %d .pack files, re-bootstrapping if >%d' %
|
|
513
|
-
|
|
374
|
+
self.print('%s has %d .pack files, re-bootstrapping if >%d or ==0' %
|
|
375
|
+
(self.mirror_path, len(pack_files), GC_AUTOPACKLIMIT))
|
|
514
376
|
|
|
515
377
|
should_bootstrap = (force or
|
|
516
378
|
not self.exists() or
|
|
517
|
-
len(pack_files) > GC_AUTOPACKLIMIT
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
379
|
+
len(pack_files) > GC_AUTOPACKLIMIT or
|
|
380
|
+
len(pack_files) == 0)
|
|
381
|
+
|
|
382
|
+
if not should_bootstrap:
|
|
383
|
+
if depth and os.path.exists(os.path.join(self.mirror_path, 'shallow')):
|
|
384
|
+
logging.warn(
|
|
385
|
+
'Shallow fetch requested, but repo cache already exists.')
|
|
386
|
+
return
|
|
387
|
+
|
|
388
|
+
if not self.exists():
|
|
389
|
+
if os.path.exists(self.mirror_path):
|
|
390
|
+
# If the mirror path exists but self.exists() returns false, we're
|
|
391
|
+
# in an unexpected state. Nuke the previous mirror directory and
|
|
392
|
+
# start fresh.
|
|
527
393
|
gclient_utils.rmtree(self.mirror_path)
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
394
|
+
os.mkdir(self.mirror_path)
|
|
395
|
+
elif not reset_fetch_config:
|
|
396
|
+
# Re-bootstrapping an existing mirror; preserve existing fetch spec.
|
|
397
|
+
self._preserve_fetchspec()
|
|
398
|
+
|
|
399
|
+
bootstrapped = (not depth and bootstrap and
|
|
400
|
+
self.bootstrap_repo(self.mirror_path))
|
|
401
|
+
|
|
402
|
+
if not bootstrapped:
|
|
403
|
+
if not self.exists() or not self.supported_project():
|
|
404
|
+
# Bootstrap failed due to:
|
|
405
|
+
# 1. No previous cache.
|
|
406
|
+
# 2. Project doesn't have a bootstrap folder.
|
|
532
407
|
# Start with a bare git dir.
|
|
533
|
-
self.RunGit(['init', '--bare'], cwd=
|
|
408
|
+
self.RunGit(['init', '--bare'], cwd=self.mirror_path)
|
|
534
409
|
else:
|
|
535
410
|
# Bootstrap failed, previous cache exists; warn and continue.
|
|
536
411
|
logging.warn(
|
|
537
412
|
'Git cache has a lot of pack files (%d). Tried to re-bootstrap '
|
|
538
413
|
'but failed. Continuing with non-optimized repository.'
|
|
539
414
|
% len(pack_files))
|
|
540
|
-
gclient_utils.rmtree(tempdir)
|
|
541
|
-
tempdir = None
|
|
542
|
-
else:
|
|
543
|
-
if depth and os.path.exists(os.path.join(self.mirror_path, 'shallow')):
|
|
544
|
-
logging.warn(
|
|
545
|
-
'Shallow fetch requested, but repo cache already exists.')
|
|
546
|
-
return tempdir
|
|
547
415
|
|
|
548
|
-
def _fetch(self,
|
|
416
|
+
def _fetch(self,
|
|
417
|
+
rundir,
|
|
418
|
+
verbose,
|
|
419
|
+
depth,
|
|
420
|
+
no_fetch_tags,
|
|
421
|
+
reset_fetch_config,
|
|
422
|
+
prune=True):
|
|
549
423
|
self.config(rundir, reset_fetch_config)
|
|
550
|
-
|
|
551
|
-
|
|
424
|
+
|
|
425
|
+
fetch_cmd = ['fetch']
|
|
552
426
|
if verbose:
|
|
553
|
-
|
|
427
|
+
fetch_cmd.extend(['-v', '--progress'])
|
|
554
428
|
if depth:
|
|
555
|
-
|
|
556
|
-
|
|
429
|
+
fetch_cmd.extend(['--depth', str(depth)])
|
|
430
|
+
if no_fetch_tags:
|
|
431
|
+
fetch_cmd.append('--no-tags')
|
|
432
|
+
if prune:
|
|
433
|
+
fetch_cmd.append('--prune')
|
|
434
|
+
fetch_cmd.append('origin')
|
|
435
|
+
|
|
557
436
|
fetch_specs = subprocess.check_output(
|
|
558
437
|
[self.git_exe, 'config', '--get-all', 'remote.origin.fetch'],
|
|
559
|
-
cwd=rundir).strip().splitlines()
|
|
438
|
+
cwd=rundir).decode('utf-8', 'ignore').strip().splitlines()
|
|
560
439
|
for spec in fetch_specs:
|
|
561
440
|
try:
|
|
562
441
|
self.print('Fetching %s' % spec)
|
|
@@ -567,61 +446,110 @@ class Mirror(object):
|
|
|
567
446
|
raise ClobberNeeded() # Corrupted cache.
|
|
568
447
|
logging.warn('Fetch of %s failed' % spec)
|
|
569
448
|
|
|
570
|
-
def populate(self,
|
|
571
|
-
|
|
449
|
+
def populate(self,
|
|
450
|
+
depth=None,
|
|
451
|
+
no_fetch_tags=False,
|
|
452
|
+
shallow=False,
|
|
453
|
+
bootstrap=False,
|
|
454
|
+
verbose=False,
|
|
455
|
+
lock_timeout=0,
|
|
572
456
|
reset_fetch_config=False):
|
|
573
457
|
assert self.GetCachePath()
|
|
574
458
|
if shallow and not depth:
|
|
575
459
|
depth = 10000
|
|
576
460
|
gclient_utils.safe_makedirs(self.GetCachePath())
|
|
577
461
|
|
|
578
|
-
lockfile
|
|
579
|
-
|
|
580
|
-
|
|
462
|
+
with lockfile.lock(self.mirror_path, lock_timeout):
|
|
463
|
+
try:
|
|
464
|
+
self._ensure_bootstrapped(depth, bootstrap, reset_fetch_config)
|
|
465
|
+
self._fetch(self.mirror_path, verbose, depth, no_fetch_tags,
|
|
466
|
+
reset_fetch_config)
|
|
467
|
+
except ClobberNeeded:
|
|
468
|
+
# This is a major failure, we need to clean and force a bootstrap.
|
|
469
|
+
gclient_utils.rmtree(self.mirror_path)
|
|
470
|
+
self.print(GIT_CACHE_CORRUPT_MESSAGE)
|
|
471
|
+
self._ensure_bootstrapped(depth,
|
|
472
|
+
bootstrap,
|
|
473
|
+
reset_fetch_config,
|
|
474
|
+
force=True)
|
|
475
|
+
self._fetch(self.mirror_path, verbose, depth, no_fetch_tags,
|
|
476
|
+
reset_fetch_config)
|
|
477
|
+
|
|
478
|
+
def update_bootstrap(self, prune=False, gc_aggressive=False):
|
|
479
|
+
# The folder is <git number>
|
|
480
|
+
gen_number = subprocess.check_output(
|
|
481
|
+
[self.git_exe, 'number', 'master'],
|
|
482
|
+
cwd=self.mirror_path).decode('utf-8', 'ignore').strip()
|
|
483
|
+
gsutil = Gsutil(path=self.gsutil_exe, boto_path=None)
|
|
581
484
|
|
|
582
|
-
|
|
485
|
+
src_name = self.mirror_path
|
|
486
|
+
dest_prefix = '%s/%s' % (self._gs_path, gen_number)
|
|
487
|
+
|
|
488
|
+
# ls_out lists contents in the format: gs://blah/blah/123...
|
|
489
|
+
_, ls_out, _ = gsutil.check_call('ls', self._gs_path)
|
|
490
|
+
|
|
491
|
+
# Check to see if folder already exists in gs
|
|
492
|
+
ls_out_set = set(ls_out.strip().splitlines())
|
|
493
|
+
if (dest_prefix + '/' in ls_out_set and
|
|
494
|
+
dest_prefix + '.ready' in ls_out_set):
|
|
495
|
+
print('Cache %s already exists.' % dest_prefix)
|
|
496
|
+
return
|
|
497
|
+
|
|
498
|
+
# Run Garbage Collect to compress packfile.
|
|
499
|
+
gc_args = ['gc', '--prune=all']
|
|
500
|
+
if gc_aggressive:
|
|
501
|
+
# The default "gc --aggressive" is often too aggressive for some machines,
|
|
502
|
+
# since it attempts to create as many threads as there are CPU cores,
|
|
503
|
+
# while not limiting per-thread memory usage, which puts too much pressure
|
|
504
|
+
# on RAM on high-core machines, causing them to thrash. Using lower-level
|
|
505
|
+
# commands gives more control over those settings.
|
|
506
|
+
|
|
507
|
+
# This might not be strictly necessary, but it's fast and is normally run
|
|
508
|
+
# by 'gc --aggressive', so it shouldn't hurt.
|
|
509
|
+
self.RunGit(['reflog', 'expire', '--all'])
|
|
510
|
+
|
|
511
|
+
# These are the default repack settings for 'gc --aggressive'.
|
|
512
|
+
gc_args = ['repack', '-d', '-l', '-f', '--depth=50', '--window=250', '-A',
|
|
513
|
+
'--unpack-unreachable=all']
|
|
514
|
+
# A 1G memory limit seems to provide comparable pack results as the
|
|
515
|
+
# default, even for our largest repos, while preventing runaway memory (at
|
|
516
|
+
# least on current Chromium builders which have about 4G RAM per core).
|
|
517
|
+
gc_args.append('--window-memory=1g')
|
|
518
|
+
# NOTE: It might also be possible to avoid thrashing with a larger window
|
|
519
|
+
# (e.g. "--window-memory=2g") by limiting the number of threads created
|
|
520
|
+
# (e.g. "--threads=[cores/2]"). Some limited testing didn't show much
|
|
521
|
+
# difference in outcomes on our current repos, but it might be worth
|
|
522
|
+
# trying if the repos grow much larger and the packs don't seem to be
|
|
523
|
+
# getting compressed enough.
|
|
524
|
+
self.RunGit(gc_args)
|
|
525
|
+
|
|
526
|
+
gsutil.call('-m', 'cp', '-r', src_name, dest_prefix)
|
|
527
|
+
|
|
528
|
+
# Create .ready file and upload
|
|
529
|
+
_, ready_file_name = tempfile.mkstemp(suffix='.ready')
|
|
583
530
|
try:
|
|
584
|
-
|
|
585
|
-
rundir = tempdir or self.mirror_path
|
|
586
|
-
self._fetch(rundir, verbose, depth, reset_fetch_config)
|
|
587
|
-
except ClobberNeeded:
|
|
588
|
-
# This is a major failure, we need to clean and force a bootstrap.
|
|
589
|
-
gclient_utils.rmtree(rundir)
|
|
590
|
-
self.print(GIT_CACHE_CORRUPT_MESSAGE)
|
|
591
|
-
tempdir = self._ensure_bootstrapped(depth, bootstrap, force=True)
|
|
592
|
-
assert tempdir
|
|
593
|
-
self._fetch(tempdir, verbose, depth, reset_fetch_config)
|
|
531
|
+
gsutil.call('cp', ready_file_name, '%s.ready' % (dest_prefix))
|
|
594
532
|
finally:
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
dest_name = '%s/%s.zip' % (gs_folder, gen_number)
|
|
615
|
-
gsutil.call('cp', tmp_zipfile, dest_name)
|
|
616
|
-
os.remove(tmp_zipfile)
|
|
533
|
+
os.remove(ready_file_name)
|
|
534
|
+
|
|
535
|
+
# remove all other directory/.ready files in the same gs_path
|
|
536
|
+
# except for the directory/.ready file previously created
|
|
537
|
+
# which can be used for bootstrapping while the current one is
|
|
538
|
+
# being uploaded
|
|
539
|
+
if not prune:
|
|
540
|
+
return
|
|
541
|
+
prev_dest_prefix = self._GetMostRecentCacheDirectory(ls_out_set)
|
|
542
|
+
if not prev_dest_prefix:
|
|
543
|
+
return
|
|
544
|
+
for path in ls_out_set:
|
|
545
|
+
if (path == prev_dest_prefix + '/' or
|
|
546
|
+
path == prev_dest_prefix + '.ready'):
|
|
547
|
+
continue
|
|
548
|
+
if path.endswith('.ready'):
|
|
549
|
+
gsutil.call('rm', path)
|
|
550
|
+
continue
|
|
551
|
+
gsutil.call('-m', 'rm', '-r', path)
|
|
617
552
|
|
|
618
|
-
# Remove all other files in the same directory.
|
|
619
|
-
if prune:
|
|
620
|
-
_, ls_out, _ = gsutil.check_call('ls', gs_folder)
|
|
621
|
-
for filename in ls_out.splitlines():
|
|
622
|
-
if filename == dest_name:
|
|
623
|
-
continue
|
|
624
|
-
gsutil.call('rm', filename)
|
|
625
553
|
|
|
626
554
|
@staticmethod
|
|
627
555
|
def DeleteTmpPackFiles(path):
|
|
@@ -638,45 +566,6 @@ class Mirror(object):
|
|
|
638
566
|
except OSError:
|
|
639
567
|
logging.warn('Unable to delete temporary pack file %s' % f)
|
|
640
568
|
|
|
641
|
-
@classmethod
|
|
642
|
-
def BreakLocks(cls, path):
|
|
643
|
-
did_unlock = False
|
|
644
|
-
lf = Lockfile(path)
|
|
645
|
-
if lf.break_lock():
|
|
646
|
-
did_unlock = True
|
|
647
|
-
# Look for lock files that might have been left behind by an interrupted
|
|
648
|
-
# git process.
|
|
649
|
-
lf = os.path.join(path, 'config.lock')
|
|
650
|
-
if os.path.exists(lf):
|
|
651
|
-
os.remove(lf)
|
|
652
|
-
did_unlock = True
|
|
653
|
-
cls.DeleteTmpPackFiles(path)
|
|
654
|
-
return did_unlock
|
|
655
|
-
|
|
656
|
-
def unlock(self):
|
|
657
|
-
return self.BreakLocks(self.mirror_path)
|
|
658
|
-
|
|
659
|
-
@classmethod
|
|
660
|
-
def UnlockAll(cls):
|
|
661
|
-
cachepath = cls.GetCachePath()
|
|
662
|
-
if not cachepath:
|
|
663
|
-
return
|
|
664
|
-
dirlist = os.listdir(cachepath)
|
|
665
|
-
repo_dirs = set([os.path.join(cachepath, path) for path in dirlist
|
|
666
|
-
if os.path.isdir(os.path.join(cachepath, path))])
|
|
667
|
-
for dirent in dirlist:
|
|
668
|
-
if dirent.startswith('_cache_tmp') or dirent.startswith('tmp'):
|
|
669
|
-
gclient_utils.rm_file_or_tree(os.path.join(cachepath, dirent))
|
|
670
|
-
elif (dirent.endswith('.lock') and
|
|
671
|
-
os.path.isfile(os.path.join(cachepath, dirent))):
|
|
672
|
-
repo_dirs.add(os.path.join(cachepath, dirent[:-5]))
|
|
673
|
-
|
|
674
|
-
unlocked_repos = []
|
|
675
|
-
for repo_dir in repo_dirs:
|
|
676
|
-
if cls.BreakLocks(repo_dir):
|
|
677
|
-
unlocked_repos.append(repo_dir)
|
|
678
|
-
|
|
679
|
-
return unlocked_repos
|
|
680
569
|
|
|
681
570
|
@subcommand.usage('[url of repo to check for caching]')
|
|
682
571
|
def CMDexists(parser, args):
|
|
@@ -700,19 +589,27 @@ def CMDupdate_bootstrap(parser, args):
|
|
|
700
589
|
print('Sorry, update bootstrap will not work on Windows.', file=sys.stderr)
|
|
701
590
|
return 1
|
|
702
591
|
|
|
592
|
+
parser.add_option('--skip-populate', action='store_true',
|
|
593
|
+
help='Skips "populate" step if mirror already exists.')
|
|
594
|
+
parser.add_option('--gc-aggressive', action='store_true',
|
|
595
|
+
help='Run aggressive repacking of the repo.')
|
|
703
596
|
parser.add_option('--prune', action='store_true',
|
|
704
|
-
help='Prune all other cached
|
|
597
|
+
help='Prune all other cached bundles of the same repo.')
|
|
705
598
|
|
|
706
|
-
# First, we need to ensure the cache is populated.
|
|
707
599
|
populate_args = args[:]
|
|
708
|
-
populate_args.append('--no-bootstrap')
|
|
709
|
-
CMDpopulate(parser, populate_args)
|
|
710
|
-
|
|
711
|
-
# Get the repo directory.
|
|
712
600
|
options, args = parser.parse_args(args)
|
|
713
601
|
url = args[0]
|
|
714
602
|
mirror = Mirror(url)
|
|
715
|
-
mirror.
|
|
603
|
+
if not options.skip_populate or not mirror.exists():
|
|
604
|
+
CMDpopulate(parser, populate_args)
|
|
605
|
+
else:
|
|
606
|
+
print('Skipped populate step.')
|
|
607
|
+
|
|
608
|
+
# Get the repo directory.
|
|
609
|
+
_, args2 = parser.parse_args(args)
|
|
610
|
+
url = args2[0]
|
|
611
|
+
mirror = Mirror(url)
|
|
612
|
+
mirror.update_bootstrap(options.prune, options.gc_aggressive)
|
|
716
613
|
return 0
|
|
717
614
|
|
|
718
615
|
|
|
@@ -721,6 +618,11 @@ def CMDpopulate(parser, args):
|
|
|
721
618
|
"""Ensure that the cache has all up-to-date objects for the given repo."""
|
|
722
619
|
parser.add_option('--depth', type='int',
|
|
723
620
|
help='Only cache DEPTH commits of history')
|
|
621
|
+
parser.add_option(
|
|
622
|
+
'--no-fetch-tags',
|
|
623
|
+
action='store_true',
|
|
624
|
+
help=('Don\'t fetch tags from the server. This can speed up '
|
|
625
|
+
'fetch considerably when there are many tags.'))
|
|
724
626
|
parser.add_option('--shallow', '-s', action='store_true',
|
|
725
627
|
help='Only cache 10000 commits of history')
|
|
726
628
|
parser.add_option('--ref', action='append',
|
|
@@ -728,23 +630,31 @@ def CMDpopulate(parser, args):
|
|
|
728
630
|
parser.add_option('--no_bootstrap', '--no-bootstrap',
|
|
729
631
|
action='store_true',
|
|
730
632
|
help='Don\'t bootstrap from Google Storage')
|
|
731
|
-
parser.add_option('--ignore_locks',
|
|
633
|
+
parser.add_option('--ignore_locks',
|
|
634
|
+
'--ignore-locks',
|
|
732
635
|
action='store_true',
|
|
733
|
-
help='
|
|
636
|
+
help='NOOP. This flag will be removed in the future.')
|
|
637
|
+
parser.add_option('--break-locks',
|
|
638
|
+
action='store_true',
|
|
639
|
+
help='Break any existing lock instead of just ignoring it')
|
|
734
640
|
parser.add_option('--reset-fetch-config', action='store_true', default=False,
|
|
735
641
|
help='Reset the fetch config before populating the cache.')
|
|
736
642
|
|
|
737
643
|
options, args = parser.parse_args(args)
|
|
738
644
|
if not len(args) == 1:
|
|
739
645
|
parser.error('git cache populate only takes exactly one repo url.')
|
|
646
|
+
if options.ignore_locks:
|
|
647
|
+
print('ignore_locks is no longer used. Please remove its usage.')
|
|
648
|
+
if options.break_locks:
|
|
649
|
+
print('break_locks is no longer used. Please remove its usage.')
|
|
740
650
|
url = args[0]
|
|
741
651
|
|
|
742
652
|
mirror = Mirror(url, refs=options.ref)
|
|
743
653
|
kwargs = {
|
|
654
|
+
'no_fetch_tags': options.no_fetch_tags,
|
|
744
655
|
'verbose': options.verbose,
|
|
745
656
|
'shallow': options.shallow,
|
|
746
657
|
'bootstrap': not options.no_bootstrap,
|
|
747
|
-
'ignore_lock': options.ignore_locks,
|
|
748
658
|
'lock_timeout': options.timeout,
|
|
749
659
|
'reset_fetch_config': options.reset_fetch_config,
|
|
750
660
|
}
|
|
@@ -760,6 +670,11 @@ def CMDfetch(parser, args):
|
|
|
760
670
|
parser.add_option('--no_bootstrap', '--no-bootstrap',
|
|
761
671
|
action='store_true',
|
|
762
672
|
help='Don\'t (re)bootstrap from Google Storage')
|
|
673
|
+
parser.add_option(
|
|
674
|
+
'--no-fetch-tags',
|
|
675
|
+
action='store_true',
|
|
676
|
+
help=('Don\'t fetch tags from the server. This can speed up '
|
|
677
|
+
'fetch considerably when there are many tags.'))
|
|
763
678
|
options, args = parser.parse_args(args)
|
|
764
679
|
|
|
765
680
|
# Figure out which remotes to fetch. This mimics the behavior of regular
|
|
@@ -769,16 +684,18 @@ def CMDfetch(parser, args):
|
|
|
769
684
|
remotes = []
|
|
770
685
|
if options.all:
|
|
771
686
|
assert not args, 'fatal: fetch --all does not take a repository argument'
|
|
772
|
-
remotes = subprocess.check_output([Mirror.git_exe, 'remote'])
|
|
687
|
+
remotes = subprocess.check_output([Mirror.git_exe, 'remote'])
|
|
688
|
+
remotes = remotes.decode('utf-8', 'ignore').splitlines()
|
|
773
689
|
elif args:
|
|
774
690
|
remotes = args
|
|
775
691
|
else:
|
|
776
692
|
current_branch = subprocess.check_output(
|
|
777
|
-
[Mirror.git_exe, 'rev-parse', '--abbrev-ref', 'HEAD'])
|
|
693
|
+
[Mirror.git_exe, 'rev-parse', '--abbrev-ref', 'HEAD'])
|
|
694
|
+
current_branch = current_branch.decode('utf-8', 'ignore').strip()
|
|
778
695
|
if current_branch != 'HEAD':
|
|
779
696
|
upstream = subprocess.check_output(
|
|
780
|
-
[Mirror.git_exe, 'config', 'branch.%s.remote' % current_branch]
|
|
781
|
-
).strip()
|
|
697
|
+
[Mirror.git_exe, 'config', 'branch.%s.remote' % current_branch])
|
|
698
|
+
upstream = upstream.decode('utf-8', 'ignore').strip()
|
|
782
699
|
if upstream and upstream != '.':
|
|
783
700
|
remotes = [upstream]
|
|
784
701
|
if not remotes:
|
|
@@ -786,57 +703,35 @@ def CMDfetch(parser, args):
|
|
|
786
703
|
|
|
787
704
|
cachepath = Mirror.GetCachePath()
|
|
788
705
|
git_dir = os.path.abspath(subprocess.check_output(
|
|
789
|
-
[Mirror.git_exe, 'rev-parse', '--git-dir']))
|
|
706
|
+
[Mirror.git_exe, 'rev-parse', '--git-dir']).decode('utf-8', 'ignore'))
|
|
790
707
|
git_dir = os.path.abspath(git_dir)
|
|
791
708
|
if git_dir.startswith(cachepath):
|
|
792
709
|
mirror = Mirror.FromPath(git_dir)
|
|
793
710
|
mirror.populate(
|
|
794
|
-
bootstrap=not options.no_bootstrap,
|
|
711
|
+
bootstrap=not options.no_bootstrap,
|
|
712
|
+
no_fetch_tags=options.no_fetch_tags,
|
|
713
|
+
lock_timeout=options.timeout)
|
|
795
714
|
return 0
|
|
796
715
|
for remote in remotes:
|
|
797
716
|
remote_url = subprocess.check_output(
|
|
798
|
-
[Mirror.git_exe, 'config', 'remote.%s.url' % remote])
|
|
717
|
+
[Mirror.git_exe, 'config', 'remote.%s.url' % remote])
|
|
718
|
+
remote_url = remote_url.decode('utf-8', 'ignore').strip()
|
|
799
719
|
if remote_url.startswith(cachepath):
|
|
800
720
|
mirror = Mirror.FromPath(remote_url)
|
|
801
721
|
mirror.print = lambda *args: None
|
|
802
722
|
print('Updating git cache...')
|
|
803
723
|
mirror.populate(
|
|
804
|
-
bootstrap=not options.no_bootstrap,
|
|
724
|
+
bootstrap=not options.no_bootstrap,
|
|
725
|
+
no_fetch_tags=options.no_fetch_tags,
|
|
726
|
+
lock_timeout=options.timeout)
|
|
805
727
|
subprocess.check_call([Mirror.git_exe, 'fetch', remote])
|
|
806
728
|
return 0
|
|
807
729
|
|
|
808
730
|
|
|
809
|
-
@subcommand.usage('
|
|
731
|
+
@subcommand.usage('do not use - it is a noop.')
|
|
810
732
|
def CMDunlock(parser, args):
|
|
811
|
-
"""
|
|
812
|
-
|
|
813
|
-
help='Actually perform the action')
|
|
814
|
-
parser.add_option('--all', '-a', action='store_true',
|
|
815
|
-
help='Unlock all repository caches')
|
|
816
|
-
options, args = parser.parse_args(args)
|
|
817
|
-
if len(args) > 1 or (len(args) == 0 and not options.all):
|
|
818
|
-
parser.error('git cache unlock takes exactly one repo url, or --all')
|
|
819
|
-
|
|
820
|
-
if not options.force:
|
|
821
|
-
cachepath = Mirror.GetCachePath()
|
|
822
|
-
lockfiles = [os.path.join(cachepath, path)
|
|
823
|
-
for path in os.listdir(cachepath)
|
|
824
|
-
if path.endswith('.lock') and os.path.isfile(path)]
|
|
825
|
-
parser.error('git cache unlock requires -f|--force to do anything. '
|
|
826
|
-
'Refusing to unlock the following repo caches: '
|
|
827
|
-
', '.join(lockfiles))
|
|
828
|
-
|
|
829
|
-
unlocked_repos = []
|
|
830
|
-
if options.all:
|
|
831
|
-
unlocked_repos.extend(Mirror.UnlockAll())
|
|
832
|
-
else:
|
|
833
|
-
m = Mirror(args[0])
|
|
834
|
-
if m.unlock():
|
|
835
|
-
unlocked_repos.append(m.mirror_path)
|
|
836
|
-
|
|
837
|
-
if unlocked_repos:
|
|
838
|
-
logging.info('Broke locks on these caches:\n %s' % '\n '.join(
|
|
839
|
-
unlocked_repos))
|
|
733
|
+
"""This command does nothing."""
|
|
734
|
+
print('This command does nothing and will be removed in the future.')
|
|
840
735
|
|
|
841
736
|
|
|
842
737
|
class OptionParser(optparse.OptionParser):
|