libv8 7.3.492.27.1 → 8.4.255.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (718) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +11 -14
  4. data/CHANGELOG.md +10 -0
  5. data/README.md +10 -11
  6. data/Rakefile +30 -36
  7. data/ext/libv8/builder.rb +1 -1
  8. data/lib/libv8/version.rb +1 -1
  9. data/libv8.gemspec +1 -3
  10. data/vendor/depot_tools/{cipd.ps1 → .cipd_impl.ps1} +0 -0
  11. data/vendor/depot_tools/.gitattributes +1 -1
  12. data/vendor/depot_tools/.gitignore +7 -2
  13. data/vendor/depot_tools/.style.yapf +3 -1
  14. data/vendor/depot_tools/.vpython +55 -0
  15. data/vendor/depot_tools/.vpython3 +23 -0
  16. data/vendor/depot_tools/CROS_OWNERS +3 -1
  17. data/vendor/depot_tools/GOMA_OWNERS +9 -0
  18. data/vendor/depot_tools/LUCI_OWNERS +5 -0
  19. data/vendor/depot_tools/OWNERS +21 -6
  20. data/vendor/depot_tools/PRESUBMIT.py +35 -18
  21. data/vendor/depot_tools/README.git-cl.md +0 -14
  22. data/vendor/depot_tools/README.md +1 -1
  23. data/vendor/depot_tools/WATCHLISTS +2 -2
  24. data/vendor/depot_tools/auth.py +60 -772
  25. data/vendor/depot_tools/autoninja +12 -6
  26. data/vendor/depot_tools/autoninja.bat +14 -6
  27. data/vendor/depot_tools/autoninja.py +64 -27
  28. data/vendor/depot_tools/bb +1 -1
  29. data/vendor/depot_tools/bootstrap/{win/README.md → README.md} +28 -14
  30. data/vendor/depot_tools/bootstrap/{win/win_tools.py → bootstrap.py} +60 -43
  31. data/vendor/depot_tools/bootstrap/{win/git-bash.template.sh → git-bash.template.sh} +1 -1
  32. data/vendor/depot_tools/bootstrap/{win/git.template.bat → git.template.bat} +0 -0
  33. data/vendor/depot_tools/bootstrap/manifest.txt +27 -0
  34. data/vendor/depot_tools/bootstrap/manifest_bleeding_edge.txt +27 -0
  35. data/vendor/depot_tools/bootstrap/{win/profile.d.python.sh → profile.d.python.sh} +0 -0
  36. data/vendor/depot_tools/bootstrap/{win/python27.bleeding_edge.bat → python27.bat} +0 -0
  37. data/vendor/depot_tools/bootstrap/{win/python27.new.bat → python3.bat} +3 -3
  38. data/vendor/depot_tools/bootstrap/{win/win_tools.bat → win_tools.bat} +21 -16
  39. data/vendor/depot_tools/bootstrap_python3 +35 -0
  40. data/vendor/depot_tools/cbuildbot +1 -1
  41. data/vendor/depot_tools/chrome_set_ver +1 -1
  42. data/vendor/depot_tools/cipd +43 -39
  43. data/vendor/depot_tools/cipd.bat +2 -2
  44. data/vendor/depot_tools/cipd_client_version +1 -1
  45. data/vendor/depot_tools/cipd_client_version.digests +15 -14
  46. data/vendor/depot_tools/cipd_manifest.txt +31 -8
  47. data/vendor/depot_tools/cipd_manifest.versions +278 -158
  48. data/vendor/depot_tools/cit.py +9 -7
  49. data/vendor/depot_tools/clang_format.py +4 -1
  50. data/vendor/depot_tools/clang_format_merge_driver.py +10 -8
  51. data/vendor/depot_tools/compile_single_file.py +7 -2
  52. data/vendor/depot_tools/cpplint.py +51 -45
  53. data/vendor/depot_tools/cros +87 -0
  54. data/vendor/depot_tools/cros_sdk +1 -1
  55. data/vendor/depot_tools/crosjobs +13 -0
  56. data/vendor/depot_tools/detect_host_arch.py +0 -1
  57. data/vendor/depot_tools/dirmd +12 -0
  58. data/vendor/depot_tools/dirmd.bat +7 -0
  59. data/vendor/depot_tools/download_from_google_storage.py +47 -27
  60. data/vendor/depot_tools/ensure_bootstrap +14 -0
  61. data/vendor/depot_tools/fetch +14 -1
  62. data/vendor/depot_tools/fetch.bat +14 -1
  63. data/vendor/depot_tools/fetch.py +5 -7
  64. data/vendor/depot_tools/fetch_configs/chromium.py +6 -4
  65. data/vendor/depot_tools/fetch_configs/devtools-frontend.py +44 -0
  66. data/vendor/depot_tools/fetch_configs/ios_internal.py +10 -19
  67. data/vendor/depot_tools/fix_encoding.py +19 -5
  68. data/vendor/depot_tools/gclient +28 -12
  69. data/vendor/depot_tools/gclient-new-workdir.py +2 -0
  70. data/vendor/depot_tools/gclient.bat +18 -1
  71. data/vendor/depot_tools/gclient.py +160 -119
  72. data/vendor/depot_tools/gclient_eval.py +119 -107
  73. data/vendor/depot_tools/gclient_paths.py +67 -57
  74. data/vendor/depot_tools/gclient_scm.py +181 -159
  75. data/vendor/depot_tools/gclient_utils.py +177 -124
  76. data/vendor/depot_tools/gerrit_client.py +21 -13
  77. data/vendor/depot_tools/gerrit_util.py +188 -228
  78. data/vendor/depot_tools/git-cache +1 -1
  79. data/vendor/depot_tools/git-cl +1 -1
  80. data/vendor/depot_tools/git-drover +1 -1
  81. data/vendor/depot_tools/git-find-releases +1 -1
  82. data/vendor/depot_tools/git-footers +1 -1
  83. data/vendor/depot_tools/git-freeze +1 -1
  84. data/vendor/depot_tools/git-hyper-blame +1 -1
  85. data/vendor/depot_tools/git-map +1 -1
  86. data/vendor/depot_tools/git-map-branches +1 -1
  87. data/vendor/depot_tools/git-mark-merge-base +1 -1
  88. data/vendor/depot_tools/git-nav-downstream +1 -1
  89. data/vendor/depot_tools/git-new-branch +1 -1
  90. data/vendor/depot_tools/git-number +1 -1
  91. data/vendor/depot_tools/git-rebase-update +1 -1
  92. data/vendor/depot_tools/git-rename-branch +1 -1
  93. data/vendor/depot_tools/git-reparent-branch +1 -1
  94. data/vendor/depot_tools/git-retry +1 -1
  95. data/vendor/depot_tools/git-squash-branch +1 -1
  96. data/vendor/depot_tools/git-thaw +1 -1
  97. data/vendor/depot_tools/git-upstream-diff +1 -1
  98. data/vendor/depot_tools/git_cache.py +255 -360
  99. data/vendor/depot_tools/git_cl.py +1562 -2059
  100. data/vendor/depot_tools/git_cl_completion.sh +16 -2
  101. data/vendor/depot_tools/git_common.py +77 -32
  102. data/vendor/depot_tools/git_drover.py +17 -8
  103. data/vendor/depot_tools/git_find_releases.py +11 -9
  104. data/vendor/depot_tools/git_footers.py +13 -9
  105. data/vendor/depot_tools/git_freezer.py +3 -1
  106. data/vendor/depot_tools/git_hyper_blame.py +25 -32
  107. data/vendor/depot_tools/git_map.py +115 -93
  108. data/vendor/depot_tools/git_map_branches.py +11 -10
  109. data/vendor/depot_tools/git_mark_merge_base.py +8 -6
  110. data/vendor/depot_tools/git_nav_downstream.py +9 -6
  111. data/vendor/depot_tools/git_new_branch.py +39 -33
  112. data/vendor/depot_tools/git_number.py +28 -17
  113. data/vendor/depot_tools/git_rebase_update.py +50 -49
  114. data/vendor/depot_tools/git_rename_branch.py +2 -2
  115. data/vendor/depot_tools/git_reparent_branch.py +8 -6
  116. data/vendor/depot_tools/git_upstream_diff.py +4 -2
  117. data/vendor/depot_tools/gn.py +6 -4
  118. data/vendor/depot_tools/goma_auth +12 -0
  119. data/vendor/depot_tools/goma_auth.bat +8 -0
  120. data/vendor/depot_tools/goma_ctl +12 -0
  121. data/vendor/depot_tools/goma_ctl.bat +8 -0
  122. data/vendor/depot_tools/gsutil.py +5 -2
  123. data/vendor/depot_tools/gsutil.py.bat +8 -0
  124. data/vendor/depot_tools/gsutil.vpython +3 -1
  125. data/vendor/depot_tools/infra/config/OWNERS +2 -2
  126. data/vendor/depot_tools/infra/config/recipes.cfg +3 -2
  127. data/vendor/depot_tools/led +1 -1
  128. data/vendor/depot_tools/lockfile.py +116 -0
  129. data/vendor/depot_tools/luci-auth +1 -1
  130. data/vendor/depot_tools/lucicfg +1 -1
  131. data/vendor/depot_tools/mac_toolchain +1 -1
  132. data/vendor/depot_tools/man/html/depot_tools.html +1 -1
  133. data/vendor/depot_tools/man/html/depot_tools_tutorial.html +31 -25
  134. data/vendor/depot_tools/man/html/git-cl.html +1 -1
  135. data/vendor/depot_tools/man/html/git-drover.html +18 -18
  136. data/vendor/depot_tools/man/html/git-footers.html +1 -1
  137. data/vendor/depot_tools/man/html/git-freeze.html +3 -3
  138. data/vendor/depot_tools/man/html/git-hyper-blame.html +1 -1
  139. data/vendor/depot_tools/man/html/git-map-branches.html +2 -2
  140. data/vendor/depot_tools/man/html/git-map.html +1 -1
  141. data/vendor/depot_tools/man/html/git-mark-merge-base.html +1 -1
  142. data/vendor/depot_tools/man/html/git-nav-downstream.html +3 -3
  143. data/vendor/depot_tools/man/html/git-nav-upstream.html +12 -6
  144. data/vendor/depot_tools/man/html/git-new-branch.html +1 -1
  145. data/vendor/depot_tools/man/html/git-rebase-update.html +20 -1
  146. data/vendor/depot_tools/man/html/git-rename-branch.html +1 -1
  147. data/vendor/depot_tools/man/html/git-reparent-branch.html +1 -1
  148. data/vendor/depot_tools/man/html/git-retry.html +1 -1
  149. data/vendor/depot_tools/man/html/git-squash-branch.html +1 -1
  150. data/vendor/depot_tools/man/html/git-thaw.html +1 -1
  151. data/vendor/depot_tools/man/html/git-upstream-diff.html +10 -6
  152. data/vendor/depot_tools/man/man1/git-cl.1 +4 -4
  153. data/vendor/depot_tools/man/man1/git-drover.1 +21 -21
  154. data/vendor/depot_tools/man/man1/git-footers.1 +4 -4
  155. data/vendor/depot_tools/man/man1/git-freeze.1 +6 -6
  156. data/vendor/depot_tools/man/man1/git-hyper-blame.1 +4 -4
  157. data/vendor/depot_tools/man/man1/git-map-branches.1 +4 -4
  158. data/vendor/depot_tools/man/man1/git-map.1 +4 -4
  159. data/vendor/depot_tools/man/man1/git-mark-merge-base.1 +4 -4
  160. data/vendor/depot_tools/man/man1/git-nav-downstream.1 +6 -6
  161. data/vendor/depot_tools/man/man1/git-nav-upstream.1 +15 -9
  162. data/vendor/depot_tools/man/man1/git-new-branch.1 +3 -3
  163. data/vendor/depot_tools/man/man1/git-rebase-update.1 +14 -4
  164. data/vendor/depot_tools/man/man1/git-rename-branch.1 +4 -4
  165. data/vendor/depot_tools/man/man1/git-reparent-branch.1 +4 -4
  166. data/vendor/depot_tools/man/man1/git-retry.1 +4 -4
  167. data/vendor/depot_tools/man/man1/git-squash-branch.1 +4 -4
  168. data/vendor/depot_tools/man/man1/git-thaw.1 +4 -4
  169. data/vendor/depot_tools/man/man1/git-upstream-diff.1 +7 -13
  170. data/vendor/depot_tools/man/man7/depot_tools.7 +4 -4
  171. data/vendor/depot_tools/man/man7/depot_tools_tutorial.7 +31 -25
  172. data/vendor/depot_tools/man/src/common_demo_functions.sh +2 -2
  173. data/vendor/depot_tools/man/src/depot_tools_tutorial.txt +3 -3
  174. data/vendor/depot_tools/man/src/filter_demo_output.py +4 -2
  175. data/vendor/depot_tools/man/src/git-new-branch.txt +2 -1
  176. data/vendor/depot_tools/man/src/git-rebase-update.txt +8 -1
  177. data/vendor/depot_tools/metrics.README.md +8 -5
  178. data/vendor/depot_tools/metrics.py +7 -6
  179. data/vendor/depot_tools/metrics_utils.py +4 -14
  180. data/vendor/depot_tools/my_activity.py +85 -251
  181. data/vendor/depot_tools/ninja +1 -0
  182. data/vendor/depot_tools/ninja-mac +0 -0
  183. data/vendor/depot_tools/ninjalog_uploader.py +146 -145
  184. data/vendor/depot_tools/ninjalog_uploader_wrapper.py +69 -60
  185. data/vendor/depot_tools/owners.py +156 -43
  186. data/vendor/depot_tools/owners_finder.py +28 -14
  187. data/vendor/depot_tools/post_build_ninja_summary.py +76 -48
  188. data/vendor/depot_tools/presubmit_canned_checks.py +293 -106
  189. data/vendor/depot_tools/presubmit_support.py +527 -333
  190. data/vendor/depot_tools/prpc +1 -1
  191. data/vendor/depot_tools/pylint +2 -12
  192. data/vendor/depot_tools/pylint-1.5 +78 -0
  193. data/vendor/depot_tools/pylint-1.6 +78 -0
  194. data/vendor/depot_tools/pylint-1.7 +78 -0
  195. data/vendor/depot_tools/pylint-1.8 +78 -0
  196. data/vendor/depot_tools/pylint-1.9 +78 -0
  197. data/vendor/depot_tools/{depot-tools-auth.bat → pylint.bat} +2 -2
  198. data/vendor/depot_tools/pylint_main.py +45 -0
  199. data/vendor/depot_tools/pylintrc +14 -1
  200. data/vendor/depot_tools/python-bin/python3 +7 -0
  201. data/vendor/depot_tools/python_runner.sh +13 -8
  202. data/vendor/depot_tools/rdb +12 -0
  203. data/vendor/depot_tools/rdb.bat +7 -0
  204. data/vendor/depot_tools/recipes/OWNERS +0 -1
  205. data/vendor/depot_tools/recipes/README.recipes.md +218 -151
  206. data/vendor/depot_tools/recipes/recipe_modules/OWNERS +1 -1
  207. data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +17 -16
  208. data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +127 -78
  209. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +19 -4
  210. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +18 -3
  211. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +19 -4
  212. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +29 -8
  213. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +28 -10
  214. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +29 -8
  215. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +29 -8
  216. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/input_commit_with_id_without_repo.json +29 -8
  217. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/multiple_patch_refs.json +29 -8
  218. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +35 -10
  219. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{with_manifest_name.json → no_cp_checkout_HEAD.json} +25 -15
  220. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_branch_head.json +65 -0
  221. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_specific_commit.json +65 -0
  222. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_master.json +65 -0
  223. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/refs.json +29 -8
  224. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +29 -8
  225. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/resolve_chromium_fixed_version.json +117 -0
  226. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail.json +17 -11
  227. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +41 -10
  228. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +24 -11
  229. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +35 -10
  230. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +35 -10
  231. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +38 -11
  232. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +36 -11
  233. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +35 -10
  234. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +35 -10
  235. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +35 -10
  236. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/unrecognized_commit_repo.json +0 -5
  237. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_tags.json +29 -8
  238. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +95 -22
  239. data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +187 -114
  240. data/vendor/depot_tools/recipes/recipe_modules/bot_update/test_api.py +2 -2
  241. data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/do_not_retry_patch_failures_in_cq.py +42 -0
  242. data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/ensure_checkout.py +1 -0
  243. data/vendor/depot_tools/recipes/recipe_modules/cipd/__init__.py +0 -1
  244. data/vendor/depot_tools/recipes/recipe_modules/cipd/api.py +2 -2
  245. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic.json +0 -1
  246. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic_pkg.json +0 -1
  247. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-failed.json +2 -4
  248. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-many-instances.json +0 -1
  249. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/mac64.json +0 -1
  250. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_file.json +26 -6
  251. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_mode.json +23 -5
  252. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_verfile.json +23 -5
  253. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/win64.json +0 -1
  254. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk arch.json +0 -1
  255. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk bits.json +0 -1
  256. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_32.json +0 -1
  257. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_64.json +0 -1
  258. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_32.json +0 -1
  259. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_64.json +0 -1
  260. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_mips_64.json +0 -1
  261. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/mac_intel_64.json +0 -1
  262. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_32.json +0 -1
  263. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_64.json +0 -1
  264. data/vendor/depot_tools/recipes/recipe_modules/cipd/test_api.py +1 -1
  265. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +4 -1
  266. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +4 -2
  267. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +3 -1
  268. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +4 -2
  269. data/vendor/depot_tools/recipes/recipe_modules/gclient/__init__.py +2 -1
  270. data/vendor/depot_tools/recipes/recipe_modules/gclient/api.py +82 -13
  271. data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +23 -11
  272. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/basic.json +3 -4
  273. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/revision.json +3 -6
  274. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/tryserver.json +3 -4
  275. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.py +7 -7
  276. data/vendor/depot_tools/recipes/recipe_modules/gclient/resources/diff_deps.py +16 -0
  277. data/vendor/depot_tools/recipes/recipe_modules/gclient/test_api.py +4 -0
  278. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/basic.json +55 -0
  279. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/dont have revision yet.json +84 -0
  280. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/no change, exception.json +83 -0
  281. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/windows.json +55 -0
  282. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.py +88 -0
  283. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/patch_project.py +9 -21
  284. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/sync_failure.py +24 -0
  285. data/vendor/depot_tools/recipes/recipe_modules/gerrit/api.py +2 -1
  286. data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.expected/basic.json +7 -12
  287. data/vendor/depot_tools/recipes/recipe_modules/git/__init__.py +0 -2
  288. data/vendor/depot_tools/recipes/recipe_modules/git/api.py +9 -17
  289. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic.json +2 -8
  290. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_branch.json +2 -8
  291. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_file_name.json +2 -8
  292. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_hash.json +2 -8
  293. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_ref.json +2 -8
  294. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_submodule_update_force.json +2 -8
  295. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_tags.json +2 -8
  296. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/can_fail_build.json +3 -13
  297. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cannot_fail_build.json +2 -8
  298. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cat-file_test.json +4 -12
  299. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_delta.json +2 -10
  300. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_failed.json +1 -7
  301. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output.json +1 -7
  302. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output_fails_build.json +0 -8
  303. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/curl_trace_file.json +3 -10
  304. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/git-cache-checkout.json +3 -11
  305. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/platform_win.json +2 -8
  306. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/rebase_failed.json +3 -13
  307. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/remote_not_origin.json +2 -8
  308. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/set_got_revision.json +2 -8
  309. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.py +0 -5
  310. data/vendor/depot_tools/recipes/recipe_modules/git_cl/__init__.py +1 -1
  311. data/vendor/depot_tools/recipes/recipe_modules/git_cl/api.py +7 -13
  312. data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.expected/basic.json +21 -16
  313. data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.py +1 -2
  314. data/vendor/depot_tools/recipes/recipe_modules/gitiles/api.py +1 -1
  315. data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.expected/basic.json +0 -1
  316. data/vendor/depot_tools/recipes/recipe_modules/gitiles/resources/gerrit_client.py +2 -2
  317. data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.expected/basic.json +0 -1
  318. data/vendor/depot_tools/recipes/recipe_modules/gsutil/api.py +23 -8
  319. data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.expected/basic.json +52 -1
  320. data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.py +15 -0
  321. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/__init__.py +1 -0
  322. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/api.py +32 -8
  323. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/ancient_version.json +83 -0
  324. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/automatic_version.json +83 -0
  325. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/explicit_version.json +83 -0
  326. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/linux.json +0 -1
  327. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/mac.json +5 -4
  328. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/win.json +0 -1
  329. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.py +21 -2
  330. data/vendor/depot_tools/recipes/recipe_modules/presubmit/__init__.py +20 -0
  331. data/vendor/depot_tools/recipes/recipe_modules/presubmit/api.py +235 -3
  332. data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.expected/basic.json +13 -5
  333. data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.py +5 -1
  334. data/vendor/depot_tools/recipes/recipe_modules/presubmit/properties.proto +14 -0
  335. data/vendor/depot_tools/recipes/recipe_modules/presubmit/test_api.py +19 -0
  336. data/vendor/depot_tools/recipes/recipe_modules/presubmit/tests/execute.py +247 -0
  337. data/vendor/depot_tools/recipes/recipe_modules/presubmit/tests/prepare.py +49 -0
  338. data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +33 -45
  339. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/basic_tags.json +0 -1
  340. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch.json +64 -21
  341. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch_and_target_ref.json +64 -21
  342. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +1 -22
  343. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +1 -22
  344. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.py +5 -32
  345. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_fetch_ref_timeout.py +29 -0
  346. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_owner.expected/basic.json +5 -0
  347. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_owner.py +22 -0
  348. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_target_ref.py +32 -0
  349. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/linux.json +0 -1
  350. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/mac.json +0 -1
  351. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/win.json +2 -1
  352. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.py +1 -6
  353. data/vendor/depot_tools/recipes/recipes.py +49 -28
  354. data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +11 -6
  355. data/vendor/depot_tools/repo +698 -540
  356. data/vendor/depot_tools/roll-dep +14 -1
  357. data/vendor/depot_tools/roll-dep.bat +10 -1
  358. data/vendor/depot_tools/roll_dep.py +15 -10
  359. data/vendor/depot_tools/scm.py +95 -75
  360. data/vendor/depot_tools/setup_color.py +36 -2
  361. data/vendor/depot_tools/split_cl.py +44 -32
  362. data/vendor/depot_tools/subcommand.py +6 -6
  363. data/vendor/depot_tools/subprocess2.py +38 -322
  364. data/vendor/depot_tools/third_party/colorama/LICENSE.txt +0 -1
  365. data/vendor/depot_tools/third_party/colorama/README.chromium +4 -5
  366. data/vendor/depot_tools/third_party/colorama/README.rst +346 -0
  367. data/vendor/depot_tools/third_party/colorama/__init__.py +3 -4
  368. data/vendor/depot_tools/third_party/colorama/ansi.py +82 -30
  369. data/vendor/depot_tools/third_party/colorama/ansitowin32.py +105 -37
  370. data/vendor/depot_tools/third_party/colorama/initialise.py +39 -15
  371. data/vendor/depot_tools/third_party/colorama/win32.py +46 -28
  372. data/vendor/depot_tools/third_party/colorama/winterm.py +80 -31
  373. data/vendor/depot_tools/update_depot_tools +18 -8
  374. data/vendor/depot_tools/update_depot_tools.bat +19 -15
  375. data/vendor/depot_tools/upload_metrics.py +7 -6
  376. data/vendor/depot_tools/upload_to_google_storage.py +23 -16
  377. data/vendor/depot_tools/vpython +4 -4
  378. data/vendor/depot_tools/vpython.bat +1 -1
  379. data/vendor/depot_tools/vpython3 +55 -0
  380. data/vendor/depot_tools/vpython3.bat +12 -0
  381. data/vendor/depot_tools/watchlists.py +14 -11
  382. data/vendor/depot_tools/weekly +4 -2
  383. data/vendor/depot_tools/win32imports.py +61 -0
  384. data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +49 -41
  385. data/vendor/depot_tools/win_toolchain/package_from_installed.py +142 -149
  386. data/vendor/depot_tools/wtf +5 -3
  387. data/vendor/depot_tools/yapf +5 -1
  388. metadata +68 -343
  389. data/vendor/depot_tools/README.testing +0 -23
  390. data/vendor/depot_tools/annotated_gclient.py +0 -89
  391. data/vendor/depot_tools/appengine_mapper.py +0 -23
  392. data/vendor/depot_tools/bootstrap/win/manifest.txt +0 -20
  393. data/vendor/depot_tools/bootstrap/win/manifest_bleeding_edge.txt +0 -20
  394. data/vendor/depot_tools/bootstrap/win/pylint.new.bat +0 -7
  395. data/vendor/depot_tools/buildbucket.py +0 -186
  396. data/vendor/depot_tools/checkout.py +0 -431
  397. data/vendor/depot_tools/cros +0 -1
  398. data/vendor/depot_tools/dart_format.py +0 -58
  399. data/vendor/depot_tools/depot-tools-auth +0 -8
  400. data/vendor/depot_tools/depot-tools-auth.py +0 -102
  401. data/vendor/depot_tools/my_reviews.py +0 -396
  402. data/vendor/depot_tools/patch.py +0 -548
  403. data/vendor/depot_tools/pylint.py +0 -30
  404. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/buildbot.json +0 -239
  405. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_luci.json +0 -222
  406. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/__init__.py +0 -4
  407. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/api.py +0 -29
  408. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/basic.json +0 -15
  409. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_linux.json +0 -15
  410. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_mac.json +0 -15
  411. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_win.json +0 -15
  412. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_linux.json +0 -15
  413. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_mac.json +0 -15
  414. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_win.json +0 -15
  415. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_linux.json +0 -15
  416. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_mac.json +0 -15
  417. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_win.json +0 -15
  418. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.py +0 -33
  419. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/path_config.py +0 -66
  420. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/set_failure_hash_with_no_steps.json +0 -11
  421. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch.json +0 -45
  422. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch_luci.json +0 -45
  423. data/vendor/depot_tools/rietveld.py +0 -779
  424. data/vendor/depot_tools/roll-dep-svn +0 -8
  425. data/vendor/depot_tools/roll-dep-svn.bat +0 -12
  426. data/vendor/depot_tools/roll_dep_svn.py +0 -430
  427. data/vendor/depot_tools/support/chromite_wrapper +0 -96
  428. data/vendor/depot_tools/third_party/boto/LICENSE +0 -18
  429. data/vendor/depot_tools/third_party/boto/README.chromium +0 -43
  430. data/vendor/depot_tools/third_party/boto/README.rst +0 -163
  431. data/vendor/depot_tools/third_party/boto/__init__.py +0 -793
  432. data/vendor/depot_tools/third_party/boto/auth.py +0 -682
  433. data/vendor/depot_tools/third_party/boto/auth_handler.py +0 -58
  434. data/vendor/depot_tools/third_party/boto/cacerts/__init__.py +0 -22
  435. data/vendor/depot_tools/third_party/boto/cacerts/cacerts.txt +0 -2183
  436. data/vendor/depot_tools/third_party/boto/compat.py +0 -28
  437. data/vendor/depot_tools/third_party/boto/connection.py +0 -1081
  438. data/vendor/depot_tools/third_party/boto/contrib/__init__.py +0 -22
  439. data/vendor/depot_tools/third_party/boto/contrib/ymlmessage.py +0 -52
  440. data/vendor/depot_tools/third_party/boto/core/README +0 -58
  441. data/vendor/depot_tools/third_party/boto/core/__init__.py +0 -23
  442. data/vendor/depot_tools/third_party/boto/core/auth.py +0 -78
  443. data/vendor/depot_tools/third_party/boto/core/credentials.py +0 -154
  444. data/vendor/depot_tools/third_party/boto/core/dictresponse.py +0 -178
  445. data/vendor/depot_tools/third_party/boto/core/service.py +0 -67
  446. data/vendor/depot_tools/third_party/boto/datapipeline/__init__.py +0 -0
  447. data/vendor/depot_tools/third_party/boto/datapipeline/exceptions.py +0 -42
  448. data/vendor/depot_tools/third_party/boto/datapipeline/layer1.py +0 -546
  449. data/vendor/depot_tools/third_party/boto/ecs/__init__.py +0 -90
  450. data/vendor/depot_tools/third_party/boto/ecs/item.py +0 -153
  451. data/vendor/depot_tools/third_party/boto/exception.py +0 -476
  452. data/vendor/depot_tools/third_party/boto/file/README +0 -49
  453. data/vendor/depot_tools/third_party/boto/file/__init__.py +0 -28
  454. data/vendor/depot_tools/third_party/boto/file/bucket.py +0 -112
  455. data/vendor/depot_tools/third_party/boto/file/connection.py +0 -33
  456. data/vendor/depot_tools/third_party/boto/file/key.py +0 -199
  457. data/vendor/depot_tools/third_party/boto/file/simpleresultset.py +0 -30
  458. data/vendor/depot_tools/third_party/boto/fps/__init__.py +0 -21
  459. data/vendor/depot_tools/third_party/boto/fps/connection.py +0 -369
  460. data/vendor/depot_tools/third_party/boto/fps/exception.py +0 -344
  461. data/vendor/depot_tools/third_party/boto/fps/response.py +0 -175
  462. data/vendor/depot_tools/third_party/boto/gs/__init__.py +0 -22
  463. data/vendor/depot_tools/third_party/boto/gs/acl.py +0 -304
  464. data/vendor/depot_tools/third_party/boto/gs/bucket.py +0 -870
  465. data/vendor/depot_tools/third_party/boto/gs/bucketlistresultset.py +0 -64
  466. data/vendor/depot_tools/third_party/boto/gs/connection.py +0 -103
  467. data/vendor/depot_tools/third_party/boto/gs/cors.py +0 -169
  468. data/vendor/depot_tools/third_party/boto/gs/key.py +0 -704
  469. data/vendor/depot_tools/third_party/boto/gs/resumable_upload_handler.py +0 -659
  470. data/vendor/depot_tools/third_party/boto/gs/user.py +0 -54
  471. data/vendor/depot_tools/third_party/boto/handler.py +0 -44
  472. data/vendor/depot_tools/third_party/boto/https_connection.py +0 -124
  473. data/vendor/depot_tools/third_party/boto/jsonresponse.py +0 -163
  474. data/vendor/depot_tools/third_party/boto/manage/__init__.py +0 -23
  475. data/vendor/depot_tools/third_party/boto/manage/cmdshell.py +0 -241
  476. data/vendor/depot_tools/third_party/boto/manage/propget.py +0 -64
  477. data/vendor/depot_tools/third_party/boto/manage/server.py +0 -556
  478. data/vendor/depot_tools/third_party/boto/manage/task.py +0 -175
  479. data/vendor/depot_tools/third_party/boto/manage/test_manage.py +0 -34
  480. data/vendor/depot_tools/third_party/boto/manage/volume.py +0 -420
  481. data/vendor/depot_tools/third_party/boto/mashups/__init__.py +0 -23
  482. data/vendor/depot_tools/third_party/boto/mashups/interactive.py +0 -97
  483. data/vendor/depot_tools/third_party/boto/mashups/iobject.py +0 -115
  484. data/vendor/depot_tools/third_party/boto/mashups/order.py +0 -211
  485. data/vendor/depot_tools/third_party/boto/mashups/server.py +0 -395
  486. data/vendor/depot_tools/third_party/boto/plugin.py +0 -90
  487. data/vendor/depot_tools/third_party/boto/provider.py +0 -337
  488. data/vendor/depot_tools/third_party/boto/pyami/__init__.py +0 -22
  489. data/vendor/depot_tools/third_party/boto/pyami/bootstrap.py +0 -134
  490. data/vendor/depot_tools/third_party/boto/pyami/config.py +0 -229
  491. data/vendor/depot_tools/third_party/boto/pyami/copybot.cfg +0 -60
  492. data/vendor/depot_tools/third_party/boto/pyami/copybot.py +0 -97
  493. data/vendor/depot_tools/third_party/boto/pyami/helloworld.py +0 -28
  494. data/vendor/depot_tools/third_party/boto/pyami/launch_ami.py +0 -178
  495. data/vendor/depot_tools/third_party/boto/pyami/scriptbase.py +0 -44
  496. data/vendor/depot_tools/third_party/boto/pyami/startup.py +0 -60
  497. data/vendor/depot_tools/third_party/boto/regioninfo.py +0 -63
  498. data/vendor/depot_tools/third_party/boto/resultset.py +0 -169
  499. data/vendor/depot_tools/third_party/boto/roboto/__init__.py +0 -1
  500. data/vendor/depot_tools/third_party/boto/roboto/awsqueryrequest.py +0 -504
  501. data/vendor/depot_tools/third_party/boto/roboto/awsqueryservice.py +0 -121
  502. data/vendor/depot_tools/third_party/boto/roboto/param.py +0 -147
  503. data/vendor/depot_tools/third_party/boto/s3/__init__.py +0 -84
  504. data/vendor/depot_tools/third_party/boto/s3/acl.py +0 -164
  505. data/vendor/depot_tools/third_party/boto/s3/bucket.py +0 -1634
  506. data/vendor/depot_tools/third_party/boto/s3/bucketlistresultset.py +0 -139
  507. data/vendor/depot_tools/third_party/boto/s3/bucketlogging.py +0 -83
  508. data/vendor/depot_tools/third_party/boto/s3/connection.py +0 -540
  509. data/vendor/depot_tools/third_party/boto/s3/cors.py +0 -210
  510. data/vendor/depot_tools/third_party/boto/s3/deletemarker.py +0 -55
  511. data/vendor/depot_tools/third_party/boto/s3/key.py +0 -1712
  512. data/vendor/depot_tools/third_party/boto/s3/keyfile.py +0 -134
  513. data/vendor/depot_tools/third_party/boto/s3/lifecycle.py +0 -231
  514. data/vendor/depot_tools/third_party/boto/s3/multidelete.py +0 -138
  515. data/vendor/depot_tools/third_party/boto/s3/multipart.py +0 -315
  516. data/vendor/depot_tools/third_party/boto/s3/prefix.py +0 -42
  517. data/vendor/depot_tools/third_party/boto/s3/resumable_download_handler.py +0 -339
  518. data/vendor/depot_tools/third_party/boto/s3/tagging.py +0 -71
  519. data/vendor/depot_tools/third_party/boto/s3/user.py +0 -49
  520. data/vendor/depot_tools/third_party/boto/s3/website.py +0 -237
  521. data/vendor/depot_tools/third_party/boto/services/__init__.py +0 -23
  522. data/vendor/depot_tools/third_party/boto/services/bs.py +0 -179
  523. data/vendor/depot_tools/third_party/boto/services/message.py +0 -58
  524. data/vendor/depot_tools/third_party/boto/services/result.py +0 -136
  525. data/vendor/depot_tools/third_party/boto/services/service.py +0 -161
  526. data/vendor/depot_tools/third_party/boto/services/servicedef.py +0 -91
  527. data/vendor/depot_tools/third_party/boto/services/sonofmmm.cfg +0 -43
  528. data/vendor/depot_tools/third_party/boto/services/sonofmmm.py +0 -81
  529. data/vendor/depot_tools/third_party/boto/services/submit.py +0 -88
  530. data/vendor/depot_tools/third_party/boto/ses/__init__.py +0 -54
  531. data/vendor/depot_tools/third_party/boto/ses/connection.py +0 -521
  532. data/vendor/depot_tools/third_party/boto/ses/exceptions.py +0 -77
  533. data/vendor/depot_tools/third_party/boto/storage_uri.py +0 -835
  534. data/vendor/depot_tools/third_party/boto/sts/__init__.py +0 -55
  535. data/vendor/depot_tools/third_party/boto/sts/connection.py +0 -207
  536. data/vendor/depot_tools/third_party/boto/sts/credentials.py +0 -215
  537. data/vendor/depot_tools/third_party/boto/utils.py +0 -927
  538. data/vendor/depot_tools/third_party/colorama/README.txt +0 -304
  539. data/vendor/depot_tools/third_party/fancy_urllib/README +0 -22
  540. data/vendor/depot_tools/third_party/fancy_urllib/__init__.py +0 -460
  541. data/vendor/depot_tools/third_party/logilab/README.chromium +0 -6
  542. data/vendor/depot_tools/third_party/logilab/__init__.py +0 -0
  543. data/vendor/depot_tools/third_party/logilab/astroid/LICENSE.txt +0 -340
  544. data/vendor/depot_tools/third_party/logilab/astroid/README.chromium +0 -11
  545. data/vendor/depot_tools/third_party/logilab/astroid/__init__.py +0 -136
  546. data/vendor/depot_tools/third_party/logilab/astroid/__pkginfo__.py +0 -42
  547. data/vendor/depot_tools/third_party/logilab/astroid/arguments.py +0 -233
  548. data/vendor/depot_tools/third_party/logilab/astroid/as_string.py +0 -548
  549. data/vendor/depot_tools/third_party/logilab/astroid/astpeephole.py +0 -86
  550. data/vendor/depot_tools/third_party/logilab/astroid/bases.py +0 -636
  551. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_builtin_inference.py +0 -336
  552. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_dateutil.py +0 -15
  553. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_gi.py +0 -195
  554. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_mechanize.py +0 -18
  555. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_nose.py +0 -82
  556. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_numpy.py +0 -62
  557. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_pytest.py +0 -76
  558. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_qt.py +0 -44
  559. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_six.py +0 -288
  560. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_ssl.py +0 -65
  561. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_stdlib.py +0 -473
  562. data/vendor/depot_tools/third_party/logilab/astroid/builder.py +0 -263
  563. data/vendor/depot_tools/third_party/logilab/astroid/context.py +0 -81
  564. data/vendor/depot_tools/third_party/logilab/astroid/decorators.py +0 -75
  565. data/vendor/depot_tools/third_party/logilab/astroid/exceptions.py +0 -71
  566. data/vendor/depot_tools/third_party/logilab/astroid/inference.py +0 -359
  567. data/vendor/depot_tools/third_party/logilab/astroid/manager.py +0 -267
  568. data/vendor/depot_tools/third_party/logilab/astroid/mixins.py +0 -147
  569. data/vendor/depot_tools/third_party/logilab/astroid/modutils.py +0 -741
  570. data/vendor/depot_tools/third_party/logilab/astroid/node_classes.py +0 -1053
  571. data/vendor/depot_tools/third_party/logilab/astroid/nodes.py +0 -87
  572. data/vendor/depot_tools/third_party/logilab/astroid/objects.py +0 -186
  573. data/vendor/depot_tools/third_party/logilab/astroid/protocols.py +0 -470
  574. data/vendor/depot_tools/third_party/logilab/astroid/raw_building.py +0 -390
  575. data/vendor/depot_tools/third_party/logilab/astroid/rebuilder.py +0 -989
  576. data/vendor/depot_tools/third_party/logilab/astroid/scoped_nodes.py +0 -1716
  577. data/vendor/depot_tools/third_party/logilab/astroid/test_utils.py +0 -201
  578. data/vendor/depot_tools/third_party/logilab/astroid/transforms.py +0 -96
  579. data/vendor/depot_tools/third_party/logilab/astroid/util.py +0 -89
  580. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/LICENSE +0 -19
  581. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/README.chromium +0 -11
  582. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/__init__.py +0 -20
  583. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/cext.c +0 -1421
  584. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/compat.py +0 -9
  585. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/simple.py +0 -246
  586. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/slots.py +0 -414
  587. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/utils.py +0 -13
  588. data/vendor/depot_tools/third_party/logilab/wrapt/LICENSE +0 -24
  589. data/vendor/depot_tools/third_party/logilab/wrapt/README.chromium +0 -11
  590. data/vendor/depot_tools/third_party/logilab/wrapt/__init__.py +0 -19
  591. data/vendor/depot_tools/third_party/logilab/wrapt/_wrappers.c +0 -2729
  592. data/vendor/depot_tools/third_party/logilab/wrapt/arguments.py +0 -96
  593. data/vendor/depot_tools/third_party/logilab/wrapt/decorators.py +0 -512
  594. data/vendor/depot_tools/third_party/logilab/wrapt/importer.py +0 -228
  595. data/vendor/depot_tools/third_party/logilab/wrapt/wrappers.py +0 -901
  596. data/vendor/depot_tools/third_party/mock/LICENSE.txt +0 -26
  597. data/vendor/depot_tools/third_party/mock/README.chromium +0 -24
  598. data/vendor/depot_tools/third_party/mock/__init__.py +0 -2366
  599. data/vendor/depot_tools/third_party/oauth2client/LICENSE +0 -202
  600. data/vendor/depot_tools/third_party/oauth2client/MODIFICATIONS.diff +0 -66
  601. data/vendor/depot_tools/third_party/oauth2client/README.chromium +0 -15
  602. data/vendor/depot_tools/third_party/oauth2client/__init__.py +0 -5
  603. data/vendor/depot_tools/third_party/oauth2client/anyjson.py +0 -32
  604. data/vendor/depot_tools/third_party/oauth2client/appengine.py +0 -963
  605. data/vendor/depot_tools/third_party/oauth2client/client.py +0 -1363
  606. data/vendor/depot_tools/third_party/oauth2client/clientsecrets.py +0 -153
  607. data/vendor/depot_tools/third_party/oauth2client/crypt.py +0 -377
  608. data/vendor/depot_tools/third_party/oauth2client/django_orm.py +0 -134
  609. data/vendor/depot_tools/third_party/oauth2client/file.py +0 -124
  610. data/vendor/depot_tools/third_party/oauth2client/gce.py +0 -90
  611. data/vendor/depot_tools/third_party/oauth2client/keyring_storage.py +0 -109
  612. data/vendor/depot_tools/third_party/oauth2client/locked_file.py +0 -373
  613. data/vendor/depot_tools/third_party/oauth2client/multistore_file.py +0 -465
  614. data/vendor/depot_tools/third_party/oauth2client/old_run.py +0 -160
  615. data/vendor/depot_tools/third_party/oauth2client/tools.py +0 -243
  616. data/vendor/depot_tools/third_party/oauth2client/util.py +0 -196
  617. data/vendor/depot_tools/third_party/oauth2client/xsrfutil.py +0 -113
  618. data/vendor/depot_tools/third_party/protobuf26/README.chromium +0 -23
  619. data/vendor/depot_tools/third_party/protobuf26/__init__.py +0 -0
  620. data/vendor/depot_tools/third_party/protobuf26/compiler/__init__.py +0 -0
  621. data/vendor/depot_tools/third_party/protobuf26/compiler/plugin_pb2.py +0 -184
  622. data/vendor/depot_tools/third_party/protobuf26/descriptor.py +0 -849
  623. data/vendor/depot_tools/third_party/protobuf26/descriptor_database.py +0 -137
  624. data/vendor/depot_tools/third_party/protobuf26/descriptor_pb2.py +0 -1522
  625. data/vendor/depot_tools/third_party/protobuf26/descriptor_pool.py +0 -643
  626. data/vendor/depot_tools/third_party/protobuf26/internal/__init__.py +0 -0
  627. data/vendor/depot_tools/third_party/protobuf26/internal/api_implementation.py +0 -89
  628. data/vendor/depot_tools/third_party/protobuf26/internal/containers.py +0 -269
  629. data/vendor/depot_tools/third_party/protobuf26/internal/cpp_message.py +0 -663
  630. data/vendor/depot_tools/third_party/protobuf26/internal/decoder.py +0 -831
  631. data/vendor/depot_tools/third_party/protobuf26/internal/encoder.py +0 -788
  632. data/vendor/depot_tools/third_party/protobuf26/internal/enum_type_wrapper.py +0 -89
  633. data/vendor/depot_tools/third_party/protobuf26/internal/message_listener.py +0 -78
  634. data/vendor/depot_tools/third_party/protobuf26/internal/python_message.py +0 -1247
  635. data/vendor/depot_tools/third_party/protobuf26/internal/type_checkers.py +0 -328
  636. data/vendor/depot_tools/third_party/protobuf26/internal/wire_format.py +0 -268
  637. data/vendor/depot_tools/third_party/protobuf26/message.py +0 -284
  638. data/vendor/depot_tools/third_party/protobuf26/message_factory.py +0 -155
  639. data/vendor/depot_tools/third_party/protobuf26/reflection.py +0 -205
  640. data/vendor/depot_tools/third_party/protobuf26/service.py +0 -226
  641. data/vendor/depot_tools/third_party/protobuf26/service_reflection.py +0 -284
  642. data/vendor/depot_tools/third_party/protobuf26/symbol_database.py +0 -185
  643. data/vendor/depot_tools/third_party/protobuf26/text_encoding.py +0 -110
  644. data/vendor/depot_tools/third_party/protobuf26/text_format.py +0 -873
  645. data/vendor/depot_tools/third_party/pylint.py +0 -37
  646. data/vendor/depot_tools/third_party/pylint/LICENSE.txt +0 -340
  647. data/vendor/depot_tools/third_party/pylint/README.chromium +0 -30
  648. data/vendor/depot_tools/third_party/pylint/__init__.py +0 -46
  649. data/vendor/depot_tools/third_party/pylint/__main__.py +0 -3
  650. data/vendor/depot_tools/third_party/pylint/__pkginfo__.py +0 -80
  651. data/vendor/depot_tools/third_party/pylint/checkers/__init__.py +0 -123
  652. data/vendor/depot_tools/third_party/pylint/checkers/async.py +0 -82
  653. data/vendor/depot_tools/third_party/pylint/checkers/base.py +0 -2010
  654. data/vendor/depot_tools/third_party/pylint/checkers/classes.py +0 -1120
  655. data/vendor/depot_tools/third_party/pylint/checkers/design_analysis.py +0 -348
  656. data/vendor/depot_tools/third_party/pylint/checkers/exceptions.py +0 -369
  657. data/vendor/depot_tools/third_party/pylint/checkers/format.py +0 -993
  658. data/vendor/depot_tools/third_party/pylint/checkers/imports.py +0 -654
  659. data/vendor/depot_tools/third_party/pylint/checkers/logging.py +0 -258
  660. data/vendor/depot_tools/third_party/pylint/checkers/misc.py +0 -105
  661. data/vendor/depot_tools/third_party/pylint/checkers/newstyle.py +0 -169
  662. data/vendor/depot_tools/third_party/pylint/checkers/python3.py +0 -591
  663. data/vendor/depot_tools/third_party/pylint/checkers/raw_metrics.py +0 -129
  664. data/vendor/depot_tools/third_party/pylint/checkers/similar.py +0 -371
  665. data/vendor/depot_tools/third_party/pylint/checkers/spelling.py +0 -264
  666. data/vendor/depot_tools/third_party/pylint/checkers/stdlib.py +0 -280
  667. data/vendor/depot_tools/third_party/pylint/checkers/strings.py +0 -618
  668. data/vendor/depot_tools/third_party/pylint/checkers/typecheck.py +0 -974
  669. data/vendor/depot_tools/third_party/pylint/checkers/utils.py +0 -741
  670. data/vendor/depot_tools/third_party/pylint/checkers/variables.py +0 -1191
  671. data/vendor/depot_tools/third_party/pylint/config.py +0 -820
  672. data/vendor/depot_tools/third_party/pylint/epylint.py +0 -181
  673. data/vendor/depot_tools/third_party/pylint/extensions/__init__.py +0 -0
  674. data/vendor/depot_tools/third_party/pylint/extensions/check_docs.py +0 -311
  675. data/vendor/depot_tools/third_party/pylint/extensions/check_elif.py +0 -62
  676. data/vendor/depot_tools/third_party/pylint/graph.py +0 -179
  677. data/vendor/depot_tools/third_party/pylint/gui.py +0 -531
  678. data/vendor/depot_tools/third_party/pylint/interfaces.py +0 -102
  679. data/vendor/depot_tools/third_party/pylint/lint.py +0 -1381
  680. data/vendor/depot_tools/third_party/pylint/pyreverse/__init__.py +0 -5
  681. data/vendor/depot_tools/third_party/pylint/pyreverse/diadefslib.py +0 -230
  682. data/vendor/depot_tools/third_party/pylint/pyreverse/diagrams.py +0 -258
  683. data/vendor/depot_tools/third_party/pylint/pyreverse/inspector.py +0 -372
  684. data/vendor/depot_tools/third_party/pylint/pyreverse/main.py +0 -147
  685. data/vendor/depot_tools/third_party/pylint/pyreverse/utils.py +0 -210
  686. data/vendor/depot_tools/third_party/pylint/pyreverse/vcgutils.py +0 -198
  687. data/vendor/depot_tools/third_party/pylint/pyreverse/writer.py +0 -198
  688. data/vendor/depot_tools/third_party/pylint/reporters/__init__.py +0 -149
  689. data/vendor/depot_tools/third_party/pylint/reporters/guireporter.py +0 -27
  690. data/vendor/depot_tools/third_party/pylint/reporters/html.py +0 -108
  691. data/vendor/depot_tools/third_party/pylint/reporters/json.py +0 -64
  692. data/vendor/depot_tools/third_party/pylint/reporters/text.py +0 -237
  693. data/vendor/depot_tools/third_party/pylint/reporters/ureports/__init__.py +0 -106
  694. data/vendor/depot_tools/third_party/pylint/reporters/ureports/html_writer.py +0 -93
  695. data/vendor/depot_tools/third_party/pylint/reporters/ureports/nodes.py +0 -181
  696. data/vendor/depot_tools/third_party/pylint/reporters/ureports/text_writer.py +0 -99
  697. data/vendor/depot_tools/third_party/pylint/testutils.py +0 -414
  698. data/vendor/depot_tools/third_party/pylint/utils.py +0 -1148
  699. data/vendor/depot_tools/third_party/pymox/COPYING +0 -202
  700. data/vendor/depot_tools/third_party/pymox/MANIFEST.in +0 -5
  701. data/vendor/depot_tools/third_party/pymox/README +0 -56
  702. data/vendor/depot_tools/third_party/pymox/__init__.py +0 -0
  703. data/vendor/depot_tools/third_party/pymox/mox.py +0 -1643
  704. data/vendor/depot_tools/third_party/pymox/mox_test.py +0 -1708
  705. data/vendor/depot_tools/third_party/pymox/mox_test_helper.py +0 -76
  706. data/vendor/depot_tools/third_party/pymox/setup.py +0 -14
  707. data/vendor/depot_tools/third_party/pymox/stubout.py +0 -142
  708. data/vendor/depot_tools/third_party/pymox/stubout_test.py +0 -47
  709. data/vendor/depot_tools/third_party/pymox/stubout_testee.py +0 -2
  710. data/vendor/depot_tools/third_party/simplejson/LICENSE.txt +0 -19
  711. data/vendor/depot_tools/third_party/simplejson/PKG-INFO +0 -29
  712. data/vendor/depot_tools/third_party/simplejson/__init__.py +0 -437
  713. data/vendor/depot_tools/third_party/simplejson/decoder.py +0 -421
  714. data/vendor/depot_tools/third_party/simplejson/encoder.py +0 -501
  715. data/vendor/depot_tools/third_party/simplejson/ordered_dict.py +0 -119
  716. data/vendor/depot_tools/third_party/simplejson/scanner.py +0 -77
  717. data/vendor/depot_tools/third_party/simplejson/tool.py +0 -39
  718. data/vendor/depot_tools/third_party/upload.py +0 -2565
