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
@@ -26,7 +26,8 @@ class OwnersFinder(object):
26
26
  fopen, os_path,
27
27
  email_postfix='@chromium.org',
28
28
  disable_color=False,
29
- override_files=None):
29
+ override_files=None,
30
+ ignore_author=False):
30
31
  self.email_postfix = email_postfix
31
32
 
32
33
  if os.name == 'nt' or disable_color:
@@ -46,7 +47,7 @@ class OwnersFinder(object):
46
47
  filtered_files = files
47
48
 
48
49
  reviewers = list(reviewers)
49
- if author:
50
+ if author and not ignore_author:
50
51
  reviewers.append(author)
51
52
 
52
53
  # Eliminate files that existing reviewers can review.
@@ -62,6 +63,8 @@ class OwnersFinder(object):
62
63
  self.db.load_data_needed_for(files)
63
64
 
64
65
  self.all_possible_owners = self.db.all_possible_owners(files, None)
66
+ if author and author in self.all_possible_owners:
67
+ del self.all_possible_owners[author]
65
68
 
66
69
  self.owners_to_files = {}
67
70
  self._map_owners_to_files(files)
@@ -248,15 +248,38 @@ def _ReportErrorFileAndLine(filename, line_num, dummy_line):
248
248
  return '%s:%s' % (filename, line_num)
249
249
 
250
250
 
251
- def _FindNewViolationsOfRule(callable_rule, input_api, source_file_filter=None,
252
- error_formatter=_ReportErrorFileAndLine):
251
+ def _GenerateAffectedFileExtList(input_api, source_file_filter):
252
+ """Generate a list of (file, extension) tuples from affected files.
253
+
254
+ The result can be fed to _FindNewViolationsOfRule() directly, or
255
+ could be filtered before doing that.
256
+
257
+ Args:
258
+ input_api: object to enumerate the affected files.
259
+ source_file_filter: a filter to be passed to the input api.
260
+ Yields:
261
+ A list of (file, extension) tuples, where |file| is an affected
262
+ file, and |extension| its file path extension.
263
+ """
264
+ for f in input_api.AffectedFiles(
265
+ include_deletes=False, file_filter=source_file_filter):
266
+ extension = str(f.LocalPath()).rsplit('.', 1)[-1]
267
+ yield (f, extension)
268
+
269
+
270
+ def _FindNewViolationsOfRuleForList(callable_rule,
271
+ file_ext_list,
272
+ error_formatter=_ReportErrorFileAndLine):
253
273
  """Find all newly introduced violations of a per-line rule (a callable).
254
274
 
275
+ Prefer calling _FindNewViolationsOfRule() instead of this function, unless
276
+ the list of affected files need to be filtered in a special way.
277
+
255
278
  Arguments:
256
279
  callable_rule: a callable taking a file extension and line of input and
257
280
  returning True if the rule is satisfied and False if there was a problem.
258
- input_api: object to enumerate the affected files.
259
- source_file_filter: a filter to be passed to the input api.
281
+ file_ext_list: a list of input (file, extension) tuples, as returned by
282
+ _GenerateAffectedFileExtList().
260
283
  error_formatter: a callable taking (filename, line_number, line) and
261
284
  returning a formatted error string.
262
285
 
@@ -264,13 +287,11 @@ def _FindNewViolationsOfRule(callable_rule, input_api, source_file_filter=None,
264
287
  A list of the newly-introduced violations reported by the rule.
265
288
  """
266
289
  errors = []
267
- for f in input_api.AffectedFiles(include_deletes=False,
268
- file_filter=source_file_filter):
290
+ for f, extension in file_ext_list:
269
291
  # For speed, we do two passes, checking first the full file. Shelling out
270
292
  # to the SCM to determine the changed region can be quite expensive on
271
293
  # Win32. Assuming that most files will be kept problem-free, we can
272
294
  # skip the SCM operations most of the time.
273
- extension = str(f.LocalPath()).rsplit('.', 1)[-1]
274
295
  if all(callable_rule(extension, line) for line in f.NewContents()):
275
296
  continue # No violation found in full text: can skip considering diff.
276
297
 
