libv8 4.5.95.5 → 5.0.71.48.0beta2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +45 -19
- data/CHANGELOG.md +14 -0
- data/README.md +30 -15
- data/Rakefile +7 -6
- data/ext/libv8/arch.rb +5 -4
- data/ext/libv8/builder.rb +25 -19
- data/ext/libv8/compiler.rb +6 -33
- data/ext/libv8/location.rb +7 -8
- data/lib/libv8/version.rb +1 -1
- data/libv8.gemspec +1 -1
- data/patches/build-standalone-static-library.patch +14 -0
- data/patches/disable-building-tests.patch +48 -10
- data/patches/fPIC-for-static.patch +3 -3
- data/release/x86-linux/Vagrantfile +8 -4
- data/release/x86_64-freebsd10/Vagrantfile +86 -0
- data/release/x86_64-linux/Vagrantfile +8 -4
- data/spec/compiler_spec.rb +5 -29
- data/spec/support/compiler_helpers.rb +2 -4
- data/vendor/depot_tools/.gitignore +15 -3
- data/vendor/depot_tools/OWNERS +2 -2
- data/vendor/depot_tools/PRESUBMIT.py +4 -2
- data/vendor/depot_tools/WATCHLISTS +6 -0
- data/vendor/depot_tools/apply_issue.py +70 -38
- data/vendor/depot_tools/bootstrap/win/README.md +66 -0
- data/vendor/depot_tools/bootstrap/win/git-bash.template.sh +12 -0
- data/vendor/depot_tools/bootstrap/win/git.template.bat +5 -0
- data/vendor/depot_tools/bootstrap/win/profile.d.python.sh +20 -0
- data/vendor/depot_tools/bootstrap/win/win_tools.bat +96 -45
- data/vendor/depot_tools/breakpad.py +6 -141
- data/vendor/depot_tools/buildbucket.py +45 -31
- data/vendor/depot_tools/cbuildbot +1 -0
- data/vendor/depot_tools/checkout.py +2 -1
- data/vendor/depot_tools/chrome_set_ver +1 -0
- data/vendor/depot_tools/cit +8 -0
- data/vendor/depot_tools/cit.bat +11 -0
- data/vendor/depot_tools/cit.py +120 -0
- data/vendor/depot_tools/codereview.settings +0 -2
- data/vendor/depot_tools/commit_queue +1 -5
- data/vendor/depot_tools/commit_queue.bat +1 -4
- data/vendor/depot_tools/commit_queue.py +78 -29
- data/vendor/depot_tools/cpplint.py +22 -14
- data/vendor/depot_tools/cros +1 -0
- data/vendor/depot_tools/cros_sdk +1 -0
- data/vendor/depot_tools/depot-tools-auth.py +3 -3
- data/vendor/depot_tools/download_from_google_storage.py +101 -21
- data/vendor/depot_tools/drover.py +2 -3
- data/vendor/depot_tools/fetch.py +31 -27
- data/vendor/depot_tools/{recipes → fetch_configs}/android.py +4 -4
- data/vendor/depot_tools/fetch_configs/breakpad.py +45 -0
- data/vendor/depot_tools/{recipes → fetch_configs}/chromium.py +3 -3
- data/vendor/depot_tools/{recipes/recipe_util.py → fetch_configs/config_util.py} +3 -3
- data/vendor/depot_tools/fetch_configs/crashpad.py +41 -0
- data/vendor/depot_tools/{recipes → fetch_configs}/dart.py +3 -3
- data/vendor/depot_tools/{recipes/pdfium.py → fetch_configs/dartino.py} +14 -13
- data/vendor/depot_tools/{recipes → fetch_configs}/dartium.py +3 -3
- data/vendor/depot_tools/{recipes → fetch_configs}/depot_tools.py +3 -3
- data/vendor/depot_tools/fetch_configs/gyp.py +42 -0
- data/vendor/depot_tools/{recipes → fetch_configs}/infra.py +3 -3
- data/vendor/depot_tools/{recipes → fetch_configs}/infra_internal.py +3 -3
- data/vendor/depot_tools/{recipes → fetch_configs}/ios.py +4 -4
- data/vendor/depot_tools/{recipes → fetch_configs}/mojo.py +3 -3
- data/vendor/depot_tools/{recipes → fetch_configs}/nacl.py +3 -3
- data/vendor/depot_tools/{recipes → fetch_configs}/naclports.py +3 -3
- data/vendor/depot_tools/fetch_configs/pdfium.py +40 -0
- data/vendor/depot_tools/{recipes → fetch_configs}/skia.py +3 -3
- data/vendor/depot_tools/{recipes → fetch_configs}/skia_buildbot.py +3 -3
- data/vendor/depot_tools/fetch_configs/syzygy.py +41 -0
- data/vendor/depot_tools/{recipes → fetch_configs}/v8.py +3 -3
- data/vendor/depot_tools/{recipes → fetch_configs}/webrtc.py +3 -3
- data/vendor/depot_tools/{recipes → fetch_configs}/webrtc_android.py +4 -4
- data/vendor/depot_tools/{recipes → fetch_configs}/webrtc_ios.py +4 -4
- data/vendor/depot_tools/fix_encoding.py +6 -6
- data/vendor/depot_tools/gcl.py +11 -21
- data/vendor/depot_tools/gclient +10 -0
- data/vendor/depot_tools/gclient-new-workdir.py +7 -38
- data/vendor/depot_tools/gclient.bat +2 -2
- data/vendor/depot_tools/gclient.py +85 -65
- data/vendor/depot_tools/gclient_scm.py +83 -10
- data/vendor/depot_tools/gclient_utils.py +5 -1
- data/vendor/depot_tools/gerrit_util.py +243 -26
- data/vendor/depot_tools/git-auto-svn +1 -1
- data/vendor/depot_tools/git-cache +1 -1
- data/vendor/depot_tools/git-cherry-pick-upload +1 -1
- data/vendor/depot_tools/git-cl +1 -1
- data/vendor/depot_tools/git-drover +6 -0
- data/vendor/depot_tools/git-find-releases +6 -0
- data/vendor/depot_tools/git-footers +1 -1
- data/vendor/depot_tools/git-freeze +1 -1
- data/vendor/depot_tools/git-gs +1 -1
- data/vendor/depot_tools/git-hyper-blame +6 -0
- 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-try +1 -1
- data/vendor/depot_tools/git-upstream-diff +1 -1
- data/vendor/depot_tools/git_auto_svn.py +24 -6
- data/vendor/depot_tools/git_cache.py +74 -27
- data/vendor/depot_tools/git_cl.py +2118 -747
- data/vendor/depot_tools/git_common.py +100 -6
- data/vendor/depot_tools/git_dates.py +62 -0
- data/vendor/depot_tools/git_drover.py +424 -0
- data/vendor/depot_tools/git_find_releases.py +65 -0
- data/vendor/depot_tools/git_footers.py +42 -0
- data/vendor/depot_tools/git_hyper_blame.py +391 -0
- data/vendor/depot_tools/git_map_branches.py +8 -6
- data/vendor/depot_tools/git_new_branch.py +6 -1
- data/vendor/depot_tools/git_rebase_update.py +56 -16
- data/vendor/depot_tools/git_reparent_branch.py +13 -0
- data/vendor/depot_tools/git_try.py +0 -2
- data/vendor/depot_tools/gsutil.py +51 -20
- data/vendor/depot_tools/infra/config/OWNERS +3 -1
- data/vendor/depot_tools/infra/config/cq.cfg +7 -3
- data/vendor/depot_tools/infra/config/recipes.cfg +9 -0
- data/vendor/depot_tools/luci_hacks/README.md +35 -0
- data/vendor/depot_tools/{bootstrap/virtualenv/tests → luci_hacks}/__init__.py +0 -0
- data/vendor/depot_tools/luci_hacks/luci_recipe_run.isolate +12 -0
- data/vendor/depot_tools/luci_hacks/luci_recipe_run.py +81 -0
- data/vendor/depot_tools/luci_hacks/trigger_luci_job.py +128 -0
- data/vendor/depot_tools/man/html/depot_tools.html +9 -1
- data/vendor/depot_tools/man/html/depot_tools_tutorial.html +4 -4
- data/vendor/depot_tools/man/html/git-drover.html +191 -35
- data/vendor/depot_tools/man/html/git-hyper-blame.html +878 -0
- data/vendor/depot_tools/man/html/git-rebase-update.html +9 -4
- data/vendor/depot_tools/man/man1/git-drover.1 +189 -36
- data/vendor/depot_tools/man/man1/git-hyper-blame.1 +128 -0
- data/vendor/depot_tools/man/man1/git-rebase-update.1 +8 -6
- data/vendor/depot_tools/man/man7/depot_tools.7 +9 -4
- data/vendor/depot_tools/man/src/_git-hyper-blame_desc.helper.txt +1 -0
- data/vendor/depot_tools/man/src/common_demo_functions.sh +5 -0
- data/vendor/depot_tools/man/src/depot_tools_tutorial.txt +1 -1
- data/vendor/depot_tools/man/src/git-drover.demo.1.sh +11 -16
- data/vendor/depot_tools/man/src/git-drover.demo.3.sh +27 -0
- data/vendor/depot_tools/man/src/git-drover.demo.4.sh +39 -0
- data/vendor/depot_tools/man/src/git-drover.txt +49 -3
- data/vendor/depot_tools/man/src/git-hyper-blame.demo.1.sh +3 -0
- data/vendor/depot_tools/man/src/git-hyper-blame.demo.2.sh +4 -0
- data/vendor/depot_tools/man/src/git-hyper-blame.demo.common.sh +57 -0
- data/vendor/depot_tools/man/src/git-hyper-blame.txt +85 -0
- data/vendor/depot_tools/man/src/git-rebase-update.txt +5 -1
- data/vendor/depot_tools/my_activity.py +6 -21
- data/vendor/depot_tools/ninja +2 -2
- data/vendor/depot_tools/ninja-linux32 +0 -0
- data/vendor/depot_tools/ninja-linux64 +0 -0
- data/vendor/depot_tools/ninja-mac +0 -0
- data/vendor/depot_tools/ninja.exe +0 -0
- data/vendor/depot_tools/presubmit_canned_checks.py +83 -69
- data/vendor/depot_tools/presubmit_support.py +126 -42
- data/vendor/depot_tools/pylint.py +5 -1
- data/vendor/depot_tools/python_runner.sh +55 -0
- data/vendor/depot_tools/recipe_modules/bot_update/__init__.py +32 -0
- data/vendor/depot_tools/recipe_modules/bot_update/api.py +283 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/basic.json +56 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/basic_output_manifest.json +63 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/basic_with_branch_heads.json +57 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/clobber.json +44 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/forced.json +57 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/gerrit_no_reset.json +44 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/no_shallow.json +44 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/off.json +43 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/reset_root_solution_revision.json +43 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/svn_mode.json +59 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/trychange.json +58 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/trychange_oauth2.json +60 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/tryjob.json +58 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/tryjob_fail.json +60 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/tryjob_fail_patch.json +81 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/tryjob_fail_patch_download.json +81 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/tryjob_gerrit_angle.json +49 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/tryjob_v8.json +61 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.expected/tryjob_v8_head_by_default.json +51 -0
- data/vendor/depot_tools/recipe_modules/bot_update/example.py +172 -0
- data/vendor/depot_tools/{bootstrap/virtualenv/virtualenv_support → recipe_modules/bot_update/resources}/__init__.py +0 -0
- data/vendor/depot_tools/recipe_modules/bot_update/resources/bot_update.py +1764 -0
- data/vendor/depot_tools/recipe_modules/bot_update/test_api.py +86 -0
- data/vendor/depot_tools/recipe_modules/depot_tools/__init__.py +3 -0
- data/vendor/depot_tools/recipe_modules/depot_tools/api.py +27 -0
- data/vendor/depot_tools/recipe_modules/gclient/__init__.py +10 -0
- data/vendor/depot_tools/recipe_modules/gclient/api.py +378 -0
- data/vendor/depot_tools/recipe_modules/gclient/config.py +671 -0
- data/vendor/depot_tools/recipe_modules/gclient/example.expected/basic.json +172 -0
- data/vendor/depot_tools/recipe_modules/gclient/example.expected/revision.json +174 -0
- data/vendor/depot_tools/recipe_modules/gclient/example.expected/tryserver.json +185 -0
- data/vendor/depot_tools/recipe_modules/gclient/example.py +100 -0
- data/vendor/depot_tools/recipe_modules/gclient/test_api.py +37 -0
- data/vendor/depot_tools/recipe_modules/git/__init__.py +9 -0
- data/vendor/depot_tools/recipe_modules/git/api.py +377 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/basic.json +177 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/basic_branch.json +177 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/basic_file_name.json +179 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/basic_hash.json +176 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/basic_ref.json +177 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/basic_submodule_update_force.json +178 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/can_fail_build.json +153 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/cannot_fail_build.json +181 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/cat-file_test.json +199 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/count-objects_delta.json +250 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/count-objects_failed.json +181 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/count-objects_with_bad_output.json +182 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/count-objects_with_bad_output_fails_build.json +102 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/curl_trace_file.json +181 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/platform_win.json +186 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/rebase_failed.json +179 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/remote_not_origin.json +179 -0
- data/vendor/depot_tools/recipe_modules/git/example.expected/set_got_revision.json +178 -0
- data/vendor/depot_tools/recipe_modules/git/example.py +147 -0
- data/vendor/depot_tools/recipe_modules/git/resources/git_setup.py +61 -0
- data/vendor/depot_tools/recipe_modules/git/test_api.py +18 -0
- data/vendor/depot_tools/recipe_modules/git_cl/__init__.py +4 -0
- data/vendor/depot_tools/recipe_modules/git_cl/api.py +25 -0
- data/vendor/depot_tools/recipe_modules/git_cl/config.py +22 -0
- data/vendor/depot_tools/recipe_modules/git_cl/example.expected/basic.json +66 -0
- data/vendor/depot_tools/recipe_modules/git_cl/example.py +41 -0
- data/vendor/depot_tools/recipe_modules/infra_paths/__init__.py +4 -0
- data/vendor/depot_tools/recipe_modules/infra_paths/api.py +12 -0
- data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/basic.json +14 -0
- data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/paths_buildbot_linux.json +14 -0
- data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/paths_buildbot_mac.json +14 -0
- data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/paths_buildbot_win.json +14 -0
- data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/paths_kitchen_linux.json +14 -0
- data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/paths_kitchen_mac.json +14 -0
- data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/paths_kitchen_win.json +14 -0
- data/vendor/depot_tools/recipe_modules/infra_paths/example.py +28 -0
- data/vendor/depot_tools/recipe_modules/infra_paths/path_config.py +45 -0
- data/vendor/depot_tools/recipe_modules/presubmit/__init__.py +4 -0
- data/vendor/depot_tools/recipe_modules/presubmit/api.py +20 -0
- data/vendor/depot_tools/recipe_modules/presubmit/example.expected/basic.json +18 -0
- data/vendor/depot_tools/recipe_modules/presubmit/example.py +15 -0
- data/vendor/depot_tools/recipe_modules/rietveld/__init__.py +5 -0
- data/vendor/depot_tools/recipe_modules/rietveld/api.py +94 -0
- data/vendor/depot_tools/recipe_modules/rietveld/example.expected/basic.json +30 -0
- data/vendor/depot_tools/recipe_modules/rietveld/example.py +24 -0
- data/vendor/depot_tools/recipe_modules/tryserver/__init__.py +15 -0
- data/vendor/depot_tools/recipe_modules/tryserver/api.py +280 -0
- data/vendor/depot_tools/recipe_modules/tryserver/example.expected/with_git_patch.json +104 -0
- data/vendor/depot_tools/recipe_modules/tryserver/example.expected/with_rietveld_patch.json +58 -0
- data/vendor/depot_tools/recipe_modules/tryserver/example.expected/with_rietveld_patch_new.json +58 -0
- data/vendor/depot_tools/recipe_modules/tryserver/example.expected/with_svn_patch.json +68 -0
- data/vendor/depot_tools/recipe_modules/tryserver/example.expected/with_wrong_patch.json +43 -0
- data/vendor/depot_tools/recipe_modules/tryserver/example.expected/with_wrong_patch_new.json +43 -0
- data/vendor/depot_tools/recipe_modules/tryserver/example.py +53 -0
- data/vendor/depot_tools/recipe_modules/tryserver/test_api.py +7 -0
- data/vendor/depot_tools/recipes.py +136 -0
- data/vendor/depot_tools/repo +1 -1
- data/vendor/depot_tools/rietveld.py +46 -15
- data/vendor/depot_tools/roll_dep.py +97 -36
- data/vendor/depot_tools/scm.py +3 -3
- data/vendor/depot_tools/setup_color.py +94 -0
- data/vendor/depot_tools/subprocess2.py +10 -1
- data/vendor/depot_tools/third_party/cq_client/OWNERS +0 -1
- data/vendor/depot_tools/third_party/cq_client/README.md +47 -9
- data/vendor/depot_tools/third_party/cq_client/cq.pb.go +617 -0
- data/vendor/depot_tools/third_party/cq_client/cq.proto +75 -17
- data/vendor/depot_tools/third_party/cq_client/cq_pb2.py +168 -41
- data/vendor/depot_tools/third_party/cq_client/testdata/cq_gerrit.cfg +55 -0
- data/vendor/depot_tools/third_party/cq_client/{test/cq_example.cfg → testdata/cq_rietveld.cfg} +14 -6
- data/vendor/depot_tools/third_party/fancy_urllib/README +5 -4
- data/vendor/depot_tools/third_party/fancy_urllib/__init__.py +114 -52
- data/vendor/depot_tools/third_party/protobuf26/README.chromium +9 -6
- data/vendor/depot_tools/third_party/upload.py +17 -31
- data/vendor/depot_tools/trychange.py +0 -2
- data/vendor/depot_tools/update_depot_tools +29 -11
- data/vendor/depot_tools/update_depot_tools.bat +4 -9
- data/vendor/depot_tools/upload_to_google_storage.py +42 -5
- data/vendor/depot_tools/win_toolchain/OWNERS +1 -0
- data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +227 -52
- data/vendor/depot_tools/win_toolchain/package_from_installed.py +203 -88
- metadata +161 -81
- data/patches/arm/do-not-imply-vfp3-and-armv7.patch +0 -16
- data/patches/arm/do-not-use-vfp2.patch +0 -13
- data/patches/clang51/no-unused-variable.patch +0 -12
- data/vendor/depot_tools/bootstrap/.gitignore +0 -2
- data/vendor/depot_tools/bootstrap/bootstrap.py +0 -234
- data/vendor/depot_tools/bootstrap/deps.pyl +0 -15
- data/vendor/depot_tools/bootstrap/util.py +0 -87
- data/vendor/depot_tools/bootstrap/virtualenv/.gitignore +0 -10
- data/vendor/depot_tools/bootstrap/virtualenv/.travis.yml +0 -28
- data/vendor/depot_tools/bootstrap/virtualenv/AUTHORS.txt +0 -91
- data/vendor/depot_tools/bootstrap/virtualenv/CONTRIBUTING.rst +0 -21
- data/vendor/depot_tools/bootstrap/virtualenv/LICENSE.txt +0 -22
- data/vendor/depot_tools/bootstrap/virtualenv/MANIFEST.in +0 -11
- data/vendor/depot_tools/bootstrap/virtualenv/README.rst +0 -10
- data/vendor/depot_tools/bootstrap/virtualenv/bin/rebuild-script.py +0 -71
- data/vendor/depot_tools/bootstrap/virtualenv/docs/changes.rst +0 -747
- data/vendor/depot_tools/bootstrap/virtualenv/docs/conf.py +0 -149
- data/vendor/depot_tools/bootstrap/virtualenv/docs/development.rst +0 -61
- data/vendor/depot_tools/bootstrap/virtualenv/docs/index.rst +0 -137
- data/vendor/depot_tools/bootstrap/virtualenv/docs/installation.rst +0 -58
- data/vendor/depot_tools/bootstrap/virtualenv/docs/make.bat +0 -170
- data/vendor/depot_tools/bootstrap/virtualenv/docs/reference.rst +0 -256
- data/vendor/depot_tools/bootstrap/virtualenv/docs/userguide.rst +0 -249
- data/vendor/depot_tools/bootstrap/virtualenv/scripts/virtualenv +0 -3
- data/vendor/depot_tools/bootstrap/virtualenv/setup.py +0 -111
- data/vendor/depot_tools/bootstrap/virtualenv/tests/test_activate.sh +0 -94
- data/vendor/depot_tools/bootstrap/virtualenv/tests/test_activate_expected.output +0 -2
- data/vendor/depot_tools/bootstrap/virtualenv/tests/test_virtualenv.py +0 -139
- data/vendor/depot_tools/bootstrap/virtualenv/tests/tox.ini +0 -12
- data/vendor/depot_tools/bootstrap/virtualenv/tox.ini +0 -17
- data/vendor/depot_tools/bootstrap/virtualenv/virtualenv.py +0 -2367
- data/vendor/depot_tools/bootstrap/virtualenv/virtualenv_embedded/activate.bat +0 -26
- data/vendor/depot_tools/bootstrap/virtualenv/virtualenv_embedded/activate.csh +0 -42
- data/vendor/depot_tools/bootstrap/virtualenv/virtualenv_embedded/activate.fish +0 -74
- data/vendor/depot_tools/bootstrap/virtualenv/virtualenv_embedded/activate.ps1 +0 -150
- data/vendor/depot_tools/bootstrap/virtualenv/virtualenv_embedded/activate.sh +0 -80
- data/vendor/depot_tools/bootstrap/virtualenv/virtualenv_embedded/activate_this.py +0 -34
- data/vendor/depot_tools/bootstrap/virtualenv/virtualenv_embedded/deactivate.bat +0 -20
- data/vendor/depot_tools/bootstrap/virtualenv/virtualenv_embedded/distutils-init.py +0 -101
- data/vendor/depot_tools/bootstrap/virtualenv/virtualenv_embedded/distutils.cfg +0 -6
- data/vendor/depot_tools/bootstrap/virtualenv/virtualenv_embedded/site.py +0 -758
- data/vendor/depot_tools/bootstrap/virtualenv/virtualenv_support/pip-6.0-py2.py3-none-any.whl +0 -0
- data/vendor/depot_tools/bootstrap/virtualenv/virtualenv_support/setuptools-8.2.1-py2.py3-none-any.whl +0 -0
- data/vendor/depot_tools/bootstrap/win/README.google +0 -16
- data/vendor/depot_tools/cbuildbot +0 -96
- data/vendor/depot_tools/chrome_set_ver +0 -96
- data/vendor/depot_tools/cros +0 -96
- data/vendor/depot_tools/cros_sdk +0 -96
- data/vendor/depot_tools/git-cl-upload-hook +0 -52
- data/vendor/depot_tools/git-crup +0 -45
- data/vendor/depot_tools/python_git_runner.sh +0 -36
- data/vendor/depot_tools/recipes/blink.py +0 -59
- data/vendor/depot_tools/third_party/cq_client/test/validate_config_test.py +0 -52
- data/vendor/depot_tools/third_party/cq_client/validate_config.py +0 -108
- data/vendor/depot_tools/win_toolchain/toolchain2013.py +0 -494
@@ -0,0 +1,65 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# Copyright 2015 The Chromium Authors. All rights reserved.
|
3
|
+
# Use of this source code is governed by a BSD-style license that can be
|
4
|
+
# found in the LICENSE file.
|
5
|
+
"""Usage: %prog <commit>*
|
6
|
+
|
7
|
+
Given a commit, finds the release where it first appeared (e.g. 47.0.2500.0) as
|
8
|
+
well as attempting to determine the branches to which it was merged.
|
9
|
+
|
10
|
+
Note that it uses the "cherry picked from" annotation to find merges, so it will
|
11
|
+
only work on merges that followed the "use cherry-pick -x" instructions.
|
12
|
+
"""
|
13
|
+
|
14
|
+
import optparse
|
15
|
+
import re
|
16
|
+
import sys
|
17
|
+
|
18
|
+
import git_common as git
|
19
|
+
|
20
|
+
|
21
|
+
def GetNameForCommit(sha1):
|
22
|
+
name = re.sub(r'~.*$', '', git.run('name-rev', '--tags', '--name-only', sha1))
|
23
|
+
if name == 'undefined':
|
24
|
+
name = git.run(
|
25
|
+
'name-rev', '--refs', 'remotes/branch-heads/*', '--name-only',
|
26
|
+
sha1) + ' [untagged]'
|
27
|
+
return name
|
28
|
+
|
29
|
+
|
30
|
+
def GetMergesForCommit(sha1):
|
31
|
+
return [c.split()[0] for c in
|
32
|
+
git.run('log', '--oneline', '-F', '--all', '--no-abbrev', '--grep',
|
33
|
+
'cherry picked from commit %s' % sha1).splitlines()]
|
34
|
+
|
35
|
+
|
36
|
+
def main():
|
37
|
+
parser = optparse.OptionParser(usage=sys.modules[__name__].__doc__)
|
38
|
+
_, args = parser.parse_args()
|
39
|
+
|
40
|
+
if len(args) == 0:
|
41
|
+
parser.error('Need at least one commit.')
|
42
|
+
|
43
|
+
for arg in args:
|
44
|
+
commit_name = GetNameForCommit(arg)
|
45
|
+
if not commit_name:
|
46
|
+
print '%s not found' % arg
|
47
|
+
return 1
|
48
|
+
print 'commit %s was:' % arg
|
49
|
+
print ' initially in ' + commit_name
|
50
|
+
merges = GetMergesForCommit(arg)
|
51
|
+
for merge in merges:
|
52
|
+
print ' merged to ' + GetNameForCommit(merge) + ' (as ' + merge + ')'
|
53
|
+
if not merges:
|
54
|
+
print 'No merges found. If this seems wrong, be sure that you did:'
|
55
|
+
print ' git fetch origin && gclient sync --with_branch_heads'
|
56
|
+
|
57
|
+
return 0
|
58
|
+
|
59
|
+
|
60
|
+
if __name__ == '__main__':
|
61
|
+
try:
|
62
|
+
sys.exit(main())
|
63
|
+
except KeyboardInterrupt:
|
64
|
+
sys.stderr.write('interrupted\n')
|
65
|
+
sys.exit(1)
|
@@ -62,6 +62,48 @@ def get_footer_svn_id(branch=None):
|
|
62
62
|
return svn_id
|
63
63
|
|
64
64
|
|
65
|
+
def get_footer_change_id(message):
|
66
|
+
"""Returns a list of Gerrit's ChangeId from given commit message."""
|
67
|
+
return parse_footers(message).get(normalize_name('Change-Id'), [])
|
68
|
+
|
69
|
+
|
70
|
+
def add_footer_change_id(message, change_id):
|
71
|
+
"""Returns message with Change-ID footer in it.
|
72
|
+
|
73
|
+
Assumes that Change-Id is not yet in footers, which is then
|
74
|
+
inserted after any of these footers: Bug|Issue|Test|Feature.
|
75
|
+
"""
|
76
|
+
assert 0 == len(get_footer_change_id(message))
|
77
|
+
change_id_line = 'Change-Id: %s' % change_id
|
78
|
+
# This code does the same as parse_footers, but keeps track of line
|
79
|
+
# numbers so that ChangeId is inserted in the right place.
|
80
|
+
lines = message.splitlines()
|
81
|
+
footer_lines = []
|
82
|
+
for line in reversed(lines):
|
83
|
+
if line == '' or line.isspace():
|
84
|
+
break
|
85
|
+
footer_lines.append(line)
|
86
|
+
else:
|
87
|
+
# The whole description was consisting of footers,
|
88
|
+
# which means those aren't footers.
|
89
|
+
footer_lines = []
|
90
|
+
# footers order is from end to start of the message.
|
91
|
+
footers = map(parse_footer, footer_lines)
|
92
|
+
if not footers or not all(footers):
|
93
|
+
lines.append('')
|
94
|
+
lines.append(change_id_line)
|
95
|
+
else:
|
96
|
+
after = set(map(normalize_name, ['Bug', 'Issue', 'Test', 'Feature']))
|
97
|
+
for i, (key, _) in enumerate(footers):
|
98
|
+
if normalize_name(key) in after:
|
99
|
+
insert_at = len(lines) - i
|
100
|
+
break
|
101
|
+
else:
|
102
|
+
insert_at = len(lines) - len(footers)
|
103
|
+
lines.insert(insert_at, change_id_line)
|
104
|
+
return '\n'.join(lines)
|
105
|
+
|
106
|
+
|
65
107
|
def get_unique(footers, key):
|
66
108
|
key = normalize_name(key)
|
67
109
|
values = footers[key]
|
@@ -0,0 +1,391 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# Copyright 2016 The Chromium Authors. All rights reserved.
|
3
|
+
# Use of this source code is governed by a BSD-style license that can be
|
4
|
+
# found in the LICENSE file.
|
5
|
+
|
6
|
+
"""Wrapper around git blame that ignores certain commits.
|
7
|
+
"""
|
8
|
+
|
9
|
+
from __future__ import print_function
|
10
|
+
|
11
|
+
import argparse
|
12
|
+
import collections
|
13
|
+
import logging
|
14
|
+
import os
|
15
|
+
import subprocess2
|
16
|
+
import sys
|
17
|
+
|
18
|
+
import git_common
|
19
|
+
import git_dates
|
20
|
+
import setup_color
|
21
|
+
|
22
|
+
|
23
|
+
logging.getLogger().setLevel(logging.INFO)
|
24
|
+
|
25
|
+
|
26
|
+
DEFAULT_IGNORE_FILE_NAME = '.git-blame-ignore-revs'
|
27
|
+
|
28
|
+
|
29
|
+
class Commit(object):
|
30
|
+
"""Info about a commit."""
|
31
|
+
def __init__(self, commithash):
|
32
|
+
self.commithash = commithash
|
33
|
+
self.author = None
|
34
|
+
self.author_mail = None
|
35
|
+
self.author_time = None
|
36
|
+
self.author_tz = None
|
37
|
+
self.committer = None
|
38
|
+
self.committer_mail = None
|
39
|
+
self.committer_time = None
|
40
|
+
self.committer_tz = None
|
41
|
+
self.summary = None
|
42
|
+
self.boundary = None
|
43
|
+
self.previous = None
|
44
|
+
self.filename = None
|
45
|
+
|
46
|
+
def __repr__(self): # pragma: no cover
|
47
|
+
return '<Commit %s>' % self.commithash
|
48
|
+
|
49
|
+
|
50
|
+
BlameLine = collections.namedtuple(
|
51
|
+
'BlameLine',
|
52
|
+
'commit context lineno_then lineno_now modified')
|
53
|
+
|
54
|
+
|
55
|
+
def parse_blame(blameoutput):
|
56
|
+
"""Parses the output of git blame -p into a data structure."""
|
57
|
+
lines = blameoutput.split('\n')
|
58
|
+
i = 0
|
59
|
+
commits = {}
|
60
|
+
|
61
|
+
while i < len(lines):
|
62
|
+
# Read a commit line and parse it.
|
63
|
+
line = lines[i]
|
64
|
+
i += 1
|
65
|
+
if not line.strip():
|
66
|
+
continue
|
67
|
+
commitline = line.split()
|
68
|
+
commithash = commitline[0]
|
69
|
+
lineno_then = int(commitline[1])
|
70
|
+
lineno_now = int(commitline[2])
|
71
|
+
|
72
|
+
try:
|
73
|
+
commit = commits[commithash]
|
74
|
+
except KeyError:
|
75
|
+
commit = Commit(commithash)
|
76
|
+
commits[commithash] = commit
|
77
|
+
|
78
|
+
# Read commit details until we find a context line.
|
79
|
+
while i < len(lines):
|
80
|
+
line = lines[i]
|
81
|
+
i += 1
|
82
|
+
if line.startswith('\t'):
|
83
|
+
break
|
84
|
+
|
85
|
+
try:
|
86
|
+
key, value = line.split(' ', 1)
|
87
|
+
except ValueError:
|
88
|
+
key = line
|
89
|
+
value = True
|
90
|
+
setattr(commit, key.replace('-', '_'), value)
|
91
|
+
|
92
|
+
context = line[1:]
|
93
|
+
|
94
|
+
yield BlameLine(commit, context, lineno_then, lineno_now, False)
|
95
|
+
|
96
|
+
|
97
|
+
def print_table(table, colsep=' ', rowsep='\n', align=None, out=sys.stdout):
|
98
|
+
"""Print a 2D rectangular array, aligning columns with spaces.
|
99
|
+
|
100
|
+
Args:
|
101
|
+
align: Optional string of 'l' and 'r', designating whether each column is
|
102
|
+
left- or right-aligned. Defaults to left aligned.
|
103
|
+
"""
|
104
|
+
if len(table) == 0:
|
105
|
+
return
|
106
|
+
|
107
|
+
colwidths = None
|
108
|
+
for row in table:
|
109
|
+
if colwidths is None:
|
110
|
+
colwidths = [len(x) for x in row]
|
111
|
+
else:
|
112
|
+
colwidths = [max(colwidths[i], len(x)) for i, x in enumerate(row)]
|
113
|
+
|
114
|
+
if align is None: # pragma: no cover
|
115
|
+
align = 'l' * len(colwidths)
|
116
|
+
|
117
|
+
for row in table:
|
118
|
+
cells = []
|
119
|
+
for i, cell in enumerate(row):
|
120
|
+
padding = ' ' * (colwidths[i] - len(cell))
|
121
|
+
if align[i] == 'r':
|
122
|
+
cell = padding + cell
|
123
|
+
elif i < len(row) - 1:
|
124
|
+
# Do not pad the final column if left-aligned.
|
125
|
+
cell += padding
|
126
|
+
cells.append(cell)
|
127
|
+
try:
|
128
|
+
print(*cells, sep=colsep, end=rowsep, file=out)
|
129
|
+
except IOError: # pragma: no cover
|
130
|
+
# Can happen on Windows if the pipe is closed early.
|
131
|
+
pass
|
132
|
+
|
133
|
+
|
134
|
+
def pretty_print(parsedblame, show_filenames=False, out=sys.stdout):
|
135
|
+
"""Pretty-prints the output of parse_blame."""
|
136
|
+
table = []
|
137
|
+
for line in parsedblame:
|
138
|
+
author_time = git_dates.timestamp_offset_to_datetime(
|
139
|
+
line.commit.author_time, line.commit.author_tz)
|
140
|
+
row = [line.commit.commithash[:8],
|
141
|
+
'(' + line.commit.author,
|
142
|
+
git_dates.datetime_string(author_time),
|
143
|
+
str(line.lineno_now) + ('*' if line.modified else '') + ')',
|
144
|
+
line.context]
|
145
|
+
if show_filenames:
|
146
|
+
row.insert(1, line.commit.filename)
|
147
|
+
table.append(row)
|
148
|
+
print_table(table, align='llllrl' if show_filenames else 'lllrl', out=out)
|
149
|
+
|
150
|
+
|
151
|
+
def get_parsed_blame(filename, revision='HEAD'):
|
152
|
+
blame = git_common.blame(filename, revision=revision, porcelain=True)
|
153
|
+
return list(parse_blame(blame))
|
154
|
+
|
155
|
+
|
156
|
+
# Map from (oldrev, newrev) to hunk list (caching the results of git diff, but
|
157
|
+
# only the hunk line numbers, not the actual diff contents).
|
158
|
+
# hunk list contains (old, new) pairs, where old and new are (start, length)
|
159
|
+
# pairs. A hunk list can also be None (if the diff failed).
|
160
|
+
diff_hunks_cache = {}
|
161
|
+
|
162
|
+
|
163
|
+
def cache_diff_hunks(oldrev, newrev):
|
164
|
+
def parse_start_length(s):
|
165
|
+
# Chop the '-' or '+'.
|
166
|
+
s = s[1:]
|
167
|
+
# Length is optional (defaults to 1).
|
168
|
+
try:
|
169
|
+
start, length = s.split(',')
|
170
|
+
except ValueError:
|
171
|
+
start = s
|
172
|
+
length = 1
|
173
|
+
return int(start), int(length)
|
174
|
+
|
175
|
+
try:
|
176
|
+
return diff_hunks_cache[(oldrev, newrev)]
|
177
|
+
except KeyError:
|
178
|
+
pass
|
179
|
+
|
180
|
+
# Use -U0 to get the smallest possible hunks.
|
181
|
+
diff = git_common.diff(oldrev, newrev, '-U0')
|
182
|
+
|
183
|
+
# Get all the hunks.
|
184
|
+
hunks = []
|
185
|
+
for line in diff.split('\n'):
|
186
|
+
if not line.startswith('@@'):
|
187
|
+
continue
|
188
|
+
ranges = line.split(' ', 3)[1:3]
|
189
|
+
ranges = tuple(parse_start_length(r) for r in ranges)
|
190
|
+
hunks.append(ranges)
|
191
|
+
|
192
|
+
diff_hunks_cache[(oldrev, newrev)] = hunks
|
193
|
+
return hunks
|
194
|
+
|
195
|
+
|
196
|
+
def approx_lineno_across_revs(filename, newfilename, revision, newrevision,
|
197
|
+
lineno):
|
198
|
+
"""Computes the approximate movement of a line number between two revisions.
|
199
|
+
|
200
|
+
Consider line |lineno| in |filename| at |revision|. This function computes the
|
201
|
+
line number of that line in |newfilename| at |newrevision|. This is
|
202
|
+
necessarily approximate.
|
203
|
+
|
204
|
+
Args:
|
205
|
+
filename: The file (within the repo) at |revision|.
|
206
|
+
newfilename: The name of the same file at |newrevision|.
|
207
|
+
revision: A git revision.
|
208
|
+
newrevision: Another git revision. Note: Can be ahead or behind |revision|.
|
209
|
+
lineno: Line number within |filename| at |revision|.
|
210
|
+
|
211
|
+
Returns:
|
212
|
+
Line number within |newfilename| at |newrevision|.
|
213
|
+
"""
|
214
|
+
# This doesn't work that well if there are a lot of line changes within the
|
215
|
+
# hunk (demonstrated by GitHyperBlameLineMotionTest.testIntraHunkLineMotion).
|
216
|
+
# A fuzzy heuristic that takes the text of the new line and tries to find a
|
217
|
+
# deleted line within the hunk that mostly matches the new line could help.
|
218
|
+
|
219
|
+
# Use the <revision>:<filename> syntax to diff between two blobs. This is the
|
220
|
+
# only way to diff a file that has been renamed.
|
221
|
+
old = '%s:%s' % (revision, filename)
|
222
|
+
new = '%s:%s' % (newrevision, newfilename)
|
223
|
+
hunks = cache_diff_hunks(old, new)
|
224
|
+
|
225
|
+
cumulative_offset = 0
|
226
|
+
|
227
|
+
# Find the hunk containing lineno (if any).
|
228
|
+
for (oldstart, oldlength), (newstart, newlength) in hunks:
|
229
|
+
cumulative_offset += newlength - oldlength
|
230
|
+
|
231
|
+
if lineno >= oldstart + oldlength:
|
232
|
+
# Not there yet.
|
233
|
+
continue
|
234
|
+
|
235
|
+
if lineno < oldstart:
|
236
|
+
# Gone too far.
|
237
|
+
break
|
238
|
+
|
239
|
+
# lineno is in [oldstart, oldlength] at revision; [newstart, newlength] at
|
240
|
+
# newrevision.
|
241
|
+
|
242
|
+
# If newlength == 0, newstart will be the line before the deleted hunk.
|
243
|
+
# Since the line must have been deleted, just return that as the nearest
|
244
|
+
# line in the new file. Caution: newstart can be 0 in this case.
|
245
|
+
if newlength == 0:
|
246
|
+
return max(1, newstart)
|
247
|
+
|
248
|
+
newend = newstart + newlength - 1
|
249
|
+
|
250
|
+
# Move lineno based on the amount the entire hunk shifted.
|
251
|
+
lineno = lineno + newstart - oldstart
|
252
|
+
# Constrain the output within the range [newstart, newend].
|
253
|
+
return min(newend, max(newstart, lineno))
|
254
|
+
|
255
|
+
# Wasn't in a hunk. Figure out the line motion based on the difference in
|
256
|
+
# length between the hunks seen so far.
|
257
|
+
return lineno + cumulative_offset
|
258
|
+
|
259
|
+
|
260
|
+
def hyper_blame(ignored, filename, revision='HEAD', out=sys.stdout,
|
261
|
+
err=sys.stderr):
|
262
|
+
# Map from commit to parsed blame from that commit.
|
263
|
+
blame_from = {}
|
264
|
+
|
265
|
+
def cache_blame_from(filename, commithash):
|
266
|
+
try:
|
267
|
+
return blame_from[commithash]
|
268
|
+
except KeyError:
|
269
|
+
parsed = get_parsed_blame(filename, commithash)
|
270
|
+
blame_from[commithash] = parsed
|
271
|
+
return parsed
|
272
|
+
|
273
|
+
try:
|
274
|
+
parsed = cache_blame_from(filename, git_common.hash_one(revision))
|
275
|
+
except subprocess2.CalledProcessError as e:
|
276
|
+
err.write(e.stderr)
|
277
|
+
return e.returncode
|
278
|
+
|
279
|
+
new_parsed = []
|
280
|
+
|
281
|
+
# We don't show filenames in blame output unless we have to.
|
282
|
+
show_filenames = False
|
283
|
+
|
284
|
+
for line in parsed:
|
285
|
+
# If a line references an ignored commit, blame that commit's parent
|
286
|
+
# repeatedly until we find a non-ignored commit.
|
287
|
+
while line.commit.commithash in ignored:
|
288
|
+
if line.commit.previous is None:
|
289
|
+
# You can't ignore the commit that added this file.
|
290
|
+
break
|
291
|
+
|
292
|
+
previouscommit, previousfilename = line.commit.previous.split(' ', 1)
|
293
|
+
parent_blame = cache_blame_from(previousfilename, previouscommit)
|
294
|
+
|
295
|
+
if len(parent_blame) == 0:
|
296
|
+
# The previous version of this file was empty, therefore, you can't
|
297
|
+
# ignore this commit.
|
298
|
+
break
|
299
|
+
|
300
|
+
# line.lineno_then is the line number in question at line.commit. We need
|
301
|
+
# to translate that line number so that it refers to the position of the
|
302
|
+
# same line on previouscommit.
|
303
|
+
lineno_previous = approx_lineno_across_revs(
|
304
|
+
line.commit.filename, previousfilename, line.commit.commithash,
|
305
|
+
previouscommit, line.lineno_then)
|
306
|
+
logging.debug('ignore commit %s on line p%d/t%d/n%d',
|
307
|
+
line.commit.commithash, lineno_previous, line.lineno_then,
|
308
|
+
line.lineno_now)
|
309
|
+
|
310
|
+
# Get the line at lineno_previous in the parent commit.
|
311
|
+
assert 1 <= lineno_previous <= len(parent_blame)
|
312
|
+
newline = parent_blame[lineno_previous - 1]
|
313
|
+
|
314
|
+
# Replace the commit and lineno_then, but not the lineno_now or context.
|
315
|
+
logging.debug(' replacing with %r', newline)
|
316
|
+
line = BlameLine(newline.commit, line.context, lineno_previous,
|
317
|
+
line.lineno_now, True)
|
318
|
+
|
319
|
+
# If any line has a different filename to the file's current name, turn on
|
320
|
+
# filename display for the entire blame output.
|
321
|
+
if line.commit.filename != filename:
|
322
|
+
show_filenames = True
|
323
|
+
|
324
|
+
new_parsed.append(line)
|
325
|
+
|
326
|
+
pretty_print(new_parsed, show_filenames=show_filenames, out=out)
|
327
|
+
|
328
|
+
return 0
|
329
|
+
|
330
|
+
|
331
|
+
def parse_ignore_file(ignore_file):
|
332
|
+
for line in ignore_file:
|
333
|
+
line = line.split('#', 1)[0].strip()
|
334
|
+
if line:
|
335
|
+
yield line
|
336
|
+
|
337
|
+
|
338
|
+
def main(args, stdout=sys.stdout, stderr=sys.stderr):
|
339
|
+
parser = argparse.ArgumentParser(
|
340
|
+
prog='git hyper-blame',
|
341
|
+
description='git blame with support for ignoring certain commits.')
|
342
|
+
parser.add_argument('-i', metavar='REVISION', action='append', dest='ignored',
|
343
|
+
default=[], help='a revision to ignore')
|
344
|
+
parser.add_argument('--ignore-file', metavar='FILE',
|
345
|
+
type=argparse.FileType('r'), dest='ignore_file',
|
346
|
+
help='a file containing a list of revisions to ignore')
|
347
|
+
parser.add_argument('--no-default-ignores', dest='no_default_ignores',
|
348
|
+
help='Do not ignore commits from .git-blame-ignore-revs.')
|
349
|
+
parser.add_argument('revision', nargs='?', default='HEAD', metavar='REVISION',
|
350
|
+
help='revision to look at')
|
351
|
+
parser.add_argument('filename', metavar='FILE', help='filename to blame')
|
352
|
+
|
353
|
+
args = parser.parse_args(args)
|
354
|
+
try:
|
355
|
+
repo_root = git_common.repo_root()
|
356
|
+
except subprocess2.CalledProcessError as e:
|
357
|
+
stderr.write(e.stderr)
|
358
|
+
return e.returncode
|
359
|
+
|
360
|
+
# Make filename relative to the repository root, and cd to the root dir (so
|
361
|
+
# all filenames throughout this script are relative to the root).
|
362
|
+
filename = os.path.relpath(args.filename, repo_root)
|
363
|
+
os.chdir(repo_root)
|
364
|
+
|
365
|
+
# Normalize filename so we can compare it to other filenames git gives us.
|
366
|
+
filename = os.path.normpath(filename)
|
367
|
+
filename = os.path.normcase(filename)
|
368
|
+
|
369
|
+
ignored_list = list(args.ignored)
|
370
|
+
if not args.no_default_ignores and os.path.exists(DEFAULT_IGNORE_FILE_NAME):
|
371
|
+
with open(DEFAULT_IGNORE_FILE_NAME) as ignore_file:
|
372
|
+
ignored_list.extend(parse_ignore_file(ignore_file))
|
373
|
+
|
374
|
+
if args.ignore_file:
|
375
|
+
ignored_list.extend(parse_ignore_file(args.ignore_file))
|
376
|
+
|
377
|
+
ignored = set()
|
378
|
+
for c in ignored_list:
|
379
|
+
try:
|
380
|
+
ignored.add(git_common.hash_one(c))
|
381
|
+
except subprocess2.CalledProcessError as e:
|
382
|
+
# Custom warning string (the message from git-rev-parse is inappropriate).
|
383
|
+
stderr.write('warning: unknown revision \'%s\'.\n' % c)
|
384
|
+
|
385
|
+
return hyper_blame(ignored, filename, args.revision, out=stdout, err=stderr)
|
386
|
+
|
387
|
+
|
388
|
+
if __name__ == '__main__': # pragma: no cover
|
389
|
+
setup_color.init()
|
390
|
+
with git_common.less() as less_input:
|
391
|
+
sys.exit(main(sys.argv[1:], stdout=less_input))
|