@@ -4,37 +4,44 @@
4
4
 
5
5
  """Generic presubmit checks that can be reused by other presubmit checks."""
6
6
 
7
+ from __future__ import print_function
8
+
7
9
  import os as _os
8
10
  _HERE = _os.path.dirname(_os.path.abspath(__file__))
9
11
 
12
+ # These filters will be disabled if callers do not explicitly supply a
13
+ # (possibly-empty) list. Ideally over time this list could be driven to zero.
14
+ # TODO(pkasting): If some of these look like "should never enable", move them
15
+ # to OFF_UNLESS_MANUALLY_ENABLED_LINT_FILTERS.
16
+ #
10
17
  # Justifications for each filter:
11
18
  #
12
- # - build/include : Too many; fix in the future.
13
- # - build/include_order : Not happening; #ifdefed includes.
14
- # - build/namespace : I'm surprised by how often we violate this rule.
15
- # - readability/casting : Mistakes a whole bunch of function pointer.
19
+ # - build/include : Too many; fix in the future
20
+ # TODO(pkasting): Try enabling subcategories
21
+ # - build/include_order : Not happening; #ifdefed includes
22
+ # - build/namespaces : TODO(pkasting): Try re-enabling
23
+ # - readability/casting : Mistakes a whole bunch of function pointers
16
24
  # - runtime/int : Can be fixed long term; volume of errors too high