@@ -281,6 +302,28 @@ def _FindNewViolationsOfRule(callable_rule, input_api, source_file_filter=None,
281
302
  return errors
282
303
 
283
304
 
305
+ def _FindNewViolationsOfRule(callable_rule,
306
+ input_api,
307
+ source_file_filter=None,
308
+ error_formatter=_ReportErrorFileAndLine):
309
+ """Find all newly introduced violations of a per-line rule (a callable).
310
+
311
+ Arguments:
312
+ callable_rule: a callable taking a file extension and line of input and
313
+ returning True if the rule is satisfied and False if there was a problem.
314
+ input_api: object to enumerate the affected files.
315
+ source_file_filter: a filter to be passed to the input api.
316
+ error_formatter: a callable taking (filename, line_number, line) and
317
+ returning a formatted error string.
318
+
319
+ Returns:
320
+ A list of the newly-introduced violations reported by the rule.
321
+ """
322
+ return _FindNewViolationsOfRuleForList(
323
+ callable_rule, _GenerateAffectedFileExtList(
324
+ input_api, source_file_filter), error_formatter)
325
+
326
+
284
327
  def CheckChangeHasNoTabs(input_api, output_api, source_file_filter=None):
285
328
  """Checks that there are no tab characters in any of the text files to be
286
329
  submitted.
@@ -385,11 +428,6 @@ def CheckLongLines(input_api, output_api, maxlen, source_file_filter=None):
385
428
  if any((url in line) for url in ('file://', 'http://', 'https://')):
386
429
  return True
387
430
 
388
- # If 'line-too-long' is explicitly suppressed for the line, any length is
389
- # acceptable.
390
- if 'pylint: disable=line-too-long' in line and file_extension == 'py':
391
- return True
392
-
393
431
  if line_len > extra_maxlen:
394
432
  return False
395
433
 
@@ -402,12 +440,64 @@ def CheckLongLines(input_api, output_api, maxlen, source_file_filter=None):
402
440
  return input_api.re.match(
403
441
  r'.*[A-Za-z][A-Za-z_0-9]{%d,}.*' % long_symbol, line)
404
442
 
443
+ def is_global_pylint_directive(line, pos):
444
+ """True iff the pylint directive starting at line[pos] is global."""
445
+ # Any character before |pos| that is not whitespace or '#' indidcates
446
+ # this is a local directive.
447
+ return not any([c not in " \t#" for c in line[:pos]])
448
+
449
+ def check_python_long_lines(affected_files, error_formatter):
450
+ errors = []
451
+ global_check_enabled = True
452
+
453
+ for f in affected_files:
454
+ file_path = f.LocalPath()
455
+ for idx, line in enumerate(f.NewContents()):
456
+ line_num = idx + 1
457
+ line_is_short = no_long_lines(PY_FILE_EXTS[0], line)
458
+
459
+ pos = line.find('pylint: disable=line-too-long')
460
+ if pos >= 0:
461
+ if is_global_pylint_directive(line, pos):
462
+ global_check_enabled = False # Global disable
463
+ else:
464
+ continue # Local disable.
465
+
466
+ do_check = global_check_enabled
467
+
468
+ pos = line.find('pylint: enable=line-too-long')
469
+ if pos >= 0:
470
+ if is_global_pylint_directive(line, pos):
471
+ global_check_enabled = True # Global enable
472
+ do_check = True # Ensure it applies to current line as well.
473
+ else:
474
+ do_check = True # Local enable
475
+
476
+ if do_check and not line_is_short:
477
+ errors.append(error_formatter(file_path, line_num, line))
478
+
479
+ return errors
480
+
405
481
  def format_error(filename, line_num, line):
406
482
  return '%s, line %s, %s chars' % (filename, line_num, len(line))
407
483
 
408
- errors = _FindNewViolationsOfRule(no_long_lines, input_api,
409
- source_file_filter,
410
- error_formatter=format_error)
484
+ file_ext_list = list(
485
+ _GenerateAffectedFileExtList(input_api, source_file_filter))
486
+
487
+ errors = []
488
+
489
+ # For non-Python files, a simple line-based rule check is enough.
490
+ non_py_file_ext_list = [x for x in file_ext_list if x[1] not in PY_FILE_EXTS]
491
+ if non_py_file_ext_list:
492
+ errors += _FindNewViolationsOfRuleForList(
493
+ no_long_lines, non_py_file_ext_list, error_formatter=format_error)
494
+
495
+ # However, Python files need more sophisticated checks that need parsing
496
+ # the whole source file.
497
+ py_file_list = [x[0] for x in file_ext_list if x[1] in PY_FILE_EXTS]
498
+ if py_file_list:
499
+ errors += check_python_long_lines(
500
+ py_file_list, error_formatter=format_error)
411
501
  if errors:
412
502
  msg = 'Found lines longer than %s characters (first 5 shown).' % maxlen
413
503
  return [output_api.PresubmitPromptWarning(msg, items=errors[:5])]
@@ -840,7 +930,9 @@ def CheckOwnersFormat(input_api, output_api):
840
930
  if not affected_files:
841
931
  return []
842
932
  try:
843
- input_api.owners_db.load_data_needed_for(affected_files)
933
+ owners_db = input_api.owners_db
934
+ owners_db.override_files = {}
935
+ owners_db.load_data_needed_for(affected_files)
844
936
  return []
845
937
  except Exception as e:
846
938
  return [output_api.PresubmitError(
@@ -892,8 +984,8 @@ def CheckOwners(input_api, output_api, source_file_filter=None):
892
984
  output_fn('Missing %s for these files:\n %s' %
893
985
  (needed, '\n '.join(sorted(missing_files))))]
894
986
  if input_api.tbr and affects_owners:
895
- output_list.append(output_fn('Note that TBR does not apply to changes '
896
- 'that affect OWNERS files.'))
987
+ output_list.append(output_fn('The CL affects an OWNERS file, so TBR will '
988
+ 'be ignored.'))
897
989
  if not input_api.is_committing:
898
990
  suggested_owners = owners_db.reviewers_for(missing_files, owner_email)
899
991
  owners_with_comments = []
@@ -1060,18 +1152,27 @@ def PanProjectChecks(input_api, output_api,
1060
1152
  return results
1061
1153
 
1062
1154
 
1063
- def CheckPatchFormatted(
1064
- input_api, output_api, check_js=False, check_python=False,
1065
- result_factory=None):
1155
+ def CheckPatchFormatted(input_api,
1156
+ output_api,
1157
+ bypass_warnings=True,
1158
+ check_js=False,
1159
+ check_python=None,
1160
+ result_factory=None):
1066
1161
  result_factory = result_factory or output_api.PresubmitPromptWarning
1067
1162
  import git_cl
1068
1163
 
1069
1164
  display_args = []
1070
1165
  if check_js:
1071
1166
  display_args.append('--js')
1072
- if check_python:
1073
- # --python requires --full
1074
- display_args.extend(['--python', '--full'])
1167
+
1168
+ # Explicitly setting check_python to will enable/disable python formatting
1169
+ # on all files. Leaving it as None will enable checking patch formatting
1170
+ # on files that have a .style.yapf file in a parent directory.
1171
+ if check_python is not None:
1172
+ if check_python:
1173
+ display_args.append('--python')
1174
+ else:
1175
+ display_args.append('--no-python')
1075
1176
 
1076
1177
  cmd = ['-C', input_api.change.RepositoryRoot(),
1077
1178
  'cl', 'format', '--dry-run', '--presubmit'] + display_args
@@ -1084,8 +1185,11 @@ def CheckPatchFormatted(
1084
1185
  # contains the PRESUBMIT.py.
1085
1186
  if presubmit_subdir:
1086
1187
  cmd.append(input_api.PresubmitLocalPath())
1087
- code, _ = git_cl.RunGitWithCode(cmd, suppress_stderr=True)
1088
- if code == 2:
1188
+ code, _ = git_cl.RunGitWithCode(cmd, suppress_stderr=bypass_warnings)
1189
+ # bypass_warnings? Only fail with code 2.
1190
+ # As this is just a warning, ignore all other errors if the user
1191
+ # happens to have a broken clang-format, doesn't use git, etc etc.
1192
+ if code == 2 or (code and not bypass_warnings):
1089
1193
  if presubmit_subdir:
1090
1194
  short_path = presubmit_subdir
1091
1195
  else:
@@ -1095,8 +1199,6 @@ def CheckPatchFormatted(
1095
1199
  'The %s directory requires source formatting. '
1096
1200
  'Please run: git cl format %s' %
1097
1201
  (short_path, ' '.join(display_args)))]
1098
- # As this is just a warning, ignore all other errors if the user
1099
- # happens to have a broken clang-format, doesn't use git, etc etc.
1100
1202
  return []
1101
1203
 
1102
1204
 
@@ -1181,6 +1283,29 @@ def CheckCIPDPackages(input_api, output_api, platforms, packages):
1181
1283
  return CheckCIPDManifest(input_api, output_api, content='\n'.join(manifest))
1182
1284
 
1183
1285
 
1286
+ def CheckCIPDClientDigests(input_api, output_api, client_version_file):
1287
+ """Verifies that *.digests file was correctly regenerated.
1288
+
1289
+ <client_version_file>.digests file contains pinned hashes of the CIPD client.
1290
+ It is consulted during CIPD client bootstrap and self-update. It should be
1291
+ regenerated each time CIPD client version file changes.
1292
+
1293
+ Args:
1294
+ client_version_file (str): Path to a text file with CIPD client version.
1295
+ """
1296
+ cmd = [
1297
+ 'cipd' if not input_api.is_windows else 'cipd.bat',
1298
+ 'selfupdate-roll', '-check', '-version-file', client_version_file,
1299
+ ]
1300
+ if input_api.verbose:
1301
+ cmd += ['-log-level', 'debug']
1302
+ return input_api.Command(
1303
+ 'Check CIPD client_version_file.digests file',
1304
+ cmd,
1305
+ {'shell': True} if input_api.is_windows else {}, # to resolve cipd.bat
1306
+ output_api.PresubmitError)
1307
+
1308
+
1184
1309
  def CheckVPythonSpec(input_api, output_api, file_filter=None):
1185
1310
  """Validates any changed .vpython files with vpython verification tool.
1186
1311
 
@@ -1277,7 +1402,7 @@ def CheckChangedLUCIConfigs(input_api, output_api):
1277
1402
  ('%s/' % cs['location']) == loc_pref
1278
1403
  }
