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.
Files changed (408) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -0
  3. data/CHANGELOG.md +4 -0
  4. data/README.md +2 -0
  5. data/ext/libv8/builder.rb +6 -2
  6. data/lib/libv8/version.rb +1 -1
  7. data/vendor/depot_tools/.gitattributes +1 -0
  8. data/vendor/depot_tools/.gitignore +7 -0
  9. data/vendor/depot_tools/CROS_OWNERS +5 -0
  10. data/vendor/depot_tools/OWNERS +12 -1
  11. data/vendor/depot_tools/PRESUBMIT.py +16 -9
  12. data/vendor/depot_tools/README.md +9 -2
  13. data/vendor/depot_tools/autoninja +14 -6
  14. data/vendor/depot_tools/autoninja.bat +11 -1
  15. data/vendor/depot_tools/autoninja.py +40 -18
  16. data/vendor/depot_tools/bb +12 -0
  17. data/vendor/depot_tools/bb.bat +7 -0
  18. data/vendor/depot_tools/bootstrap/win/manifest.txt +1 -1
  19. data/vendor/depot_tools/bootstrap/win/manifest_bleeding_edge.txt +1 -1
  20. data/vendor/depot_tools/bootstrap/win/win_tools.py +2 -1
  21. data/vendor/depot_tools/buildbucket.py +57 -4
  22. data/vendor/depot_tools/cipd +157 -44
  23. data/vendor/depot_tools/cipd.bat +51 -14
  24. data/vendor/depot_tools/cipd.ps1 +104 -42
  25. data/vendor/depot_tools/cipd_client_version +1 -1
  26. data/vendor/depot_tools/cipd_client_version.digests +21 -0
  27. data/vendor/depot_tools/cipd_manifest.txt +19 -6
  28. data/vendor/depot_tools/cipd_manifest.versions +318 -0
  29. data/vendor/depot_tools/clang_format.py +4 -4
  30. data/vendor/depot_tools/cpplint.py +44 -199
  31. data/vendor/depot_tools/dart_format.py +2 -2
  32. data/vendor/depot_tools/detect_host_arch.py +8 -3
  33. data/vendor/depot_tools/download_from_google_storage.py +47 -39
  34. data/vendor/depot_tools/fetch.py +30 -18
  35. data/vendor/depot_tools/fetch_configs/android_internal.py +34 -0
  36. data/vendor/depot_tools/fetch_configs/chromium.py +18 -1
  37. data/vendor/depot_tools/fetch_configs/config_util.py +4 -2
  38. data/vendor/depot_tools/fetch_configs/inspector_protocol.py +40 -0
  39. data/vendor/depot_tools/fetch_configs/node-ci.py +41 -0
  40. data/vendor/depot_tools/fix_encoding.py +3 -3
  41. data/vendor/depot_tools/gclient +1 -1
  42. data/vendor/depot_tools/gclient.py +415 -198
  43. data/vendor/depot_tools/gclient_eval.py +220 -171
  44. data/vendor/depot_tools/gclient_paths.py +142 -0
  45. data/vendor/depot_tools/gclient_scm.py +200 -51
  46. data/vendor/depot_tools/gclient_utils.py +88 -191
  47. data/vendor/depot_tools/gerrit_client.py +13 -0
  48. data/vendor/depot_tools/gerrit_util.py +158 -23
  49. data/vendor/depot_tools/git-nav-upstream +1 -1
  50. data/vendor/depot_tools/git_cache.py +77 -24
  51. data/vendor/depot_tools/git_cl.py +705 -1099
  52. data/vendor/depot_tools/git_common.py +9 -6
  53. data/vendor/depot_tools/git_map_branches.py +19 -2
  54. data/vendor/depot_tools/git_nav_downstream.py +3 -4
  55. data/vendor/depot_tools/git_rebase_update.py +14 -0
  56. data/vendor/depot_tools/git_reparent_branch.py +8 -2
  57. data/vendor/depot_tools/gn.py +38 -3
  58. data/vendor/depot_tools/gsutil.py +8 -3
  59. data/vendor/depot_tools/gsutil.py.bat +15 -0
  60. data/vendor/depot_tools/gsutil.vpython +16 -0
  61. data/vendor/depot_tools/infra/config/OWNERS +0 -1
  62. data/vendor/depot_tools/infra/config/recipes.cfg +3 -2
  63. data/vendor/depot_tools/lucicfg +12 -0
  64. data/vendor/depot_tools/lucicfg.bat +7 -0
  65. data/vendor/depot_tools/man/html/git-map-branches.html +34 -2
  66. data/vendor/depot_tools/man/html/git-new-branch.html +40 -32
  67. data/vendor/depot_tools/man/man1/git-map-branches.1 +24 -5
  68. data/vendor/depot_tools/man/man1/git-new-branch.1 +35 -27
  69. data/vendor/depot_tools/man/src/git-map-branches.demo.1.sh +1 -0
  70. data/vendor/depot_tools/man/src/git-map-branches.txt +10 -0
  71. data/vendor/depot_tools/man/src/git-new-branch.demo.1.sh +9 -4
  72. data/vendor/depot_tools/man/src/git-new-branch.txt +1 -1
  73. data/vendor/depot_tools/metrics.README.md +98 -0
  74. data/vendor/depot_tools/metrics.py +296 -0
  75. data/vendor/depot_tools/metrics_utils.py +303 -0
  76. data/vendor/depot_tools/my_activity.py +91 -29
  77. data/vendor/depot_tools/ninja +1 -1
  78. data/vendor/depot_tools/ninjalog.README.md +64 -0
  79. data/vendor/depot_tools/ninjalog_uploader.py +232 -0
  80. data/vendor/depot_tools/ninjalog_uploader_wrapper.py +116 -0
  81. data/vendor/depot_tools/owners.py +30 -13
  82. data/vendor/depot_tools/owners_finder.py +5 -2
  83. data/vendor/depot_tools/presubmit_canned_checks.py +188 -29
  84. data/vendor/depot_tools/presubmit_support.py +18 -41
  85. data/vendor/depot_tools/pylintrc +23 -19
  86. data/vendor/depot_tools/recipes/OWNERS +2 -0
  87. data/vendor/depot_tools/recipes/README.recipes.md +344 -151
  88. data/vendor/depot_tools/recipes/recipe_modules/bot_update/OWNERS +2 -0
  89. data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +2 -16
  90. data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +141 -99
  91. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +5 -8
  92. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +5 -8
  93. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +6 -98
  94. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +4 -9
  95. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +45 -5
  96. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +4 -9
  97. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +4 -9
  98. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{tryjob.json → input_commit_with_id_without_repo.json} +6 -11
  99. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{tryjob_empty_revision.json → multiple_patch_refs.json} +8 -9
  100. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +19 -29
  101. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{trychange.json → refs.json} +4 -9
  102. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +4 -9
  103. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail.json +51 -6
  104. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +50 -6
  105. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +51 -6
  106. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +17 -25
  107. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +17 -25
  108. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +18 -26
  109. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +18 -26
  110. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +26 -28
  111. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +45 -5
  112. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +17 -25
  113. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/unrecognized_commit_repo.json +13 -0
  114. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name.json +13 -152
  115. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_tags.json +4 -9
  116. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +185 -202
  117. data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +52 -157
  118. data/vendor/depot_tools/recipes/recipe_modules/bot_update/test_api.py +5 -14
  119. data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/ensure_checkout.py +34 -0
  120. data/vendor/depot_tools/recipes/recipe_modules/cipd/api.py +14 -2
  121. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic.json +4 -5
  122. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic_pkg.json +4 -5
  123. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-failed.json +7 -5
  124. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-many-instances.json +4 -5
  125. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/mac64.json +4 -5
  126. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_file.json +9 -3
  127. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_mode.json +9 -3
  128. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_verfile.json +9 -3
  129. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/win64.json +4 -5
  130. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk arch.json +2 -3
  131. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk bits.json +2 -3
  132. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_32.json +2 -3
  133. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_64.json +2 -3
  134. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_32.json +2 -3
  135. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_64.json +2 -3
  136. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_mips_64.json +2 -3
  137. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/mac_intel_64.json +2 -3
  138. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_32.json +2 -3
  139. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_64.json +2 -3
  140. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +13 -8
  141. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +18 -12
  142. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +18 -12
  143. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +18 -12
  144. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.py +3 -0
  145. data/vendor/depot_tools/recipes/recipe_modules/gclient/__init__.py +1 -0
  146. data/vendor/depot_tools/recipes/recipe_modules/gclient/api.py +58 -46
  147. data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +65 -22
  148. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/basic.json +20 -21
  149. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/buildbot.json +20 -21
  150. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/revision.json +20 -21
  151. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/tryserver.json +20 -21
  152. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.py +5 -2
  153. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/patch_project.py +62 -14
  154. data/vendor/depot_tools/recipes/recipe_modules/gerrit/api.py +24 -38
  155. data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.expected/basic.json +56 -50
  156. data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.py +15 -9
  157. data/vendor/depot_tools/recipes/recipe_modules/git/__init__.py +4 -1
  158. data/vendor/depot_tools/recipes/recipe_modules/git/api.py +34 -22
  159. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic.json +5 -6
  160. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_branch.json +5 -6
  161. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_file_name.json +5 -6
  162. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_hash.json +5 -6
  163. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_luci.json +222 -0
  164. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_ref.json +5 -6
  165. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_submodule_update_force.json +5 -6
  166. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_tags.json +224 -0
  167. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/can_fail_build.json +10 -6
  168. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cannot_fail_build.json +5 -7
  169. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cat-file_test.json +5 -6
  170. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_delta.json +5 -6
  171. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_failed.json +5 -7
  172. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output.json +5 -6
  173. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output_fails_build.json +10 -5
  174. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/curl_trace_file.json +5 -6
  175. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/git-cache-checkout.json +8 -9
  176. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/platform_win.json +5 -6
  177. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/rebase_failed.json +12 -8
  178. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/remote_not_origin.json +5 -6
  179. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/set_got_revision.json +5 -6
  180. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.py +27 -11
  181. data/vendor/depot_tools/recipes/recipe_modules/git_cl/api.py +1 -1
  182. data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.expected/basic.json +12 -13
  183. data/vendor/depot_tools/recipes/recipe_modules/gitiles/__init__.py +5 -0
  184. data/vendor/depot_tools/recipes/recipe_modules/gitiles/api.py +120 -5
  185. data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.expected/basic.json +45 -3
  186. data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.py +25 -0
  187. data/vendor/depot_tools/recipes/recipe_modules/gitiles/resources/gerrit_client.py +56 -4
  188. data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.expected/basic.json +6 -0
  189. data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.py +49 -0
  190. data/vendor/depot_tools/recipes/recipe_modules/gsutil/api.py +24 -13
  191. data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.expected/basic.json +13 -14
  192. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/basic.json +2 -3
  193. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_linux.json +2 -3
  194. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_mac.json +2 -3
  195. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_win.json +2 -3
  196. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_linux.json +2 -3
  197. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_mac.json +2 -3
  198. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_win.json +2 -3
  199. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_linux.json +2 -3
  200. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_mac.json +2 -3
  201. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_win.json +2 -3
  202. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/path_config.py +1 -2
  203. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/__init__.py +35 -0
  204. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/api.py +116 -0
  205. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/linux.json +22 -0
  206. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/mac.json +82 -0
  207. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/win.json +22 -0
  208. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.py +23 -0
  209. data/vendor/depot_tools/recipes/recipe_modules/presubmit/__init__.py +1 -0
  210. data/vendor/depot_tools/recipes/recipe_modules/presubmit/api.py +2 -7
  211. data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.expected/basic.json +7 -6
  212. data/vendor/depot_tools/recipes/recipe_modules/tryserver/__init__.py +1 -0
  213. data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +117 -8
  214. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/basic_tags.json +4 -5
  215. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/set_failure_hash_with_no_steps.json +7 -4
  216. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch.json +98 -7
  217. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch_and_target_ref.json +147 -0
  218. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch.json +8 -5
  219. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch_luci.json +8 -5
  220. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +9 -6
  221. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +9 -6
  222. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.py +27 -2
  223. data/vendor/depot_tools/recipes/recipe_modules/tryserver/test_api.py +14 -0
  224. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/__init__.py +25 -0
  225. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/api.py +137 -0
  226. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/linux.json +22 -0
  227. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/mac.json +22 -0
  228. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/win.json +107 -0
  229. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.py +26 -0
  230. data/vendor/depot_tools/recipes/recipes.py +37 -27
  231. data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +7 -10
  232. data/vendor/depot_tools/repo +34 -8
  233. data/vendor/depot_tools/roll_dep.py +52 -49
  234. data/vendor/depot_tools/scm.py +38 -23
  235. data/vendor/depot_tools/setup_color.py +4 -2
  236. data/vendor/depot_tools/split_cl.py +32 -4
  237. data/vendor/depot_tools/subprocess2.py +22 -4
  238. data/vendor/depot_tools/third_party/httplib2/README.chromium +2 -2
  239. data/vendor/depot_tools/third_party/httplib2/__init__.py +242 -158
  240. data/vendor/depot_tools/third_party/httplib2/cacerts.txt +57 -44
  241. data/vendor/depot_tools/third_party/httplib2/socks.py +15 -5
  242. data/vendor/depot_tools/third_party/logilab/README.chromium +2 -4
  243. data/vendor/depot_tools/third_party/logilab/astroid/README.chromium +2 -1
  244. data/vendor/depot_tools/third_party/logilab/astroid/__init__.py +10 -5
  245. data/vendor/depot_tools/third_party/logilab/astroid/__pkginfo__.py +5 -5
  246. data/vendor/depot_tools/third_party/logilab/astroid/arguments.py +233 -0
  247. data/vendor/depot_tools/third_party/logilab/astroid/as_string.py +82 -33
  248. data/vendor/depot_tools/third_party/logilab/astroid/bases.py +137 -153
  249. data/vendor/depot_tools/third_party/logilab/astroid/brain/{builtin_inference.py → brain_builtin_inference.py} +117 -26
  250. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_dateutil.py +15 -0
  251. data/vendor/depot_tools/third_party/logilab/astroid/brain/{py2gi.py → brain_gi.py} +48 -8
  252. data/vendor/depot_tools/third_party/logilab/astroid/brain/{py2mechanize.py → brain_mechanize.py} +0 -0
  253. data/vendor/depot_tools/third_party/logilab/astroid/brain/{pynose.py → brain_nose.py} +4 -1
  254. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_numpy.py +62 -0
  255. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_pytest.py +76 -0
  256. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_qt.py +44 -0
  257. data/vendor/depot_tools/third_party/logilab/astroid/brain/{pysix_moves.py → brain_six.py} +28 -1
  258. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_ssl.py +65 -0
  259. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_stdlib.py +473 -0
  260. data/vendor/depot_tools/third_party/logilab/astroid/builder.py +104 -81
  261. data/vendor/depot_tools/third_party/logilab/astroid/context.py +81 -0
  262. data/vendor/depot_tools/third_party/logilab/astroid/decorators.py +75 -0
  263. data/vendor/depot_tools/third_party/logilab/astroid/exceptions.py +20 -0
  264. data/vendor/depot_tools/third_party/logilab/astroid/inference.py +137 -183
  265. data/vendor/depot_tools/third_party/logilab/astroid/manager.py +45 -169
  266. data/vendor/depot_tools/third_party/logilab/astroid/mixins.py +37 -14
  267. data/vendor/depot_tools/third_party/logilab/astroid/modutils.py +112 -41
  268. data/vendor/depot_tools/third_party/logilab/astroid/node_classes.py +243 -156
  269. data/vendor/depot_tools/third_party/logilab/astroid/nodes.py +35 -22
  270. data/vendor/depot_tools/third_party/logilab/astroid/objects.py +186 -0
  271. data/vendor/depot_tools/third_party/logilab/astroid/protocols.py +157 -102
  272. data/vendor/depot_tools/third_party/logilab/astroid/raw_building.py +32 -8
  273. data/vendor/depot_tools/third_party/logilab/astroid/rebuilder.py +372 -309
  274. data/vendor/depot_tools/third_party/logilab/astroid/scoped_nodes.py +652 -420
  275. data/vendor/depot_tools/third_party/logilab/astroid/test_utils.py +4 -21
  276. data/vendor/depot_tools/third_party/logilab/astroid/transforms.py +96 -0
  277. data/vendor/depot_tools/third_party/logilab/astroid/util.py +89 -0
  278. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/LICENSE +19 -0
  279. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/README.chromium +11 -0
  280. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/__init__.py +20 -0
  281. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/cext.c +1421 -0
  282. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/compat.py +9 -0
  283. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/simple.py +246 -0
  284. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/slots.py +414 -0
  285. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/utils.py +13 -0
  286. data/vendor/depot_tools/third_party/logilab/wrapt/LICENSE +24 -0
  287. data/vendor/depot_tools/third_party/logilab/wrapt/README.chromium +11 -0
  288. data/vendor/depot_tools/third_party/logilab/wrapt/__init__.py +19 -0
  289. data/vendor/depot_tools/third_party/logilab/wrapt/_wrappers.c +2729 -0
  290. data/vendor/depot_tools/third_party/logilab/wrapt/arguments.py +96 -0
  291. data/vendor/depot_tools/third_party/logilab/wrapt/decorators.py +512 -0
  292. data/vendor/depot_tools/third_party/logilab/wrapt/importer.py +228 -0
  293. data/vendor/depot_tools/third_party/logilab/wrapt/wrappers.py +901 -0
  294. data/vendor/depot_tools/third_party/pylint/README.chromium +2 -25
  295. data/vendor/depot_tools/third_party/pylint/__pkginfo__.py +13 -3
  296. data/vendor/depot_tools/third_party/pylint/checkers/__init__.py +1 -2
  297. data/vendor/depot_tools/third_party/pylint/checkers/async.py +82 -0
  298. data/vendor/depot_tools/third_party/pylint/checkers/base.py +893 -119
  299. data/vendor/depot_tools/third_party/pylint/checkers/classes.py +342 -204
  300. data/vendor/depot_tools/third_party/pylint/checkers/design_analysis.py +51 -34
  301. data/vendor/depot_tools/third_party/pylint/checkers/exceptions.py +84 -47
  302. data/vendor/depot_tools/third_party/pylint/checkers/format.py +55 -30
  303. data/vendor/depot_tools/third_party/pylint/checkers/imports.py +314 -73
  304. data/vendor/depot_tools/third_party/pylint/checkers/logging.py +10 -8
  305. data/vendor/depot_tools/third_party/pylint/checkers/misc.py +2 -1
  306. data/vendor/depot_tools/third_party/pylint/checkers/newstyle.py +45 -48
  307. data/vendor/depot_tools/third_party/pylint/checkers/python3.py +31 -21
  308. data/vendor/depot_tools/third_party/pylint/checkers/raw_metrics.py +3 -3
  309. data/vendor/depot_tools/third_party/pylint/checkers/similar.py +4 -5
  310. data/vendor/depot_tools/third_party/pylint/checkers/spelling.py +24 -10
  311. data/vendor/depot_tools/third_party/pylint/checkers/stdlib.py +120 -56
  312. data/vendor/depot_tools/third_party/pylint/checkers/strings.py +38 -35
  313. data/vendor/depot_tools/third_party/pylint/checkers/typecheck.py +485 -138
  314. data/vendor/depot_tools/third_party/pylint/checkers/utils.py +319 -142
  315. data/vendor/depot_tools/third_party/pylint/checkers/variables.py +329 -207
  316. data/vendor/depot_tools/third_party/pylint/config.py +739 -76
  317. data/vendor/depot_tools/third_party/pylint/epylint.py +9 -5
  318. data/vendor/depot_tools/third_party/pylint/extensions/__init__.py +0 -0
  319. data/vendor/depot_tools/third_party/pylint/extensions/check_docs.py +311 -0
  320. data/vendor/depot_tools/third_party/pylint/extensions/check_elif.py +62 -0
  321. data/vendor/depot_tools/third_party/{logilab/common → pylint}/graph.py +30 -133
  322. data/vendor/depot_tools/third_party/pylint/gui.py +2 -2
  323. data/vendor/depot_tools/third_party/pylint/interfaces.py +21 -3
  324. data/vendor/depot_tools/third_party/pylint/lint.py +123 -140
  325. data/vendor/depot_tools/third_party/pylint/pyreverse/diadefslib.py +10 -13
  326. data/vendor/depot_tools/third_party/pylint/pyreverse/diagrams.py +15 -4
  327. data/vendor/depot_tools/third_party/pylint/pyreverse/inspector.py +372 -0
  328. data/vendor/depot_tools/third_party/pylint/pyreverse/main.py +30 -7
  329. data/vendor/depot_tools/third_party/pylint/pyreverse/utils.py +80 -2
  330. data/vendor/depot_tools/third_party/{logilab/common → pylint/pyreverse}/vcgutils.py +19 -37
  331. data/vendor/depot_tools/third_party/pylint/pyreverse/writer.py +3 -4
  332. data/vendor/depot_tools/third_party/pylint/reporters/__init__.py +34 -18
  333. data/vendor/depot_tools/third_party/pylint/reporters/guireporter.py +1 -1
  334. data/vendor/depot_tools/third_party/pylint/reporters/html.py +10 -3
  335. data/vendor/depot_tools/third_party/pylint/reporters/json.py +10 -4
  336. data/vendor/depot_tools/third_party/pylint/reporters/text.py +94 -3
  337. data/vendor/depot_tools/third_party/pylint/reporters/ureports/__init__.py +106 -0
  338. data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/html_writer.py +17 -57
  339. data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/nodes.py +52 -74
  340. data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/text_writer.py +14 -60
  341. data/vendor/depot_tools/third_party/pylint/testutils.py +22 -20
  342. data/vendor/depot_tools/third_party/pylint/utils.py +268 -44
  343. data/vendor/depot_tools/third_party/repo/progress.py +42 -0
  344. data/vendor/depot_tools/update_depot_tools +1 -1
  345. data/vendor/depot_tools/upload_metrics.py +25 -0
  346. data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +45 -15
  347. data/vendor/depot_tools/win_toolchain/package_from_installed.py +71 -24
  348. data/vendor/depot_tools/yapf +1 -1
  349. data/vendor/depot_tools/yapf.bat +1 -1
  350. metadata +92 -77
  351. data/vendor/depot_tools/git-crsync +0 -3
  352. data/vendor/depot_tools/infra/config/cq.cfg +0 -32
  353. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/apply_gerrit_ref.json +0 -29
  354. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/apply_gerrit_ref_custom.json +0 -29
  355. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/buildbot.json +0 -105
  356. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/shallow.json +0 -195
  357. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle_deprecated.json +0 -248
  358. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8.json +0 -248
  359. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name_no_patch.json +0 -105
  360. data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/apply_gerrit.py +0 -33
  361. data/vendor/depot_tools/third_party/logilab/astroid/brain/py2pytest.py +0 -31
  362. data/vendor/depot_tools/third_party/logilab/astroid/brain/py2qt4.py +0 -22
  363. data/vendor/depot_tools/third_party/logilab/astroid/brain/py2stdlib.py +0 -334
  364. data/vendor/depot_tools/third_party/logilab/astroid/inspector.py +0 -273
  365. data/vendor/depot_tools/third_party/logilab/astroid/utils.py +0 -239
  366. data/vendor/depot_tools/third_party/logilab/common/LICENSE.txt +0 -339
  367. data/vendor/depot_tools/third_party/logilab/common/README.chromium +0 -11
  368. data/vendor/depot_tools/third_party/logilab/common/__init__.py +0 -175
  369. data/vendor/depot_tools/third_party/logilab/common/__pkginfo__.py +0 -57
  370. data/vendor/depot_tools/third_party/logilab/common/cache.py +0 -114
  371. data/vendor/depot_tools/third_party/logilab/common/changelog.py +0 -238
  372. data/vendor/depot_tools/third_party/logilab/common/clcommands.py +0 -334
  373. data/vendor/depot_tools/third_party/logilab/common/cli.py +0 -211
  374. data/vendor/depot_tools/third_party/logilab/common/compat.py +0 -78
  375. data/vendor/depot_tools/third_party/logilab/common/configuration.py +0 -1105
  376. data/vendor/depot_tools/third_party/logilab/common/contexts.py +0 -5
  377. data/vendor/depot_tools/third_party/logilab/common/corbautils.py +0 -117
  378. data/vendor/depot_tools/third_party/logilab/common/daemon.py +0 -101
  379. data/vendor/depot_tools/third_party/logilab/common/date.py +0 -335
  380. data/vendor/depot_tools/third_party/logilab/common/dbf.py +0 -231
  381. data/vendor/depot_tools/third_party/logilab/common/debugger.py +0 -214
  382. data/vendor/depot_tools/third_party/logilab/common/decorators.py +0 -281
  383. data/vendor/depot_tools/third_party/logilab/common/deprecation.py +0 -189
  384. data/vendor/depot_tools/third_party/logilab/common/fileutils.py +0 -404
  385. data/vendor/depot_tools/third_party/logilab/common/interface.py +0 -71
  386. data/vendor/depot_tools/third_party/logilab/common/logging_ext.py +0 -195
  387. data/vendor/depot_tools/third_party/logilab/common/modutils.py +0 -702
  388. data/vendor/depot_tools/third_party/logilab/common/optik_ext.py +0 -392
  389. data/vendor/depot_tools/third_party/logilab/common/optparser.py +0 -92
  390. data/vendor/depot_tools/third_party/logilab/common/proc.py +0 -277
  391. data/vendor/depot_tools/third_party/logilab/common/pyro_ext.py +0 -180
  392. data/vendor/depot_tools/third_party/logilab/common/pytest.py +0 -1199
  393. data/vendor/depot_tools/third_party/logilab/common/registry.py +0 -1119
  394. data/vendor/depot_tools/third_party/logilab/common/shellutils.py +0 -462
  395. data/vendor/depot_tools/third_party/logilab/common/sphinx_ext.py +0 -87
  396. data/vendor/depot_tools/third_party/logilab/common/sphinxutils.py +0 -122
  397. data/vendor/depot_tools/third_party/logilab/common/table.py +0 -929
  398. data/vendor/depot_tools/third_party/logilab/common/tasksqueue.py +0 -101
  399. data/vendor/depot_tools/third_party/logilab/common/testlib.py +0 -1392
  400. data/vendor/depot_tools/third_party/logilab/common/textutils.py +0 -537
  401. data/vendor/depot_tools/third_party/logilab/common/tree.py +0 -369
  402. data/vendor/depot_tools/third_party/logilab/common/umessage.py +0 -194
  403. data/vendor/depot_tools/third_party/logilab/common/ureports/__init__.py +0 -172
  404. data/vendor/depot_tools/third_party/logilab/common/ureports/docbook_writer.py +0 -140
  405. data/vendor/depot_tools/third_party/logilab/common/urllib2ext.py +0 -89
  406. data/vendor/depot_tools/third_party/logilab/common/visitor.py +0 -109
  407. data/vendor/depot_tools/third_party/logilab/common/xmlrpcutils.py +0 -131
  408. data/vendor/depot_tools/third_party/logilab/common/xmlutils.py +0 -61