17
- # - runtime/virtual : Broken now, but can be fixed in the future?
18
- # - whitespace/braces : We have a lot of explicit scoping in chrome code.
19
- DEFAULT_LINT_FILTERS = [
25
+ # - whitespace/braces : We have a lot of explicit scoping in chrome code
26
+ OFF_BY_DEFAULT_LINT_FILTERS = [
20
27
  '-build/include',
21
28
  '-build/include_order',
22
- '-build/namespace',
29
+ '-build/namespaces',
23
30
  '-readability/casting',
24
31
  '-runtime/int',
25
- '-runtime/virtual',
26
32
  '-whitespace/braces',
27
33
  ]
28
34
 
29
- # These filters will always be removed, even if the caller specifies a filter
30
- # set, as they are problematic or broken in some way.
35
+ # These filters will be disabled unless callers explicitly enable them, because
36
+ # they are undesirable in some way.
31
37
  #
32
38
  # Justifications for each filter:
33
- # - build/c++11 : Rvalue ref checks are unreliable (false positives),
34
- # include file and feature blacklists are
35
- # google3-specific.
36
- BLACKLIST_LINT_FILTERS = [
39
+ # - build/c++11 : Include file and feature blocklists are
40
+ # google3-specific
41
+ # - runtime/references : No longer banned by Google style guide
42
+ OFF_UNLESS_MANUALLY_ENABLED_LINT_FILTERS = [
37
43
  '-build/c++11',
44
+ '-runtime/references',
38
45
  ]
39
46
 
40
47
  ### Description checks
@@ -47,6 +54,22 @@ def CheckChangeHasBugField(input_api, output_api):
47
54
  return [output_api.PresubmitNotifyResult(
48
55
  'If this change has an associated bug, add Bug: [bug number].')]
49
56
 
57
+ def CheckChangeHasNoUnwantedTags(input_api, output_api):
58
+ UNWANTED_TAGS = {
59
+ 'FIXED': {
60
+ 'why': 'is not supported',
61
+ 'instead': 'Use "Fixed:" instead.'
62
+ },
63
+ # TODO: BUG, ISSUE
64
+ }
65
+
66
+ errors = []
67
+ for tag, desc in UNWANTED_TAGS.items():
68
+ if tag in input_api.change.tags:
69
+ subs = tag, desc['why'], desc.get('instead', '')
70
+ errors.append(('%s= %s. %s' % subs).rstrip())
71
+
72
+ return [output_api.PresubmitError('\n'.join(errors))] if errors else []
50
73
 
51
74
  def CheckDoNotSubmitInDescription(input_api, output_api):
52
75
  """Checks that the user didn't add 'DO NOT ''SUBMIT' to the CL description.
@@ -122,8 +145,14 @@ def CheckDoNotSubmitInFiles(input_api, output_api):
122
145
  # We want to check every text file, not just source files.
123
146
  file_filter = lambda x : x
124
147
  keyword = 'DO NOT ''SUBMIT'
125
- errors = _FindNewViolationsOfRule(lambda _, line : keyword not in line,
126
- input_api, file_filter)
148
+ def DoNotSubmitRule(extension, line):
149
+ try:
150
+ return keyword not in line
151
+ # Fallback to True for non-text content
152
+ except UnicodeDecodeError:
153
+ return True
154
+
155
+ errors = _FindNewViolationsOfRule(DoNotSubmitRule, input_api, file_filter)
127
156
  text = '\n'.join('Found %s in %s' % (keyword, loc) for loc in errors)
128
157
  if text:
129
158
  return [output_api.PresubmitError(text)]
@@ -141,9 +170,11 @@ def CheckChangeLintsClean(input_api, output_api, source_file_filter=None,
141
170
  # pylint: disable=protected-access
142
171
  cpplint._cpplint_state.ResetErrorCounts()
143
172
 
144
- lint_filters = lint_filters or DEFAULT_LINT_FILTERS
145
- lint_filters.extend(BLACKLIST_LINT_FILTERS)
146
- cpplint._SetFilters(','.join(lint_filters))
173
+ filters = OFF_UNLESS_MANUALLY_ENABLED_LINT_FILTERS[:]
174
+ if lint_filters is None:
175
+ lint_filters = OFF_BY_DEFAULT_LINT_FILTERS
176
+ filters.extend(lint_filters)
177
+ cpplint._SetFilters(','.join(filters))
147
178
 
148
179
  # We currently are more strict with normal code than unit tests; 4 and 5 are
149
180
  # the verbosity level that would normally be passed to cpplint.py through
@@ -227,7 +258,7 @@ def CheckGenderNeutral(input_api, output_api, source_file_filter=None):
227
258
  submitted.
228
259
  """
229
260
  gendered_re = input_api.re.compile(
230
- '(^|\s|\(|\[)([Hh]e|[Hh]is|[Hh]ers?|[Hh]im|[Ss]he|[Gg]uys?)\\b')
261
+ r'(^|\s|\(|\[)([Hh]e|[Hh]is|[Hh]ers?|[Hh]im|[Ss]he|[Gg]uys?)\\b')
231
262
 
232
263
  errors = []
233
264
  for f in input_api.AffectedFiles(include_deletes=False,
@@ -328,7 +359,7 @@ def CheckChangeHasNoTabs(input_api, output_api, source_file_filter=None):
328
359
  """Checks that there are no tab characters in any of the text files to be
329
360
  submitted.
330
361
  """
331
- # In addition to the filter, make sure that makefiles are blacklisted.
362
+ # In addition to the filter, make sure that makefiles are skipped.
332
363
  if not source_file_filter:
333
364
  # It's the default filter.
334
365
  source_file_filter = input_api.FilterSourceFile
@@ -392,7 +423,9 @@ def CheckLongLines(input_api, output_api, maxlen, source_file_filter=None):
392
423
  JAVA_FILE_EXTS = ('java',)
393
424
  JAVA_EXCEPTIONS = ('import ', 'package ')
394
425
  JS_FILE_EXTS = ('js',)
395
- JS_EXCEPTIONS = ("GEN('#include",)
426
+ JS_EXCEPTIONS = ("GEN('#include", 'import ')
427
+ TS_FILE_EXTS = ('ts',)
428
+ TS_EXCEPTIONS = ('import ')
396
429
  OBJC_FILE_EXTS = ('h', 'm', 'mm')
397
430
  OBJC_EXCEPTIONS = ('#define', '#endif', '#if', '#import', '#include',
398
431
  '#pragma')
@@ -404,6 +437,7 @@ def CheckLongLines(input_api, output_api, maxlen, source_file_filter=None):
404
437
  (HTML_FILE_EXTS, HTML_EXCEPTIONS),
405
438
  (JAVA_FILE_EXTS, JAVA_EXCEPTIONS),
406
439
  (JS_FILE_EXTS, JS_EXCEPTIONS),
440
+ (TS_FILE_EXTS, TS_EXCEPTIONS),
407
441
  (OBJC_FILE_EXTS, OBJC_EXCEPTIONS),
408
442
  (PY_FILE_EXTS, PY_EXCEPTIONS),
409
443
  ]
@@ -552,7 +586,7 @@ def CheckTreeIsOpen(input_api, output_api,
552
586
  return []
553
587
  try:
554
588
  if json_url:
555
- connection = input_api.urllib2.urlopen(json_url)
589
+ connection = input_api.urllib_request.urlopen(json_url)
556
590
  status = input_api.json.loads(connection.read())
557
591
  connection.close()
558
592
  if not status['can_commit_freely']:
@@ -561,7 +595,7 @@ def CheckTreeIsOpen(input_api, output_api,
561
595
  return [output_api.PresubmitError(short_text, long_text=long_text)]
562
596
  else:
563
597
  # TODO(bradnelson): drop this once all users are gone.
564
- connection = input_api.urllib2.urlopen(url)
598
+ connection = input_api.urllib_request.urlopen(url)
565
599
  status = connection.read()
566
600
  connection.close()
567
601
  if input_api.re.match(closed, status):
@@ -574,12 +608,17 @@ def CheckTreeIsOpen(input_api, output_api,
574
608
  return []
575
609
 
576
610
  def GetUnitTestsInDirectory(
577
- input_api, output_api, directory, whitelist=None, blacklist=None, env=None):
611
+ input_api, output_api, directory, files_to_check=None, files_to_skip=None,
612
+ env=None, run_on_python2=True, run_on_python3=True, whitelist=None,
613
+ blacklist=None, allowlist=None, blocklist=None):
578
614
  """Lists all files in a directory and runs them. Doesn't recurse.
579
615
 
580
- It's mainly a wrapper for RunUnitTests. Use whitelist and blacklist to filter
616
+ It's mainly a wrapper for RunUnitTests. Use allowlist and blocklist to filter
581
617
  tests accordingly.
582
618
  """
619
+ # TODO(https://crbug.com/1098560): Add warnings before removing bc.
620
+ files_to_check = files_to_check or allowlist or whitelist
621
+ files_to_skip = files_to_skip or blocklist or blacklist
583
622
  unit_tests = []
584
623
  test_path = input_api.os_path.abspath(
585
624
  input_api.os_path.join(input_api.PresubmitLocalPath(), directory))
@@ -593,9 +632,9 @@ def GetUnitTestsInDirectory(
593
632
  fullpath = input_api.os_path.join(test_path, filename)
594
633
  if not input_api.os_path.isfile(fullpath):
595
634
  continue
596
- if whitelist and not check(filename, whitelist):
635
+ if files_to_check and not check(filename, files_to_check):
597
636
  continue
598
- if blacklist and check(filename, blacklist):
637
+ if files_to_skip and check(filename, files_to_skip):
599
638
  continue
600
639
  unit_tests.append(input_api.os_path.join(directory, filename))
601
640
  to_run += 1
@@ -604,17 +643,27 @@ def GetUnitTestsInDirectory(
604
643
  if not to_run:
605
644
  return [
606
645
  output_api.PresubmitPromptWarning(
607
- 'Out of %d files, found none that matched w=%r, b=%r in directory %s'
608
- % (found, whitelist, blacklist, directory))
646
+ 'Out of %d files, found none that matched c=%r, s=%r in directory %s'
647
+ % (found, files_to_check, files_to_skip, directory))
609
648
  ]
610
- return GetUnitTests(input_api, output_api, unit_tests, env)
649
+ return GetUnitTests(
650
+ input_api, output_api, unit_tests, env, run_on_python2, run_on_python3)
611
651
 
612
652
 
613
- def GetUnitTests(input_api, output_api, unit_tests, env=None):
653
+ def GetUnitTests(
654
+ input_api, output_api, unit_tests, env=None, run_on_python2=True,
655
+ run_on_python3=True):
614
656
  """Runs all unit tests in a directory.
615
657
 
616
658
  On Windows, sys.executable is used for unit tests ending with ".py".
617
659
  """
660
+ assert run_on_python3 or run_on_python2, (
661
+ 'At least one of "run_on_python2" or "run_on_python3" must be set.')
662
+ def has_py3_shebang(test):
663
+ with open(test) as f:
664
+ maybe_shebang = f.readline()
665
+ return maybe_shebang.startswith('#!') and 'python3' in maybe_shebang
666
+
618
667
  # We don't want to hinder users from uploading incomplete patches.
619
668
  if input_api.is_committing:
620
669
  message_type = output_api.PresubmitError
@@ -629,24 +678,47 @@ def GetUnitTests(input_api, output_api, unit_tests, env=None):
629
678
  kwargs = {'cwd': input_api.PresubmitLocalPath()}
630
679
  if env:
631
680
  kwargs['env'] = env
632
- results.append(input_api.Command(
633
- name=unit_test,
634
- cmd=cmd,
635
- kwargs=kwargs,
636
- message=message_type))
681
+ if not unit_test.endswith('.py'):
682
+ results.append(input_api.Command(
683
+ name=unit_test,
684
+ cmd=cmd,
685
+ kwargs=kwargs,
686
+ message=message_type))
687
+ else:
688
+ if has_py3_shebang(unit_test) and run_on_python3:
689
+ results.append(input_api.Command(
690
+ name=unit_test,
691
+ cmd=cmd,
692
+ kwargs=kwargs,
693
+ message=message_type,
694
+ python3=True))
695
+ if run_on_python2:
696
+ results.append(input_api.Command(
697
+ name=unit_test,
698
+ cmd=cmd,
699
+ kwargs=kwargs,
700
+ message=message_type))
637
701
  return results
638
702
 
639
703
 
640
704
  def GetUnitTestsRecursively(input_api, output_api, directory,
641
- whitelist, blacklist):
705
+ files_to_check=None, files_to_skip=None,
706
+ run_on_python2=True, run_on_python3=True,
707
+ whitelist=None, blacklist=None, allowlist=None,
708
+ blocklist=None):
642
709
  """Gets all files in the directory tree (git repo) that match the whitelist.
643
710
 
644
711
  Restricts itself to only find files within the Change's source repo, not
645
712
  dependencies.
646
713
  """
714
+ files_to_check = files_to_check or allowlist or whitelist
715
+ files_to_skip = files_to_skip or blocklist or blacklist
716
+ assert files_to_check is not None
717
+ assert files_to_skip is not None
718
+
647
719
  def check(filename):
648
- return (any(input_api.re.match(f, filename) for f in whitelist) and
649
- not any(input_api.re.match(f, filename) for f in blacklist))
720
+ return (any(input_api.re.match(f, filename) for f in files_to_check) and
721
+ not any(input_api.re.match(f, filename) for f in files_to_skip))
650
722
 
651
723
  tests = []
652
724
 
@@ -660,11 +732,13 @@ def GetUnitTestsRecursively(input_api, output_api, directory,
660
732
  if not to_run:
661
733
  return [
662
734
  output_api.PresubmitPromptWarning(
663
- 'Out of %d files, found none that matched w=%r, b=%r in directory %s'
664
- % (found, whitelist, blacklist, directory))
735
+ 'Out of %d files, found none that matched c=%r, s=%r in directory %s'
736
+ % (found, files_to_check, files_to_skip, directory))
665
737
  ]
666
738
 
667
- return GetUnitTests(input_api, output_api, tests)
739
+ return GetUnitTests(input_api, output_api, tests,
740
+ run_on_python2=run_on_python2,
741
+ run_on_python3=run_on_python3)
668
742
 
669
743
 
670
744
  def GetPythonUnitTests(input_api, output_api, unit_tests):
@@ -699,6 +773,9 @@ def GetPythonUnitTests(input_api, output_api, unit_tests):
699
773
  backpath = [
700
774
  '.', input_api.os_path.pathsep.join(['..'] * (cwd.count('/') + 1))
701
775
  ]
776
+ # We convert to str, since on Windows on Python 2 only strings are allowed
777
+ # as environment variables, but literals are unicode since we're importing
778
+ # unicode_literals from __future__.
702
779
  if env.get('PYTHONPATH'):
703
780
  backpath.append(env.get('PYTHONPATH'))
704
781
  env['PYTHONPATH'] = input_api.os_path.pathsep.join((backpath))
@@ -740,7 +817,7 @@ def RunPythonUnitTests(input_api, *args, **kwargs):
740
817
  GetPythonUnitTests(input_api, *args, **kwargs), False)
741
818
 
742
819
 
743
- def _FetchAllFiles(input_api, white_list, black_list):
820
+ def _FetchAllFiles(input_api, files_to_check, files_to_skip):
744
821
  """Hack to fetch all files."""
745
822
  # We cannot use AffectedFiles here because we want to test every python
746
823
  # file on each single python change. It's because a change in a python file
@@ -759,26 +836,30 @@ def _FetchAllFiles(input_api, white_list, black_list):
759
836
  path_len = len(input_api.PresubmitLocalPath())
760
837
  for dirpath, dirnames, filenames in input_api.os_walk(
761
838
  input_api.PresubmitLocalPath()):
762
- # Passes dirnames in black list to speed up search.
839
+ # Passes dirnames in block list to speed up search.
763
840
  for item in dirnames[:]:
764
841
  filepath = input_api.os_path.join(dirpath, item)[path_len + 1:]
765
- if Find(filepath, black_list):
842
+ if Find(filepath, files_to_skip):
766
843
  dirnames.remove(item)
767
844
  for item in filenames:
768
845
  filepath = input_api.os_path.join(dirpath, item)[path_len + 1:]
769
- if Find(filepath, white_list) and not Find(filepath, black_list):
846
+ if Find(filepath, files_to_check) and not Find(filepath, files_to_skip):
770
847
  files.append(filepath)
771
848
  return files
772
849
 
773
850
 
774
- def GetPylint(input_api, output_api, white_list=None, black_list=None,
775
- disabled_warnings=None, extra_paths_list=None, pylintrc=None):
851
+ def GetPylint(input_api, output_api, files_to_check=None, files_to_skip=None,
852
+ disabled_warnings=None, extra_paths_list=None, pylintrc=None,
853
+ white_list=None, black_list=None, allow_list=None,
854
+ block_list=None):
776
855
  """Run pylint on python files.
777
856
 
778
- The default white_list enforces looking only at *.py files.
857
+ The default files_to_check enforces looking only at *.py files.
779
858
  """
780
- white_list = tuple(white_list or ('.*\.py$',))
781
- black_list = tuple(black_list or input_api.DEFAULT_BLACK_LIST)
859
+ files_to_check = tuple(files_to_check or allow_list or white_list or
860
+ (r'.*\.py$',))
861
+ files_to_skip = tuple(files_to_skip or block_list or black_list or
862
+ input_api.DEFAULT_FILES_TO_SKIP)
782
863
  extra_paths_list = extra_paths_list or []
783
864
 
784
865
  if input_api.is_committing:
@@ -802,7 +883,7 @@ def GetPylint(input_api, output_api, white_list=None, black_list=None,
802
883
  input_api.PresubmitLocalPath(), input_api.change.RepositoryRoot()), '')
803
884
  return input_api.re.escape(prefix) + regex
804
885
  src_filter = lambda x: input_api.FilterSourceFile(
805
- x, map(rel_path, white_list), map(rel_path, black_list))
886
+ x, map(rel_path, files_to_check), map(rel_path, files_to_skip))
806
887
  if not input_api.AffectedSourceFiles(src_filter):