1279
1404
  cs_to_files = collections.defaultdict(list)
1280
- for f in input_api.AffectedFiles():
1405
+ for f in input_api.AffectedFiles(include_deletes=False):
1281
1406
  # windows
1282
1407
  file_path = f.LocalPath().replace(_os.sep, '/')
1283
1408
  logging.debug('Affected file path: %s', file_path)
@@ -1307,3 +1432,37 @@ def CheckChangedLUCIConfigs(input_api, output_api):
1307
1432
  out_f = output_api.PresubmitNotifyResult
1308
1433
  outputs.append(out_f('Config validation: %s' % msg['text']))
1309
1434
  return outputs
1435
+
1436
+
1437
+ def CheckLucicfgGenOutput(input_api, output_api, entry_script):
1438
+ """Verifies configs produced by `lucicfg` are up-to-date and pass validation.
1439
+
1440
+ Runs the check unconditionally, regardless of what files are modified. Examine
1441
+ input_api.AffectedFiles() yourself before using CheckLucicfgGenOutput if this
1442
+ is a concern.
1443
+
1444
+ Assumes `lucicfg` binary is in PATH and the user is logged in.
1445
+
1446
+ Args:
1447
+ entry_script: path to the entry-point *.star script responsible for
1448
+ generating a single config set. Either absolute or relative to the
1449
+ currently running PRESUBMIT.py script.
1450
+
1451
+ Returns:
1452
+ A list of input_api.Command objects containing verification commands.
1453
+ """
1454
+ return [
1455
+ input_api.Command(
1456
+ 'lucicfg validate "%s"' % entry_script,
1457
+ [
1458
+ 'lucicfg' if not input_api.is_windows else 'lucicfg.bat',
1459
+ 'validate', entry_script,
1460
+ '-log-level', 'debug' if input_api.verbose else 'warning',
1461
+ ],
1462
+ {
1463
+ 'stderr': input_api.subprocess.STDOUT,
1464
+ 'shell': input_api.is_windows, # to resolve *.bat
1465
+ 'cwd': input_api.PresubmitLocalPath(),
1466
+ },
1467
+ output_api.PresubmitError)
1468
+ ]
@@ -13,10 +13,10 @@ __version__ = '1.8.0'
13
13
  # change). We should add it as our presubmit scripts start feeling slow.