@@ -1,231 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- # copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
3
- # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
4
- #
5
- # This file is part of logilab-common.
6
- #
7
- # logilab-common is free software: you can redistribute it and/or modify it under
8
- # the terms of the GNU Lesser General Public License as published by the Free
9
- # Software Foundation, either version 2.1 of the License, or (at your option) any
10
- # later version.
11
- #
12
- # logilab-common is distributed in the hope that it will be useful, but WITHOUT
13
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14
- # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
15
- # details.
16
- #
17
- # You should have received a copy of the GNU Lesser General Public License along
18
- # with logilab-common. If not, see <http://www.gnu.org/licenses/>.
19
- """This is a DBF reader which reads Visual Fox Pro DBF format with Memo field
20
-
21
- Usage:
22
-
23
- >>> rec = readDbf('test.dbf')
24
- >>> for line in rec:
25
- >>> print line['name']
26
-
27
-
28
- :date: 13/07/2007
29
-
30
- http://www.physics.ox.ac.uk/users/santoso/Software.Repository.html
31
- page says code is "available as is without any warranty or support".
32
- """
33
- from __future__ import print_function
34
-
35
- import struct
36
- import os, os.path
37
- import sys
38
- import csv
39
- import tempfile
40
-
41
- from six.moves import range
42
-
43
- class Dbase:
44
- def __init__(self):
45
- self.fdb = None
46
- self.fmemo = None
47
- self.db_data = None
48
- self.memo_data = None
49
- self.fields = None
50
- self.num_records = 0
51
- self.header = None
52
- self.memo_file = ''
53
- self.memo_header = None
54
- self.memo_block_size = 0
55
- self.memo_header_len = 0
56
-
57
- def _drop_after_NULL(self, txt):
58
- for i in range(0, len(txt)):
59
- if ord(struct.unpack('c', txt[i])[0])==0:
60
- return txt[:i]
61
- return txt
62
-
63
- def _reverse_endian(self, num):
64
- if not len(num):
65
- return 0
66
- val = struct.unpack('<L', num)
67
- val = struct.pack('>L', val[0])
68
- val = struct.unpack('>L', val)
69
- return val[0]
70
-
71
- def _assign_ids(self, lst, ids):
72
- result = {}
73
- idx = 0
74
- for item in lst:
75
- id = ids[idx]
76
- result[id] = item
77
- idx += 1
78
- return result
79
-
80
- def open(self, db_name):
81
- filesize = os.path.getsize(db_name)
82
- if filesize <= 68:
83
- raise IOError('The file is not large enough to be a dbf file')
84
-
85
- self.fdb = open(db_name, 'rb')
86
-
87
- self.memo_file = ''
88
- if os.path.isfile(db_name[0:-1] + 't'):
89
- self.memo_file = db_name[0:-1] + 't'
90
- elif os.path.isfile(db_name[0:-3] + 'fpt'):
91
- self.memo_file = db_name[0:-3] + 'fpt'
92
-
93
- if self.memo_file:
94
- #Read memo file
95
- self.fmemo = open(self.memo_file, 'rb')
96
- self.memo_data = self.fmemo.read()
97
- self.memo_header = self._assign_ids(struct.unpack('>6x1H', self.memo_data[:8]), ['Block size'])
98
- block_size = self.memo_header['Block size']
99
- if not block_size:
100
- block_size = 512
101
- self.memo_block_size = block_size
102
- self.memo_header_len = block_size
103
- memo_size = os.path.getsize(self.memo_file)
104
-
105
- #Start reading data file
106
- data = self.fdb.read(32)
107
- self.header = self._assign_ids(struct.unpack('<B 3B L 2H 20x', data), ['id', 'Year', 'Month', 'Day', '# of Records', 'Header Size', 'Record Size'])
108
- self.header['id'] = hex(self.header['id'])
109
-
110
- self.num_records = self.header['# of Records']
111
- data = self.fdb.read(self.header['Header Size']-34)
112
- self.fields = {}
113
- x = 0
114
- header_pattern = '<11s c 4x B B 14x'
115
- ids = ['Field Name', 'Field Type', 'Field Length', 'Field Precision']
116
- pattern_len = 32
117
- for offset in range(0, len(data), 32):
118
- if ord(data[offset])==0x0d:
119
- break
120
- x += 1
121
- data_subset = data[offset: offset+pattern_len]
122
- if len(data_subset) < pattern_len:
123
- data_subset += ' '*(pattern_len-len(data_subset))
124
- self.fields[x] = self._assign_ids(struct.unpack(header_pattern, data_subset), ids)
125
- self.fields[x]['Field Name'] = self._drop_after_NULL(self.fields[x]['Field Name'])
126
-
127
- self.fdb.read(3)
128
- if self.header['# of Records']:
129
- data_size = (self.header['# of Records'] * self.header['Record Size']) - 1
130
- self.db_data = self.fdb.read(data_size)
131
- else:
132
- self.db_data = ''
133
- self.row_format = '<'
134
- self.row_ids = []
135
- self.row_len = 0
136
- for key in self.fields:
137
- field = self.fields[key]
138
- self.row_format += '%ds ' % (field['Field Length'])
139
- self.row_ids.append(field['Field Name'])
140
- self.row_len += field['Field Length']
141
-
142
- def close(self):
143
- if self.fdb:
144
- self.fdb.close()
145
- if self.fmemo:
146
- self.fmemo.close()
147
-
148
- def get_numrecords(self):
149
- return self.num_records
150
-
151
- def get_record_with_names(self, rec_no):
152
- """
153
- This function accept record number from 0 to N-1
154
- """
155
- if rec_no < 0 or rec_no > self.num_records:
156
- raise Exception('Unable to extract data outside the range')
157
-
158
- offset = self.header['Record Size'] * rec_no
159
- data = self.db_data[offset:offset+self.row_len]
160
- record = self._assign_ids(struct.unpack(self.row_format, data), self.row_ids)
161
-
162
- if self.memo_file:
163
- for key in self.fields:
164
- field = self.fields[key]
165
- f_type = field['Field Type']
166
- f_name = field['Field Name']
167
- c_data = record[f_name]
168
-
169
- if f_type=='M' or f_type=='G' or f_type=='B' or f_type=='P':
170
- c_data = self._reverse_endian(c_data)
171
- if c_data:
172
- record[f_name] = self.read_memo(c_data-1).strip()
173
- else:
174
- record[f_name] = c_data.strip()
175
- return record
176
-
177
- def read_memo_record(self, num, in_length):
178
- """
179
- Read the record of given number. The second parameter is the length of
180
- the record to read. It can be undefined, meaning read the whole record,
181
- and it can be negative, meaning at most the length
182
- """
183
- if in_length < 0:
184
- in_length = -self.memo_block_size
185
-
186
- offset = self.memo_header_len + num * self.memo_block_size
187
- self.fmemo.seek(offset)
188
- if in_length<0:
189
- in_length = -in_length
190
- if in_length==0:
191
- return ''
192
- return self.fmemo.read(in_length)
193
-
194
- def read_memo(self, num):
195
- result = ''
196
- buffer = self.read_memo_record(num, -1)
197
- if len(buffer)<=0:
198
- return ''
199
- length = struct.unpack('>L', buffer[4:4+4])[0] + 8
200
-
201
- block_size = self.memo_block_size
202
- if length < block_size:
203
- return buffer[8:length]
204
- rest_length = length - block_size
205
- rest_data = self.read_memo_record(num+1, rest_length)
206
- if len(rest_data)<=0:
207
- return ''
208
- return buffer[8:] + rest_data
209
-
210
- def readDbf(filename):
211
- """
212
- Read the DBF file specified by the filename and
213
- return the records as a list of dictionary.
214
-
215
- :param: filename File name of the DBF
216
- :return: List of rows
217
- """
218
- db = Dbase()
219
- db.open(filename)
220
- num = db.get_numrecords()
221
- rec = []
222
- for i in range(0, num):
223
- record = db.get_record_with_names(i)
224
- rec.append(record)
225
- db.close()
226
- return rec
227
-
228
- if __name__=='__main__':
229
- rec = readDbf('dbf/sptable.dbf')
230
- for line in rec:
231
- print('%s %s' % (line['GENUS'].strip(), line['SPECIES'].strip()))
@@ -1,214 +0,0 @@
1
- # copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
2
- # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
3
- #
4
- # This file is part of logilab-common.
5
- #
6
- # logilab-common is free software: you can redistribute it and/or modify it under
7
- # the terms of the GNU Lesser General Public License as published by the Free
8
- # Software Foundation, either version 2.1 of the License, or (at your option) any
9
- # later version.
10
- #
11
- # logilab-common is distributed in the hope that it will be useful, but WITHOUT
12
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
- # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
14
- # details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public License along
17
- # with logilab-common. If not, see <http://www.gnu.org/licenses/>.
18
- """Customized version of pdb's default debugger.
19
-
20
- - sets up a history file
21
- - uses ipython if available to colorize lines of code
22
- - overrides list command to search for current block instead
23
- of using 5 lines of context
24
-
25
-
26
-
27
-
28
- """
29
-
30
- from __future__ import print_function
31
-
32
- __docformat__ = "restructuredtext en"
33
-
34
- try:
35
- import readline
36
- except ImportError:
37
- readline = None
38
- import os
39
- import os.path as osp
40
- import sys
41
- from pdb import Pdb
42
- import inspect
43
-
44
- from logilab.common.compat import StringIO
45
-
46
- try:
47
- from IPython import PyColorize
48
- except ImportError:
49
- def colorize(source, *args):
50
- """fallback colorize function"""
51
- return source
52
- def colorize_source(source, *args):
53
- return source
54
- else:
55
- def colorize(source, start_lineno, curlineno):
56
- """colorize and annotate source with linenos
57
- (as in pdb's list command)
58
- """
59
- parser = PyColorize.Parser()
60
- output = StringIO()
61
- parser.format(source, output)
62
- annotated = []
63
- for index, line in enumerate(output.getvalue().splitlines()):
64
- lineno = index + start_lineno
65
- if lineno == curlineno:
66
- annotated.append('%4s\t->\t%s' % (lineno, line))
67
- else:
68
- annotated.append('%4s\t\t%s' % (lineno, line))
69
- return '\n'.join(annotated)
70
-
71
- def colorize_source(source):
72
- """colorize given source"""
73
- parser = PyColorize.Parser()
74
- output = StringIO()
75
- parser.format(source, output)
76
- return output.getvalue()
77
-
78
-
79
- def getsource(obj):
80
- """Return the text of the source code for an object.
81
-
82
- The argument may be a module, class, method, function, traceback, frame,
83
- or code object. The source code is returned as a single string. An
84
- IOError is raised if the source code cannot be retrieved."""
85
- lines, lnum = inspect.getsourcelines(obj)
86
- return ''.join(lines), lnum
87
-
88
-
89
- ################################################################
90
- class Debugger(Pdb):
91
- """custom debugger
92
-
93
- - sets up a history file
94
- - uses ipython if available to colorize lines of code
95
- - overrides list command to search for current block instead
96
- of using 5 lines of context
97
- """
98
- def __init__(self, tcbk=None):
99
- Pdb.__init__(self)
100
- self.reset()
101
- if tcbk:
102
- while tcbk.tb_next is not None:
103
- tcbk = tcbk.tb_next
104
- self._tcbk = tcbk
105
- self._histfile = os.path.expanduser("~/.pdbhist")
106
-
107
- def setup_history_file(self):
108
- """if readline is available, read pdb history file
109
- """
110
- if readline is not None:
111
- try:
112
- # XXX try..except shouldn't be necessary
113
- # read_history_file() can accept None
114
- readline.read_history_file(self._histfile)
115
- except IOError:
116
- pass
117
-
118
- def start(self):
119
- """starts the interactive mode"""
120
- self.interaction(self._tcbk.tb_frame, self._tcbk)
121
-
122
- def setup(self, frame, tcbk):
123
- """setup hook: set up history file"""
124
- self.setup_history_file()
125
- Pdb.setup(self, frame, tcbk)
126
-
127
- def set_quit(self):
128
- """quit hook: save commands in the history file"""
129
- if readline is not None:
130
- readline.write_history_file(self._histfile)
131
- Pdb.set_quit(self)
132
-
133
- def complete_p(self, text, line, begin_idx, end_idx):
134
- """provide variable names completion for the ``p`` command"""
135
- namespace = dict(self.curframe.f_globals)
136
- namespace.update(self.curframe.f_locals)
137
- if '.' in text:
138
- return self.attr_matches(text, namespace)
139
- return [varname for varname in namespace if varname.startswith(text)]
140
-
141
-
142
- def attr_matches(self, text, namespace):
143
- """implementation coming from rlcompleter.Completer.attr_matches
144
- Compute matches when text contains a dot.
145
-
146
- Assuming the text is of the form NAME.NAME....[NAME], and is
147
- evaluatable in self.namespace, it will be evaluated and its attributes
148
- (as revealed by dir()) are used as possible completions. (For class
149
- instances, class members are also considered.)
150
-
151
- WARNING: this can still invoke arbitrary C code, if an object
152
- with a __getattr__ hook is evaluated.
153
-
154
- """
155
- import re
156
- m = re.match(r"(\w+(\.\w+)*)\.(\w*)", text)
157
- if not m:
158
- return
159
- expr, attr = m.group(1, 3)
160
- object = eval(expr, namespace)
161
- words = dir(object)
162
- if hasattr(object, '__class__'):
163
- words.append('__class__')
164
- words = words + self.get_class_members(object.__class__)
165
- matches = []
166
- n = len(attr)
167
- for word in words:
168
- if word[:n] == attr and word != "__builtins__":
169
- matches.append("%s.%s" % (expr, word))
170
- return matches
171
-
172
- def get_class_members(self, klass):
173
- """implementation coming from rlcompleter.get_class_members"""
174
- ret = dir(klass)
175
- if hasattr(klass, '__bases__'):
176
- for base in klass.__bases__:
177
- ret = ret + self.get_class_members(base)
178
- return ret
179
-
180
- ## specific / overridden commands
181
- def do_list(self, arg):
182
- """overrides default list command to display the surrounding block
183
- instead of 5 lines of context
184
- """
185
- self.lastcmd = 'list'
186
- if not arg:
187
- try:
188
- source, start_lineno = getsource(self.curframe)
189
- print(colorize(''.join(source), start_lineno,
190
- self.curframe.f_lineno))
191
- except KeyboardInterrupt:
192
- pass
193
- except IOError:
194
- Pdb.do_list(self, arg)
195
- else:
196
- Pdb.do_list(self, arg)
197
- do_l = do_list
198
-
199
- def do_open(self, arg):
200
- """opens source file corresponding to the current stack level"""
201
- filename = self.curframe.f_code.co_filename
202
- lineno = self.curframe.f_lineno
203
- cmd = 'emacsclient --no-wait +%s %s' % (lineno, filename)
204
- os.system(cmd)
205
-
206
- do_o = do_open
207
-
208
- def pm():
209
- """use our custom debugger"""
210
- dbg = Debugger(sys.last_traceback)
211
- dbg.start()
212
-
213
- def set_trace():
214
- Debugger().set_trace(sys._getframe().f_back)
@@ -1,281 +0,0 @@
1
- # copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
2
- # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
3
- #
4
- # This file is part of logilab-common.
5
- #
6
- # logilab-common is free software: you can redistribute it and/or modify it under
7
- # the terms of the GNU Lesser General Public License as published by the Free
8
- # Software Foundation, either version 2.1 of the License, or (at your option) any
9
- # later version.
10
- #
11
- # logilab-common is distributed in the hope that it will be useful, but WITHOUT
12
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
- # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
14
- # details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public License along
17
- # with logilab-common. If not, see <http://www.gnu.org/licenses/>.
18
- """ A few useful function/method decorators. """
19
-
20
- from __future__ import print_function
21
-
22
- __docformat__ = "restructuredtext en"
23
-
24
- import sys
25
- import types
26
- from time import clock, time
27
- from inspect import isgeneratorfunction, getargspec
28
-
29
- from logilab.common.compat import method_type
30
-
31
- # XXX rewrite so we can use the decorator syntax when keyarg has to be specified
32
-
33
- class cached_decorator(object):
34
- def __init__(self, cacheattr=None, keyarg=None):
35
- self.cacheattr = cacheattr
36
- self.keyarg = keyarg
37
- def __call__(self, callableobj=None):
38
- assert not isgeneratorfunction(callableobj), \
39
- 'cannot cache generator function: %s' % callableobj
40
- if len(getargspec(callableobj).args) == 1 or self.keyarg == 0:
41
- cache = _SingleValueCache(callableobj, self.cacheattr)
42
- elif self.keyarg:
43
- cache = _MultiValuesKeyArgCache(callableobj, self.keyarg, self.cacheattr)
44
- else:
45
- cache = _MultiValuesCache(callableobj, self.cacheattr)
46
- return cache.closure()
47
-
48
- class _SingleValueCache(object):
49
- def __init__(self, callableobj, cacheattr=None):
50
- self.callable = callableobj
51
- if cacheattr is None:
52
- self.cacheattr = '_%s_cache_' % callableobj.__name__
53
- else:
54
- assert cacheattr != callableobj.__name__
55
- self.cacheattr = cacheattr
56
-
57
- def __call__(__me, self, *args):
58
- try:
59
- return self.__dict__[__me.cacheattr]
60
- except KeyError:
61
- value = __me.callable(self, *args)
62
- setattr(self, __me.cacheattr, value)
63
- return value
64
-
65
- def closure(self):
66
- def wrapped(*args, **kwargs):
67
- return self.__call__(*args, **kwargs)
68
- wrapped.cache_obj = self
69
- try:
70
- wrapped.__doc__ = self.callable.__doc__
71
- wrapped.__name__ = self.callable.__name__
72
- except:
73
- pass
74
- return wrapped
75
-
76
- def clear(self, holder):
77
- holder.__dict__.pop(self.cacheattr, None)
78
-
79
-
80
- class _MultiValuesCache(_SingleValueCache):
81
- def _get_cache(self, holder):
82
- try:
83
- _cache = holder.__dict__[self.cacheattr]
84
- except KeyError:
85
- _cache = {}
86
- setattr(holder, self.cacheattr, _cache)
87
- return _cache
88
-
89
- def __call__(__me, self, *args, **kwargs):
90
- _cache = __me._get_cache(self)
91
- try:
92
- return _cache[args]
93
- except KeyError:
94
- _cache[args] = __me.callable(self, *args)
95
- return _cache[args]
96
-
97
- class _MultiValuesKeyArgCache(_MultiValuesCache):
98
- def __init__(self, callableobj, keyarg, cacheattr=None):
99
- super(_MultiValuesKeyArgCache, self).__init__(callableobj, cacheattr)
100
- self.keyarg = keyarg
101
-
102
- def __call__(__me, self, *args, **kwargs):
103
- _cache = __me._get_cache(self)
104
- key = args[__me.keyarg-1]
105
- try:
106
- return _cache[key]
107
- except KeyError:
108
- _cache[key] = __me.callable(self, *args, **kwargs)
109
- return _cache[key]
110
-
111
-
112
- def cached(callableobj=None, keyarg=None, **kwargs):
113
- """Simple decorator to cache result of method call."""
114
- kwargs['keyarg'] = keyarg
115
- decorator = cached_decorator(**kwargs)
116
- if callableobj is None:
117
- return decorator
118
- else:
119
- return decorator(callableobj)
120
-
121
-
122
- class cachedproperty(object):
123
- """ Provides a cached property equivalent to the stacking of
124
- @cached and @property, but more efficient.
125
-
126
- After first usage, the <property_name> becomes part of the object's
127
- __dict__. Doing:
128
-
129
- del obj.<property_name> empties the cache.
130
-
131
- Idea taken from the pyramid_ framework and the mercurial_ project.
132
-
133
- .. _pyramid: http://pypi.python.org/pypi/pyramid
134
- .. _mercurial: http://pypi.python.org/pypi/Mercurial
135
- """
136
- __slots__ = ('wrapped',)
137
-
138
- def __init__(self, wrapped):
139
- try:
140
- wrapped.__name__
141
- except AttributeError:
142
- raise TypeError('%s must have a __name__ attribute' %
143
- wrapped)
144
- self.wrapped = wrapped
145
-
146
- @property
147
- def __doc__(self):
148
- doc = getattr(self.wrapped, '__doc__', None)
149
- return ('<wrapped by the cachedproperty decorator>%s'
150
- % ('\n%s' % doc if doc else ''))
151
-
152
- def __get__(self, inst, objtype=None):
153
- if inst is None:
154
- return self
155
- val = self.wrapped(inst)
156
- setattr(inst, self.wrapped.__name__, val)
157
- return val
158
-
159
-
160
- def get_cache_impl(obj, funcname):
161
- cls = obj.__class__
162
- member = getattr(cls, funcname)
163
- if isinstance(member, property):
164
- member = member.fget
165
- return member.cache_obj
166
-
167
- def clear_cache(obj, funcname):
168
- """Clear a cache handled by the :func:`cached` decorator. If 'x' class has
169
- @cached on its method `foo`, type
170
-
171
- >>> clear_cache(x, 'foo')
172
-
173
- to purge this method's cache on the instance.
174
- """
175
- get_cache_impl(obj, funcname).clear(obj)
176
-
177
- def copy_cache(obj, funcname, cacheobj):
178
- """Copy cache for <funcname> from cacheobj to obj."""
179
- cacheattr = get_cache_impl(obj, funcname).cacheattr
180
- try:
181
- setattr(obj, cacheattr, cacheobj.__dict__[cacheattr])
182
- except KeyError:
183
- pass
184
-
185
-
186
- class wproperty(object):
187
- """Simple descriptor expecting to take a modifier function as first argument
188
- and looking for a _<function name> to retrieve the attribute.
189
- """
190
- def __init__(self, setfunc):
191
- self.setfunc = setfunc
192
- self.attrname = '_%s' % setfunc.__name__
193
-
194
- def __set__(self, obj, value):
195
- self.setfunc(obj, value)
196
-
197
- def __get__(self, obj, cls):
198
- assert obj is not None
199
- return getattr(obj, self.attrname)
200
-
201
-
202
- class classproperty(object):
203
- """this is a simple property-like class but for class attributes.
204
- """
205
- def __init__(self, get):
206
- self.get = get
207
- def __get__(self, inst, cls):
208
- return self.get(cls)
209
-
210
-
211
- class iclassmethod(object):
212
- '''Descriptor for method which should be available as class method if called
213
- on the class or instance method if called on an instance.
214
- '''
215
- def __init__(self, func):
216
- self.func = func
217
- def __get__(self, instance, objtype):
218
- if instance is None:
219
- return method_type(self.func, objtype, objtype.__class__)
220
- return method_type(self.func, instance, objtype)
221
- def __set__(self, instance, value):
222
- raise AttributeError("can't set attribute")
223
-
224
-
225
- def timed(f):
226
- def wrap(*args, **kwargs):
227
- t = time()
228
- c = clock()
229
- res = f(*args, **kwargs)
230
- print('%s clock: %.9f / time: %.9f' % (f.__name__,
231
- clock() - c, time() - t))
232
- return res
233
- return wrap
234
-
235
-
236
- def locked(acquire, release):
237
- """Decorator taking two methods to acquire/release a lock as argument,
238
- returning a decorator function which will call the inner method after
239
- having called acquire(self) et will call release(self) afterwards.
240
- """
241
- def decorator(f):
242
- def wrapper(self, *args, **kwargs):
243
- acquire(self)
244
- try:
245
- return f(self, *args, **kwargs)
246
- finally:
247
- release(self)
248
- return wrapper
249
- return decorator
250
-
251
-
252
- def monkeypatch(klass, methodname=None):
253
- """Decorator extending class with the decorated callable. This is basically
254
- a syntactic sugar vs class assignment.
255
-
256
- >>> class A:
257
- ... pass
258
- >>> @monkeypatch(A)
259
- ... def meth(self):
260
- ... return 12
261
- ...
262
- >>> a = A()
263
- >>> a.meth()
264
- 12
265
- >>> @monkeypatch(A, 'foo')
266
- ... def meth(self):
267
- ... return 12
268
- ...
269
- >>> a.foo()
270
- 12
271
- """
272
- def decorator(func):
273
- try:
274
- name = methodname or func.__name__
275
- except AttributeError:
276
- raise AttributeError('%s has no __name__ attribute: '
277
- 'you should provide an explicit `methodname`'
278
- % func)
279
- setattr(klass, name, func)
280
- return func
281
- return decorator