libv8 7.8.279.23.0beta1 → 8.4.255.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +11 -14
- data/CHANGELOG.md +7 -1
- data/README.md +10 -11
- data/Rakefile +30 -36
- data/ext/libv8/builder.rb +2 -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 +3 -1
- 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 +6 -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 +156 -118
- 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 +180 -169
- 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 +195 -281
- data/vendor/depot_tools/git_cl.py +1506 -2075
- 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 +3 -1
- 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 +5 -2
- data/vendor/depot_tools/metrics.py +4 -4
- data/vendor/depot_tools/metrics_utils.py +3 -3
- 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 +57 -21
- 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 +215 -151
- data/vendor/depot_tools/recipes/recipe_modules/OWNERS +1 -1
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +17 -17
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +65 -32
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +12 -4
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +11 -3
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +12 -4
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +22 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +27 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +22 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +22 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/input_commit_with_id_without_repo.json +22 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/multiple_patch_refs.json +22 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +27 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_HEAD.json +12 -4
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_branch_head.json +10 -4
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_specific_commit.json +12 -4
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_master.json +10 -4
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/refs.json +22 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +22 -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 +16 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +34 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +16 -10
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +27 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +27 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +27 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +27 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +27 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +27 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +27 -9
- 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 +22 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +7 -23
- 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 +21 -9
- 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 +94 -74
- 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 +22 -15
- 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 +66 -345
- 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/bot_update/examples/full.expected/with_manifest_name.json +0 -48
- 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
@@ -17,7 +17,14 @@
|
|
17
17
|
"--revision",
|
18
18
|
"depot_tools@HEAD"
|
19
19
|
],
|
20
|
-
"
|
20
|
+
"env": {
|
21
|
+
"GIT_HTTP_LOW_SPEED_LIMIT": "102400",
|
22
|
+
"GIT_HTTP_LOW_SPEED_TIME": "300"
|
23
|
+
},
|
24
|
+
"env_suffixes": {
|
25
|
+
"DEPOT_TOOLS_UPDATE": [
|
26
|
+
"0"
|
27
|
+
],
|
21
28
|
"PATH": [
|
22
29
|
"RECIPE_REPO[depot_tools]"
|
23
30
|
]
|
@@ -64,7 +71,7 @@
|
|
64
71
|
},
|
65
72
|
{
|
66
73
|
"cmd": [
|
67
|
-
"
|
74
|
+
"vpython",
|
68
75
|
"-u",
|
69
76
|
"RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
|
70
77
|
"--json-output",
|
@@ -74,7 +81,6 @@
|
|
74
81
|
],
|
75
82
|
"infra_step": true,
|
76
83
|
"name": "listdir fetch_configs",
|
77
|
-
"stdout": "/path/to/tmp/",
|
78
84
|
"~followup_annotations": [
|
79
85
|
"@@@STEP_LOG_LINE@listdir@[START_DIR]/depot_tools/fetch_configs/depot_tools.py@@@",
|
80
86
|
"@@@STEP_LOG_LINE@listdir@[START_DIR]/depot_tools/fetch_configs/infra.py@@@",
|
@@ -102,7 +108,7 @@
|
|
102
108
|
},
|
103
109
|
{
|
104
110
|
"cmd": [
|
105
|
-
"
|
111
|
+
"vpython",
|
106
112
|
"-u",
|
107
113
|
"RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
|
108
114
|
"--json-output",
|
@@ -143,7 +149,7 @@
|
|
143
149
|
},
|
144
150
|
{
|
145
151
|
"cmd": [
|
146
|
-
"
|
152
|
+
"vpython",
|
147
153
|
"-u",
|
148
154
|
"RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
|
149
155
|
"--json-output",
|
@@ -164,7 +170,6 @@
|
|
164
170
|
"name": "cleanup (2)"
|
165
171
|
},
|
166
172
|
{
|
167
|
-
"jsonResult": null,
|
168
173
|
"name": "$result"
|
169
174
|
}
|
170
175
|
]
|
data/vendor/depot_tools/repo
CHANGED
@@ -1,14 +1,7 @@
|
|
1
1
|
#!/usr/bin/env python
|
2
|
-
|
3
|
-
# repo default configuration
|
2
|
+
# -*- coding:utf-8 -*-
|
4
3
|
#
|
5
|
-
|
6
|
-
REPO_URL = os.environ.get('REPO_URL', None)
|
7
|
-
if not REPO_URL:
|
8
|
-
REPO_URL = 'https://chromium.googlesource.com/external/repo'
|
9
|
-
REPO_REV = 'stable'
|
10
|
-
|
11
|
-
# Copyright (C) 2008 Google Inc.
|
4
|
+
# Copyright (C) 2008 The Android Open Source Project
|
12
5
|
#
|
13
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
14
7
|
# you may not use this file except in compliance with the License.
|
@@ -22,11 +15,128 @@ REPO_REV = 'stable'
|
|
22
15
|
# See the License for the specific language governing permissions and
|
23
16
|
# limitations under the License.
|
24
17
|
|
18
|
+
"""Repo launcher.
|
19
|
+
|
20
|
+
This is a standalone tool that people may copy to anywhere in their system.
|
21
|
+
It is used to get an initial repo client checkout, and after that it runs the
|
22
|
+
copy of repo in the checkout.
|
23
|
+
"""
|
24
|
+
|
25
|
+
from __future__ import print_function
|
26
|
+
|
27
|
+
import datetime
|
28
|
+
import os
|
29
|
+
import platform
|
30
|
+
import shlex
|
31
|
+
import subprocess
|
32
|
+
import sys
|
33
|
+
|
34
|
+
|
35
|
+
# Keep basic logic in sync with repo_trace.py.
|
36
|
+
class Trace(object):
|
37
|
+
"""Trace helper logic."""
|
38
|
+
|
39
|
+
REPO_TRACE = 'REPO_TRACE'
|
40
|
+
|
41
|
+
def __init__(self):
|
42
|
+
self.set(os.environ.get(self.REPO_TRACE) == '1')
|
43
|
+
|
44
|
+
def set(self, value):
|
45
|
+
self.enabled = bool(value)
|
46
|
+
|
47
|
+
def print(self, *args, **kwargs):
|
48
|
+
if self.enabled:
|
49
|
+
print(*args, **kwargs)
|
50
|
+
|
51
|
+
|
52
|
+
trace = Trace()
|
53
|
+
|
54
|
+
|
55
|
+
def exec_command(cmd):
|
56
|
+
"""Execute |cmd| or return None on failure."""
|
57
|
+
trace.print(':', ' '.join(cmd))
|
58
|
+
try:
|
59
|
+
if platform.system() == 'Windows':
|
60
|
+
ret = subprocess.call(cmd)
|
61
|
+
sys.exit(ret)
|
62
|
+
else:
|
63
|
+
os.execvp(cmd[0], cmd)
|
64
|
+
except Exception:
|
65
|
+
pass
|
66
|
+
|
67
|
+
|
68
|
+
def check_python_version():
|
69
|
+
"""Make sure the active Python version is recent enough."""
|
70
|
+
def reexec(prog):
|
71
|
+
exec_command([prog] + sys.argv)
|
72
|
+
|
73
|
+
MIN_PYTHON_VERSION = (3, 6)
|
74
|
+
|
75
|
+
ver = sys.version_info
|
76
|
+
major = ver.major
|
77
|
+
minor = ver.minor
|
78
|
+
|
79
|
+
# Abort on very old Python 2 versions.
|
80
|
+
if (major, minor) < (2, 7):
|
81
|
+
print('repo: error: Your Python version is too old. '
|
82
|
+
'Please use Python {}.{} or newer instead.'.format(
|
83
|
+
*MIN_PYTHON_VERSION), file=sys.stderr)
|
84
|
+
sys.exit(1)
|
85
|
+
|
86
|
+
# Try to re-exec the version specific Python 3 if needed.
|
87
|
+
if (major, minor) < MIN_PYTHON_VERSION:
|
88
|
+
# Python makes releases ~once a year, so try our min version +10 to help
|
89
|
+
# bridge the gap. This is the fallback anyways so perf isn't critical.
|
90
|
+
min_major, min_minor = MIN_PYTHON_VERSION
|
91
|
+
for inc in range(0, 10):
|
92
|
+
reexec('python{}.{}'.format(min_major, min_minor + inc))
|
93
|
+
|
94
|
+
# Try the generic Python 3 wrapper, but only if it's new enough. We don't
|
95
|
+
# want to go from (still supported) Python 2.7 to (unsupported) Python 3.5.
|
96
|
+
try:
|
97
|
+
proc = subprocess.Popen(
|
98
|
+
['python3', '-c', 'import sys; '
|
99
|
+
'print(sys.version_info.major, sys.version_info.minor)'],
|
100
|
+
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
101
|
+
(output, _) = proc.communicate()
|
102
|
+
python3_ver = tuple(int(x) for x in output.decode('utf-8').split())
|
103
|
+
except (OSError, subprocess.CalledProcessError):
|
104
|
+
python3_ver = None
|
105
|
+
|
106
|
+
# The python3 version looks like it's new enough, so give it a try.
|
107
|
+
if python3_ver and python3_ver >= MIN_PYTHON_VERSION:
|
108
|
+
reexec('python3')
|
109
|
+
|
110
|
+
# We're still here, so diagnose things for the user.
|
111
|
+
if major < 3:
|
112
|
+
print('repo: warning: Python 2 is no longer supported; '
|
113
|
+
'Please upgrade to Python {}.{}+.'.format(*MIN_PYTHON_VERSION),
|
114
|
+
file=sys.stderr)
|
115
|
+
else:
|
116
|
+
print('repo: error: Python 3 version is too old; '
|
117
|
+
'Please use Python {}.{} or newer.'.format(*MIN_PYTHON_VERSION),
|
118
|
+
file=sys.stderr)
|
119
|
+
sys.exit(1)
|
120
|
+
|
121
|
+
|
122
|
+
if __name__ == '__main__':
|
123
|
+
check_python_version()
|
124
|
+
|
125
|
+
|
126
|
+
# repo default configuration
|
127
|
+
#
|
128
|
+
REPO_URL = os.environ.get('REPO_URL', None)
|
129
|
+
if not REPO_URL:
|
130
|
+
REPO_URL = 'https://chromium.googlesource.com/external/repo'
|
131
|
+
REPO_REV = os.environ.get('REPO_REV')
|
132
|
+
if not REPO_REV:
|
133
|
+
REPO_REV = 'stable'
|
134
|
+
|
25
135
|
# increment this whenever we make important changes to this script
|
26
|
-
VERSION = (
|
136
|
+
VERSION = (2, 8)
|
27
137
|
|
28
138
|
# increment this if the MAINTAINER_KEYS block is modified
|
29
|
-
KEYRING_VERSION = (
|
139
|
+
KEYRING_VERSION = (2, 3)
|
30
140
|
|
31
141
|
# Each individual key entry is created by using:
|
32
142
|
# gpg --armor --export keyid
|
@@ -34,7 +144,6 @@ MAINTAINER_KEYS = """
|
|
34
144
|
|
35
145
|
Repo Maintainer <repo@android.kernel.org>
|
36
146
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
37
|
-
Version: GnuPG v1.4.2.2 (GNU/Linux)
|
38
147
|
|
39
148
|
mQGiBEj3ugERBACrLJh/ZPyVSKeClMuznFIrsQ+hpNnmJGw1a9GXKYKk8qHPhAZf
|
40
149
|
WKtrBqAVMNRLhL85oSlekRz98u41H5si5zcuv+IXJDF5MJYcB8f22wAy15lUqPWi
|
@@ -70,189 +179,63 @@ p3v5ILwfC7hVx4jHSnOgZ65L9s8EQdVr1ckN9243yta7rNgwfcqb60ILMFF1BRk/
|
|
70
179
|
5xGrFy8tfAaeBMIQ17gvFSp/suc9DYO0ICK2BISzq+F+ZiAKsjMYOBNdH/h0zobQ
|
71
180
|
HTHs37+/QLMomGEGKZMWi0dShU2J5mNRQu3Hhxl3hHDVbt5CeJBb26aQcQrFz69W
|
72
181
|
zE3GNvmJosh6leayjtI9P2A6iEkEGBECAAkFAkj3uiACGwwACgkQFlMNXpIPXGWp
|
73
|
-
TACbBS+Up3RpfYVfd63c1cDdlru13pQAn3NQy/SN858MkxN+
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
=AUp4
|
107
|
-
-----END PGP PUBLIC KEY BLOCK-----
|
108
|
-
|
109
|
-
Stefan Zager <szager@chromium.org>
|
110
|
-
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
111
|
-
Version: GnuPG v1.4.11 (GNU/Linux)
|
112
|
-
|
113
|
-
mQINBFIJOcgBEADwZIq4GRGoO1RJFKlrtVK501cwT5H+Acbizc9N5RxTkFmqxDjb
|
114
|
-
9ApUaPW6S1b8+nrzE9P1Ri5erfzipuStfaZ/Wl3mP1JjKulibddmgnPOEbAJ673k
|
115
|
-
Vj85RUO4rt2oZAHnZN3D3gFJzVY8JVlZ47Enj9fTqzcW78FVsPCpIT9P2LpTLWeE
|
116
|
-
jX9Cjxeimy6VvyJstIcDLYhlpUN5UWen79L4LFAkHf3luLuU4W3p9NriqUsy5UG2
|
117
|
-
8vO6QdhKrCr5wsjDFFeVnpMtjlSeZJAWH+XhFFibMX1xP5R9BTuJfzw3kOVKvcE0
|
118
|
-
e9ClxgoulepXPv2xnDkqO3pG2gQVzl8LA+Aol8/IXfa7KP5FBkxK/g1cDuDtXRk4
|
119
|
-
YLpLaLYeeKEhhOHLpsKYkK2DXTIcN+56UnTLGolummpZnCM8UUSZxQgbkFgk4YJL
|
120
|
-
Elip0hgLZzqEl5h9vjmnQp89AZIHKcgNmzn+szLTOR9x24joaLyQ534x8OSC8lmu
|
121
|
-
tJv2tQjDOVGWVwvY4gOTpyxCWMwur6WOiMk/TPWdiVRFWAGrAHwf0/CTBEqNhosh
|
122
|
-
sVXfPeMADBA0PorDbJ6kwcOkLUTGf8CT7OG1R9TuKPEmSjK7BYu/pT4DXitaRCiv
|
123
|
-
uPVlwbVFpLFr0/jwaKJVMLUjL5MaYwzjJqI2c4RdROZhpMhkn4LvCMmFSQARAQAB
|
124
|
-
tCJTdGVmYW4gWmFnZXIgPHN6YWdlckBjaHJvbWl1bS5vcmc+iQI4BBMBAgAiBQJS
|
125
|
-
CTnIAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRDcuoHPGCdZNU0UD/9y
|
126
|
-
0zwwOJH2UGPAzZ0YVzr7p0HtKedoxuFvPkdQxlBIaUOueMzFRmNQu3GI9irAu3MQ
|
127
|
-
Jkip8/gi7dnLVmJyS/zWARBaRGwSVd1++87XDjw8n7l181p7394X0Agq/heri599
|
128
|
-
YheHXkxXKVMPqByWNEPHu4eDbxeJTaDIjcKC2pzKQkm6HbWgW4wA9gCh1TRki8FP
|
129
|
-
LMv1Fu/dr13STCR9P2evsTRZ+ZSJhTSboHNHeEAJGiGZQAsN94oht7647lYj+AyR
|
130
|
-
ThzyHDMXXiDr8jPJIkyRilY+y82bCOatOfPoCkce3VI+LRUGJ19hJY01m4RRneIE
|
131
|
-
55l7fXR3zggcsONjV5b+oLcGQPGgX9w64BJ7khT7Wb9+kuyrdJBIBzJsaACFEbri
|
132
|
-
pPi02FS/HahYpLC3J66REAeNyofgVXau6WQsHrHMGsBTL9aAr0nrCrkF4Nyyc2Jd
|
133
|
-
do6nYuljuUhORqbEECmmBM2eBtkL6Ac92D6WMBIwBOC5tCNHO2YFIvi8Y8EuE8sc
|
134
|
-
1zB5U5Ai4SIu2icRAhzAhCRaUq02cMWuELKH6Vuh9nzgEefFWty6vPbKEyZLu19D
|
135
|
-
B80aqP1cTN88FjtKQ/eTF29TUB6AefUeBS17e2e3WUMy4nc8tduuOFYfiHP40ScP
|
136
|
-
wOoatwfzpiTIPGbocUEPL+pS0O/Xy8SINxFMCud3zA==
|
137
|
-
=Vd2S
|
138
|
-
-----END PGP PUBLIC KEY BLOCK-----
|
139
|
-
|
140
|
-
David James <davidjames@google.com>
|
141
|
-
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
142
|
-
Version: GnuPG v1
|
143
|
-
|
144
|
-
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
-
h9sAUls16nHiOFp/MRLFFhax8dm33zfED+zHpISFUkMq2Q3UyP6Z6eSpJyYriEF1
|
146
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
wk1m6q7raj22+2HifrM/w5YkNXYcEL/SfusbCo/rtax75fG0lT9whB6OXuzk0CTu
|
162
|
-
zsdBHaYGKCQ+gcalpxqQ/o+xFo0HNI6duCo1zBFAkSX20HZcU5IWr8C2psTuB5zo
|
163
|
-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
-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
-
U3/pvyws6OukV4y3Sr57ACbeQ1am0pCKir2HXB2jmShJfINSyPqhluMz/q1CbYEE
|
166
|
-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
-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
-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
-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
-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
-
teDKmUdkKoF9SCR7ntfrSFP3eXYFFy+wb+IQjVVHAdTgossXKPtNxzdEKQQHJESJ
|
172
|
-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
-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
-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
-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
-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
-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
-
H2Ua0dskiAi9qq4DPYrwPO+OzAT10nn/TqmDABEBAAGJAh8EGAECAAkFAlQKWWsC
|
179
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
190
|
-
IM4=
|
191
|
-
=6VNc
|
192
|
-
-----END PGP PUBLIC KEY BLOCK-----
|
193
|
-
|
194
|
-
Mike Frysinger <vapier@chromium.org>
|
195
|
-
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
196
|
-
Version: GnuPG v1
|
197
|
-
|
198
|
-
mQINBFfYaqQBEAC5M4xbKTZX0MJ9IITJRBjh78/b4z6BcSjJ02nBoyvVuH3yzWJS
|
199
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
CgkQQWM7n+g39YF9ABAAmFSp2SbJg48Q7wkHJuryOwseP1incEE6iTMjvpWLmaoM
|
223
|
-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
-
t/Z6vHAULePZbQFsncXrdyvQaKOmds4alxyzSDraJT74ddM55kmbylkLxVm2DsgF
|
225
|
-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
-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
-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
-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
-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
-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
-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
-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
|
233
|
-
=i88c
|
182
|
+
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
|
213
|
+
cZ7aFsJF4PtcDrfdejyAxbtsSHI=
|
214
|
+
=82Tj
|
234
215
|
-----END PGP PUBLIC KEY BLOCK-----
|
235
216
|
"""
|
236
217
|
|
237
218
|
GIT = 'git' # our git command
|
219
|
+
# NB: The version of git that the repo launcher requires may be much older than
|
220
|
+
# the version of git that the main repo source tree requires. Keeping this at
|
221
|
+
# an older version also makes it easier for users to upgrade/rollback as needed.
|
222
|
+
#
|
223
|
+
# git-1.7 is in (EOL) Ubuntu Precise.
|
238
224
|
MIN_GIT_VERSION = (1, 7, 2) # minimum supported git version
|
239
225
|
repodir = '.repo' # name of repo's private directory
|
240
226
|
S_repo = 'repo' # special repo repository
|
241
227
|
S_manifests = 'manifests' # special manifest repository
|
242
228
|
REPO_MAIN = S_repo + '/main.py' # main script
|
243
|
-
MIN_PYTHON_VERSION = (2, 7) # minimum supported python version
|
244
229
|
GITC_CONFIG_FILE = '/gitc/.config'
|
245
230
|
GITC_FS_ROOT_DIR = '/gitc/manifest-rw/'
|
246
231
|
|
247
232
|
|
233
|
+
import collections
|
248
234
|
import errno
|
249
235
|
import optparse
|
250
|
-
import platform
|
251
236
|
import re
|
252
237
|
import shutil
|
253
238
|
import stat
|
254
|
-
import subprocess
|
255
|
-
import sys
|
256
239
|
|
257
240
|
if sys.version_info[0] == 3:
|
258
241
|
import urllib.request
|
@@ -265,113 +248,175 @@ else:
|
|
265
248
|
urllib.error = urllib2
|
266
249
|
|
267
250
|
|
268
|
-
|
269
|
-
|
270
|
-
end = kwargs.get('end', '\n')
|
271
|
-
out = kwargs.get('file', sys.stdout)
|
272
|
-
out.write(sep.join(objects) + end)
|
251
|
+
home_dot_repo = os.path.expanduser('~/.repoconfig')
|
252
|
+
gpg_dir = os.path.join(home_dot_repo, 'gnupg')
|
273
253
|
|
274
254
|
|
275
|
-
|
276
|
-
|
277
|
-
if
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
255
|
+
def GetParser(gitc_init=False):
|
256
|
+
"""Setup the CLI parser."""
|
257
|
+
if gitc_init:
|
258
|
+
usage = 'repo gitc-init -u url -c client [options]'
|
259
|
+
else:
|
260
|
+
usage = 'repo init -u url [options]'
|
261
|
+
|
262
|
+
parser = optparse.OptionParser(usage=usage)
|
263
|
+
|
264
|
+
# Logging.
|
265
|
+
group = parser.add_option_group('Logging options')
|
266
|
+
group.add_option('-v', '--verbose',
|
267
|
+
dest='output_mode', action='store_true',
|
268
|
+
help='show all output')
|
269
|
+
group.add_option('-q', '--quiet',
|
270
|
+
dest='output_mode', action='store_false',
|
271
|
+
help='only show errors')
|
272
|
+
|
273
|
+
# Manifest.
|
274
|
+
group = parser.add_option_group('Manifest options')
|
275
|
+
group.add_option('-u', '--manifest-url',
|
276
|
+
help='manifest repository location', metavar='URL')
|
277
|
+
group.add_option('-b', '--manifest-branch',
|
278
|
+
help='manifest branch or revision', metavar='REVISION')
|
279
|
+
group.add_option('-m', '--manifest-name',
|
280
|
+
help='initial manifest file', metavar='NAME.xml')
|
281
|
+
cbr_opts = ['--current-branch']
|
282
|
+
# The gitc-init subcommand allocates -c itself, but a lot of init users
|
283
|
+
# want -c, so try to satisfy both as best we can.
|
284
|
+
if not gitc_init:
|
285
|
+
cbr_opts += ['-c']
|
286
|
+
group.add_option(*cbr_opts,
|
287
|
+
dest='current_branch_only', action='store_true',
|
288
|
+
help='fetch only current manifest branch from server')
|
289
|
+
group.add_option('--mirror', action='store_true',
|
290
|
+
help='create a replica of the remote repositories '
|
291
|
+
'rather than a client working directory')
|
292
|
+
group.add_option('--reference',
|
293
|
+
help='location of mirror directory', metavar='DIR')
|
294
|
+
group.add_option('--dissociate', action='store_true',
|
295
|
+
help='dissociate from reference mirrors after clone')
|
296
|
+
group.add_option('--depth', type='int', default=None,
|
297
|
+
help='create a shallow clone with given depth; '
|
298
|
+
'see git clone')
|
299
|
+
group.add_option('--partial-clone', action='store_true',
|
300
|
+
help='perform partial clone (https://git-scm.com/'
|
301
|
+
'docs/gitrepository-layout#_code_partialclone_code)')
|
302
|
+
group.add_option('--clone-filter', action='store', default='blob:none',
|
303
|
+
help='filter for use with --partial-clone '
|
304
|
+
'[default: %default]')
|
305
|
+
group.add_option('--worktree', action='store_true',
|
306
|
+
help=optparse.SUPPRESS_HELP)
|
307
|
+
group.add_option('--archive', action='store_true',
|
308
|
+
help='checkout an archive instead of a git repository for '
|
309
|
+
'each project. See git archive.')
|
310
|
+
group.add_option('--submodules', action='store_true',
|
311
|
+
help='sync any submodules associated with the manifest repo')
|
312
|
+
group.add_option('-g', '--groups', default='default',
|
313
|
+
help='restrict manifest projects to ones with specified '
|
314
|
+
'group(s) [default|all|G1,G2,G3|G4,-G5,-G6]',
|
315
|
+
metavar='GROUP')
|
316
|
+
group.add_option('-p', '--platform', default='auto',
|
317
|
+
help='restrict manifest projects to ones with a specified '
|
318
|
+
'platform group [auto|all|none|linux|darwin|...]',
|
319
|
+
metavar='PLATFORM')
|
320
|
+
group.add_option('--clone-bundle', action='store_true',
|
321
|
+
help='enable use of /clone.bundle on HTTP/HTTPS (default if not --partial-clone)')
|
322
|
+
group.add_option('--no-clone-bundle',
|
323
|
+
dest='clone_bundle', action='store_false',
|
324
|
+
help='disable use of /clone.bundle on HTTP/HTTPS (default if --partial-clone)')
|
325
|
+
group.add_option('--no-tags',
|
326
|
+
dest='tags', default=True, action='store_false',
|
327
|
+
help="don't fetch tags in the manifest")
|
328
|
+
|
329
|
+
# Tool.
|
330
|
+
group = parser.add_option_group('repo Version options')
|
331
|
+
group.add_option('--repo-url', metavar='URL',
|
332
|
+
help='repo repository location ($REPO_URL)')
|
333
|
+
group.add_option('--repo-rev', metavar='REV',
|
334
|
+
help='repo branch or revision ($REPO_REV)')
|
335
|
+
group.add_option('--repo-branch', dest='repo_rev',
|
336
|
+
help=optparse.SUPPRESS_HELP)
|
337
|
+
group.add_option('--no-repo-verify',
|
338
|
+
dest='repo_verify', default=True, action='store_false',
|
339
|
+
help='do not verify repo source code')
|
340
|
+
|
341
|
+
# Other.
|
342
|
+
group = parser.add_option_group('Other options')
|
343
|
+
group.add_option('--config-name',
|
344
|
+
action='store_true', default=False,
|
345
|
+
help='Always prompt for name/e-mail')
|
346
|
+
|
347
|
+
# gitc-init specific settings.
|
348
|
+
if gitc_init:
|
349
|
+
group = parser.add_option_group('GITC options')
|
350
|
+
group.add_option('-f', '--manifest-file',
|
351
|
+
help='Optional manifest file to use for this GITC client.')
|
352
|
+
group.add_option('-c', '--gitc-client',
|
353
|
+
help='Name of the gitc_client instance to create or modify.')
|
354
|
+
|
355
|
+
return parser
|
356
|
+
|
357
|
+
|
358
|
+
# This is a poor replacement for subprocess.run until we require Python 3.6+.
|
359
|
+
RunResult = collections.namedtuple(
|
360
|
+
'RunResult', ('returncode', 'stdout', 'stderr'))
|
285
361
|
|
286
|
-
home_dot_repo = os.path.expanduser('~/.repoconfig')
|
287
|
-
gpg_dir = os.path.join(home_dot_repo, 'gnupg')
|
288
362
|
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
# Tool
|
348
|
-
group = init_optparse.add_option_group('repo Version options')
|
349
|
-
group.add_option('--repo-url',
|
350
|
-
dest='repo_url',
|
351
|
-
help='repo repository location', metavar='URL')
|
352
|
-
group.add_option('--repo-branch',
|
353
|
-
dest='repo_branch',
|
354
|
-
help='repo branch or revision', metavar='REVISION')
|
355
|
-
group.add_option('--no-repo-verify',
|
356
|
-
dest='no_repo_verify', action='store_true',
|
357
|
-
help='do not verify repo source code')
|
358
|
-
|
359
|
-
# Other
|
360
|
-
group = init_optparse.add_option_group('Other options')
|
361
|
-
group.add_option('--config-name',
|
362
|
-
dest='config_name', action="store_true", default=False,
|
363
|
-
help='Always prompt for name/e-mail')
|
364
|
-
|
365
|
-
|
366
|
-
def _GitcInitOptions(init_optparse_arg):
|
367
|
-
init_optparse_arg.set_usage("repo gitc-init -u url -c client [options]")
|
368
|
-
g = init_optparse_arg.add_option_group('GITC options')
|
369
|
-
g.add_option('-f', '--manifest-file',
|
370
|
-
dest='manifest_file',
|
371
|
-
help='Optional manifest file to use for this GITC client.')
|
372
|
-
g.add_option('-c', '--gitc-client',
|
373
|
-
dest='gitc_client',
|
374
|
-
help='The name of the gitc_client instance to create or modify.')
|
363
|
+
class RunError(Exception):
|
364
|
+
"""Error when running a command failed."""
|
365
|
+
|
366
|
+
|
367
|
+
def run_command(cmd, **kwargs):
|
368
|
+
"""Run |cmd| and return its output."""
|
369
|
+
check = kwargs.pop('check', False)
|
370
|
+
if kwargs.pop('capture_output', False):
|
371
|
+
kwargs.setdefault('stdout', subprocess.PIPE)
|
372
|
+
kwargs.setdefault('stderr', subprocess.PIPE)
|
373
|
+
cmd_input = kwargs.pop('input', None)
|
374
|
+
|
375
|
+
def decode(output):
|
376
|
+
"""Decode |output| to text."""
|
377
|
+
if output is None:
|
378
|
+
return output
|
379
|
+
try:
|
380
|
+
return output.decode('utf-8')
|
381
|
+
except UnicodeError:
|
382
|
+
print('repo: warning: Invalid UTF-8 output:\ncmd: %r\n%r' % (cmd, output),
|
383
|
+
file=sys.stderr)
|
384
|
+
# TODO(vapier): Once we require Python 3, use 'backslashreplace'.
|
385
|
+
return output.decode('utf-8', 'replace')
|
386
|
+
|
387
|
+
# Run & package the results.
|
388
|
+
proc = subprocess.Popen(cmd, **kwargs)
|
389
|
+
(stdout, stderr) = proc.communicate(input=cmd_input)
|
390
|
+
dbg = ': ' + ' '.join(cmd)
|
391
|
+
if cmd_input is not None:
|
392
|
+
dbg += ' 0<|'
|
393
|
+
if stdout == subprocess.PIPE:
|
394
|
+
dbg += ' 1>|'
|
395
|
+
if stderr == subprocess.PIPE:
|
396
|
+
dbg += ' 2>|'
|
397
|
+
elif stderr == subprocess.STDOUT:
|
398
|
+
dbg += ' 2>&1'
|
399
|
+
trace.print(dbg)
|
400
|
+
ret = RunResult(proc.returncode, decode(stdout), decode(stderr))
|
401
|
+
|
402
|
+
# If things failed, print useful debugging output.
|
403
|
+
if check and ret.returncode:
|
404
|
+
print('repo: error: "%s" failed with exit status %s' %
|
405
|
+
(cmd[0], ret.returncode), file=sys.stderr)
|
406
|
+
print(' cwd: %s\n cmd: %r' %
|
407
|
+
(kwargs.get('cwd', os.getcwd()), cmd), file=sys.stderr)
|
408
|
+
|
409
|
+
def _print_output(name, output):
|
410
|
+
if output:
|
411
|
+
print(' %s:\n >> %s' % (name, '\n >> '.join(output.splitlines())),
|
412
|
+
file=sys.stderr)
|
413
|
+
|
414
|
+
_print_output('stdout', ret.stdout)
|
415
|
+
_print_output('stderr', ret.stderr)
|
416
|
+
raise RunError(ret)
|
417
|
+
|
418
|
+
return ret
|
419
|
+
|
375
420
|
|
376
421
|
_gitc_manifest_dir = None
|
377
422
|
|
@@ -420,44 +465,63 @@ class CloneFailure(Exception):
|
|
420
465
|
"""
|
421
466
|
|
422
467
|
|
468
|
+
def check_repo_verify(repo_verify, quiet=False):
|
469
|
+
"""Check the --repo-verify state."""
|
470
|
+
if not repo_verify:
|
471
|
+
print('repo: warning: verification of repo code has been disabled;\n'
|
472
|
+
'repo will not be able to verify the integrity of itself.\n',
|
473
|
+
file=sys.stderr)
|
474
|
+
return False
|
475
|
+
|
476
|
+
if NeedSetupGnuPG():
|
477
|
+
return SetupGnuPG(quiet)
|
478
|
+
|
479
|
+
return True
|
480
|
+
|
481
|
+
|
482
|
+
def check_repo_rev(dst, rev, repo_verify=True, quiet=False):
|
483
|
+
"""Check that |rev| is valid."""
|
484
|
+
do_verify = check_repo_verify(repo_verify, quiet=quiet)
|
485
|
+
remote_ref, local_rev = resolve_repo_rev(dst, rev)
|
486
|
+
if not quiet and not remote_ref.startswith('refs/heads/'):
|
487
|
+
print('warning: repo is not tracking a remote branch, so it will not '
|
488
|
+
'receive updates', file=sys.stderr)
|
489
|
+
if do_verify:
|
490
|
+
rev = verify_rev(dst, remote_ref, local_rev, quiet)
|
491
|
+
else:
|
492
|
+
rev = local_rev
|
493
|
+
return (remote_ref, rev)
|
494
|
+
|
495
|
+
|
423
496
|
def _Init(args, gitc_init=False):
|
424
497
|
"""Installs repo by cloning it over the network.
|
425
498
|
"""
|
426
|
-
|
427
|
-
|
428
|
-
opt, args = init_optparse.parse_args(args)
|
499
|
+
parser = GetParser(gitc_init=gitc_init)
|
500
|
+
opt, args = parser.parse_args(args)
|
429
501
|
if args:
|
430
|
-
|
502
|
+
parser.print_usage()
|
431
503
|
sys.exit(1)
|
504
|
+
opt.quiet = opt.output_mode is False
|
505
|
+
opt.verbose = opt.output_mode is True
|
432
506
|
|
433
|
-
|
434
|
-
|
435
|
-
url = REPO_URL
|
436
|
-
extra_args.append('--repo-url=%s' % url)
|
507
|
+
if opt.clone_bundle is None:
|
508
|
+
opt.clone_bundle = False if opt.partial_clone else True
|
437
509
|
|
438
|
-
|
439
|
-
|
440
|
-
branch = REPO_REV
|
441
|
-
extra_args.append('--repo-branch=%s' % branch)
|
442
|
-
|
443
|
-
if branch.startswith('refs/heads/'):
|
444
|
-
branch = branch[len('refs/heads/'):]
|
445
|
-
if branch.startswith('refs/'):
|
446
|
-
_print("fatal: invalid branch name '%s'" % branch, file=sys.stderr)
|
447
|
-
raise CloneFailure()
|
510
|
+
url = opt.repo_url or REPO_URL
|
511
|
+
rev = opt.repo_rev or REPO_REV
|
448
512
|
|
449
513
|
try:
|
450
514
|
if gitc_init:
|
451
515
|
gitc_manifest_dir = get_gitc_manifest_dir()
|
452
516
|
if not gitc_manifest_dir:
|
453
|
-
|
454
|
-
|
517
|
+
print('fatal: GITC filesystem is not available. Exiting...',
|
518
|
+
file=sys.stderr)
|
455
519
|
sys.exit(1)
|
456
520
|
gitc_client = opt.gitc_client
|
457
521
|
if not gitc_client:
|
458
522
|
gitc_client = gitc_parse_clientdir(os.getcwd())
|
459
523
|
if not gitc_client:
|
460
|
-
|
524
|
+
print('fatal: GITC client (-c) is required.', file=sys.stderr)
|
461
525
|
sys.exit(1)
|
462
526
|
client_dir = os.path.join(gitc_manifest_dir, gitc_client)
|
463
527
|
if not os.path.exists(client_dir):
|
@@ -470,8 +534,8 @@ def _Init(args, gitc_init=False):
|
|
470
534
|
os.mkdir(repodir)
|
471
535
|
except OSError as e:
|
472
536
|
if e.errno != errno.EEXIST:
|
473
|
-
|
474
|
-
|
537
|
+
print('fatal: cannot make %s directory: %s'
|
538
|
+
% (repodir, e.strerror), file=sys.stderr)
|
475
539
|
# Don't raise CloneFailure; that would delete the
|
476
540
|
# name. Instead exit immediately.
|
477
541
|
#
|
@@ -479,73 +543,115 @@ def _Init(args, gitc_init=False):
|
|
479
543
|
|
480
544
|
_CheckGitVersion()
|
481
545
|
try:
|
482
|
-
if
|
483
|
-
|
484
|
-
else:
|
485
|
-
can_verify = True
|
486
|
-
|
546
|
+
if not opt.quiet:
|
547
|
+
print('Downloading Repo source from', url)
|
487
548
|
dst = os.path.abspath(os.path.join(repodir, S_repo))
|
488
|
-
_Clone(url, dst, opt.quiet,
|
549
|
+
_Clone(url, dst, opt.clone_bundle, opt.quiet, opt.verbose)
|
489
550
|
|
490
|
-
|
491
|
-
|
492
|
-
"REPO_URL set correctly?" % url, file=sys.stderr)
|
551
|
+
remote_ref, rev = check_repo_rev(dst, rev, opt.repo_verify, quiet=opt.quiet)
|
552
|
+
_Checkout(dst, remote_ref, rev, opt.quiet)
|
493
553
|
|
494
|
-
if
|
495
|
-
|
496
|
-
|
497
|
-
rev = 'refs/remotes/origin/%s^0' % branch
|
554
|
+
if not os.path.isfile(os.path.join(dst, 'repo')):
|
555
|
+
print("warning: '%s' does not look like a git-repo repository, is "
|
556
|
+
"REPO_URL set correctly?" % url, file=sys.stderr)
|
498
557
|
|
499
|
-
_Checkout(dst, branch, rev, opt.quiet)
|
500
558
|
except CloneFailure:
|
501
559
|
if opt.quiet:
|
502
|
-
|
503
|
-
|
560
|
+
print('fatal: repo init failed; run without --quiet to see why',
|
561
|
+
file=sys.stderr)
|
504
562
|
raise
|
505
563
|
|
506
564
|
|
507
|
-
def
|
565
|
+
def run_git(*args, **kwargs):
|
566
|
+
"""Run git and return execution details."""
|
567
|
+
kwargs.setdefault('capture_output', True)
|
568
|
+
kwargs.setdefault('check', True)
|
569
|
+
try:
|
570
|
+
return run_command([GIT] + list(args), **kwargs)
|
571
|
+
except OSError as e:
|
572
|
+
print(file=sys.stderr)
|
573
|
+
print('repo: error: "%s" is not available' % GIT, file=sys.stderr)
|
574
|
+
print('repo: error: %s' % e, file=sys.stderr)
|
575
|
+
print(file=sys.stderr)
|
576
|
+
print('Please make sure %s is installed and in your path.' % GIT,
|
577
|
+
file=sys.stderr)
|
578
|
+
sys.exit(1)
|
579
|
+
except RunError:
|
580
|
+
raise CloneFailure()
|
581
|
+
|
582
|
+
|
583
|
+
# The git version info broken down into components for easy analysis.
|
584
|
+
# Similar to Python's sys.version_info.
|
585
|
+
GitVersion = collections.namedtuple(
|
586
|
+
'GitVersion', ('major', 'minor', 'micro', 'full'))
|
587
|
+
|
588
|
+
|
589
|
+
def ParseGitVersion(ver_str=None):
|
590
|
+
if ver_str is None:
|
591
|
+
# Load the version ourselves.
|
592
|
+
ver_str = run_git('--version').stdout
|
593
|
+
|
508
594
|
if not ver_str.startswith('git version '):
|
509
595
|
return None
|
510
596
|
|
511
|
-
|
597
|
+
full_version = ver_str[len('git version '):].strip()
|
598
|
+
num_ver_str = full_version.split('-')[0]
|
512
599
|
to_tuple = []
|
513
600
|
for num_str in num_ver_str.split('.')[:3]:
|
514
601
|
if num_str.isdigit():
|
515
602
|
to_tuple.append(int(num_str))
|
516
603
|
else:
|
517
604
|
to_tuple.append(0)
|
518
|
-
|
605
|
+
to_tuple.append(full_version)
|
606
|
+
return GitVersion(*to_tuple)
|
519
607
|
|
520
608
|
|
521
609
|
def _CheckGitVersion():
|
522
|
-
|
523
|
-
try:
|
524
|
-
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
|
525
|
-
except OSError as e:
|
526
|
-
_print(file=sys.stderr)
|
527
|
-
_print("fatal: '%s' is not available" % GIT, file=sys.stderr)
|
528
|
-
_print('fatal: %s' % e, file=sys.stderr)
|
529
|
-
_print(file=sys.stderr)
|
530
|
-
_print('Please make sure %s is installed and in your path.' % GIT,
|
531
|
-
file=sys.stderr)
|
532
|
-
raise CloneFailure()
|
533
|
-
|
534
|
-
ver_str = proc.stdout.read().strip()
|
535
|
-
proc.stdout.close()
|
536
|
-
proc.wait()
|
537
|
-
|
538
|
-
ver_act = ParseGitVersion(ver_str)
|
610
|
+
ver_act = ParseGitVersion()
|
539
611
|
if ver_act is None:
|
540
|
-
|
612
|
+
print('fatal: unable to detect git version', file=sys.stderr)
|
541
613
|
raise CloneFailure()
|
542
614
|
|
543
615
|
if ver_act < MIN_GIT_VERSION:
|
544
616
|
need = '.'.join(map(str, MIN_GIT_VERSION))
|
545
|
-
|
617
|
+
print('fatal: git %s or later required; found %s' % (need, ver_act.full),
|
618
|
+
file=sys.stderr)
|
546
619
|
raise CloneFailure()
|
547
620
|
|
548
621
|
|
622
|
+
def SetGitTrace2ParentSid(env=None):
|
623
|
+
"""Set up GIT_TRACE2_PARENT_SID for git tracing."""
|
624
|
+
# We roughly follow the format git itself uses in trace2/tr2_sid.c.
|
625
|
+
# (1) Be unique (2) be valid filename (3) be fixed length.
|
626
|
+
#
|
627
|
+
# Since we always export this variable, we try to avoid more expensive calls.
|
628
|
+
# e.g. We don't attempt hostname lookups or hashing the results.
|
629
|
+
if env is None:
|
630
|
+
env = os.environ
|
631
|
+
|
632
|
+
KEY = 'GIT_TRACE2_PARENT_SID'
|
633
|
+
|
634
|
+
now = datetime.datetime.utcnow()
|
635
|
+
value = 'repo-%s-P%08x' % (now.strftime('%Y%m%dT%H%M%SZ'), os.getpid())
|
636
|
+
|
637
|
+
# If it's already set, then append ourselves.
|
638
|
+
if KEY in env:
|
639
|
+
value = env[KEY] + '/' + value
|
640
|
+
|
641
|
+
_setenv(KEY, value, env=env)
|
642
|
+
|
643
|
+
|
644
|
+
def _setenv(key, value, env=None):
|
645
|
+
"""Set |key| in the OS environment |env| to |value|."""
|
646
|
+
if env is None:
|
647
|
+
env = os.environ
|
648
|
+
# Environment handling across systems is messy.
|
649
|
+
try:
|
650
|
+
env[key] = value
|
651
|
+
except UnicodeEncodeError:
|
652
|
+
env[key] = value.encode()
|
653
|
+
|
654
|
+
|
549
655
|
def NeedSetupGnuPG():
|
550
656
|
if not os.path.isdir(home_dot_repo):
|
551
657
|
return True
|
@@ -569,56 +675,66 @@ def SetupGnuPG(quiet):
|
|
569
675
|
os.mkdir(home_dot_repo)
|
570
676
|
except OSError as e:
|
571
677
|
if e.errno != errno.EEXIST:
|
572
|
-
|
573
|
-
|
678
|
+
print('fatal: cannot make %s directory: %s'
|
679
|
+
% (home_dot_repo, e.strerror), file=sys.stderr)
|
574
680
|
sys.exit(1)
|
575
681
|
|
576
682
|
try:
|
577
683
|
os.mkdir(gpg_dir, stat.S_IRWXU)
|
578
684
|
except OSError as e:
|
579
685
|
if e.errno != errno.EEXIST:
|
580
|
-
|
581
|
-
|
686
|
+
print('fatal: cannot make %s directory: %s' % (gpg_dir, e.strerror),
|
687
|
+
file=sys.stderr)
|
582
688
|
sys.exit(1)
|
583
689
|
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
690
|
+
if not quiet:
|
691
|
+
print('repo: Updating release signing keys to keyset ver %s' %
|
692
|
+
('.'.join(str(x) for x in KEYRING_VERSION),))
|
693
|
+
# NB: We use --homedir (and cwd below) because some environments (Windows) do
|
694
|
+
# not correctly handle full native paths. We avoid the issue by changing to
|
695
|
+
# the right dir with cwd=gpg_dir before executing gpg, and then telling gpg to
|
696
|
+
# use the cwd (.) as its homedir which leaves the path resolution logic to it.
|
697
|
+
cmd = ['gpg', '--homedir', '.', '--import']
|
591
698
|
try:
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
699
|
+
# gpg can be pretty chatty. Always capture the output and if something goes
|
700
|
+
# wrong, the builtin check failure will dump stdout & stderr for debugging.
|
701
|
+
run_command(cmd, stdin=subprocess.PIPE, capture_output=True,
|
702
|
+
cwd=gpg_dir, check=True,
|
703
|
+
input=MAINTAINER_KEYS.encode('utf-8'))
|
704
|
+
except OSError:
|
596
705
|
if not quiet:
|
597
|
-
|
598
|
-
|
599
|
-
|
706
|
+
print('warning: gpg (GnuPG) is not available.', file=sys.stderr)
|
707
|
+
print('warning: Installing it is strongly encouraged.', file=sys.stderr)
|
708
|
+
print(file=sys.stderr)
|
600
709
|
return False
|
601
710
|
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
if proc.wait() != 0:
|
606
|
-
_print('fatal: registering repo maintainer keys failed', file=sys.stderr)
|
607
|
-
sys.exit(1)
|
608
|
-
_print()
|
609
|
-
|
610
|
-
fd = open(os.path.join(home_dot_repo, 'keyring-version'), 'w')
|
611
|
-
fd.write('.'.join(map(str, KEYRING_VERSION)) + '\n')
|
612
|
-
fd.close()
|
711
|
+
with open(os.path.join(home_dot_repo, 'keyring-version'), 'w') as fd:
|
712
|
+
fd.write('.'.join(map(str, KEYRING_VERSION)) + '\n')
|
613
713
|
return True
|
614
714
|
|
615
715
|
|
616
|
-
def _SetConfig(
|
716
|
+
def _SetConfig(cwd, name, value):
|
617
717
|
"""Set a git configuration option to the specified value.
|
618
718
|
"""
|
619
|
-
|
620
|
-
|
621
|
-
|
719
|
+
run_git('config', name, value, cwd=cwd)
|
720
|
+
|
721
|
+
|
722
|
+
def _GetRepoConfig(name):
|
723
|
+
"""Read a repo configuration option."""
|
724
|
+
config = os.path.join(home_dot_repo, 'config')
|
725
|
+
if not os.path.exists(config):
|
726
|
+
return None
|
727
|
+
|
728
|
+
cmd = ['config', '--file', config, '--get', name]
|
729
|
+
ret = run_git(*cmd, check=False)
|
730
|
+
if ret.returncode == 0:
|
731
|
+
return ret.stdout
|
732
|
+
elif ret.returncode == 1:
|
733
|
+
return None
|
734
|
+
else:
|
735
|
+
print('repo: error: git %s failed:\n%s' % (' '.join(cmd), ret.stderr),
|
736
|
+
file=sys.stderr)
|
737
|
+
raise RunError()
|
622
738
|
|
623
739
|
|
624
740
|
def _InitHttp():
|
@@ -632,7 +748,7 @@ def _InitHttp():
|
|
632
748
|
p = n.hosts[host]
|
633
749
|
mgr.add_password(p[1], 'http://%s/' % host, p[0], p[2])
|
634
750
|
mgr.add_password(p[1], 'https://%s/' % host, p[0], p[2])
|
635
|
-
except
|
751
|
+
except Exception:
|
636
752
|
pass
|
637
753
|
handlers.append(urllib.request.HTTPBasicAuthHandler(mgr))
|
638
754
|
handlers.append(urllib.request.HTTPDigestAuthHandler(mgr))
|
@@ -646,38 +762,29 @@ def _InitHttp():
|
|
646
762
|
urllib.request.install_opener(urllib.request.build_opener(*handlers))
|
647
763
|
|
648
764
|
|
649
|
-
def _Fetch(url,
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
cmd = [GIT, 'fetch']
|
654
|
-
if quiet:
|
765
|
+
def _Fetch(url, cwd, src, quiet, verbose):
|
766
|
+
cmd = ['fetch']
|
767
|
+
if not verbose:
|
655
768
|
cmd.append('--quiet')
|
769
|
+
err = None
|
770
|
+
if not quiet and sys.stdout.isatty():
|
771
|
+
cmd.append('--progress')
|
772
|
+
elif not verbose:
|
656
773
|
err = subprocess.PIPE
|
657
|
-
else:
|
658
|
-
err = None
|
659
774
|
cmd.append(src)
|
660
775
|
cmd.append('+refs/heads/*:refs/remotes/origin/*')
|
661
|
-
cmd.append('refs/tags/*:refs/tags/*')
|
662
|
-
|
663
|
-
proc = subprocess.Popen(cmd, cwd=local, stderr=err)
|
664
|
-
if err:
|
665
|
-
proc.stderr.read()
|
666
|
-
proc.stderr.close()
|
667
|
-
if proc.wait() != 0:
|
668
|
-
raise CloneFailure()
|
776
|
+
cmd.append('+refs/tags/*:refs/tags/*')
|
777
|
+
run_git(*cmd, stderr=err, capture_output=False, cwd=cwd)
|
669
778
|
|
670
779
|
|
671
|
-
def _DownloadBundle(url,
|
780
|
+
def _DownloadBundle(url, cwd, quiet, verbose):
|
672
781
|
if not url.endswith('/'):
|
673
782
|
url += '/'
|
674
783
|
url += 'clone.bundle'
|
675
784
|
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
stdout=subprocess.PIPE)
|
680
|
-
for line in proc.stdout:
|
785
|
+
ret = run_git('config', '--get-regexp', 'url.*.insteadof', cwd=cwd,
|
786
|
+
check=False)
|
787
|
+
for line in ret.stdout.splitlines():
|
681
788
|
m = re.compile(r'^url\.(.*)\.insteadof (.*)$').match(line)
|
682
789
|
if m:
|
683
790
|
new_url = m.group(1)
|
@@ -685,32 +792,30 @@ def _DownloadBundle(url, local, quiet):
|
|
685
792
|
if url.startswith(old_url):
|
686
793
|
url = new_url + url[len(old_url):]
|
687
794
|
break
|
688
|
-
proc.stdout.close()
|
689
|
-
proc.wait()
|
690
795
|
|
691
796
|
if not url.startswith('http:') and not url.startswith('https:'):
|
692
797
|
return False
|
693
798
|
|
694
|
-
dest = open(os.path.join(
|
799
|
+
dest = open(os.path.join(cwd, '.git', 'clone.bundle'), 'w+b')
|
695
800
|
try:
|
696
801
|
try:
|
697
802
|
r = urllib.request.urlopen(url)
|
698
803
|
except urllib.error.HTTPError as e:
|
699
804
|
if e.code in [401, 403, 404, 501]:
|
700
805
|
return False
|
701
|
-
|
702
|
-
|
806
|
+
print('fatal: Cannot get %s' % url, file=sys.stderr)
|
807
|
+
print('fatal: HTTP error %s' % e.code, file=sys.stderr)
|
703
808
|
raise CloneFailure()
|
704
809
|
except urllib.error.URLError as e:
|
705
|
-
|
706
|
-
|
810
|
+
print('fatal: Cannot get %s' % url, file=sys.stderr)
|
811
|
+
print('fatal: error %s' % e.reason, file=sys.stderr)
|
707
812
|
raise CloneFailure()
|
708
813
|
try:
|
709
|
-
if
|
710
|
-
|
814
|
+
if verbose:
|
815
|
+
print('Downloading clone bundle %s' % url, file=sys.stderr)
|
711
816
|
while True:
|
712
817
|
buf = r.read(8192)
|
713
|
-
if buf
|
818
|
+
if not buf:
|
714
819
|
return True
|
715
820
|
dest.write(buf)
|
716
821
|
finally:
|
@@ -719,124 +824,139 @@ def _DownloadBundle(url, local, quiet):
|
|
719
824
|
dest.close()
|
720
825
|
|
721
826
|
|
722
|
-
def _ImportBundle(
|
723
|
-
path = os.path.join(
|
827
|
+
def _ImportBundle(cwd):
|
828
|
+
path = os.path.join(cwd, '.git', 'clone.bundle')
|
724
829
|
try:
|
725
|
-
_Fetch(
|
830
|
+
_Fetch(cwd, cwd, path, True, False)
|
726
831
|
finally:
|
727
832
|
os.remove(path)
|
728
833
|
|
729
834
|
|
730
|
-
def _Clone(url,
|
835
|
+
def _Clone(url, cwd, clone_bundle, quiet, verbose):
|
731
836
|
"""Clones a git repository to a new subdirectory of repodir
|
732
837
|
"""
|
733
|
-
|
734
|
-
|
735
|
-
except OSError as e:
|
736
|
-
_print('fatal: cannot make %s directory: %s' % (local, e.strerror),
|
737
|
-
file=sys.stderr)
|
738
|
-
raise CloneFailure()
|
838
|
+
if verbose:
|
839
|
+
print('Cloning git repository', url)
|
739
840
|
|
740
|
-
cmd = [GIT, 'init', '--quiet']
|
741
841
|
try:
|
742
|
-
|
842
|
+
os.mkdir(cwd)
|
743
843
|
except OSError as e:
|
744
|
-
|
745
|
-
|
746
|
-
_print('fatal: %s' % e, file=sys.stderr)
|
747
|
-
_print(file=sys.stderr)
|
748
|
-
_print('Please make sure %s is installed and in your path.' % GIT,
|
749
|
-
file=sys.stderr)
|
750
|
-
raise CloneFailure()
|
751
|
-
if proc.wait() != 0:
|
752
|
-
_print('fatal: could not create %s' % local, file=sys.stderr)
|
844
|
+
print('fatal: cannot make %s directory: %s' % (cwd, e.strerror),
|
845
|
+
file=sys.stderr)
|
753
846
|
raise CloneFailure()
|
754
847
|
|
848
|
+
run_git('init', '--quiet', cwd=cwd)
|
849
|
+
|
755
850
|
_InitHttp()
|
756
|
-
_SetConfig(
|
757
|
-
_SetConfig(
|
851
|
+
_SetConfig(cwd, 'remote.origin.url', url)
|
852
|
+
_SetConfig(cwd,
|
758
853
|
'remote.origin.fetch',
|
759
854
|
'+refs/heads/*:refs/remotes/origin/*')
|
760
|
-
if clone_bundle and _DownloadBundle(url,
|
761
|
-
_ImportBundle(
|
762
|
-
_Fetch(url,
|
855
|
+
if clone_bundle and _DownloadBundle(url, cwd, quiet, verbose):
|
856
|
+
_ImportBundle(cwd)
|
857
|
+
_Fetch(url, cwd, 'origin', quiet, verbose)
|
763
858
|
|
764
859
|
|
765
|
-
def
|
766
|
-
"""
|
860
|
+
def resolve_repo_rev(cwd, committish):
|
861
|
+
"""Figure out what REPO_REV represents.
|
862
|
+
|
863
|
+
We support:
|
864
|
+
* refs/heads/xxx: Branch.
|
865
|
+
* refs/tags/xxx: Tag.
|
866
|
+
* xxx: Branch or tag or commit.
|
867
|
+
|
868
|
+
Args:
|
869
|
+
cwd: The git checkout to run in.
|
870
|
+
committish: The REPO_REV argument to resolve.
|
871
|
+
|
872
|
+
Returns:
|
873
|
+
A tuple of (remote ref, commit) as makes sense for the committish.
|
874
|
+
For branches, this will look like ('refs/heads/stable', <revision>).
|
875
|
+
For tags, this will look like ('refs/tags/v1.0', <revision>).
|
876
|
+
For commits, this will be (<revision>, <revision>).
|
767
877
|
"""
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
878
|
+
def resolve(committish):
|
879
|
+
ret = run_git('rev-parse', '--verify', '%s^{commit}' % (committish,),
|
880
|
+
cwd=cwd, check=False)
|
881
|
+
return None if ret.returncode else ret.stdout.strip()
|
882
|
+
|
883
|
+
# An explicit branch.
|
884
|
+
if committish.startswith('refs/heads/'):
|
885
|
+
remote_ref = committish
|
886
|
+
committish = committish[len('refs/heads/'):]
|
887
|
+
rev = resolve('refs/remotes/origin/%s' % committish)
|
888
|
+
if rev is None:
|
889
|
+
print('repo: error: unknown branch "%s"' % (committish,),
|
890
|
+
file=sys.stderr)
|
891
|
+
raise CloneFailure()
|
892
|
+
return (remote_ref, rev)
|
893
|
+
|
894
|
+
# An explicit tag.
|
895
|
+
if committish.startswith('refs/tags/'):
|
896
|
+
remote_ref = committish
|
897
|
+
committish = committish[len('refs/tags/'):]
|
898
|
+
rev = resolve(remote_ref)
|
899
|
+
if rev is None:
|
900
|
+
print('repo: error: unknown tag "%s"' % (committish,),
|
901
|
+
file=sys.stderr)
|
902
|
+
raise CloneFailure()
|
903
|
+
return (remote_ref, rev)
|
904
|
+
|
905
|
+
# See if it's a short branch name.
|
906
|
+
rev = resolve('refs/remotes/origin/%s' % committish)
|
907
|
+
if rev:
|
908
|
+
return ('refs/heads/%s' % (committish,), rev)
|
909
|
+
|
910
|
+
# See if it's a tag.
|
911
|
+
rev = resolve('refs/tags/%s' % committish)
|
912
|
+
if rev:
|
913
|
+
return ('refs/tags/%s' % (committish,), rev)
|
914
|
+
|
915
|
+
# See if it's a commit.
|
916
|
+
rev = resolve(committish)
|
917
|
+
if rev and rev.lower().startswith(committish.lower()):
|
918
|
+
return (rev, rev)
|
919
|
+
|
920
|
+
# Give up!
|
921
|
+
print('repo: error: unable to resolve "%s"' % (committish,), file=sys.stderr)
|
922
|
+
raise CloneFailure()
|
923
|
+
|
924
|
+
|
925
|
+
def verify_rev(cwd, remote_ref, rev, quiet):
|
926
|
+
"""Verify the commit has been signed by a tag."""
|
927
|
+
ret = run_git('describe', rev, cwd=cwd)
|
928
|
+
cur = ret.stdout.strip()
|
783
929
|
|
784
930
|
m = re.compile(r'^(.*)-[0-9]{1,}-g[0-9a-f]{1,}$').match(cur)
|
785
931
|
if m:
|
786
932
|
cur = m.group(1)
|
787
933
|
if not quiet:
|
788
|
-
|
789
|
-
|
790
|
-
|
791
|
-
|
934
|
+
print(file=sys.stderr)
|
935
|
+
print("warning: '%s' is not signed; falling back to signed release '%s'"
|
936
|
+
% (remote_ref, cur), file=sys.stderr)
|
937
|
+
print(file=sys.stderr)
|
792
938
|
|
793
939
|
env = os.environ.copy()
|
794
|
-
|
795
|
-
|
796
|
-
except UnicodeEncodeError:
|
797
|
-
env['GNUPGHOME'] = gpg_dir.encode()
|
798
|
-
|
799
|
-
cmd = [GIT, 'tag', '-v', cur]
|
800
|
-
proc = subprocess.Popen(cmd,
|
801
|
-
stdout=subprocess.PIPE,
|
802
|
-
stderr=subprocess.PIPE,
|
803
|
-
cwd=cwd,
|
804
|
-
env=env)
|
805
|
-
out = proc.stdout.read()
|
806
|
-
proc.stdout.close()
|
807
|
-
|
808
|
-
err = proc.stderr.read()
|
809
|
-
proc.stderr.close()
|
810
|
-
|
811
|
-
if proc.wait() != 0:
|
812
|
-
_print(file=sys.stderr)
|
813
|
-
_print(out, file=sys.stderr)
|
814
|
-
_print(err, file=sys.stderr)
|
815
|
-
_print(file=sys.stderr)
|
816
|
-
raise CloneFailure()
|
940
|
+
_setenv('GNUPGHOME', gpg_dir, env)
|
941
|
+
run_git('tag', '-v', cur, cwd=cwd, env=env)
|
817
942
|
return '%s^0' % cur
|
818
943
|
|
819
944
|
|
820
|
-
def _Checkout(cwd,
|
945
|
+
def _Checkout(cwd, remote_ref, rev, quiet):
|
821
946
|
"""Checkout an upstream branch into the repository and track it.
|
822
947
|
"""
|
823
|
-
|
824
|
-
if subprocess.Popen(cmd, cwd=cwd).wait() != 0:
|
825
|
-
raise CloneFailure()
|
948
|
+
run_git('update-ref', 'refs/heads/default', rev, cwd=cwd)
|
826
949
|
|
827
950
|
_SetConfig(cwd, 'branch.default.remote', 'origin')
|
828
|
-
_SetConfig(cwd, 'branch.default.merge',
|
951
|
+
_SetConfig(cwd, 'branch.default.merge', remote_ref)
|
829
952
|
|
830
|
-
|
831
|
-
if subprocess.Popen(cmd, cwd=cwd).wait() != 0:
|
832
|
-
raise CloneFailure()
|
953
|
+
run_git('symbolic-ref', 'HEAD', 'refs/heads/default', cwd=cwd)
|
833
954
|
|
834
|
-
cmd = [
|
955
|
+
cmd = ['read-tree', '--reset', '-u']
|
835
956
|
if not quiet:
|
836
957
|
cmd.append('-v')
|
837
958
|
cmd.append('HEAD')
|
838
|
-
|
839
|
-
raise CloneFailure()
|
959
|
+
run_git(*cmd, cwd=cwd)
|
840
960
|
|
841
961
|
|
842
962
|
def _FindRepo():
|
@@ -859,6 +979,26 @@ def _FindRepo():
|
|
859
979
|
|
860
980
|
class _Options(object):
|
861
981
|
help = False
|
982
|
+
version = False
|
983
|
+
|
984
|
+
|
985
|
+
def _ExpandAlias(name):
|
986
|
+
"""Look up user registered aliases."""
|
987
|
+
# We don't resolve aliases for existing subcommands. This matches git.
|
988
|
+
if name in {'gitc-init', 'help', 'init'}:
|
989
|
+
return name, []
|
990
|
+
|
991
|
+
alias = _GetRepoConfig('alias.%s' % (name,))
|
992
|
+
if alias is None:
|
993
|
+
return name, []
|
994
|
+
|
995
|
+
args = alias.strip().split(' ', 1)
|
996
|
+
name = args[0]
|
997
|
+
if len(args) == 2:
|
998
|
+
args = shlex.split(args[1])
|
999
|
+
else:
|
1000
|
+
args = []
|
1001
|
+
return name, args
|
862
1002
|
|
863
1003
|
|
864
1004
|
def _ParseArguments(args):
|
@@ -870,7 +1010,10 @@ def _ParseArguments(args):
|
|
870
1010
|
a = args[i]
|
871
1011
|
if a == '-h' or a == '--help':
|
872
1012
|
opt.help = True
|
873
|
-
|
1013
|
+
elif a == '--version':
|
1014
|
+
opt.version = True
|
1015
|
+
elif a == '--trace':
|
1016
|
+
trace.set(True)
|
874
1017
|
elif not a.startswith('-'):
|
875
1018
|
cmd = a
|
876
1019
|
arg = args[i + 1:]
|
@@ -883,7 +1026,7 @@ def _Usage():
|
|
883
1026
|
if get_gitc_manifest_dir():
|
884
1027
|
gitc_usage = " gitc-init Initialize a GITC Client.\n"
|
885
1028
|
|
886
|
-
|
1029
|
+
print(
|
887
1030
|
"""usage: repo COMMAND [ARGS]
|
888
1031
|
|
889
1032
|
repo is not yet installed. Use "repo init" to install it here.
|
@@ -895,37 +1038,52 @@ The most commonly used repo commands are:
|
|
895
1038
|
""" help Display detailed help on a command
|
896
1039
|
|
897
1040
|
For access to the full online help, install repo ("repo init").
|
898
|
-
"""
|
899
|
-
sys.exit(
|
1041
|
+
""")
|
1042
|
+
sys.exit(0)
|
900
1043
|
|
901
1044
|
|
902
1045
|
def _Help(args):
|
903
1046
|
if args:
|
904
|
-
if args[0]
|
905
|
-
|
906
|
-
|
907
|
-
elif args[0] == 'gitc-init':
|
908
|
-
_GitcInitOptions(init_optparse)
|
909
|
-
init_optparse.print_help()
|
1047
|
+
if args[0] in {'init', 'gitc-init'}:
|
1048
|
+
parser = GetParser(gitc_init=args[0] == 'gitc-init')
|
1049
|
+
parser.print_help()
|
910
1050
|
sys.exit(0)
|
911
1051
|
else:
|
912
|
-
|
913
|
-
|
914
|
-
|
1052
|
+
print("error: '%s' is not a bootstrap command.\n"
|
1053
|
+
' For access to online help, install repo ("repo init").'
|
1054
|
+
% args[0], file=sys.stderr)
|
915
1055
|
else:
|
916
1056
|
_Usage()
|
917
1057
|
sys.exit(1)
|
918
1058
|
|
919
1059
|
|
1060
|
+
def _Version():
|
1061
|
+
"""Show version information."""
|
1062
|
+
print('<repo not installed>')
|
1063
|
+
print('repo launcher version %s' % ('.'.join(str(x) for x in VERSION),))
|
1064
|
+
print(' (from %s)' % (__file__,))
|
1065
|
+
print('git %s' % (ParseGitVersion().full,))
|
1066
|
+
print('Python %s' % sys.version)
|
1067
|
+
uname = platform.uname()
|
1068
|
+
if sys.version_info.major < 3:
|
1069
|
+
# Python 3 returns a named tuple, but Python 2 is simpler.
|
1070
|
+
print(uname)
|
1071
|
+
else:
|
1072
|
+
print('OS %s %s (%s)' % (uname.system, uname.release, uname.version))
|
1073
|
+
print('CPU %s (%s)' %
|
1074
|
+
(uname.machine, uname.processor if uname.processor else 'unknown'))
|
1075
|
+
sys.exit(0)
|
1076
|
+
|
1077
|
+
|
920
1078
|
def _NotInstalled():
|
921
|
-
|
922
|
-
|
1079
|
+
print('error: repo is not installed. Use "repo init" to install it here.',
|
1080
|
+
file=sys.stderr)
|
923
1081
|
sys.exit(1)
|
924
1082
|
|
925
1083
|
|
926
1084
|
def _NoCommands(cmd):
|
927
|
-
|
928
|
-
|
1085
|
+
print("""error: command '%s' requires repo to be installed first.
|
1086
|
+
Use "repo init" to install it here.""" % cmd, file=sys.stderr)
|
929
1087
|
sys.exit(1)
|
930
1088
|
|
931
1089
|
|
@@ -949,26 +1107,26 @@ def _SetDefaultsTo(gitdir):
|
|
949
1107
|
global REPO_REV
|
950
1108
|
|
951
1109
|
REPO_URL = gitdir
|
952
|
-
|
953
|
-
|
954
|
-
|
955
|
-
|
956
|
-
|
957
|
-
|
958
|
-
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
-
|
963
|
-
|
964
|
-
if proc.wait() != 0:
|
965
|
-
_print('fatal: %s has no current branch' % gitdir, file=sys.stderr)
|
966
|
-
sys.exit(1)
|
1110
|
+
ret = run_git('--git-dir=%s' % gitdir, 'symbolic-ref', 'HEAD', check=False)
|
1111
|
+
if ret.returncode:
|
1112
|
+
# If we're not tracking a branch (bisect/etc...), then fall back to commit.
|
1113
|
+
print('repo: warning: %s has no current branch; using HEAD' % gitdir,
|
1114
|
+
file=sys.stderr)
|
1115
|
+
try:
|
1116
|
+
ret = run_git('rev-parse', 'HEAD', cwd=gitdir)
|
1117
|
+
except CloneFailure:
|
1118
|
+
print('fatal: %s has invalid HEAD' % gitdir, file=sys.stderr)
|
1119
|
+
sys.exit(1)
|
1120
|
+
|
1121
|
+
REPO_REV = ret.stdout.strip()
|
967
1122
|
|
968
1123
|
|
969
1124
|
def main(orig_args):
|
970
1125
|
cmd, opt, args = _ParseArguments(orig_args)
|
971
1126
|
|
1127
|
+
# We run this early as we run some git commands ourselves.
|
1128
|
+
SetGitTrace2ParentSid()
|
1129
|
+
|
972
1130
|
repo_main, rel_repo_dir = None, None
|
973
1131
|
# Don't use the local repo copy, make sure to switch to the gitc client first.
|
974
1132
|
if cmd != 'gitc-init':
|
@@ -979,16 +1137,23 @@ def main(orig_args):
|
|
979
1137
|
|
980
1138
|
cwd = os.getcwd()
|
981
1139
|
if get_gitc_manifest_dir() and cwd.startswith(get_gitc_manifest_dir()):
|
982
|
-
|
983
|
-
|
984
|
-
|
985
|
-
|
1140
|
+
print('error: repo cannot be used in the GITC local manifest directory.'
|
1141
|
+
'\nIf you want to work on this GITC client please rerun this '
|
1142
|
+
'command from the corresponding client under /gitc/',
|
1143
|
+
file=sys.stderr)
|
986
1144
|
sys.exit(1)
|
987
1145
|
if not repo_main:
|
1146
|
+
# Only expand aliases here since we'll be parsing the CLI ourselves.
|
1147
|
+
# If we had repo_main, alias expansion would happen in main.py.
|
1148
|
+
cmd, alias_args = _ExpandAlias(cmd)
|
1149
|
+
args = alias_args + args
|
1150
|
+
|
988
1151
|
if opt.help:
|
989
1152
|
_Usage()
|
990
1153
|
if cmd == 'help':
|
991
1154
|
_Help(args)
|
1155
|
+
if opt.version or cmd == 'version':
|
1156
|
+
_Version()
|
992
1157
|
if not cmd:
|
993
1158
|
_NotInstalled()
|
994
1159
|
if cmd == 'init' or cmd == 'gitc-init':
|
@@ -998,8 +1163,8 @@ def main(orig_args):
|
|
998
1163
|
_Init(args, gitc_init=(cmd == 'gitc-init'))
|
999
1164
|
except CloneFailure:
|
1000
1165
|
path = os.path.join(repodir, S_repo)
|
1001
|
-
|
1002
|
-
|
1166
|
+
print("fatal: cloning the git-repo repository failed, will remove "
|
1167
|
+
"'%s' " % path, file=sys.stderr)
|
1003
1168
|
shutil.rmtree(path, ignore_errors=True)
|
1004
1169
|
sys.exit(1)
|
1005
1170
|
repo_main, rel_repo_dir = _FindRepo()
|
@@ -1009,6 +1174,10 @@ def main(orig_args):
|
|
1009
1174
|
if my_main:
|
1010
1175
|
repo_main = my_main
|
1011
1176
|
|
1177
|
+
if not repo_main:
|
1178
|
+
print("fatal: unable to find repo entry point", file=sys.stderr)
|
1179
|
+
sys.exit(1)
|
1180
|
+
|
1012
1181
|
ver_str = '.'.join(map(str, VERSION))
|
1013
1182
|
me = [sys.executable, repo_main,
|
1014
1183
|
'--repo-dir=%s' % rel_repo_dir,
|
@@ -1016,21 +1185,10 @@ def main(orig_args):
|
|
1016
1185
|
'--wrapper-path=%s' % wrapper_path,
|
1017
1186
|
'--']
|
1018
1187
|
me.extend(orig_args)
|
1019
|
-
me
|
1020
|
-
|
1021
|
-
|
1022
|
-
sys.exit(subprocess.call(me))
|
1023
|
-
else:
|
1024
|
-
os.execv(sys.executable, me)
|
1025
|
-
except OSError as e:
|
1026
|
-
_print("fatal: unable to start %s" % repo_main, file=sys.stderr)
|
1027
|
-
_print("fatal: %s" % e, file=sys.stderr)
|
1028
|
-
sys.exit(148)
|
1188
|
+
exec_command(me)
|
1189
|
+
print("fatal: unable to start %s" % repo_main, file=sys.stderr)
|
1190
|
+
sys.exit(148)
|
1029
1191
|
|
1030
1192
|
|
1031
1193
|
if __name__ == '__main__':
|
1032
|
-
if ver[0] == 3:
|
1033
|
-
_print('warning: Python 3 support is currently experimental. YMMV.\n'
|
1034
|
-
'Please use Python 2.7 instead.',
|
1035
|
-
file=sys.stderr)
|
1036
1194
|
main(sys.argv[1:])
|