14
14
 
15
15
  import ast # Exposed through the API.
16
- import cpplint
16
+ import contextlib
17
17
  import cPickle # Exposed through the API.
18
+ import cpplint
18
19
  import cStringIO # Exposed through the API.
19
- import contextlib
20
20
  import fnmatch # Exposed through the API.
21
21
  import glob
22
22
  import inspect
@@ -44,6 +44,7 @@ from warnings import warn
44
44
 
45
45
  # Local imports.
46
46
  import fix_encoding
47
+ import gclient_paths # Exposed through the API
47
48
  import gclient_utils
48
49
  import git_footers
49
50
  import gerrit_util
@@ -437,39 +438,6 @@ class OutputApi(object):
437
438
  return self.PresubmitNotifyResult(*args, **kwargs)
438
439
  return self.PresubmitPromptWarning(*args, **kwargs)
439
440
 
440
- def EnsureCQIncludeTrybotsAreAdded(self, cl, bots_to_include, message):
441
- """Helper for any PostUploadHook wishing to add CQ_INCLUDE_TRYBOTS.
442
-
443
- Merges the bots_to_include into the current CQ_INCLUDE_TRYBOTS list,
444
- keeping it alphabetically sorted. Returns the results that should be
445
- returned from the PostUploadHook.
446
-
447
- Args:
448
- cl: The git_cl.Changelist object.
449
- bots_to_include: A list of strings of bots to include, in the form
450
- "master:slave".
451
- message: A message to be printed in the case that
452
- CQ_INCLUDE_TRYBOTS was updated.
453
- """
454
- description = cl.GetDescription(force=True)
455
- trybot_footers = git_footers.parse_footers(description).get(
456
- git_footers.normalize_name('Cq-Include-Trybots'), [])
457
- prior_bots = []
458
- for f in trybot_footers:
459
- prior_bots += [b.strip() for b in f.split(';') if b.strip()]
460
-
461
- if set(prior_bots) >= set(bots_to_include):
462
- return []
463
- all_bots = ';'.join(sorted(set(prior_bots) | set(bots_to_include)))
464
-
465
- description = git_footers.remove_footer(description, 'Cq-Include-Trybots')
466
- description = git_footers.add_footer(
467
- description, 'Cq-Include-Trybots', all_bots,
468
- before_keys=['Change-Id'])
469
-
470
- cl.UpdateDescription(description, force=True)
471
- return [self.PresubmitNotifyResult(message)]
472
-
473
441
 