807
888
  input_api.logging.info('Skipping pylint: no matching changes.')
808
889
  return []
@@ -815,7 +896,7 @@ def GetPylint(input_api, output_api, white_list=None, black_list=None,
815
896
  if disabled_warnings:
816
897
  extra_args.extend(['-d', ','.join(disabled_warnings)])
817
898
 
818
- files = _FetchAllFiles(input_api, white_list, black_list)
899
+ files = _FetchAllFiles(input_api, files_to_check, files_to_skip)
819
900
  if not files:
820
901
  return []
821
902
  files.sort()
@@ -823,8 +904,7 @@ def GetPylint(input_api, output_api, white_list=None, black_list=None,
823
904
  input_api.logging.info('Running pylint on %d files', len(files))
824
905
  input_api.logging.debug('Running pylint on: %s', files)
825
906
  env = input_api.environ.copy()
826
- env['PYTHONPATH'] = input_api.os_path.pathsep.join(
827
- extra_paths_list).encode('utf8')
907
+ env['PYTHONPATH'] = input_api.os_path.pathsep.join(extra_paths_list)
828
908
  env.pop('VPYTHON_CLEAR_PYTHONPATH', None)
829
909
  input_api.logging.debug(' with extra PYTHONPATH: %r', extra_paths_list)
830
910
 
@@ -832,9 +912,20 @@ def GetPylint(input_api, output_api, white_list=None, black_list=None,
832
912
  # Windows needs help running python files so we explicitly specify
833
913
  # the interpreter to use. It also has limitations on the size of
834
914
  # the command-line, so we pass arguments via a pipe.
835
- cmd = [input_api.python_executable,
836
- input_api.os_path.join(_HERE, 'third_party', 'pylint.py'),
837
- '--args-on-stdin']
915
+ tool = input_api.os_path.join(_HERE, 'pylint')
916
+ kwargs = {'env': env}
917
+ if input_api.platform == 'win32':
918
+ # On Windows, scripts on the current directory take precedence over PATH.
919
+ # When `pylint.bat` calls `vpython`, it will execute the `vpython` of the
920
+ # depot_tools under test instead of the one in the bot.
921
+ # As a workaround, we run the tests from the parent directory instead.
922
+ cwd = input_api.change.RepositoryRoot()
923
+ if input_api.os_path.basename(cwd) == 'depot_tools':
924
+ kwargs['cwd'] = input_api.os_path.dirname(cwd)
925
+ flist = [input_api.os_path.join('depot_tools', f) for f in flist]
926
+ tool += '.bat'
927
+
928
+ cmd = [tool, '--args-on-stdin']
838
929
  if len(flist) == 1:
839
930
  description = flist[0]
840
931
  else:
@@ -848,10 +939,12 @@ def GetPylint(input_api, output_api, white_list=None, black_list=None,
848
939
  args.append('--jobs=%s' % input_api.cpu_count)
849
940
  description += ' on %d cores' % input_api.cpu_count
850
941
 
942
+ kwargs['stdin'] = '\n'.join(args + flist)
943
+
851
944
  return input_api.Command(
852
945
  name='Pylint (%s)' % description,
853
946
  cmd=cmd,
854
- kwargs={'env': env, 'stdin': '\n'.join(args + flist)},
947
+ kwargs=kwargs,
855
948
  message=error_type)
856
949
 
857
950
  # Always run pylint and pass it all the py files at once.
@@ -891,7 +984,7 @@ def RunPylint(input_api, *args, **kwargs):
891
984
  def CheckBuildbotPendingBuilds(input_api, output_api, url, max_pendings,
892
985
  ignored):
893
986
  try:
894
- connection = input_api.urllib2.urlopen(url)
987
+ connection = input_api.urllib_request.urlopen(url)
895
988
  raw_data = connection.read()
896
989
  connection.close()
897
990
  except IOError:
@@ -904,7 +997,7 @@ def CheckBuildbotPendingBuilds(input_api, output_api, url, max_pendings,
904
997
  'looking up buildbot status')]
905
998
 
906
999
  out = []
907
- for (builder_name, builder) in data.iteritems():
1000
+ for (builder_name, builder) in data.items():
908
1001
  if builder_name in ignored:
909
1002
  continue
910
1003
  if builder.get('state', '') == 'offline':
@@ -942,7 +1035,27 @@ def CheckOwnersFormat(input_api, output_api):
942
1035
  def CheckOwners(input_api, output_api, source_file_filter=None):
943
1036
  affected_files = set([f.LocalPath() for f in
944
1037
  input_api.change.AffectedFiles(file_filter=source_file_filter)])
945
- affects_owners = any('OWNERS' in name for name in affected_files)
1038
+ owners_db = input_api.owners_db
1039
+ owners_db.override_files = input_api.change.OriginalOwnersFiles()
1040
+ owner_email, reviewers = GetCodereviewOwnerAndReviewers(
1041
+ input_api,
1042
+ owners_db.email_regexp,
1043
+ approval_needed=input_api.is_committing)
1044
+
1045
+ owner_email = owner_email or input_api.change.author_email
1046
+
1047
+ finder = input_api.owners_finder(
1048
+ affected_files,
1049
+ input_api.change.RepositoryRoot(),
1050
+ owner_email,
1051
+ reviewers,
1052
+ fopen=open,
1053
+ os_path=input_api.os_path,
1054
+ email_postfix='',
1055
+ disable_color=True,
1056
+ override_files=input_api.change.OriginalOwnersFiles())
1057
+ missing_files = finder.unreviewed_files
1058
+ affects_owners = any('OWNERS' in name for name in missing_files)
946
1059
 
947
1060
  if input_api.is_committing:
948
1061
  if input_api.tbr and not affects_owners:
@@ -963,29 +1076,12 @@ def CheckOwners(input_api, output_api, source_file_filter=None):
963
1076
  needed = 'OWNER reviewers'
964
1077
  output_fn = output_api.PresubmitNotifyResult
965
1078
 
966
- owners_db = input_api.owners_db
967
- owners_db.override_files = input_api.change.OriginalOwnersFiles()
968
- owner_email, reviewers = GetCodereviewOwnerAndReviewers(
969
- input_api,
970
- owners_db.email_regexp,
971
- approval_needed=input_api.is_committing)
972
-
973
- owner_email = owner_email or input_api.change.author_email
974
-
975
- finder = input_api.owners_finder(
976
- affected_files, input_api.change.RepositoryRoot(),
977
- owner_email, reviewers, fopen=file, os_path=input_api.os_path,
978
- email_postfix='', disable_color=True,
979
- override_files=input_api.change.OriginalOwnersFiles())
980
- missing_files = finder.unreviewed_files
981
-
982
1079
  if missing_files:
983
1080
  output_list = [
984
1081
  output_fn('Missing %s for these files:\n %s' %
985
1082
  (needed, '\n '.join(sorted(missing_files))))]
986
1083
  if input_api.tbr and affects_owners:
987
- output_list.append(output_fn('The CL affects an OWNERS file, so TBR will '
988
- 'be ignored.'))
1084
+ output_list.append(output_fn('TBR for OWNERS files are ignored.'))
989
1085
  if not input_api.is_committing:
990
1086
  suggested_owners = owners_db.reviewers_for(missing_files, owner_email)
991
1087
  owners_with_comments = []
@@ -1078,7 +1174,7 @@ def PanProjectChecks(input_api, output_api,
1078
1174
  # 2006-20xx string used on the oldest files. 2006-20xx is deprecated, but
1079
1175
  # tolerated on old files.
1080
1176
  current_year = int(input_api.time.strftime('%Y'))
1081
- allowed_years = (str(s) for s in reversed(xrange(2006, current_year + 1)))
1177
+ allowed_years = (str(s) for s in reversed(range(2006, current_year + 1)))
1082
1178
  years_re = '(' + '|'.join(allowed_years) + '|2006-2008|2006-2009|2006-2010)'
1083
1179
 
1084
1180
  # The (c) is deprecated, but tolerate it until it's removed from all files.
@@ -1094,24 +1190,27 @@ def PanProjectChecks(input_api, output_api,
1094
1190
  }
1095
1191
 
1096
1192
  results = []
1097
- # This code loads the default black list (e.g. third_party, experimental, etc)
1098
- # and add our black list (breakpad, skia and v8 are still not following
1193
+ # This code loads the default skip list (e.g. third_party, experimental, etc)
1194
+ # and add our skip list (breakpad, skia and v8 are still not following
1099
1195
  # google style and are not really living this repository).
1100
1196
  # See presubmit_support.py InputApi.FilterSourceFile for the (simple) usage.
1101
- black_list = input_api.DEFAULT_BLACK_LIST + excluded_paths
1102
- white_list = input_api.DEFAULT_WHITE_LIST + text_files
1103
- sources = lambda x: input_api.FilterSourceFile(x, black_list=black_list)
1197
+ files_to_skip = input_api.DEFAULT_FILES_TO_SKIP + excluded_paths
1198
+ files_to_check = input_api.DEFAULT_FILES_TO_CHECK + text_files
1199
+ sources = lambda x: input_api.FilterSourceFile(x, files_to_skip=files_to_skip)
1104
1200
  text_files = lambda x: input_api.FilterSourceFile(
1105
- x, black_list=black_list, white_list=white_list)
1201
+ x, files_to_skip=files_to_skip, files_to_check=files_to_check)
1106
1202
 
1107
1203
  snapshot_memory = []
1108
1204
  def snapshot(msg):
1109
1205
  """Measures & prints performance warning if a rule is running slow."""
1110
- dt2 = input_api.time.clock()
1206
+ if input_api.sys.version_info.major == 2:
1207
+ dt2 = input_api.time.clock()
1208
+ else:
1209
+ dt2 = input_api.time.process_time()
1111
1210
  if snapshot_memory:
1112
1211
  delta_ms = int(1000*(dt2 - snapshot_memory[0]))
1113
1212
  if delta_ms > 500:
1114
- print " %s took a long time: %dms" % (snapshot_memory[1], delta_ms)
1213
+ print(" %s took a long time: %dms" % (snapshot_memory[1], delta_ms))
1115
1214
  snapshot_memory[:] = (dt2, msg)
1116
1215
 
1117
1216
  snapshot("checking owners files format")
@@ -1148,6 +1247,10 @@ def PanProjectChecks(input_api, output_api,
1148
1247
  snapshot("checking do not submit in files")
1149
1248
  results.extend(input_api.canned_checks.CheckDoNotSubmitInFiles(
1150
1249
  input_api, output_api))
1250
+ if input_api.change.scm == 'git':
1251
+ snapshot("checking for commit objects in tree")
1252
+ results.extend(input_api.canned_checks.CheckForCommitObjects(
1253
+ input_api, output_api))
1151
1254
  snapshot("done")
1152
1255
  return results
1153
1256
 
@@ -1155,6 +1258,7 @@ def PanProjectChecks(input_api, output_api,
1155
1258
  def CheckPatchFormatted(input_api,
1156
1259
  output_api,
1157
1260
  bypass_warnings=True,
1261
+ check_clang_format=True,
1158
1262
  check_js=False,
1159
1263
  check_python=None,
1160
1264
  result_factory=None):
@@ -1162,6 +1266,9 @@ def CheckPatchFormatted(input_api,
1162
1266
  import git_cl
1163
1267
 
1164
1268
  display_args = []
1269
+ if not check_clang_format:
1270
+ display_args.append('--no-clang-format')
1271
+
1165
1272
  if check_js:
1166
1273
  display_args.append('--js')
1167
1274
 
@@ -1278,7 +1385,7 @@ def CheckCIPDPackages(input_api, output_api, platforms, packages):
1278
1385
  manifest = []
1279
1386
  for p in platforms:
1280
1387
  manifest.append('$VerifiedPlatform %s' % (p,))
1281
- for k, v in packages.iteritems():
1388
+ for k, v in packages.items():
1282
1389
  manifest.append('%s %s' % (k, v))
1283
1390
  return CheckCIPDManifest(input_api, output_api, content='\n'.join(manifest))
1284
1391
 
@@ -1306,6 +1413,57 @@ def CheckCIPDClientDigests(input_api, output_api, client_version_file):
1306
1413
  output_api.PresubmitError)
1307
1414
 
1308
1415
 
1416
+ def CheckForCommitObjects(input_api, output_api):
1417
+ """Validates that there are no commit objects in the repository.
1418
+
1419
+ Commit objects are put into the git tree typically by submodule tooling.
1420
+ Because we use gclient to handle external repository references instead,
1421
+ we want to avoid this. Having commit objects in the tree can confuse git
1422
+ tooling in some scenarios into thinking that the tree is dirty (e.g. the
1423
+ presence of a DEPS subrepo at a location where a commit object is stored
1424
+ in the tree).
1425
+
1426
+ Args:
1427
+ input_api: Bag of input related interfaces.
1428
+ output_api: Bag of output related interfaces.
1429
+
1430
+ Returns:
1431
+ A presubmit error if a commit object is present in the tree.
1432
+ """
1433
+
1434
+ def parse_tree_entry(ent):
1435
+ """Splits a tree entry into components
1436
+
1437
+ Args:
1438
+ ent: a tree entry in the form "filemode type hash\tname"
1439
+
1440
+ Returns:
1441
+ The tree entry split into component parts
1442
+ """
1443
+ tabparts = ent.split('\t', 1)
1444
+ spaceparts = tabparts[0].split(' ', 2)
1445
+ return (spaceparts[0], spaceparts[1], spaceparts[2], tabparts[1])
1446
+
1447
+ full_tree = input_api.subprocess.check_output(
1448
+ ['git', 'ls-tree', '-r', '--full-tree', 'HEAD'],
1449
+ cwd=input_api.PresubmitLocalPath()
1450
+ )
1451
+ tree_entries = full_tree.split('\n')
1452
+ tree_entries = filter(lambda x: len(x) > 0, tree_entries)
1453
+ tree_entries = map(parse_tree_entry, tree_entries)
1454
+ bad_tree_entries = filter(lambda x: x[1] == 'commit', tree_entries)
1455
+ bad_tree_entries = map(lambda x: x[3], bad_tree_entries)
1456
+ if len(bad_tree_entries) > 0:
1457
+ return [output_api.PresubmitError(
1458
+ 'Commit objects present within tree.\n'
1459
+ 'This may be due to submodule-related interactions; the presence of a\n'
1460
+ 'commit object in the tree may lead to odd situations where files are\n'
1461
+ 'inconsistently checked-out. Remove these commit entries and validate\n'
1462
+ 'your changeset again:\n',
1463
+ bad_tree_entries)]
1464
+ return []
1465
+
1466
+
1309
1467
  def CheckVPythonSpec(input_api, output_api, file_filter=None):
1310
1468
  """Validates any changed .vpython files with vpython verification tool.
1311
1469
 
@@ -1340,7 +1498,6 @@ def CheckChangedLUCIConfigs(input_api, output_api):
1340
1498
  import base64
1341
1499
  import json
1342
1500
  import logging
1343
- import urllib2
1344
1501
 
1345
1502
  import auth
1346
1503
  import git_cl
@@ -1369,30 +1526,28 @@ def CheckChangedLUCIConfigs(input_api, output_api):
1369
1526
 
1370
1527
  # authentication
1371
1528
  try:
1372
- authenticator = auth.get_authenticator_for_host(
1373
- LUCI_CONFIG_HOST_NAME, auth.make_auth_config())
1374
- acc_tkn = authenticator.get_access_token()
1375
- except auth.AuthenticationError as e:
1529
+ acc_tkn = auth.Authenticator().get_access_token()
1530
+ except auth.LoginRequiredError as e:
1376
1531
  return [output_api.PresubmitError(
1377
1532
  'Error in authenticating user.', long_text=str(e))]
1378
1533
 
1379
1534
  def request(endpoint, body=None):
1380
1535
  api_url = ('https://%s/_ah/api/config/v1/%s'
1381
1536
  % (LUCI_CONFIG_HOST_NAME, endpoint))
1382
- req = urllib2.Request(api_url)
1537
+ req = input_api.urllib_request.Request(api_url)
1383
1538
  req.add_header('Authorization', 'Bearer %s' % acc_tkn.token)
1384
1539
  if body is not None:
1385
1540
  req.add_header('Content-Type', 'application/json')
1386
- req.add_data(json.dumps(body))
1387
- return json.load(urllib2.urlopen(req))
1541
+ req.data = json.dumps(body).encode('utf-8')
1542
+ return json.load(input_api.urllib_request.urlopen(req))
1388
1543
 
1389
1544
  try:
1390
1545
  config_sets = request('config-sets').get('config_sets')
1391
- except urllib2.HTTPError as e:
1546
+ except input_api.urllib_error.HTTPError as e:
1392
1547
  return [output_api.PresubmitError(
1393
1548
  'Config set request to luci-config failed', long_text=str(e))]
1394
1549
  if not config_sets:
1395
- return [output_api.PresubmitWarning('No config_sets were returned')]
1550
+ return [output_api.PresubmitPromptWarning('No config_sets were returned')]
1396
1551
  loc_pref = '%s/+/%s/' % (remote_host_url, remote_branch)
1397
1552
  logging.debug('Derived location prefix: %s', loc_pref)
1398
1553
  dir_to_config_set = {
@@ -1401,25 +1556,40 @@ def CheckChangedLUCIConfigs(input_api, output_api):
1401
1556
  if cs['location'].startswith(loc_pref) or
1402
1557
  ('%s/' % cs['location']) == loc_pref
1403
1558
  }
1559
+ if not dir_to_config_set:
1560
+ warning_long_text_lines = [
1561
+ 'No config_set found for %s.' % loc_pref,
1562
+ 'Found the following:',
1563
+ ]
1564
+ for loc in sorted(cs['location'] for cs in config_sets):
1565
+ warning_long_text_lines.append(' %s' % loc)
1566
+ warning_long_text_lines.append('')
1567
+ warning_long_text_lines.append(
1568
+ 'If the requested location is internal,'
1569
+ ' the requester may not have access.')
1570
+
1571
+ return [output_api.PresubmitPromptWarning(
1572
+ warning_long_text_lines[0],
1573
+ long_text='\n'.join(warning_long_text_lines))]
1404
1574
  cs_to_files = collections.defaultdict(list)
1405
1575
  for f in input_api.AffectedFiles(include_deletes=False):
1406
1576
  # windows
1407
1577
  file_path = f.LocalPath().replace(_os.sep, '/')
1408
1578
  logging.debug('Affected file path: %s', file_path)
1409
- for dr, cs in dir_to_config_set.iteritems():
1579
+ for dr, cs in dir_to_config_set.items():
1410
1580
  if dr == '/' or file_path.startswith(dr):
1411
1581
  cs_to_files[cs].append({
1412
1582
  'path': file_path[len(dr):] if dr != '/' else file_path,
1413
1583
  'content': base64.b64encode(
1414
- '\n'.join(f.NewContents()).encode('utf-8'))
1584
+ '\n'.join(f.NewContents()).encode('utf-8')).decode('utf-8')
1415
1585
  })
1416
1586
  outputs = []
1417
- for cs, f in cs_to_files.iteritems():
1587
+ for cs, f in cs_to_files.items():
1418
1588
  try:
1419
1589
  # TODO(myjang): parallelize
1420
1590
  res = request(
1421
1591
  'validate-config', body={'config_set': cs, 'files': f})
1422
- except urllib2.HTTPError as e:
1592
+ except input_api.urllib_error.HTTPError as e:
1423
1593
  return [output_api.PresubmitError(
1424
1594
  'Validation request to luci-config failed', long_text=str(e))]
1425
1595
  for msg in res.get('messages', []):
@@ -1466,3 +1636,20 @@ def CheckLucicfgGenOutput(input_api, output_api, entry_script):
1466
1636
  },
1467
1637
  output_api.PresubmitError)
1468
1638
  ]
1639
+
1640
+ def CheckJsonParses(input_api, output_api):
1641
+ """Verifies that all JSON files at least parse as valid JSON."""
1642
+ import json
1643
+ affected_files = input_api.AffectedFiles(
1644
+ include_deletes=False,
1645
+ file_filter=lambda x: x.LocalPath().endswith('.json'))
1646
+ warnings = []
1647
+ for f in affected_files:
1648
+ with open(f.AbsoluteLocalPath()) as j:
1649
+ try:
1650
+ json.load(j)
1651
+ except ValueError:
1652
+ # Just a warning for now, in case people are using JSON5 somewhere.
1653
+ warnings.append(output_api.PresubmitPromptWarning(
1654
+ '%s does not appear to be valid JSON.' % f.LocalPath()))
1655
+ return warnings