libv8 7.8.279.23.0beta1 → 8.4.255.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (719) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +11 -14
  4. data/CHANGELOG.md +7 -1
  5. data/README.md +10 -11
  6. data/Rakefile +30 -36
  7. data/ext/libv8/builder.rb +2 -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 +3 -1
  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 +6 -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 +156 -118
  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 +180 -169
  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 +195 -281
  99. data/vendor/depot_tools/git_cl.py +1506 -2075
  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 +3 -1
  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 +5 -2
  178. data/vendor/depot_tools/metrics.py +4 -4
  179. data/vendor/depot_tools/metrics_utils.py +3 -3
  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 +57 -21
  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 +215 -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 -17
  208. data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +65 -32
  209. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +12 -4
  210. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +11 -3
  211. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +12 -4
  212. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +22 -8
  213. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +27 -9
  214. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +22 -8
  215. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +22 -8
  216. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/input_commit_with_id_without_repo.json +22 -8
  217. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/multiple_patch_refs.json +22 -8
  218. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +27 -9
  219. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_HEAD.json +12 -4
  220. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_branch_head.json +10 -4
  221. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_specific_commit.json +12 -4
  222. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_master.json +10 -4
  223. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/refs.json +22 -8
  224. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +22 -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 +16 -10
  227. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +34 -10
  228. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +16 -10
  229. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +27 -9
  230. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +27 -9
  231. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +27 -9
  232. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +27 -9
  233. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +27 -9
  234. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +27 -9
  235. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +27 -9
  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 +22 -8
  238. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +7 -23
  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 +21 -9
  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 +94 -74
  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 +22 -15
  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 +66 -345
  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/bot_update/examples/full.expected/with_manifest_name.json +0 -48
  405. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/buildbot.json +0 -239
  406. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_luci.json +0 -222
  407. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/__init__.py +0 -4
  408. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/api.py +0 -29
  409. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/basic.json +0 -15
  410. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_linux.json +0 -15
  411. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_mac.json +0 -15
  412. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_win.json +0 -15
  413. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_linux.json +0 -15
  414. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_mac.json +0 -15
  415. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_win.json +0 -15
  416. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_linux.json +0 -15
  417. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_mac.json +0 -15
  418. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_win.json +0 -15
  419. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.py +0 -33
  420. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/path_config.py +0 -66
  421. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/set_failure_hash_with_no_steps.json +0 -11
  422. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch.json +0 -45
  423. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch_luci.json +0 -45
  424. data/vendor/depot_tools/rietveld.py +0 -779
  425. data/vendor/depot_tools/roll-dep-svn +0 -8
  426. data/vendor/depot_tools/roll-dep-svn.bat +0 -12
  427. data/vendor/depot_tools/roll_dep_svn.py +0 -430
  428. data/vendor/depot_tools/support/chromite_wrapper +0 -96
  429. data/vendor/depot_tools/third_party/boto/LICENSE +0 -18
  430. data/vendor/depot_tools/third_party/boto/README.chromium +0 -43
  431. data/vendor/depot_tools/third_party/boto/README.rst +0 -163
  432. data/vendor/depot_tools/third_party/boto/__init__.py +0 -793
  433. data/vendor/depot_tools/third_party/boto/auth.py +0 -682
  434. data/vendor/depot_tools/third_party/boto/auth_handler.py +0 -58
  435. data/vendor/depot_tools/third_party/boto/cacerts/__init__.py +0 -22
  436. data/vendor/depot_tools/third_party/boto/cacerts/cacerts.txt +0 -2183
  437. data/vendor/depot_tools/third_party/boto/compat.py +0 -28
  438. data/vendor/depot_tools/third_party/boto/connection.py +0 -1081
  439. data/vendor/depot_tools/third_party/boto/contrib/__init__.py +0 -22
  440. data/vendor/depot_tools/third_party/boto/contrib/ymlmessage.py +0 -52
  441. data/vendor/depot_tools/third_party/boto/core/README +0 -58
  442. data/vendor/depot_tools/third_party/boto/core/__init__.py +0 -23
  443. data/vendor/depot_tools/third_party/boto/core/auth.py +0 -78
  444. data/vendor/depot_tools/third_party/boto/core/credentials.py +0 -154
  445. data/vendor/depot_tools/third_party/boto/core/dictresponse.py +0 -178
  446. data/vendor/depot_tools/third_party/boto/core/service.py +0 -67
  447. data/vendor/depot_tools/third_party/boto/datapipeline/__init__.py +0 -0
  448. data/vendor/depot_tools/third_party/boto/datapipeline/exceptions.py +0 -42
  449. data/vendor/depot_tools/third_party/boto/datapipeline/layer1.py +0 -546
  450. data/vendor/depot_tools/third_party/boto/ecs/__init__.py +0 -90
  451. data/vendor/depot_tools/third_party/boto/ecs/item.py +0 -153
  452. data/vendor/depot_tools/third_party/boto/exception.py +0 -476
  453. data/vendor/depot_tools/third_party/boto/file/README +0 -49
  454. data/vendor/depot_tools/third_party/boto/file/__init__.py +0 -28
  455. data/vendor/depot_tools/third_party/boto/file/bucket.py +0 -112
  456. data/vendor/depot_tools/third_party/boto/file/connection.py +0 -33
  457. data/vendor/depot_tools/third_party/boto/file/key.py +0 -199
  458. data/vendor/depot_tools/third_party/boto/file/simpleresultset.py +0 -30
  459. data/vendor/depot_tools/third_party/boto/fps/__init__.py +0 -21
  460. data/vendor/depot_tools/third_party/boto/fps/connection.py +0 -369
  461. data/vendor/depot_tools/third_party/boto/fps/exception.py +0 -344
  462. data/vendor/depot_tools/third_party/boto/fps/response.py +0 -175
  463. data/vendor/depot_tools/third_party/boto/gs/__init__.py +0 -22
  464. data/vendor/depot_tools/third_party/boto/gs/acl.py +0 -304
  465. data/vendor/depot_tools/third_party/boto/gs/bucket.py +0 -870
  466. data/vendor/depot_tools/third_party/boto/gs/bucketlistresultset.py +0 -64
  467. data/vendor/depot_tools/third_party/boto/gs/connection.py +0 -103
  468. data/vendor/depot_tools/third_party/boto/gs/cors.py +0 -169
  469. data/vendor/depot_tools/third_party/boto/gs/key.py +0 -704
  470. data/vendor/depot_tools/third_party/boto/gs/resumable_upload_handler.py +0 -659
  471. data/vendor/depot_tools/third_party/boto/gs/user.py +0 -54
  472. data/vendor/depot_tools/third_party/boto/handler.py +0 -44
  473. data/vendor/depot_tools/third_party/boto/https_connection.py +0 -124
  474. data/vendor/depot_tools/third_party/boto/jsonresponse.py +0 -163
  475. data/vendor/depot_tools/third_party/boto/manage/__init__.py +0 -23
  476. data/vendor/depot_tools/third_party/boto/manage/cmdshell.py +0 -241
  477. data/vendor/depot_tools/third_party/boto/manage/propget.py +0 -64
  478. data/vendor/depot_tools/third_party/boto/manage/server.py +0 -556
  479. data/vendor/depot_tools/third_party/boto/manage/task.py +0 -175
  480. data/vendor/depot_tools/third_party/boto/manage/test_manage.py +0 -34
  481. data/vendor/depot_tools/third_party/boto/manage/volume.py +0 -420
  482. data/vendor/depot_tools/third_party/boto/mashups/__init__.py +0 -23
  483. data/vendor/depot_tools/third_party/boto/mashups/interactive.py +0 -97
  484. data/vendor/depot_tools/third_party/boto/mashups/iobject.py +0 -115
  485. data/vendor/depot_tools/third_party/boto/mashups/order.py +0 -211
  486. data/vendor/depot_tools/third_party/boto/mashups/server.py +0 -395
  487. data/vendor/depot_tools/third_party/boto/plugin.py +0 -90
  488. data/vendor/depot_tools/third_party/boto/provider.py +0 -337
  489. data/vendor/depot_tools/third_party/boto/pyami/__init__.py +0 -22
  490. data/vendor/depot_tools/third_party/boto/pyami/bootstrap.py +0 -134
  491. data/vendor/depot_tools/third_party/boto/pyami/config.py +0 -229
  492. data/vendor/depot_tools/third_party/boto/pyami/copybot.cfg +0 -60
  493. data/vendor/depot_tools/third_party/boto/pyami/copybot.py +0 -97
  494. data/vendor/depot_tools/third_party/boto/pyami/helloworld.py +0 -28
  495. data/vendor/depot_tools/third_party/boto/pyami/launch_ami.py +0 -178
  496. data/vendor/depot_tools/third_party/boto/pyami/scriptbase.py +0 -44
  497. data/vendor/depot_tools/third_party/boto/pyami/startup.py +0 -60
  498. data/vendor/depot_tools/third_party/boto/regioninfo.py +0 -63
  499. data/vendor/depot_tools/third_party/boto/resultset.py +0 -169
  500. data/vendor/depot_tools/third_party/boto/roboto/__init__.py +0 -1
  501. data/vendor/depot_tools/third_party/boto/roboto/awsqueryrequest.py +0 -504
  502. data/vendor/depot_tools/third_party/boto/roboto/awsqueryservice.py +0 -121
  503. data/vendor/depot_tools/third_party/boto/roboto/param.py +0 -147
  504. data/vendor/depot_tools/third_party/boto/s3/__init__.py +0 -84
  505. data/vendor/depot_tools/third_party/boto/s3/acl.py +0 -164
  506. data/vendor/depot_tools/third_party/boto/s3/bucket.py +0 -1634
  507. data/vendor/depot_tools/third_party/boto/s3/bucketlistresultset.py +0 -139
  508. data/vendor/depot_tools/third_party/boto/s3/bucketlogging.py +0 -83
  509. data/vendor/depot_tools/third_party/boto/s3/connection.py +0 -540
  510. data/vendor/depot_tools/third_party/boto/s3/cors.py +0 -210
  511. data/vendor/depot_tools/third_party/boto/s3/deletemarker.py +0 -55
  512. data/vendor/depot_tools/third_party/boto/s3/key.py +0 -1712
  513. data/vendor/depot_tools/third_party/boto/s3/keyfile.py +0 -134
  514. data/vendor/depot_tools/third_party/boto/s3/lifecycle.py +0 -231
  515. data/vendor/depot_tools/third_party/boto/s3/multidelete.py +0 -138
  516. data/vendor/depot_tools/third_party/boto/s3/multipart.py +0 -315
  517. data/vendor/depot_tools/third_party/boto/s3/prefix.py +0 -42
  518. data/vendor/depot_tools/third_party/boto/s3/resumable_download_handler.py +0 -339
  519. data/vendor/depot_tools/third_party/boto/s3/tagging.py +0 -71
  520. data/vendor/depot_tools/third_party/boto/s3/user.py +0 -49
  521. data/vendor/depot_tools/third_party/boto/s3/website.py +0 -237
  522. data/vendor/depot_tools/third_party/boto/services/__init__.py +0 -23
  523. data/vendor/depot_tools/third_party/boto/services/bs.py +0 -179
  524. data/vendor/depot_tools/third_party/boto/services/message.py +0 -58
  525. data/vendor/depot_tools/third_party/boto/services/result.py +0 -136
  526. data/vendor/depot_tools/third_party/boto/services/service.py +0 -161
  527. data/vendor/depot_tools/third_party/boto/services/servicedef.py +0 -91
  528. data/vendor/depot_tools/third_party/boto/services/sonofmmm.cfg +0 -43
  529. data/vendor/depot_tools/third_party/boto/services/sonofmmm.py +0 -81
  530. data/vendor/depot_tools/third_party/boto/services/submit.py +0 -88
  531. data/vendor/depot_tools/third_party/boto/ses/__init__.py +0 -54
  532. data/vendor/depot_tools/third_party/boto/ses/connection.py +0 -521
  533. data/vendor/depot_tools/third_party/boto/ses/exceptions.py +0 -77
  534. data/vendor/depot_tools/third_party/boto/storage_uri.py +0 -835
  535. data/vendor/depot_tools/third_party/boto/sts/__init__.py +0 -55
  536. data/vendor/depot_tools/third_party/boto/sts/connection.py +0 -207
  537. data/vendor/depot_tools/third_party/boto/sts/credentials.py +0 -215
  538. data/vendor/depot_tools/third_party/boto/utils.py +0 -927
  539. data/vendor/depot_tools/third_party/colorama/README.txt +0 -304
  540. data/vendor/depot_tools/third_party/fancy_urllib/README +0 -22
  541. data/vendor/depot_tools/third_party/fancy_urllib/__init__.py +0 -460
  542. data/vendor/depot_tools/third_party/logilab/README.chromium +0 -6
  543. data/vendor/depot_tools/third_party/logilab/__init__.py +0 -0
  544. data/vendor/depot_tools/third_party/logilab/astroid/LICENSE.txt +0 -340
  545. data/vendor/depot_tools/third_party/logilab/astroid/README.chromium +0 -11
  546. data/vendor/depot_tools/third_party/logilab/astroid/__init__.py +0 -136
  547. data/vendor/depot_tools/third_party/logilab/astroid/__pkginfo__.py +0 -42
  548. data/vendor/depot_tools/third_party/logilab/astroid/arguments.py +0 -233
  549. data/vendor/depot_tools/third_party/logilab/astroid/as_string.py +0 -548
  550. data/vendor/depot_tools/third_party/logilab/astroid/astpeephole.py +0 -86
  551. data/vendor/depot_tools/third_party/logilab/astroid/bases.py +0 -636
  552. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_builtin_inference.py +0 -336
  553. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_dateutil.py +0 -15
  554. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_gi.py +0 -195
  555. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_mechanize.py +0 -18
  556. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_nose.py +0 -82
  557. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_numpy.py +0 -62
  558. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_pytest.py +0 -76
  559. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_qt.py +0 -44
  560. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_six.py +0 -288
  561. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_ssl.py +0 -65
  562. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_stdlib.py +0 -473
  563. data/vendor/depot_tools/third_party/logilab/astroid/builder.py +0 -263
  564. data/vendor/depot_tools/third_party/logilab/astroid/context.py +0 -81
  565. data/vendor/depot_tools/third_party/logilab/astroid/decorators.py +0 -75
  566. data/vendor/depot_tools/third_party/logilab/astroid/exceptions.py +0 -71
  567. data/vendor/depot_tools/third_party/logilab/astroid/inference.py +0 -359
  568. data/vendor/depot_tools/third_party/logilab/astroid/manager.py +0 -267
  569. data/vendor/depot_tools/third_party/logilab/astroid/mixins.py +0 -147
  570. data/vendor/depot_tools/third_party/logilab/astroid/modutils.py +0 -741
  571. data/vendor/depot_tools/third_party/logilab/astroid/node_classes.py +0 -1053
  572. data/vendor/depot_tools/third_party/logilab/astroid/nodes.py +0 -87
  573. data/vendor/depot_tools/third_party/logilab/astroid/objects.py +0 -186
  574. data/vendor/depot_tools/third_party/logilab/astroid/protocols.py +0 -470
  575. data/vendor/depot_tools/third_party/logilab/astroid/raw_building.py +0 -390
  576. data/vendor/depot_tools/third_party/logilab/astroid/rebuilder.py +0 -989
  577. data/vendor/depot_tools/third_party/logilab/astroid/scoped_nodes.py +0 -1716
  578. data/vendor/depot_tools/third_party/logilab/astroid/test_utils.py +0 -201
  579. data/vendor/depot_tools/third_party/logilab/astroid/transforms.py +0 -96
  580. data/vendor/depot_tools/third_party/logilab/astroid/util.py +0 -89
  581. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/LICENSE +0 -19
  582. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/README.chromium +0 -11
  583. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/__init__.py +0 -20
  584. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/cext.c +0 -1421
  585. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/compat.py +0 -9
  586. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/simple.py +0 -246
  587. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/slots.py +0 -414
  588. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/utils.py +0 -13
  589. data/vendor/depot_tools/third_party/logilab/wrapt/LICENSE +0 -24
  590. data/vendor/depot_tools/third_party/logilab/wrapt/README.chromium +0 -11
  591. data/vendor/depot_tools/third_party/logilab/wrapt/__init__.py +0 -19
  592. data/vendor/depot_tools/third_party/logilab/wrapt/_wrappers.c +0 -2729
  593. data/vendor/depot_tools/third_party/logilab/wrapt/arguments.py +0 -96
  594. data/vendor/depot_tools/third_party/logilab/wrapt/decorators.py +0 -512
  595. data/vendor/depot_tools/third_party/logilab/wrapt/importer.py +0 -228
  596. data/vendor/depot_tools/third_party/logilab/wrapt/wrappers.py +0 -901
  597. data/vendor/depot_tools/third_party/mock/LICENSE.txt +0 -26
  598. data/vendor/depot_tools/third_party/mock/README.chromium +0 -24
  599. data/vendor/depot_tools/third_party/mock/__init__.py +0 -2366
  600. data/vendor/depot_tools/third_party/oauth2client/LICENSE +0 -202
  601. data/vendor/depot_tools/third_party/oauth2client/MODIFICATIONS.diff +0 -66
  602. data/vendor/depot_tools/third_party/oauth2client/README.chromium +0 -15
  603. data/vendor/depot_tools/third_party/oauth2client/__init__.py +0 -5
  604. data/vendor/depot_tools/third_party/oauth2client/anyjson.py +0 -32
  605. data/vendor/depot_tools/third_party/oauth2client/appengine.py +0 -963
  606. data/vendor/depot_tools/third_party/oauth2client/client.py +0 -1363
  607. data/vendor/depot_tools/third_party/oauth2client/clientsecrets.py +0 -153
  608. data/vendor/depot_tools/third_party/oauth2client/crypt.py +0 -377
  609. data/vendor/depot_tools/third_party/oauth2client/django_orm.py +0 -134
  610. data/vendor/depot_tools/third_party/oauth2client/file.py +0 -124
  611. data/vendor/depot_tools/third_party/oauth2client/gce.py +0 -90
  612. data/vendor/depot_tools/third_party/oauth2client/keyring_storage.py +0 -109
  613. data/vendor/depot_tools/third_party/oauth2client/locked_file.py +0 -373
  614. data/vendor/depot_tools/third_party/oauth2client/multistore_file.py +0 -465
  615. data/vendor/depot_tools/third_party/oauth2client/old_run.py +0 -160
  616. data/vendor/depot_tools/third_party/oauth2client/tools.py +0 -243
  617. data/vendor/depot_tools/third_party/oauth2client/util.py +0 -196
  618. data/vendor/depot_tools/third_party/oauth2client/xsrfutil.py +0 -113
  619. data/vendor/depot_tools/third_party/protobuf26/README.chromium +0 -23
  620. data/vendor/depot_tools/third_party/protobuf26/__init__.py +0 -0
  621. data/vendor/depot_tools/third_party/protobuf26/compiler/__init__.py +0 -0
  622. data/vendor/depot_tools/third_party/protobuf26/compiler/plugin_pb2.py +0 -184
  623. data/vendor/depot_tools/third_party/protobuf26/descriptor.py +0 -849
  624. data/vendor/depot_tools/third_party/protobuf26/descriptor_database.py +0 -137
  625. data/vendor/depot_tools/third_party/protobuf26/descriptor_pb2.py +0 -1522
  626. data/vendor/depot_tools/third_party/protobuf26/descriptor_pool.py +0 -643
  627. data/vendor/depot_tools/third_party/protobuf26/internal/__init__.py +0 -0
  628. data/vendor/depot_tools/third_party/protobuf26/internal/api_implementation.py +0 -89
  629. data/vendor/depot_tools/third_party/protobuf26/internal/containers.py +0 -269
  630. data/vendor/depot_tools/third_party/protobuf26/internal/cpp_message.py +0 -663
  631. data/vendor/depot_tools/third_party/protobuf26/internal/decoder.py +0 -831
  632. data/vendor/depot_tools/third_party/protobuf26/internal/encoder.py +0 -788
  633. data/vendor/depot_tools/third_party/protobuf26/internal/enum_type_wrapper.py +0 -89
  634. data/vendor/depot_tools/third_party/protobuf26/internal/message_listener.py +0 -78
  635. data/vendor/depot_tools/third_party/protobuf26/internal/python_message.py +0 -1247
  636. data/vendor/depot_tools/third_party/protobuf26/internal/type_checkers.py +0 -328
  637. data/vendor/depot_tools/third_party/protobuf26/internal/wire_format.py +0 -268
  638. data/vendor/depot_tools/third_party/protobuf26/message.py +0 -284
  639. data/vendor/depot_tools/third_party/protobuf26/message_factory.py +0 -155
  640. data/vendor/depot_tools/third_party/protobuf26/reflection.py +0 -205
  641. data/vendor/depot_tools/third_party/protobuf26/service.py +0 -226
  642. data/vendor/depot_tools/third_party/protobuf26/service_reflection.py +0 -284
  643. data/vendor/depot_tools/third_party/protobuf26/symbol_database.py +0 -185
  644. data/vendor/depot_tools/third_party/protobuf26/text_encoding.py +0 -110
  645. data/vendor/depot_tools/third_party/protobuf26/text_format.py +0 -873
  646. data/vendor/depot_tools/third_party/pylint.py +0 -37
  647. data/vendor/depot_tools/third_party/pylint/LICENSE.txt +0 -340
  648. data/vendor/depot_tools/third_party/pylint/README.chromium +0 -30
  649. data/vendor/depot_tools/third_party/pylint/__init__.py +0 -46
  650. data/vendor/depot_tools/third_party/pylint/__main__.py +0 -3
  651. data/vendor/depot_tools/third_party/pylint/__pkginfo__.py +0 -80
  652. data/vendor/depot_tools/third_party/pylint/checkers/__init__.py +0 -123
  653. data/vendor/depot_tools/third_party/pylint/checkers/async.py +0 -82
  654. data/vendor/depot_tools/third_party/pylint/checkers/base.py +0 -2010
  655. data/vendor/depot_tools/third_party/pylint/checkers/classes.py +0 -1120
  656. data/vendor/depot_tools/third_party/pylint/checkers/design_analysis.py +0 -348
  657. data/vendor/depot_tools/third_party/pylint/checkers/exceptions.py +0 -369
  658. data/vendor/depot_tools/third_party/pylint/checkers/format.py +0 -993
  659. data/vendor/depot_tools/third_party/pylint/checkers/imports.py +0 -654
  660. data/vendor/depot_tools/third_party/pylint/checkers/logging.py +0 -258
  661. data/vendor/depot_tools/third_party/pylint/checkers/misc.py +0 -105
  662. data/vendor/depot_tools/third_party/pylint/checkers/newstyle.py +0 -169
  663. data/vendor/depot_tools/third_party/pylint/checkers/python3.py +0 -591
  664. data/vendor/depot_tools/third_party/pylint/checkers/raw_metrics.py +0 -129
  665. data/vendor/depot_tools/third_party/pylint/checkers/similar.py +0 -371
  666. data/vendor/depot_tools/third_party/pylint/checkers/spelling.py +0 -264
  667. data/vendor/depot_tools/third_party/pylint/checkers/stdlib.py +0 -280
  668. data/vendor/depot_tools/third_party/pylint/checkers/strings.py +0 -618
  669. data/vendor/depot_tools/third_party/pylint/checkers/typecheck.py +0 -974
  670. data/vendor/depot_tools/third_party/pylint/checkers/utils.py +0 -741
  671. data/vendor/depot_tools/third_party/pylint/checkers/variables.py +0 -1191
  672. data/vendor/depot_tools/third_party/pylint/config.py +0 -820
  673. data/vendor/depot_tools/third_party/pylint/epylint.py +0 -181
  674. data/vendor/depot_tools/third_party/pylint/extensions/__init__.py +0 -0
  675. data/vendor/depot_tools/third_party/pylint/extensions/check_docs.py +0 -311
  676. data/vendor/depot_tools/third_party/pylint/extensions/check_elif.py +0 -62
  677. data/vendor/depot_tools/third_party/pylint/graph.py +0 -179
  678. data/vendor/depot_tools/third_party/pylint/gui.py +0 -531
  679. data/vendor/depot_tools/third_party/pylint/interfaces.py +0 -102
  680. data/vendor/depot_tools/third_party/pylint/lint.py +0 -1381
  681. data/vendor/depot_tools/third_party/pylint/pyreverse/__init__.py +0 -5
  682. data/vendor/depot_tools/third_party/pylint/pyreverse/diadefslib.py +0 -230
  683. data/vendor/depot_tools/third_party/pylint/pyreverse/diagrams.py +0 -258
  684. data/vendor/depot_tools/third_party/pylint/pyreverse/inspector.py +0 -372
  685. data/vendor/depot_tools/third_party/pylint/pyreverse/main.py +0 -147
  686. data/vendor/depot_tools/third_party/pylint/pyreverse/utils.py +0 -210
  687. data/vendor/depot_tools/third_party/pylint/pyreverse/vcgutils.py +0 -198
  688. data/vendor/depot_tools/third_party/pylint/pyreverse/writer.py +0 -198
  689. data/vendor/depot_tools/third_party/pylint/reporters/__init__.py +0 -149
  690. data/vendor/depot_tools/third_party/pylint/reporters/guireporter.py +0 -27
  691. data/vendor/depot_tools/third_party/pylint/reporters/html.py +0 -108
  692. data/vendor/depot_tools/third_party/pylint/reporters/json.py +0 -64
  693. data/vendor/depot_tools/third_party/pylint/reporters/text.py +0 -237
  694. data/vendor/depot_tools/third_party/pylint/reporters/ureports/__init__.py +0 -106
  695. data/vendor/depot_tools/third_party/pylint/reporters/ureports/html_writer.py +0 -93
  696. data/vendor/depot_tools/third_party/pylint/reporters/ureports/nodes.py +0 -181
  697. data/vendor/depot_tools/third_party/pylint/reporters/ureports/text_writer.py +0 -99
  698. data/vendor/depot_tools/third_party/pylint/testutils.py +0 -414
  699. data/vendor/depot_tools/third_party/pylint/utils.py +0 -1148
  700. data/vendor/depot_tools/third_party/pymox/COPYING +0 -202
  701. data/vendor/depot_tools/third_party/pymox/MANIFEST.in +0 -5
  702. data/vendor/depot_tools/third_party/pymox/README +0 -56
  703. data/vendor/depot_tools/third_party/pymox/__init__.py +0 -0
  704. data/vendor/depot_tools/third_party/pymox/mox.py +0 -1643
  705. data/vendor/depot_tools/third_party/pymox/mox_test.py +0 -1708
  706. data/vendor/depot_tools/third_party/pymox/mox_test_helper.py +0 -76
  707. data/vendor/depot_tools/third_party/pymox/setup.py +0 -14
  708. data/vendor/depot_tools/third_party/pymox/stubout.py +0 -142
  709. data/vendor/depot_tools/third_party/pymox/stubout_test.py +0 -47
  710. data/vendor/depot_tools/third_party/pymox/stubout_testee.py +0 -2
  711. data/vendor/depot_tools/third_party/simplejson/LICENSE.txt +0 -19
  712. data/vendor/depot_tools/third_party/simplejson/PKG-INFO +0 -29
  713. data/vendor/depot_tools/third_party/simplejson/__init__.py +0 -437
  714. data/vendor/depot_tools/third_party/simplejson/decoder.py +0 -421
  715. data/vendor/depot_tools/third_party/simplejson/encoder.py +0 -501
  716. data/vendor/depot_tools/third_party/simplejson/ordered_dict.py +0 -119
  717. data/vendor/depot_tools/third_party/simplejson/scanner.py +0 -77
  718. data/vendor/depot_tools/third_party/simplejson/tool.py +0 -39
  719. 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