474
442
  class InputApi(object):
475
443
  """An instance of this object is passed to presubmit scripts so they can
@@ -549,15 +517,19 @@ class InputApi(object):
549
517
  self.cpplint = cpplint
550
518
  self.cStringIO = cStringIO
551
519
  self.fnmatch = fnmatch
520
+ self.gclient_paths = gclient_paths
521
+ # TODO(yyanagisawa): stop exposing this when python3 become default.
522
+ # Since python3's tempfile has TemporaryDirectory, we do not need this.
523
+ self.temporary_directory = gclient_utils.temporary_directory
552
524
  self.glob = glob.glob
553
525
  self.json = json
554
526
  self.logging = logging.getLogger('PRESUBMIT')
527
+ self.marshal = marshal
555
528
  self.os_listdir = os.listdir
556
- self.os_walk = os.walk
557
529
  self.os_path = os.path
558
530
  self.os_stat = os.stat
531
+ self.os_walk = os.walk
559
532
  self.pickle = pickle
560
- self.marshal = marshal
561
533
  self.re = re
562
534
  self.subprocess = subprocess
563
535
  self.tempfile = tempfile
@@ -761,6 +733,7 @@ class InputApi(object):
761
733
  # will run all tests once all PRESUBMIT files are processed.
762
734
  tests = []
763
735
  msgs = []
736
+ parallel = parallel and self.parallel
764
737
  for t in tests_mix:
765
738
  if isinstance(t, OutputApi.PresubmitResult) and t:
766
739
  msgs.append(t)
@@ -772,7 +745,7 @@ class InputApi(object):
772
745
  if not t.kwargs.get('cwd'):
773
746
  t.kwargs['cwd'] = self.PresubmitLocalPath()
774
747
  self.thread_pool.AddTests(tests, parallel)
775
- if not self.parallel:
748
+ if not parallel:
776
749
  msgs.extend(self.thread_pool.RunAsync())
777
750
  return msgs
778
751
 
@@ -1063,7 +1036,11 @@ class Change(object):
1063
1036
  def BugsFromDescription(self):
1064
1037
  """Returns all bugs referenced in the commit description."""
1065
1038
  tags = [b.strip() for b in self.tags.get('BUG', '').split(',') if b.strip()]
1066
- footers = git_footers.parse_footers(self._full_description).get('Bug', [])
1039
+ footers = []
1040
+ unsplit_footers = git_footers.parse_footers(self._full_description).get(
1041
+ 'Bug', [])
1042
+ for unsplit_footer in unsplit_footers:
1043
+ footers += [b.strip() for b in unsplit_footer.split(',')]
1067
1044
  return sorted(set(tags + footers))
1068
1045
 
1069
1046
  def ReviewersFromDescription(self):
@@ -1529,8 +1506,8 @@ def DoPresubmitChecks(change,
1529
1506
  output.write("Warning, no PRESUBMIT.py found.\n")
1530
1507
  results = []
1531
1508
  thread_pool = ThreadPool()
1532
- executer = PresubmitExecuter(change, committing, verbose,
1533
- gerrit_obj, dry_run, thread_pool)
1509
+ executer = PresubmitExecuter(change, committing, verbose, gerrit_obj,
1510
+ dry_run, thread_pool, parallel)
1534
1511
  if default_presubmit:
1535
1512
  if verbose:
1536
1513
  output.write("Running default presubmit script.\n")