libv8 6.7.288.46.1 → 7.3.492.27.0beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/CHANGELOG.md +4 -0
- data/README.md +2 -0
- data/ext/libv8/builder.rb +6 -2
- data/lib/libv8/version.rb +1 -1
- data/vendor/depot_tools/.gitattributes +1 -0
- data/vendor/depot_tools/.gitignore +7 -0
- data/vendor/depot_tools/CROS_OWNERS +5 -0
- data/vendor/depot_tools/OWNERS +12 -1
- data/vendor/depot_tools/PRESUBMIT.py +16 -9
- data/vendor/depot_tools/README.md +9 -2
- data/vendor/depot_tools/autoninja +14 -6
- data/vendor/depot_tools/autoninja.bat +11 -1
- data/vendor/depot_tools/autoninja.py +40 -18
- data/vendor/depot_tools/bb +12 -0
- data/vendor/depot_tools/bb.bat +7 -0
- data/vendor/depot_tools/bootstrap/win/manifest.txt +1 -1
- data/vendor/depot_tools/bootstrap/win/manifest_bleeding_edge.txt +1 -1
- data/vendor/depot_tools/bootstrap/win/win_tools.py +2 -1
- data/vendor/depot_tools/buildbucket.py +57 -4
- data/vendor/depot_tools/cipd +157 -44
- data/vendor/depot_tools/cipd.bat +51 -14
- data/vendor/depot_tools/cipd.ps1 +104 -42
- data/vendor/depot_tools/cipd_client_version +1 -1
- data/vendor/depot_tools/cipd_client_version.digests +21 -0
- data/vendor/depot_tools/cipd_manifest.txt +19 -6
- data/vendor/depot_tools/cipd_manifest.versions +318 -0
- data/vendor/depot_tools/clang_format.py +4 -4
- data/vendor/depot_tools/cpplint.py +44 -199
- data/vendor/depot_tools/dart_format.py +2 -2
- data/vendor/depot_tools/detect_host_arch.py +8 -3
- data/vendor/depot_tools/download_from_google_storage.py +47 -39
- data/vendor/depot_tools/fetch.py +30 -18
- data/vendor/depot_tools/fetch_configs/android_internal.py +34 -0
- data/vendor/depot_tools/fetch_configs/chromium.py +18 -1
- data/vendor/depot_tools/fetch_configs/config_util.py +4 -2
- data/vendor/depot_tools/fetch_configs/inspector_protocol.py +40 -0
- data/vendor/depot_tools/fetch_configs/node-ci.py +41 -0
- data/vendor/depot_tools/fix_encoding.py +3 -3
- data/vendor/depot_tools/gclient +1 -1
- data/vendor/depot_tools/gclient.py +415 -198
- data/vendor/depot_tools/gclient_eval.py +220 -171
- data/vendor/depot_tools/gclient_paths.py +142 -0
- data/vendor/depot_tools/gclient_scm.py +200 -51
- data/vendor/depot_tools/gclient_utils.py +88 -191
- data/vendor/depot_tools/gerrit_client.py +13 -0
- data/vendor/depot_tools/gerrit_util.py +158 -23
- data/vendor/depot_tools/git-nav-upstream +1 -1
- data/vendor/depot_tools/git_cache.py +77 -24
- data/vendor/depot_tools/git_cl.py +705 -1099
- data/vendor/depot_tools/git_common.py +9 -6
- data/vendor/depot_tools/git_map_branches.py +19 -2
- data/vendor/depot_tools/git_nav_downstream.py +3 -4
- data/vendor/depot_tools/git_rebase_update.py +14 -0
- data/vendor/depot_tools/git_reparent_branch.py +8 -2
- data/vendor/depot_tools/gn.py +38 -3
- data/vendor/depot_tools/gsutil.py +8 -3
- data/vendor/depot_tools/gsutil.py.bat +15 -0
- data/vendor/depot_tools/gsutil.vpython +16 -0
- data/vendor/depot_tools/infra/config/OWNERS +0 -1
- data/vendor/depot_tools/infra/config/recipes.cfg +3 -2
- data/vendor/depot_tools/lucicfg +12 -0
- data/vendor/depot_tools/lucicfg.bat +7 -0
- data/vendor/depot_tools/man/html/git-map-branches.html +34 -2
- data/vendor/depot_tools/man/html/git-new-branch.html +40 -32
- data/vendor/depot_tools/man/man1/git-map-branches.1 +24 -5
- data/vendor/depot_tools/man/man1/git-new-branch.1 +35 -27
- data/vendor/depot_tools/man/src/git-map-branches.demo.1.sh +1 -0
- data/vendor/depot_tools/man/src/git-map-branches.txt +10 -0
- data/vendor/depot_tools/man/src/git-new-branch.demo.1.sh +9 -4
- data/vendor/depot_tools/man/src/git-new-branch.txt +1 -1
- data/vendor/depot_tools/metrics.README.md +98 -0
- data/vendor/depot_tools/metrics.py +296 -0
- data/vendor/depot_tools/metrics_utils.py +303 -0
- data/vendor/depot_tools/my_activity.py +91 -29
- data/vendor/depot_tools/ninja +1 -1
- data/vendor/depot_tools/ninjalog.README.md +64 -0
- data/vendor/depot_tools/ninjalog_uploader.py +232 -0
- data/vendor/depot_tools/ninjalog_uploader_wrapper.py +116 -0
- data/vendor/depot_tools/owners.py +30 -13
- data/vendor/depot_tools/owners_finder.py +5 -2
- data/vendor/depot_tools/presubmit_canned_checks.py +188 -29
- data/vendor/depot_tools/presubmit_support.py +18 -41
- data/vendor/depot_tools/pylintrc +23 -19
- data/vendor/depot_tools/recipes/OWNERS +2 -0
- data/vendor/depot_tools/recipes/README.recipes.md +344 -151
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/OWNERS +2 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +2 -16
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +141 -99
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +5 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +5 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +6 -98
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +45 -5
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{tryjob.json → input_commit_with_id_without_repo.json} +6 -11
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{tryjob_empty_revision.json → multiple_patch_refs.json} +8 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +19 -29
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{trychange.json → refs.json} +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail.json +51 -6
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +50 -6
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +51 -6
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +17 -25
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +17 -25
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +18 -26
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +18 -26
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +26 -28
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +45 -5
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +17 -25
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/unrecognized_commit_repo.json +13 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name.json +13 -152
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_tags.json +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +185 -202
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +52 -157
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/test_api.py +5 -14
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/ensure_checkout.py +34 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/api.py +14 -2
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic_pkg.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-failed.json +7 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-many-instances.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/mac64.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_file.json +9 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_mode.json +9 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_verfile.json +9 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/win64.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk arch.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk bits.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_32.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_64.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_32.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_64.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_mips_64.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/mac_intel_64.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_32.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_64.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +13 -8
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +18 -12
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +18 -12
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +18 -12
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.py +3 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/__init__.py +1 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/api.py +58 -46
- data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +65 -22
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/basic.json +20 -21
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/buildbot.json +20 -21
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/revision.json +20 -21
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/tryserver.json +20 -21
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.py +5 -2
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/patch_project.py +62 -14
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/api.py +24 -38
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.expected/basic.json +56 -50
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.py +15 -9
- data/vendor/depot_tools/recipes/recipe_modules/git/__init__.py +4 -1
- data/vendor/depot_tools/recipes/recipe_modules/git/api.py +34 -22
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_branch.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_file_name.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_hash.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_luci.json +222 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_ref.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_submodule_update_force.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_tags.json +224 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/can_fail_build.json +10 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cannot_fail_build.json +5 -7
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cat-file_test.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_delta.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_failed.json +5 -7
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output_fails_build.json +10 -5
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/curl_trace_file.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/git-cache-checkout.json +8 -9
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/platform_win.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/rebase_failed.json +12 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/remote_not_origin.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/set_got_revision.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.py +27 -11
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/api.py +1 -1
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.expected/basic.json +12 -13
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/__init__.py +5 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/api.py +120 -5
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.expected/basic.json +45 -3
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.py +25 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/resources/gerrit_client.py +56 -4
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.expected/basic.json +6 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.py +49 -0
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/api.py +24 -13
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.expected/basic.json +13 -14
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/basic.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_linux.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_mac.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_win.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_linux.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_mac.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_win.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_linux.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_mac.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_win.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/path_config.py +1 -2
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/__init__.py +35 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/api.py +116 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/linux.json +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/mac.json +82 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/win.json +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.py +23 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/__init__.py +1 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/api.py +2 -7
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.expected/basic.json +7 -6
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/__init__.py +1 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +117 -8
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/basic_tags.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/set_failure_hash_with_no_steps.json +7 -4
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch.json +98 -7
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch_and_target_ref.json +147 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch.json +8 -5
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch_luci.json +8 -5
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +9 -6
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +9 -6
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.py +27 -2
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/test_api.py +14 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/__init__.py +25 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/api.py +137 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/linux.json +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/mac.json +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/win.json +107 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.py +26 -0
- data/vendor/depot_tools/recipes/recipes.py +37 -27
- data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +7 -10
- data/vendor/depot_tools/repo +34 -8
- data/vendor/depot_tools/roll_dep.py +52 -49
- data/vendor/depot_tools/scm.py +38 -23
- data/vendor/depot_tools/setup_color.py +4 -2
- data/vendor/depot_tools/split_cl.py +32 -4
- data/vendor/depot_tools/subprocess2.py +22 -4
- data/vendor/depot_tools/third_party/httplib2/README.chromium +2 -2
- data/vendor/depot_tools/third_party/httplib2/__init__.py +242 -158
- data/vendor/depot_tools/third_party/httplib2/cacerts.txt +57 -44
- data/vendor/depot_tools/third_party/httplib2/socks.py +15 -5
- data/vendor/depot_tools/third_party/logilab/README.chromium +2 -4
- data/vendor/depot_tools/third_party/logilab/astroid/README.chromium +2 -1
- data/vendor/depot_tools/third_party/logilab/astroid/__init__.py +10 -5
- data/vendor/depot_tools/third_party/logilab/astroid/__pkginfo__.py +5 -5
- data/vendor/depot_tools/third_party/logilab/astroid/arguments.py +233 -0
- data/vendor/depot_tools/third_party/logilab/astroid/as_string.py +82 -33
- data/vendor/depot_tools/third_party/logilab/astroid/bases.py +137 -153
- data/vendor/depot_tools/third_party/logilab/astroid/brain/{builtin_inference.py → brain_builtin_inference.py} +117 -26
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_dateutil.py +15 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/{py2gi.py → brain_gi.py} +48 -8
- data/vendor/depot_tools/third_party/logilab/astroid/brain/{py2mechanize.py → brain_mechanize.py} +0 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/{pynose.py → brain_nose.py} +4 -1
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_numpy.py +62 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_pytest.py +76 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_qt.py +44 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/{pysix_moves.py → brain_six.py} +28 -1
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_ssl.py +65 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_stdlib.py +473 -0
- data/vendor/depot_tools/third_party/logilab/astroid/builder.py +104 -81
- data/vendor/depot_tools/third_party/logilab/astroid/context.py +81 -0
- data/vendor/depot_tools/third_party/logilab/astroid/decorators.py +75 -0
- data/vendor/depot_tools/third_party/logilab/astroid/exceptions.py +20 -0
- data/vendor/depot_tools/third_party/logilab/astroid/inference.py +137 -183
- data/vendor/depot_tools/third_party/logilab/astroid/manager.py +45 -169
- data/vendor/depot_tools/third_party/logilab/astroid/mixins.py +37 -14
- data/vendor/depot_tools/third_party/logilab/astroid/modutils.py +112 -41
- data/vendor/depot_tools/third_party/logilab/astroid/node_classes.py +243 -156
- data/vendor/depot_tools/third_party/logilab/astroid/nodes.py +35 -22
- data/vendor/depot_tools/third_party/logilab/astroid/objects.py +186 -0
- data/vendor/depot_tools/third_party/logilab/astroid/protocols.py +157 -102
- data/vendor/depot_tools/third_party/logilab/astroid/raw_building.py +32 -8
- data/vendor/depot_tools/third_party/logilab/astroid/rebuilder.py +372 -309
- data/vendor/depot_tools/third_party/logilab/astroid/scoped_nodes.py +652 -420
- data/vendor/depot_tools/third_party/logilab/astroid/test_utils.py +4 -21
- data/vendor/depot_tools/third_party/logilab/astroid/transforms.py +96 -0
- data/vendor/depot_tools/third_party/logilab/astroid/util.py +89 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/LICENSE +19 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/README.chromium +11 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/__init__.py +20 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/cext.c +1421 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/compat.py +9 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/simple.py +246 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/slots.py +414 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/utils.py +13 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/LICENSE +24 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/README.chromium +11 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/__init__.py +19 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/_wrappers.c +2729 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/arguments.py +96 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/decorators.py +512 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/importer.py +228 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/wrappers.py +901 -0
- data/vendor/depot_tools/third_party/pylint/README.chromium +2 -25
- data/vendor/depot_tools/third_party/pylint/__pkginfo__.py +13 -3
- data/vendor/depot_tools/third_party/pylint/checkers/__init__.py +1 -2
- data/vendor/depot_tools/third_party/pylint/checkers/async.py +82 -0
- data/vendor/depot_tools/third_party/pylint/checkers/base.py +893 -119
- data/vendor/depot_tools/third_party/pylint/checkers/classes.py +342 -204
- data/vendor/depot_tools/third_party/pylint/checkers/design_analysis.py +51 -34
- data/vendor/depot_tools/third_party/pylint/checkers/exceptions.py +84 -47
- data/vendor/depot_tools/third_party/pylint/checkers/format.py +55 -30
- data/vendor/depot_tools/third_party/pylint/checkers/imports.py +314 -73
- data/vendor/depot_tools/third_party/pylint/checkers/logging.py +10 -8
- data/vendor/depot_tools/third_party/pylint/checkers/misc.py +2 -1
- data/vendor/depot_tools/third_party/pylint/checkers/newstyle.py +45 -48
- data/vendor/depot_tools/third_party/pylint/checkers/python3.py +31 -21
- data/vendor/depot_tools/third_party/pylint/checkers/raw_metrics.py +3 -3
- data/vendor/depot_tools/third_party/pylint/checkers/similar.py +4 -5
- data/vendor/depot_tools/third_party/pylint/checkers/spelling.py +24 -10
- data/vendor/depot_tools/third_party/pylint/checkers/stdlib.py +120 -56
- data/vendor/depot_tools/third_party/pylint/checkers/strings.py +38 -35
- data/vendor/depot_tools/third_party/pylint/checkers/typecheck.py +485 -138
- data/vendor/depot_tools/third_party/pylint/checkers/utils.py +319 -142
- data/vendor/depot_tools/third_party/pylint/checkers/variables.py +329 -207
- data/vendor/depot_tools/third_party/pylint/config.py +739 -76
- data/vendor/depot_tools/third_party/pylint/epylint.py +9 -5
- data/vendor/depot_tools/third_party/pylint/extensions/__init__.py +0 -0
- data/vendor/depot_tools/third_party/pylint/extensions/check_docs.py +311 -0
- data/vendor/depot_tools/third_party/pylint/extensions/check_elif.py +62 -0
- data/vendor/depot_tools/third_party/{logilab/common → pylint}/graph.py +30 -133
- data/vendor/depot_tools/third_party/pylint/gui.py +2 -2
- data/vendor/depot_tools/third_party/pylint/interfaces.py +21 -3
- data/vendor/depot_tools/third_party/pylint/lint.py +123 -140
- data/vendor/depot_tools/third_party/pylint/pyreverse/diadefslib.py +10 -13
- data/vendor/depot_tools/third_party/pylint/pyreverse/diagrams.py +15 -4
- data/vendor/depot_tools/third_party/pylint/pyreverse/inspector.py +372 -0
- data/vendor/depot_tools/third_party/pylint/pyreverse/main.py +30 -7
- data/vendor/depot_tools/third_party/pylint/pyreverse/utils.py +80 -2
- data/vendor/depot_tools/third_party/{logilab/common → pylint/pyreverse}/vcgutils.py +19 -37
- data/vendor/depot_tools/third_party/pylint/pyreverse/writer.py +3 -4
- data/vendor/depot_tools/third_party/pylint/reporters/__init__.py +34 -18
- data/vendor/depot_tools/third_party/pylint/reporters/guireporter.py +1 -1
- data/vendor/depot_tools/third_party/pylint/reporters/html.py +10 -3
- data/vendor/depot_tools/third_party/pylint/reporters/json.py +10 -4
- data/vendor/depot_tools/third_party/pylint/reporters/text.py +94 -3
- data/vendor/depot_tools/third_party/pylint/reporters/ureports/__init__.py +106 -0
- data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/html_writer.py +17 -57
- data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/nodes.py +52 -74
- data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/text_writer.py +14 -60
- data/vendor/depot_tools/third_party/pylint/testutils.py +22 -20
- data/vendor/depot_tools/third_party/pylint/utils.py +268 -44
- data/vendor/depot_tools/third_party/repo/progress.py +42 -0
- data/vendor/depot_tools/update_depot_tools +1 -1
- data/vendor/depot_tools/upload_metrics.py +25 -0
- data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +45 -15
- data/vendor/depot_tools/win_toolchain/package_from_installed.py +71 -24
- data/vendor/depot_tools/yapf +1 -1
- data/vendor/depot_tools/yapf.bat +1 -1
- metadata +92 -77
- data/vendor/depot_tools/git-crsync +0 -3
- data/vendor/depot_tools/infra/config/cq.cfg +0 -32
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/apply_gerrit_ref.json +0 -29
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/apply_gerrit_ref_custom.json +0 -29
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/buildbot.json +0 -105
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/shallow.json +0 -195
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle_deprecated.json +0 -248
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8.json +0 -248
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name_no_patch.json +0 -105
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/apply_gerrit.py +0 -33
- data/vendor/depot_tools/third_party/logilab/astroid/brain/py2pytest.py +0 -31
- data/vendor/depot_tools/third_party/logilab/astroid/brain/py2qt4.py +0 -22
- data/vendor/depot_tools/third_party/logilab/astroid/brain/py2stdlib.py +0 -334
- data/vendor/depot_tools/third_party/logilab/astroid/inspector.py +0 -273
- data/vendor/depot_tools/third_party/logilab/astroid/utils.py +0 -239
- data/vendor/depot_tools/third_party/logilab/common/LICENSE.txt +0 -339
- data/vendor/depot_tools/third_party/logilab/common/README.chromium +0 -11
- data/vendor/depot_tools/third_party/logilab/common/__init__.py +0 -175
- data/vendor/depot_tools/third_party/logilab/common/__pkginfo__.py +0 -57
- data/vendor/depot_tools/third_party/logilab/common/cache.py +0 -114
- data/vendor/depot_tools/third_party/logilab/common/changelog.py +0 -238
- data/vendor/depot_tools/third_party/logilab/common/clcommands.py +0 -334
- data/vendor/depot_tools/third_party/logilab/common/cli.py +0 -211
- data/vendor/depot_tools/third_party/logilab/common/compat.py +0 -78
- data/vendor/depot_tools/third_party/logilab/common/configuration.py +0 -1105
- data/vendor/depot_tools/third_party/logilab/common/contexts.py +0 -5
- data/vendor/depot_tools/third_party/logilab/common/corbautils.py +0 -117
- data/vendor/depot_tools/third_party/logilab/common/daemon.py +0 -101
- data/vendor/depot_tools/third_party/logilab/common/date.py +0 -335
- data/vendor/depot_tools/third_party/logilab/common/dbf.py +0 -231
- data/vendor/depot_tools/third_party/logilab/common/debugger.py +0 -214
- data/vendor/depot_tools/third_party/logilab/common/decorators.py +0 -281
- data/vendor/depot_tools/third_party/logilab/common/deprecation.py +0 -189
- data/vendor/depot_tools/third_party/logilab/common/fileutils.py +0 -404
- data/vendor/depot_tools/third_party/logilab/common/interface.py +0 -71
- data/vendor/depot_tools/third_party/logilab/common/logging_ext.py +0 -195
- data/vendor/depot_tools/third_party/logilab/common/modutils.py +0 -702
- data/vendor/depot_tools/third_party/logilab/common/optik_ext.py +0 -392
- data/vendor/depot_tools/third_party/logilab/common/optparser.py +0 -92
- data/vendor/depot_tools/third_party/logilab/common/proc.py +0 -277
- data/vendor/depot_tools/third_party/logilab/common/pyro_ext.py +0 -180
- data/vendor/depot_tools/third_party/logilab/common/pytest.py +0 -1199
- data/vendor/depot_tools/third_party/logilab/common/registry.py +0 -1119
- data/vendor/depot_tools/third_party/logilab/common/shellutils.py +0 -462
- data/vendor/depot_tools/third_party/logilab/common/sphinx_ext.py +0 -87
- data/vendor/depot_tools/third_party/logilab/common/sphinxutils.py +0 -122
- data/vendor/depot_tools/third_party/logilab/common/table.py +0 -929
- data/vendor/depot_tools/third_party/logilab/common/tasksqueue.py +0 -101
- data/vendor/depot_tools/third_party/logilab/common/testlib.py +0 -1392
- data/vendor/depot_tools/third_party/logilab/common/textutils.py +0 -537
- data/vendor/depot_tools/third_party/logilab/common/tree.py +0 -369
- data/vendor/depot_tools/third_party/logilab/common/umessage.py +0 -194
- data/vendor/depot_tools/third_party/logilab/common/ureports/__init__.py +0 -172
- data/vendor/depot_tools/third_party/logilab/common/ureports/docbook_writer.py +0 -140
- data/vendor/depot_tools/third_party/logilab/common/urllib2ext.py +0 -89
- data/vendor/depot_tools/third_party/logilab/common/visitor.py +0 -109
- data/vendor/depot_tools/third_party/logilab/common/xmlrpcutils.py +0 -131
- data/vendor/depot_tools/third_party/logilab/common/xmlutils.py +0 -61
@@ -21,45 +21,23 @@ from various source and using a cache of built modules)
|
|
21
21
|
"""
|
22
22
|
from __future__ import print_function
|
23
23
|
|
24
|
-
__docformat__ = "restructuredtext en"
|
25
|
-
|
26
|
-
import collections
|
27
24
|
import imp
|
28
25
|
import os
|
29
|
-
from os.path import dirname, join, isdir, exists
|
30
|
-
from warnings import warn
|
31
26
|
import zipimport
|
32
27
|
|
33
|
-
from
|
34
|
-
|
35
|
-
from astroid.exceptions import AstroidBuildingException
|
28
|
+
from astroid import exceptions
|
36
29
|
from astroid import modutils
|
30
|
+
from astroid import transforms
|
37
31
|
|
38
32
|
|
39
|
-
def astroid_wrapper(func, modname):
|
40
|
-
"""wrapper to give to AstroidManager.project_from_files"""
|
41
|
-
print('parsing %s...' % modname)
|
42
|
-
try:
|
43
|
-
return func(modname)
|
44
|
-
except AstroidBuildingException as exc:
|
45
|
-
print(exc)
|
46
|
-
except Exception as exc:
|
47
|
-
import traceback
|
48
|
-
traceback.print_exc()
|
49
|
-
|
50
|
-
def _silent_no_wrap(func, modname):
|
51
|
-
"""silent wrapper that doesn't do anything; can be used for tests"""
|
52
|
-
return func(modname)
|
53
|
-
|
54
33
|
def safe_repr(obj):
|
55
34
|
try:
|
56
35
|
return repr(obj)
|
57
|
-
except:
|
36
|
+
except Exception: # pylint: disable=broad-except
|
58
37
|
return '???'
|
59
38
|
|
60
39
|
|
61
|
-
|
62
|
-
class AstroidManager(OptionsProviderMixIn):
|
40
|
+
class AstroidManager(object):
|
63
41
|
"""the astroid manager, responsible to build astroid from files
|
64
42
|
or modules.
|
65
43
|
|
@@ -67,31 +45,27 @@ class AstroidManager(OptionsProviderMixIn):
|
|
67
45
|
"""
|
68
46
|
|
69
47
|
name = 'astroid loader'
|
70
|
-
options = (("ignore",
|
71
|
-
{'type' : "csv", 'metavar' : "<file>",
|
72
|
-
'dest' : "black_list", "default" : ('CVS',),
|
73
|
-
'help' : "add <file> (may be a directory) to the black list\
|
74
|
-
. It should be a base name, not a path. You may set this option multiple times\
|
75
|
-
."}),
|
76
|
-
("project",
|
77
|
-
{'default': "No Name", 'type' : 'string', 'short': 'p',
|
78
|
-
'metavar' : '<project name>',
|
79
|
-
'help' : 'set the project name.'}),
|
80
|
-
)
|
81
48
|
brain = {}
|
49
|
+
|
82
50
|
def __init__(self):
|
83
51
|
self.__dict__ = AstroidManager.brain
|
84
52
|
if not self.__dict__:
|
85
|
-
OptionsProviderMixIn.__init__(self)
|
86
|
-
self.load_defaults()
|
87
53
|
# NOTE: cache entries are added by the [re]builder
|
88
54
|
self.astroid_cache = {}
|
89
55
|
self._mod_file_cache = {}
|
90
|
-
self.transforms = collections.defaultdict(list)
|
91
56
|
self._failed_import_hooks = []
|
92
57
|
self.always_load_extensions = False
|
93
58
|
self.optimize_ast = False
|
94
59
|
self.extension_package_whitelist = set()
|
60
|
+
self._transform = transforms.TransformVisitor()
|
61
|
+
|
62
|
+
# Export these APIs for convenience
|
63
|
+
self.register_transform = self._transform.register_transform
|
64
|
+
self.unregister_transform = self._transform.unregister_transform
|
65
|
+
|
66
|
+
def visit_transforms(self, node):
|
67
|
+
"""Visit the transforms and apply them to the given *node*."""
|
68
|
+
return self._transform.visit(node)
|
95
69
|
|
96
70
|
def ast_from_file(self, filepath, modname=None, fallback=True, source=False):
|
97
71
|
"""given a module name, return the astroid object"""
|
@@ -105,15 +79,15 @@ class AstroidManager(OptionsProviderMixIn):
|
|
105
79
|
modname = '.'.join(modutils.modpath_from_file(filepath))
|
106
80
|
except ImportError:
|
107
81
|
modname = filepath
|
108
|
-
if modname in self.astroid_cache and self.astroid_cache[modname].
|
82
|
+
if modname in self.astroid_cache and self.astroid_cache[modname].source_file == filepath:
|
109
83
|
return self.astroid_cache[modname]
|
110
84
|
if source:
|
111
85
|
from astroid.builder import AstroidBuilder
|
112
86
|
return AstroidBuilder(self).file_build(filepath, modname)
|
113
87
|
elif fallback and modname:
|
114
88
|
return self.ast_from_module_name(modname)
|
115
|
-
raise AstroidBuildingException(
|
116
|
-
|
89
|
+
raise exceptions.AstroidBuildingException(
|
90
|
+
'unable to get astroid for file %s' % filepath)
|
117
91
|
|
118
92
|
def _build_stub_module(self, modname):
|
119
93
|
from astroid.builder import AstroidBuilder
|
@@ -137,7 +111,7 @@ class AstroidManager(OptionsProviderMixIn):
|
|
137
111
|
return self._build_stub_module(modname)
|
138
112
|
old_cwd = os.getcwd()
|
139
113
|
if context_file:
|
140
|
-
os.chdir(dirname(context_file))
|
114
|
+
os.chdir(os.path.dirname(context_file))
|
141
115
|
try:
|
142
116
|
filepath, mp_type = self.file_from_module_name(modname, context_file)
|
143
117
|
if mp_type == modutils.PY_ZIPMODULE:
|
@@ -151,18 +125,20 @@ class AstroidManager(OptionsProviderMixIn):
|
|
151
125
|
module = modutils.load_module_from_name(modname)
|
152
126
|
except Exception as ex:
|
153
127
|
msg = 'Unable to load module %s (%s)' % (modname, ex)
|
154
|
-
raise AstroidBuildingException(msg)
|
128
|
+
raise exceptions.AstroidBuildingException(msg)
|
155
129
|
return self.ast_from_module(module, modname)
|
156
130
|
elif mp_type == imp.PY_COMPILED:
|
157
|
-
|
131
|
+
msg = "Unable to load compiled module %s" % (modname,)
|
132
|
+
raise exceptions.AstroidBuildingException(msg)
|
158
133
|
if filepath is None:
|
159
|
-
|
134
|
+
msg = "Unable to load module %s" % (modname,)
|
135
|
+
raise exceptions.AstroidBuildingException(msg)
|
160
136
|
return self.ast_from_file(filepath, modname, fallback=False)
|
161
|
-
except AstroidBuildingException as e:
|
137
|
+
except exceptions.AstroidBuildingException as e:
|
162
138
|
for hook in self._failed_import_hooks:
|
163
139
|
try:
|
164
140
|
return hook(modname)
|
165
|
-
except AstroidBuildingException:
|
141
|
+
except exceptions.AstroidBuildingException:
|
166
142
|
pass
|
167
143
|
raise e
|
168
144
|
finally:
|
@@ -186,11 +162,12 @@ class AstroidManager(OptionsProviderMixIn):
|
|
186
162
|
module = builder.string_build(importer.get_source(resource),
|
187
163
|
zmodname, filepath)
|
188
164
|
return module
|
189
|
-
except:
|
165
|
+
except Exception: # pylint: disable=broad-except
|
190
166
|
continue
|
191
167
|
return None
|
192
168
|
|
193
169
|
def file_from_module_name(self, modname, contextfile):
|
170
|
+
# pylint: disable=redefined-variable-type
|
194
171
|
try:
|
195
172
|
value = self._mod_file_cache[(modname, contextfile)]
|
196
173
|
except KeyError:
|
@@ -199,9 +176,9 @@ class AstroidManager(OptionsProviderMixIn):
|
|
199
176
|
modname.split('.'), context_file=contextfile)
|
200
177
|
except ImportError as ex:
|
201
178
|
msg = 'Unable to load module %s (%s)' % (modname, ex)
|
202
|
-
value = AstroidBuildingException(msg)
|
179
|
+
value = exceptions.AstroidBuildingException(msg)
|
203
180
|
self._mod_file_cache[(modname, contextfile)] = value
|
204
|
-
if isinstance(value, AstroidBuildingException):
|
181
|
+
if isinstance(value, exceptions.AstroidBuildingException):
|
205
182
|
raise value
|
206
183
|
return value
|
207
184
|
|
@@ -226,12 +203,11 @@ class AstroidManager(OptionsProviderMixIn):
|
|
226
203
|
try:
|
227
204
|
modname = klass.__module__
|
228
205
|
except AttributeError:
|
229
|
-
|
230
|
-
|
206
|
+
msg = 'Unable to get module for class %s' % safe_repr(klass)
|
207
|
+
raise exceptions.AstroidBuildingException(msg)
|
231
208
|
modastroid = self.ast_from_module_name(modname)
|
232
209
|
return modastroid.getattr(klass.__name__)[0] # XXX
|
233
210
|
|
234
|
-
|
235
211
|
def infer_ast_from_something(self, obj, context=None):
|
236
212
|
"""infer astroid for the given class"""
|
237
213
|
if hasattr(obj, '__class__') and not isinstance(obj, type):
|
@@ -241,75 +217,29 @@ class AstroidManager(OptionsProviderMixIn):
|
|
241
217
|
try:
|
242
218
|
modname = klass.__module__
|
243
219
|
except AttributeError:
|
244
|
-
|
245
|
-
|
220
|
+
msg = 'Unable to get module for %s' % safe_repr(klass)
|
221
|
+
raise exceptions.AstroidBuildingException(msg)
|
246
222
|
except Exception as ex:
|
247
|
-
|
248
|
-
|
249
|
-
|
223
|
+
msg = ('Unexpected error while retrieving module for %s: %s'
|
224
|
+
% (safe_repr(klass), ex))
|
225
|
+
raise exceptions.AstroidBuildingException(msg)
|
250
226
|
try:
|
251
227
|
name = klass.__name__
|
252
228
|
except AttributeError:
|
253
|
-
|
254
|
-
|
229
|
+
msg = 'Unable to get name for %s' % safe_repr(klass)
|
230
|
+
raise exceptions.AstroidBuildingException(msg)
|
255
231
|
except Exception as ex:
|
256
|
-
|
257
|
-
|
258
|
-
|
232
|
+
exc = ('Unexpected error while retrieving name for %s: %s'
|
233
|
+
% (safe_repr(klass), ex))
|
234
|
+
raise exceptions.AstroidBuildingException(exc)
|
259
235
|
# take care, on living object __module__ is regularly wrong :(
|
260
236
|
modastroid = self.ast_from_module_name(modname)
|
261
237
|
if klass is obj:
|
262
|
-
for
|
263
|
-
yield
|
238
|
+
for inferred in modastroid.igetattr(name, context):
|
239
|
+
yield inferred
|
264
240
|
else:
|
265
|
-
for
|
266
|
-
yield
|
267
|
-
|
268
|
-
def project_from_files(self, files, func_wrapper=astroid_wrapper,
|
269
|
-
project_name=None, black_list=None):
|
270
|
-
"""return a Project from a list of files or modules"""
|
271
|
-
# build the project representation
|
272
|
-
project_name = project_name or self.config.project
|
273
|
-
black_list = black_list or self.config.black_list
|
274
|
-
project = Project(project_name)
|
275
|
-
for something in files:
|
276
|
-
if not exists(something):
|
277
|
-
fpath = modutils.file_from_modpath(something.split('.'))
|
278
|
-
elif isdir(something):
|
279
|
-
fpath = join(something, '__init__.py')
|
280
|
-
else:
|
281
|
-
fpath = something
|
282
|
-
astroid = func_wrapper(self.ast_from_file, fpath)
|
283
|
-
if astroid is None:
|
284
|
-
continue
|
285
|
-
# XXX why is first file defining the project.path ?
|
286
|
-
project.path = project.path or astroid.file
|
287
|
-
project.add_module(astroid)
|
288
|
-
base_name = astroid.name
|
289
|
-
# recurse in package except if __init__ was explicitly given
|
290
|
-
if astroid.package and something.find('__init__') == -1:
|
291
|
-
# recurse on others packages / modules if this is a package
|
292
|
-
for fpath in modutils.get_module_files(dirname(astroid.file),
|
293
|
-
black_list):
|
294
|
-
astroid = func_wrapper(self.ast_from_file, fpath)
|
295
|
-
if astroid is None or astroid.name == base_name:
|
296
|
-
continue
|
297
|
-
project.add_module(astroid)
|
298
|
-
return project
|
299
|
-
|
300
|
-
def register_transform(self, node_class, transform, predicate=None):
|
301
|
-
"""Register `transform(node)` function to be applied on the given
|
302
|
-
Astroid's `node_class` if `predicate` is None or returns true
|
303
|
-
when called with the node as argument.
|
304
|
-
|
305
|
-
The transform function may return a value which is then used to
|
306
|
-
substitute the original node in the tree.
|
307
|
-
"""
|
308
|
-
self.transforms[node_class].append((transform, predicate))
|
309
|
-
|
310
|
-
def unregister_transform(self, node_class, transform, predicate=None):
|
311
|
-
"""Unregister the given transform."""
|
312
|
-
self.transforms[node_class].remove((transform, predicate))
|
241
|
+
for inferred in modastroid.igetattr(name, context):
|
242
|
+
yield inferred.instantiate_class()
|
313
243
|
|
314
244
|
def register_failed_import_hook(self, hook):
|
315
245
|
"""Registers a hook to resolve imports that cannot be found otherwise.
|
@@ -321,30 +251,6 @@ class AstroidManager(OptionsProviderMixIn):
|
|
321
251
|
"""
|
322
252
|
self._failed_import_hooks.append(hook)
|
323
253
|
|
324
|
-
def transform(self, node):
|
325
|
-
"""Call matching transforms for the given node if any and return the
|
326
|
-
transformed node.
|
327
|
-
"""
|
328
|
-
cls = node.__class__
|
329
|
-
if cls not in self.transforms:
|
330
|
-
# no transform registered for this class of node
|
331
|
-
return node
|
332
|
-
|
333
|
-
transforms = self.transforms[cls]
|
334
|
-
orig_node = node # copy the reference
|
335
|
-
for transform_func, predicate in transforms:
|
336
|
-
if predicate is None or predicate(node):
|
337
|
-
ret = transform_func(node)
|
338
|
-
# if the transformation function returns something, it's
|
339
|
-
# expected to be a replacement for the node
|
340
|
-
if ret is not None:
|
341
|
-
if node is not orig_node:
|
342
|
-
# node has already be modified by some previous
|
343
|
-
# transformation, warn about it
|
344
|
-
warn('node %s substituted multiple times' % node)
|
345
|
-
node = ret
|
346
|
-
return node
|
347
|
-
|
348
254
|
def cache_module(self, module):
|
349
255
|
"""Cache a module if no module with the same name is known yet."""
|
350
256
|
self.astroid_cache.setdefault(module.name, module)
|
@@ -359,33 +265,3 @@ class AstroidManager(OptionsProviderMixIn):
|
|
359
265
|
import astroid.raw_building
|
360
266
|
astroid.raw_building._astroid_bootstrapping(
|
361
267
|
astroid_builtin=astroid_builtin)
|
362
|
-
|
363
|
-
|
364
|
-
class Project(object):
|
365
|
-
"""a project handle a set of modules / packages"""
|
366
|
-
def __init__(self, name=''):
|
367
|
-
self.name = name
|
368
|
-
self.path = None
|
369
|
-
self.modules = []
|
370
|
-
self.locals = {}
|
371
|
-
self.__getitem__ = self.locals.__getitem__
|
372
|
-
self.__iter__ = self.locals.__iter__
|
373
|
-
self.values = self.locals.values
|
374
|
-
self.keys = self.locals.keys
|
375
|
-
self.items = self.locals.items
|
376
|
-
|
377
|
-
def add_module(self, node):
|
378
|
-
self.locals[node.name] = node
|
379
|
-
self.modules.append(node)
|
380
|
-
|
381
|
-
def get_module(self, name):
|
382
|
-
return self.locals[name]
|
383
|
-
|
384
|
-
def get_children(self):
|
385
|
-
return self.modules
|
386
|
-
|
387
|
-
def __repr__(self):
|
388
|
-
return '<Project %r at %s (%s modules)>' % (self.name, id(self),
|
389
|
-
len(self.modules))
|
390
|
-
|
391
|
-
|
@@ -18,16 +18,16 @@
|
|
18
18
|
"""This module contains some mixins for the different nodes.
|
19
19
|
"""
|
20
20
|
|
21
|
-
|
21
|
+
import warnings
|
22
22
|
|
23
|
-
from astroid
|
24
|
-
|
23
|
+
from astroid import decorators
|
24
|
+
from astroid import exceptions
|
25
25
|
|
26
26
|
|
27
27
|
class BlockRangeMixIn(object):
|
28
28
|
"""override block range """
|
29
29
|
|
30
|
-
@cachedproperty
|
30
|
+
@decorators.cachedproperty
|
31
31
|
def blockstart_tolineno(self):
|
32
32
|
return self.lineno
|
33
33
|
|
@@ -55,15 +55,29 @@ class FilterStmtsMixin(object):
|
|
55
55
|
return [node], True
|
56
56
|
return _stmts, False
|
57
57
|
|
58
|
-
def
|
58
|
+
def assign_type(self):
|
59
59
|
return self
|
60
60
|
|
61
|
+
def ass_type(self):
|
62
|
+
warnings.warn('%s.ass_type() is deprecated and slated for removal '
|
63
|
+
'in astroid 2.0, use %s.assign_type() instead.'
|
64
|
+
% (type(self).__name__, type(self).__name__),
|
65
|
+
PendingDeprecationWarning, stacklevel=2)
|
66
|
+
return self.assign_type()
|
67
|
+
|
61
68
|
|
62
69
|
class AssignTypeMixin(object):
|
63
70
|
|
64
|
-
def
|
71
|
+
def assign_type(self):
|
65
72
|
return self
|
66
73
|
|
74
|
+
def ass_type(self):
|
75
|
+
warnings.warn('%s.ass_type() is deprecated and slated for removal '
|
76
|
+
'in astroid 2.0, use %s.assign_type() instead.'
|
77
|
+
% (type(self).__name__, type(self).__name__),
|
78
|
+
PendingDeprecationWarning, stacklevel=2)
|
79
|
+
return self.assign_type()
|
80
|
+
|
67
81
|
def _get_filtered_stmts(self, lookup_node, node, _stmts, mystmt):
|
68
82
|
"""method used in filter_stmts"""
|
69
83
|
if self is mystmt:
|
@@ -77,11 +91,18 @@ class AssignTypeMixin(object):
|
|
77
91
|
|
78
92
|
class ParentAssignTypeMixin(AssignTypeMixin):
|
79
93
|
|
94
|
+
def assign_type(self):
|
95
|
+
return self.parent.assign_type()
|
96
|
+
|
80
97
|
def ass_type(self):
|
81
|
-
|
98
|
+
warnings.warn('%s.ass_type() is deprecated and slated for removal '
|
99
|
+
'in astroid 2.0, use %s.assign_type() instead.'
|
100
|
+
% (type(self).__name__, type(self).__name__),
|
101
|
+
PendingDeprecationWarning, stacklevel=2)
|
102
|
+
return self.assign_type()
|
82
103
|
|
83
104
|
|
84
|
-
class
|
105
|
+
class ImportFromMixin(FilterStmtsMixin):
|
85
106
|
"""MixIn for From and Import Nodes"""
|
86
107
|
|
87
108
|
def _infer_name(self, frame, name):
|
@@ -104,11 +125,14 @@ class FromImportMixIn(FilterStmtsMixin):
|
|
104
125
|
# FIXME: we used to raise InferenceError here, but why ?
|
105
126
|
return mymodule
|
106
127
|
try:
|
107
|
-
return mymodule.import_module(modname, level=level
|
108
|
-
|
109
|
-
|
128
|
+
return mymodule.import_module(modname, level=level,
|
129
|
+
relative_only=level and level >= 1)
|
130
|
+
except exceptions.AstroidBuildingException as ex:
|
131
|
+
if isinstance(ex.args[0], SyntaxError):
|
132
|
+
raise exceptions.InferenceError(str(ex))
|
133
|
+
raise exceptions.InferenceError(modname)
|
110
134
|
except SyntaxError as ex:
|
111
|
-
raise InferenceError(str(ex))
|
135
|
+
raise exceptions.InferenceError(str(ex))
|
112
136
|
|
113
137
|
def real_name(self, asname):
|
114
138
|
"""get name from 'as' name"""
|
@@ -120,5 +144,4 @@ class FromImportMixIn(FilterStmtsMixin):
|
|
120
144
|
_asname = name
|
121
145
|
if asname == _asname:
|
122
146
|
return name
|
123
|
-
raise NotFoundError(asname)
|
124
|
-
|
147
|
+
raise exceptions.NotFoundError(asname)
|
@@ -28,10 +28,9 @@
|
|
28
28
|
"""
|
29
29
|
from __future__ import with_statement
|
30
30
|
|
31
|
-
__docformat__ = "restructuredtext en"
|
32
|
-
|
33
31
|
import imp
|
34
32
|
import os
|
33
|
+
import platform
|
35
34
|
import sys
|
36
35
|
from distutils.sysconfig import get_python_lib
|
37
36
|
from distutils.errors import DistutilsPlatformError
|
@@ -42,8 +41,6 @@ try:
|
|
42
41
|
except ImportError:
|
43
42
|
pkg_resources = None
|
44
43
|
|
45
|
-
from logilab.common import _handle_blacklist
|
46
|
-
|
47
44
|
PY_ZIPMODULE = object()
|
48
45
|
|
49
46
|
if sys.platform.startswith('win'):
|
@@ -53,12 +50,7 @@ else:
|
|
53
50
|
PY_SOURCE_EXTS = ('py',)
|
54
51
|
PY_COMPILED_EXTS = ('so',)
|
55
52
|
|
56
|
-
|
57
|
-
# Consider arch-specific installation for STD_LIB_DIRS definition
|
58
|
-
# :mod:`distutils.sysconfig` contains to much hardcoded values to rely on
|
59
|
-
#
|
60
|
-
# :see: `Problems with /usr/lib64 builds <http://bugs.python.org/issue1294959>`_
|
61
|
-
# :see: `FHS <http://www.pathname.com/fhs/pub/fhs-2.3.html#LIBLTQUALGTALTERNATEFORMATESSENTIAL>`_
|
53
|
+
|
62
54
|
try:
|
63
55
|
# The explicit sys.prefix is to work around a patch in virtualenv that
|
64
56
|
# replaces the 'real' sys.prefix (i.e. the location of the binary)
|
@@ -70,22 +62,53 @@ try:
|
|
70
62
|
# Take care of installations where exec_prefix != prefix.
|
71
63
|
get_python_lib(standard_lib=True, prefix=sys.exec_prefix),
|
72
64
|
get_python_lib(standard_lib=True)])
|
73
|
-
if os.name == 'nt':
|
74
|
-
STD_LIB_DIRS.add(os.path.join(sys.prefix, 'dlls'))
|
75
|
-
try:
|
76
|
-
# real_prefix is defined when running inside virtualenv.
|
77
|
-
STD_LIB_DIRS.add(os.path.join(sys.real_prefix, 'dlls'))
|
78
|
-
except AttributeError:
|
79
|
-
pass
|
80
65
|
# get_python_lib(standard_lib=1) is not available on pypy, set STD_LIB_DIR to
|
81
66
|
# non-valid path, see https://bugs.pypy.org/issue1164
|
82
67
|
except DistutilsPlatformError:
|
83
68
|
STD_LIB_DIRS = set()
|
84
69
|
|
85
|
-
|
70
|
+
if os.name == 'nt':
|
71
|
+
STD_LIB_DIRS.add(os.path.join(sys.prefix, 'dlls'))
|
72
|
+
try:
|
73
|
+
# real_prefix is defined when running inside virtualenv.
|
74
|
+
STD_LIB_DIRS.add(os.path.join(sys.real_prefix, 'dlls'))
|
75
|
+
except AttributeError:
|
76
|
+
pass
|
77
|
+
if platform.python_implementation() == 'PyPy':
|
78
|
+
_root = os.path.join(sys.prefix, 'lib_pypy')
|
79
|
+
STD_LIB_DIRS.add(_root)
|
80
|
+
try:
|
81
|
+
# real_prefix is defined when running inside virtualenv.
|
82
|
+
STD_LIB_DIRS.add(os.path.join(sys.real_prefix, 'lib_pypy'))
|
83
|
+
except AttributeError:
|
84
|
+
pass
|
85
|
+
del _root
|
86
|
+
if os.name == 'posix':
|
87
|
+
# Need the real prefix is we're under a virtualenv, otherwise
|
88
|
+
# the usual one will do.
|
89
|
+
try:
|
90
|
+
prefix = sys.real_prefix
|
91
|
+
except AttributeError:
|
92
|
+
prefix = sys.prefix
|
93
|
+
|
94
|
+
def _posix_path(path):
|
95
|
+
base_python = 'python%d.%d' % sys.version_info[:2]
|
96
|
+
return os.path.join(prefix, path, base_python)
|
97
|
+
|
98
|
+
STD_LIB_DIRS.add(_posix_path('lib'))
|
99
|
+
if sys.maxsize > 2**32:
|
100
|
+
# This tries to fix a problem with /usr/lib64 builds,
|
101
|
+
# where systems are running both 32-bit and 64-bit code
|
102
|
+
# on the same machine, which reflects into the places where
|
103
|
+
# standard library could be found. More details can be found
|
104
|
+
# here http://bugs.python.org/issue1294959.
|
105
|
+
# An easy reproducing case would be
|
106
|
+
# https://github.com/PyCQA/pylint/issues/712#issuecomment-163178753
|
107
|
+
STD_LIB_DIRS.add(_posix_path('lib64'))
|
86
108
|
|
87
|
-
|
88
|
-
|
109
|
+
EXT_LIB_DIR = get_python_lib()
|
110
|
+
IS_JYTHON = platform.python_implementation() == 'Jython'
|
111
|
+
BUILTIN_MODULES = dict.fromkeys(sys.builtin_module_names, True)
|
89
112
|
|
90
113
|
|
91
114
|
class NoSourceFile(Exception):
|
@@ -97,6 +120,32 @@ def _normalize_path(path):
|
|
97
120
|
return os.path.normcase(os.path.abspath(path))
|
98
121
|
|
99
122
|
|
123
|
+
def _path_from_filename(filename, is_jython=IS_JYTHON):
|
124
|
+
if not is_jython:
|
125
|
+
if sys.version_info > (3, 0):
|
126
|
+
return filename
|
127
|
+
else:
|
128
|
+
if filename.endswith(".pyc"):
|
129
|
+
return filename[:-1]
|
130
|
+
return filename
|
131
|
+
head, has_pyclass, _ = filename.partition("$py.class")
|
132
|
+
if has_pyclass:
|
133
|
+
return head + ".py"
|
134
|
+
return filename
|
135
|
+
|
136
|
+
|
137
|
+
def _handle_blacklist(blacklist, dirnames, filenames):
|
138
|
+
"""remove files/directories in the black list
|
139
|
+
|
140
|
+
dirnames/filenames are usually from os.walk
|
141
|
+
"""
|
142
|
+
for norecurs in blacklist:
|
143
|
+
if norecurs in dirnames:
|
144
|
+
dirnames.remove(norecurs)
|
145
|
+
elif norecurs in filenames:
|
146
|
+
filenames.remove(norecurs)
|
147
|
+
|
148
|
+
|
100
149
|
_NORM_PATH_CACHE = {}
|
101
150
|
|
102
151
|
def _cache_normalize_path(path):
|
@@ -112,7 +161,7 @@ def _cache_normalize_path(path):
|
|
112
161
|
result = _NORM_PATH_CACHE[path] = _normalize_path(path)
|
113
162
|
return result
|
114
163
|
|
115
|
-
def load_module_from_name(dotted_name, path=None, use_sys=
|
164
|
+
def load_module_from_name(dotted_name, path=None, use_sys=True):
|
116
165
|
"""Load a Python module from its name.
|
117
166
|
|
118
167
|
:type dotted_name: str
|
@@ -184,14 +233,16 @@ def load_module_from_modpath(parts, path=None, use_sys=1):
|
|
184
233
|
if prevmodule:
|
185
234
|
setattr(prevmodule, part, module)
|
186
235
|
_file = getattr(module, '__file__', '')
|
236
|
+
prevmodule = module
|
237
|
+
if not _file and _is_namespace(curname):
|
238
|
+
continue
|
187
239
|
if not _file and len(modpath) != len(parts):
|
188
240
|
raise ImportError('no module in %s' % '.'.join(parts[len(modpath):]))
|
189
241
|
path = [os.path.dirname(_file)]
|
190
|
-
prevmodule = module
|
191
242
|
return module
|
192
243
|
|
193
244
|
|
194
|
-
def load_module_from_file(filepath, path=None, use_sys=
|
245
|
+
def load_module_from_file(filepath, path=None, use_sys=True, extrapath=None):
|
195
246
|
"""Load a Python module from it's path.
|
196
247
|
|
197
248
|
:type filepath: str
|
@@ -219,9 +270,11 @@ def load_module_from_file(filepath, path=None, use_sys=1, extrapath=None):
|
|
219
270
|
|
220
271
|
def _check_init(path, mod_path):
|
221
272
|
"""check there are some __init__.py all along the way"""
|
273
|
+
modpath = []
|
222
274
|
for part in mod_path:
|
275
|
+
modpath.append(part)
|
223
276
|
path = os.path.join(path, part)
|
224
|
-
if not _has_init(path):
|
277
|
+
if not _is_namespace('.'.join(modpath)) and not _has_init(path):
|
225
278
|
return False
|
226
279
|
return True
|
227
280
|
|
@@ -246,7 +299,9 @@ def modpath_from_file(filename, extrapath=None):
|
|
246
299
|
:rtype: list(str)
|
247
300
|
:return: the corresponding splitted module's name
|
248
301
|
"""
|
249
|
-
|
302
|
+
filename = _path_from_filename(filename)
|
303
|
+
filename = os.path.abspath(filename)
|
304
|
+
base = os.path.splitext(filename)[0]
|
250
305
|
if extrapath is not None:
|
251
306
|
for path_ in extrapath:
|
252
307
|
path = os.path.abspath(path_)
|
@@ -317,8 +372,8 @@ def file_info_from_modpath(modpath, path=None, context_file=None):
|
|
317
372
|
def get_module_part(dotted_name, context_file=None):
|
318
373
|
"""given a dotted name return the module part of the name :
|
319
374
|
|
320
|
-
>>> get_module_part('
|
321
|
-
'
|
375
|
+
>>> get_module_part('astroid.as_string.dump')
|
376
|
+
'astroid.as_string'
|
322
377
|
|
323
378
|
:type dotted_name: str
|
324
379
|
:param dotted_name: full name of the identifier we are interested in
|
@@ -382,9 +437,8 @@ def get_module_files(src_directory, blacklist):
|
|
382
437
|
path of the directory corresponding to the package
|
383
438
|
|
384
439
|
:type blacklist: list or tuple
|
385
|
-
:param blacklist:
|
386
|
-
|
387
|
-
`logilab.common.STD_BLACKLIST`
|
440
|
+
:param blacklist: iterable
|
441
|
+
list of files or directories to ignore.
|
388
442
|
|
389
443
|
:rtype: list
|
390
444
|
:return:
|
@@ -419,7 +473,8 @@ def get_source_file(filename, include_no_ext=False):
|
|
419
473
|
:rtype: str
|
420
474
|
:return: the absolute path of the source file if it exists
|
421
475
|
"""
|
422
|
-
|
476
|
+
filename = os.path.abspath(_path_from_filename(filename))
|
477
|
+
base, orig_ext = os.path.splitext(filename)
|
423
478
|
for ext in PY_SOURCE_EXTS:
|
424
479
|
source_path = '%s.%s' % (base, ext)
|
425
480
|
if os.path.exists(source_path):
|
@@ -464,7 +519,8 @@ def is_standard_module(modname, std_path=None):
|
|
464
519
|
# modules which are not living in a file are considered standard
|
465
520
|
# (sys and __builtin__ for instance)
|
466
521
|
if filename is None:
|
467
|
-
|
522
|
+
# we assume there are no namespaces in stdlib
|
523
|
+
return not _is_namespace(modname)
|
468
524
|
filename = _normalize_path(filename)
|
469
525
|
if filename.startswith(_cache_normalize_path(EXT_LIB_DIR)):
|
470
526
|
return False
|
@@ -538,15 +594,27 @@ def _file_from_modpath(modpath, path=None, context=None):
|
|
538
594
|
return mp_filename, mtype
|
539
595
|
|
540
596
|
def _search_zip(modpath, pic):
|
541
|
-
for filepath, importer in pic.items():
|
597
|
+
for filepath, importer in list(pic.items()):
|
542
598
|
if importer is not None:
|
543
599
|
if importer.find_module(modpath[0]):
|
544
600
|
if not importer.find_module(os.path.sep.join(modpath)):
|
545
601
|
raise ImportError('No module named %s in %s/%s' % (
|
546
602
|
'.'.join(modpath[1:]), filepath, modpath))
|
547
|
-
return PY_ZIPMODULE,
|
603
|
+
return (PY_ZIPMODULE,
|
604
|
+
os.path.abspath(filepath) + os.path.sep + os.path.sep.join(modpath),
|
605
|
+
filepath)
|
548
606
|
raise ImportError('No module named %s' % '.'.join(modpath))
|
549
607
|
|
608
|
+
try:
|
609
|
+
import pkg_resources
|
610
|
+
except ImportError:
|
611
|
+
pkg_resources = None
|
612
|
+
|
613
|
+
|
614
|
+
def _is_namespace(modname):
|
615
|
+
return (pkg_resources is not None
|
616
|
+
and modname in pkg_resources._namespace_packages)
|
617
|
+
|
550
618
|
|
551
619
|
def _module_file(modpath, path=None):
|
552
620
|
"""get a module type / file path
|
@@ -579,14 +647,13 @@ def _module_file(modpath, path=None):
|
|
579
647
|
except AttributeError:
|
580
648
|
checkeggs = False
|
581
649
|
# pkg_resources support (aka setuptools namespace packages)
|
582
|
-
if (
|
583
|
-
and modpath[0] in pkg_resources._namespace_packages
|
584
|
-
and modpath[0] in sys.modules
|
585
|
-
and len(modpath) > 1):
|
650
|
+
if _is_namespace(modpath[0]) and modpath[0] in sys.modules:
|
586
651
|
# setuptools has added into sys.modules a module object with proper
|
587
652
|
# __path__, get back information from there
|
588
653
|
module = sys.modules[modpath.pop(0)]
|
589
|
-
path = module.__path__
|
654
|
+
path = list(module.__path__)
|
655
|
+
if not modpath:
|
656
|
+
return imp.C_BUILTIN, None
|
590
657
|
imported = []
|
591
658
|
while modpath:
|
592
659
|
modname = modpath[0]
|
@@ -609,7 +676,7 @@ def _module_file(modpath, path=None):
|
|
609
676
|
# Don't forget to close the stream to avoid
|
610
677
|
# spurious ResourceWarnings.
|
611
678
|
if stream:
|
612
|
-
|
679
|
+
stream.close()
|
613
680
|
|
614
681
|
if checkeggs and mp_filename:
|
615
682
|
fullabspath = [_cache_normalize_path(x) for x in _path]
|
@@ -639,7 +706,11 @@ def _module_file(modpath, path=None):
|
|
639
706
|
except IOError:
|
640
707
|
path = [mp_filename]
|
641
708
|
else:
|
642
|
-
|
709
|
+
extend_path = b'pkgutil' in data and b'extend_path' in data
|
710
|
+
declare_namespace = (
|
711
|
+
b"pkg_resources" in data
|
712
|
+
and b"declare_namespace(__name__)" in data)
|
713
|
+
if extend_path or declare_namespace:
|
643
714
|
# extend_path is called, search sys.path for module/packages
|
644
715
|
# of this name see pkgutil.extend_path documentation
|
645
716
|
path = [os.path.join(p, *imported) for p in sys.path
|