libv8 7.3.492.27.1 → 8.4.255.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -2,7 +2,7 @@
2
2
  # Use of this source code is governed by a BSD-style license that can be
3
3
  # found in the LICENSE file.
4
4
 
5
- """A database of OWNERS files.
5
+ r"""A database of OWNERS files.
6
6
 
7
7
  OWNERS files indicate who is allowed to approve changes in a specific directory
8
8
  (or who is allowed to make changes without needing approval of another OWNER).
@@ -59,9 +59,16 @@ Examples for all of these combinations can be found in tests/owners_unittest.py.
59
59
 
60
60
  import collections
61
61
  import fnmatch
62
+ import os
62
63
  import random
63
64
  import re
64
65
 
66
+ try:
67
+ # This fallback applies for all versions of Python before 3.3
68
+ import collections.abc as collections_abc
69
+ except ImportError:
70
+ import collections as collections_abc
71
+
65
72
 
66
73
  # If this is present by itself on a line, this means that everyone can review.
67
74
  EVERYONE = '*'
@@ -77,12 +84,12 @@ GLOBAL_STATUS = '*'
77
84
 
78
85
 
79
86
  def _assert_is_collection(obj):
80
- assert not isinstance(obj, basestring)
87
+ assert not isinstance(obj, str)
81
88
  # Module 'collections' has no 'Iterable' member
82
89
  # pylint: disable=no-member
83
- if hasattr(collections, 'Iterable') and hasattr(collections, 'Sized'):
84
- assert (isinstance(obj, collections.Iterable) and
85
- isinstance(obj, collections.Sized))
90
+ if hasattr(collections_abc, 'Iterable') and hasattr(collections_abc, 'Sized'):
91
+ assert (isinstance(obj, collections_abc.Iterable) and
92
+ isinstance(obj, collections_abc.Sized))
86
93
 
87
94
 
88
95
  class SyntaxErrorInOwnersFile(Exception):
@@ -125,7 +132,9 @@ class Database(object):
125
132
  # Mapping of owners to the paths or globs they own.
126
133
  self._owners_to_paths = {EVERYONE: set()}
127
134
 
128
- # Mapping of paths to authorized owners.
135
+ # Mappings of directories -> globs in the directory -> owners
136
+ # Example: "chrome/browser" -> "chrome/browser/*.h" -> ("john", "maria")
137
+ # Paths used as keys must use slashes as the separator, even on Windows.
129
138
  self._paths_to_owners = {}
130
139
 
131
140
  # Mapping reviewers to the preceding comment per file in the OWNERS files.
@@ -134,9 +143,15 @@ class Database(object):
134
143
  # Cache of compiled regexes for _fnmatch()
135
144
  self._fnmatch_cache = {}
136
145
 
137
- # Set of paths that stop us from looking above them for owners.
146
+ # Sets of paths that stop us from looking above them for owners.
138
147
  # (This is implicitly true for the root directory).
139
- self._stop_looking = set([''])
148
+ #
149
+ # The implementation is a mapping:
150
+ # Directory -> globs in the directory,
151
+ #
152
+ # Example:
153
+ # 'ui/events/devices/mojo' -> 'ui/events/devices/mojo/*_struct_traits*.*'
154
+ self._stop_looking = {'': set([''])}
140
155
 
141
156
  # Set of files which have already been read.
142
157
  self.read_files = set()
@@ -219,23 +234,61 @@ class Database(object):
219
234
 
220
235
  def load_data_needed_for(self, files):
221
236
  self._read_global_comments()
237
+ visited_dirs = set()
222
238
  for f in files:
239
+ # Always use slashes as separators.
240
+ f = f.replace(os.sep, '/')
223
241
  dirpath = self.os_path.dirname(f)
224
- while not self._owners_for(dirpath):
242
+ while dirpath not in visited_dirs:
243
+ visited_dirs.add(dirpath)
244
+
245
+ obj_owners = self._owners_for(dirpath)
246
+ if obj_owners:
247
+ break
225
248
  self._read_owners(self.os_path.join(dirpath, 'OWNERS'))
226
249
  if self._should_stop_looking(dirpath):
227
250
  break
251
+
228
252
  dirpath = self.os_path.dirname(dirpath)
229
253
 
230
254
  def _should_stop_looking(self, objname):
231
- return any(self._fnmatch(objname, stop_looking)
232
- for stop_looking in self._stop_looking)
255
+ dirname = objname
256
+ while True:
257
+ if dirname in self._stop_looking:
258
+ if any(self._fnmatch(objname, stop_looking)
259
+ for stop_looking in self._stop_looking[dirname]):
260
+ return True
261
+ up_dirname = self.os_path.dirname(dirname)
262
+ if up_dirname == dirname:
263
+ break
264
+ dirname = up_dirname
265
+ return False
266
+
267
+ def _get_root_affected_dir(self, obj_name):
268
+ """Returns the deepest directory/path that is affected by a file pattern
269
+ |obj_name|."""
270
+ root_affected_dir = obj_name
271
+ while '*' in root_affected_dir:
272
+ root_affected_dir = self.os_path.dirname(root_affected_dir)
273
+ return root_affected_dir
233
274
 
234
275
  def _owners_for(self, objname):
235
276
  obj_owners = set()
236
- for owned_path, path_owners in self._paths_to_owners.iteritems():
237
- if self._fnmatch(objname, owned_path):
238
- obj_owners |= path_owners
277
+
278
+ # Possibly relevant rules can be found stored at every directory
279
+ # level so iterate upwards, looking for them.
280
+ dirname = objname
281
+ while True:
282
+ dir_owner_rules = self._paths_to_owners.get(dirname)
283
+ if dir_owner_rules:
284
+ for owned_path, path_owners in dir_owner_rules.items():
285
+ if self._fnmatch(objname, owned_path):
286
+ obj_owners |= path_owners
287
+ up_dirname = self.os_path.dirname(dirname)
288
+ if up_dirname == dirname:
289
+ break
290
+ dirname = up_dirname
291
+
239
292
  return obj_owners
240
293
 
241
294
  def _read_owners(self, path):
@@ -268,7 +321,7 @@ class Database(object):
268
321
  line = line.strip()
269
322
  if line.startswith('#'):
270
323
  if is_toplevel:
271
- m = re.match('#\s*OWNERS_STATUS\s+=\s+(.+)$', line)
324
+ m = re.match(r'#\s*OWNERS_STATUS\s+=\s+(.+)$', line)
272
325
  if m:
273
326
  self._status_file = m.group(1).strip()
274
327
  continue
@@ -293,7 +346,8 @@ class Database(object):
293
346
 
294
347
  previous_line_was_blank = False
295
348
  if line == 'set noparent':
296
- self._stop_looking.add(dirpath)
349
+ self._stop_looking.setdefault(
350
+ self._get_root_affected_dir(dirpath), set()).add(dirpath)
297
351
  continue
298
352
 
299
353
  m = re.match('per-file (.+)=(.+)', line)
@@ -363,8 +417,12 @@ class Database(object):
363
417
  'cannot parse status entry: "%s"' % line.strip())
364
418
 
365
419
  def _add_entry(self, owned_paths, directive, owners_path, lineno, comment):
420
+ # Consistently uses paths with slashes as the keys or else Windows will
421
+ # break in surprising and untested ways.
422
+ owned_paths = owned_paths.replace(os.sep, '/')
366
423
  if directive == 'set noparent':
367
- self._stop_looking.add(owned_paths)
424
+ self._stop_looking.setdefault(
425
+ self._get_root_affected_dir(owned_paths), set()).add(owned_paths)
368
426
  elif directive.startswith('file:'):
369
427
  include_file = self._resolve_include(directive[5:], owners_path, lineno)
370
428
  if not include_file:
@@ -374,13 +432,17 @@ class Database(object):
374
432
  included_owners = self._read_just_the_owners(include_file)
375
433
  for owner in included_owners:
376
434
  self._owners_to_paths.setdefault(owner, set()).add(owned_paths)
377
- self._paths_to_owners.setdefault(owned_paths, set()).add(owner)
435
+ self._paths_to_owners.setdefault(
436
+ self._get_root_affected_dir(owned_paths), {}).setdefault(
437
+ owned_paths, set()).add(owner)
378
438
  elif self.email_regexp.match(directive) or directive == EVERYONE:
379
439
  if comment:
380
440
  self.comments.setdefault(directive, {})
381
441
  self.comments[directive][owned_paths] = comment
382
442
  self._owners_to_paths.setdefault(directive, set()).add(owned_paths)
383
- self._paths_to_owners.setdefault(owned_paths, set()).add(directive)
443
+ self._paths_to_owners.setdefault(
444
+ self._get_root_affected_dir(owned_paths), {}).setdefault(
445
+ owned_paths, set()).add(directive)
384
446
  else:
385
447
  raise SyntaxErrorInOwnersFile(owners_path, lineno,
386
448
  ('"%s" is not a "set noparent", file include, "*", '
@@ -392,7 +454,7 @@ class Database(object):
392
454
  else:
393
455
  assert start.startswith(self.root)
394
456
  start = self.os_path.dirname(self.os_path.relpath(start, self.root))
395
- include_path = self.os_path.join(start, path)
457
+ include_path = self.os_path.normpath(self.os_path.join(start, path))
396
458
 
397
459
  if include_path in self.override_files:
398
460
  return include_path
@@ -429,6 +491,10 @@ class Database(object):
429
491
  line.startswith('per-file')):
430
492
  continue
431
493
 
494
+ # If the line ends with a comment, strip the comment.
495
+ line, _delim, _comment = line.partition('#')
496
+ line = line.strip()
497
+
432
498
  if self.email_regexp.match(line) or line == EVERYONE:
433
499
  owners.add(line)
434
500
  continue
@@ -455,7 +521,7 @@ class Database(object):
455
521
  # Now that we've used `owner` and covered all their dirs, remove them
456
522
  # from consideration.
457
523
  del all_possible_owners[owner]
458
- for o, dirs in all_possible_owners.items():
524
+ for o, dirs in list(all_possible_owners.items()):
459
525
  new_dirs = [(d, dist) for (d, dist) in dirs if d not in dirs_to_remove]
460
526
  if not new_dirs:
461
527
  del all_possible_owners[o]
@@ -463,33 +529,71 @@ class Database(object):
463
529
  all_possible_owners[o] = new_dirs
464
530
  return suggested_owners
465
531
 
466
- def all_possible_owners(self, dirs, author):
532
+ def _all_possible_owners_for_dir_or_file(self, dir_or_file, author,
533
+ cache):
534
+ """Returns a dict of {potential owner: (dir_or_file, distance)} mappings.
535
+ """
536
+ assert not dir_or_file.startswith("/")
537
+ res = cache.get(dir_or_file)
538
+ if res is None:
539
+ res = {}
540
+ dirname = dir_or_file
541
+ for owner in self._owners_for(dirname):
542
+ if author and owner == author:
543
+ continue
544
+ res.setdefault(owner, [])
545
+ res[owner] = (dir_or_file, 1)
546
+ if not self._should_stop_looking(dirname):
547
+ dirname = self.os_path.dirname(dirname)
548
+
549
+ parent_res = self._all_possible_owners_for_dir_or_file(dirname,
550
+ author, cache)
551
+
552
+ # Merge the parent information with our information, adjusting
553
+ # distances as necessary, and replacing the parent directory
554
+ # names with our names.
555
+ for owner, par_dir_and_distances in parent_res.items():
556
+ if owner in res:
557
+ # If the same person is in multiple OWNERS files above a given
558
+ # directory, only count the closest one.
559
+ continue
560
+ parent_distance = par_dir_and_distances[1]
561
+ res[owner] = (dir_or_file, parent_distance + 1)
562
+
563
+ cache[dir_or_file] = res
564
+
565
+ return res
566
+
567
+ def all_possible_owners(self, dirs_and_files, author):
467
568
  """Returns a dict of {potential owner: (dir, distance)} mappings.
468
569
 
469
570
  A distance of 1 is the lowest/closest possible distance (which makes the
470
571
  subsequent math easier).
471
572
  """
573
+
574
+ all_possible_owners_for_dir_or_file_cache = {}
472
575
  all_possible_owners = {}
473
- for current_dir in dirs:
474
- dirname = current_dir
475
- distance = 1
476
- while True:
477
- for owner in self._owners_for(dirname):
478
- if author and owner == author:
479
- continue
480
- all_possible_owners.setdefault(owner, [])
481
- # If the same person is in multiple OWNERS files above a given
482
- # directory, only count the closest one.
483
- if not any(current_dir == el[0] for el in all_possible_owners[owner]):
484
- all_possible_owners[owner].append((current_dir, distance))
485
- if self._should_stop_looking(dirname):
486
- break
487
- dirname = self.os_path.dirname(dirname)
488
- distance += 1
576
+ for current_dir in dirs_and_files:
577
+ # Always use slashes as separators.
578
+ current_dir = current_dir.replace(os.sep, '/')
579
+ dir_owners = self._all_possible_owners_for_dir_or_file(
580
+ current_dir, author,
581
+ all_possible_owners_for_dir_or_file_cache)
582
+ for owner, dir_and_distance in dir_owners.items():
583
+ if owner in all_possible_owners:
584
+ all_possible_owners[owner].append(dir_and_distance)
585
+ else:
586
+ all_possible_owners[owner] = [dir_and_distance]
587
+
489
588
  return all_possible_owners
490
589
 
491
590
  def _fnmatch(self, filename, pattern):
492
- """Same as fnmatch.fnmatch(), but interally caches the compiled regexes."""
591
+ """Same as fnmatch.fnmatch(), but internally caches the compiled regexes."""
592
+ # Make sure backslashes are never used in the filename. The regex
593
+ # expressions generated by fnmatch.translate don't handle matching slashes
594
+ # to backslashes.
595
+ filename = filename.replace(os.sep, '/')
596
+ assert pattern.count('\\') == 0, 'Backslashes found in %s' % pattern
493
597
  matcher = self._fnmatch_cache.get(pattern)
494
598
  if matcher is None:
495
599
  matcher = re.compile(fnmatch.translate(pattern)).match
@@ -521,8 +625,17 @@ class Database(object):
521
625
  total_costs_by_owner = Database.total_costs_by_owner(all_possible_owners,
522
626
  dirs)
523
627
  # Return the lowest cost owner. In the case of a tie, pick one randomly.
524
- lowest_cost = min(total_costs_by_owner.itervalues())
525
- lowest_cost_owners = filter(
526
- lambda owner: total_costs_by_owner[owner] == lowest_cost,
527
- total_costs_by_owner)
628
+ lowest_cost = min(total_costs_by_owner.values())
629
+ lowest_cost_owners = [
630
+ owner for owner, cost in total_costs_by_owner.items()
631
+ if cost == lowest_cost]
528
632
  return random.Random().choice(lowest_cost_owners)
633
+
634
+ def owners_rooted_at_file(self, filename):
635
+ """Returns a set of all owners transitively listed in filename.
636
+
637
+ This function returns a set of all the owners either listed in filename, or
638
+ in a file transitively included by filename. Lines that are not plain owners
639
+ (i.e. per-file owners) are ignored.
640
+ """
641
+ return self._read_just_the_owners(filename)
@@ -4,9 +4,15 @@
4
4
 
5
5
  """Interactive tool for finding reviewers/owners for a change."""
6
6
 
7
+ from __future__ import print_function
8
+
7
9
  import os
8
10
  import copy
9
11
  import owners as owners_module
12
+ import random
13
+
14
+
15
+ import gclient_utils
10
16
 
11
17
 
12
18
  def first(iterable):
@@ -123,7 +129,7 @@ class OwnersFinder(object):
123
129
  self.list_owners(self.owners_queue)
124
130
  break
125
131
  elif inp == 'p' or inp == 'pick':
126
- self.pick_owner(raw_input('Pick an owner: '))
132
+ self.pick_owner(gclient_utils.AskForData('Pick an owner: '))
127
133
  break
128
134
  elif inp.startswith('p ') or inp.startswith('pick '):
129
135
  self.pick_owner(inp.split(' ', 2)[1].strip())
@@ -159,9 +165,12 @@ class OwnersFinder(object):
159
165
  self.selected_owners = set()
160
166
  self.deselected_owners = set()
161
167
 
162
- # Initialize owners queue, sort it by the score
163
- self.owners_queue = list(sorted(self.owners_to_files.keys(),
164
- key=lambda owner: self.owners_score[owner]))
168
+ # Randomize owners' names so that if many reviewers have identical scores
169
+ # they will be randomly ordered to avoid bias.
170
+ owners = list(self.owners_to_files.keys())
171
+ random.shuffle(owners)
172
+ self.owners_queue = sorted(owners,
173
+ key=lambda owner: self.owners_score[owner])
165
174
  self.find_mandatory_owners()
166
175
 
167
176
  def select_owner(self, owner, findMandatoryOwners=True):
@@ -325,14 +334,19 @@ class OwnersFinder(object):
325
334
  # Print results
326
335
  self.writeln()
327
336
  self.writeln()
328
- self.writeln('** You selected these owners **')
329
- self.writeln()
330
- for owner in self.selected_owners:
331
- self.writeln(self.bold_name(owner) + ':')
332
- self.indent()
333
- for file_name in sorted(self.owners_to_files[owner]):
334
- self.writeln(file_name)
335
- self.unindent()
337
+ if len(self.selected_owners) == 0:
338
+ self.writeln('This change list already has owner-reviewers for all '
339
+ 'files.')
340
+ self.writeln('Use --ignore-current if you want to ignore them.')
341
+ else:
342
+ self.writeln('** You selected these owners **')
343
+ self.writeln()
344
+ for owner in self.selected_owners:
345
+ self.writeln(self.bold_name(owner) + ':')
346
+ self.indent()
347
+ for file_name in sorted(self.owners_to_files[owner]):
348
+ self.writeln(file_name)
349
+ self.unindent()
336
350
 
337
351
  def bold(self, text):
338
352
  return self.COLOR_BOLD + text + self.COLOR_RESET
@@ -354,7 +368,7 @@ class OwnersFinder(object):
354
368
  return ' ' * self.indentation
355
369
 
356
370
  def writeln(self, text=''):
357
- print self.print_indent() + text
371
+ print(self.print_indent() + text)
358
372
 
359
373
  def hr(self):
360
374
  self.writeln('=====================')
@@ -367,5 +381,5 @@ class OwnersFinder(object):
367
381
 
368
382
  def input_command(self, owner):
369
383
  self.writeln('Add ' + self.bold_name(owner) + ' as your reviewer? ')
370
- return raw_input(
384
+ return gclient_utils.AskForData(
371
385
  '[yes/no/Defer/pick/files/owners/quit/restart]: ').lower()
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env vpython
1
2
  # Copyright (c) 2018 The Chromium Authors. All rights reserved.
2
3
  # Use of this source code is governed by a BSD-style license that can be
3
4
  # found in the LICENSE file.
@@ -24,26 +25,20 @@ Typical output looks like this:
24
25
  ninja.exe -C out\debug_component base -j 960 -l 48 -d keeprsp
25
26
  ninja: Entering directory `out\debug_component'
26
27
  [1 processes, 1/1 @ 0.3/s : 3.092s ] Regenerating ninja files
27
- [1 processes, 23/23 @ 0.9/s : 26.280s ] LINK(DLL) base.dll base.dll.lib
28
- Longest build steps:
29
- 0.9 weighted s to build obj/base/base_jumbo_17.obj (5.0 s CPU time)
30
- 1.0 weighted s to build obj/base/base_jumbo_31.obj (13.1 s CPU time)
31
- 1.2 weighted s to build obj/base/base_jumbo_4.obj (14.7 s CPU time)
32
- 1.3 weighted s to build obj/base/base_jumbo_32.obj (15.0 s CPU time)
33
- 1.6 weighted s to build obj/base/base_jumbo_26.obj (17.1 s CPU time)
34
- 1.7 weighted s to build base.dll, base.dll.lib (1.7 s CPU time)
35
- 1.7 weighted s to build obj/base/base_jumbo_11.obj (15.9 s CPU time)
36
- 1.9 weighted s to build obj/base/base_jumbo_12.obj (18.5 s CPU time)
37
- 3.6 weighted s to build obj/base/base_jumbo_34.obj (20.1 s CPU time)
38
- 4.3 weighted s to build obj/base/base_jumbo_33.obj (22.3 s CPU time)
39
- Time by build-step type:
40
- 0.1 s weighted time to generate 1 .c files (0.1 s CPU time)
41
- 0.1 s weighted time to generate 1 .stamp files (0.1 s CPU time)
42
- 0.2 s weighted time to generate 1 .h files (0.2 s CPU time)
43
- 1.7 s weighted time to generate 1 PEFile files (1.7 s CPU time)
44
- 24.3 s weighted time to generate 19 .obj files (233.4 s CPU time)
45
- 26.3 s weighted time (235.5 s CPU time, 9.0x parallelism)
46
- 23 build steps completed, average of 0.88/s
28
+ Longest build steps:
29
+ 0.1 weighted s to build obj/base/base/trace_log.obj (6.7 s elapsed time)
30
+ 0.2 weighted s to build nasm.exe, nasm.exe.pdb (0.2 s elapsed time)
31
+ 0.3 weighted s to build obj/base/base/win_util.obj (12.4 s elapsed time)
32
+ 1.2 weighted s to build base.dll, base.dll.lib (1.2 s elapsed time)
33
+ Time by build-step type:
34
+ 0.0 s weighted time to generate 6 .lib files (0.3 s elapsed time sum)
35
+ 0.1 s weighted time to generate 25 .stamp files (1.2 s elapsed time sum)
36
+ 0.2 s weighted time to generate 20 .o files (2.8 s elapsed time sum)
37
+ 1.7 s weighted time to generate 4 PEFile (linking) files (2.0 s elapsed
38
+ time sum)
39
+ 23.9 s weighted time to generate 770 .obj files (974.8 s elapsed time sum)
40
+ 26.1 s weighted time (982.9 s elapsed time sum, 37.7x parallelism)
41
+ 839 build steps completed, average of 32.17/s
47
42
 
48
43
  If no gn clean has been done then results will be for the last non-NULL
49
44
  invocation of ninja. Ideas for future statistics, and implementations are
@@ -56,8 +51,11 @@ will have a weighted time that is the same or similar to its elapsed time. A
56
51
  compile that runs in parallel with 999 other compiles will have a weighted time
57
52
  that is tiny."""
58
53
 
54
+ from __future__ import print_function
55
+
59
56
  import argparse
60
57
  import errno
58
+ import fnmatch
61
59
  import os
62
60
  import sys
63
61
 
@@ -65,7 +63,7 @@ import sys
65
63
  # The number of long build times to report:
66
64
  long_count = 10
67
65
  # The number of long times by extension to report
68
- long_ext_count = 5
66
+ long_ext_count = 10
69
67
 
70
68
 
71
69
  class Target:
@@ -100,7 +98,7 @@ class Target:
100
98
  # Allow for modest floating-point errors
101
99
  epsilon = 0.000002
102
100
  if (self.weighted_duration > self.Duration() + epsilon):
103
- print '%s > %s?' % (self.weighted_duration, self.Duration())
101
+ print('%s > %s?' % (self.weighted_duration, self.Duration()))
104
102
  assert(self.weighted_duration <= self.Duration() + epsilon)
105
103
  return self.weighted_duration
106
104
 
@@ -166,37 +164,54 @@ def ReadTargets(log, show_all):
166
164
  return targets_dict.values()
167
165
 
168
166
 
169
- def GetExtension(target):
167
+ def GetExtension(target, extra_patterns):
170
168
  """Return the file extension that best represents a target.
171
169
 
172
170
  For targets that generate multiple outputs it is important to return a
173
171
  consistent 'canonical' extension. Ultimately the goal is to group build steps
174
172
  by type."""
175
173
  for output in target.targets:
176
- # Normalize all mojo related outputs to 'mojo'.
177
- if output.count('.mojom') > 0:
178
- extension = 'mojo'
179
- break
174
+ if extra_patterns:
175
+ for fn_pattern in extra_patterns.split(';'):
176
+ if fnmatch.fnmatch(output, '*' + fn_pattern + '*'):
177
+ return fn_pattern
180
178
  # Not a true extension, but a good grouping.
181
179
  if output.endswith('type_mappings'):
182
180
  extension = 'type_mappings'
183
181
  break
184
- extension = os.path.splitext(output)[1]
182
+
183
+ # Capture two extensions if present. For example: file.javac.jar should be
184
+ # distinguished from file.interface.jar.
185
+ root, ext1 = os.path.splitext(output)
186
+ _, ext2 = os.path.splitext(root)
187
+ extension = ext2 + ext1 # Preserve the order in the file name.
188
+
185
189
  if len(extension) == 0:
186
190
  extension = '(no extension found)'
187
- if extension in ['.pdb', '.dll', '.exe']:
191
+
192
+ if ext1 in ['.pdb', '.dll', '.exe']:
188
193
  extension = 'PEFile (linking)'
189
194
  # Make sure that .dll and .exe are grouped together and that the
190
195
  # .dll.lib files don't cause these to be listed as libraries
191
196
  break
192
- if extension in ['.so', '.TOC']:
197
+ if ext1 in ['.so', '.TOC']:
193
198
  extension = '.so (linking)'
194
199
  # Attempt to identify linking, avoid identifying as '.TOC'
195
200
  break
201
+ # Make sure .obj files don't get categorized as mojo files
202
+ if ext1 in ['.obj', '.o']:
203
+ break
204
+ # Jars are the canonical output of java targets.
205
+ if ext1 == '.jar':
206
+ break
207
+ # Normalize all mojo related outputs to 'mojo'.
208
+ if output.count('.mojom') > 0:
209
+ extension = 'mojo'
210
+ break
196
211
  return extension
197
212
 
198
213
 
199
- def SummarizeEntries(entries):
214
+ def SummarizeEntries(entries, extra_step_types):
200
215
  """Print a summary of the passed in list of Target objects."""
201
216
 
202
217
  # Create a list that is in order by time stamp and has entries for the
@@ -256,16 +271,16 @@ def SummarizeEntries(entries):
256
271
 
257
272
  # Warn if the sum of weighted times is off by more than half a second.
258
273
  if abs(length - weighted_total) > 500:
259
- print 'Discrepancy!!! Length = %.3f, weighted total = %.3f' % (
260
- length, weighted_total)
274
+ print('Discrepancy!!! Length = %.3f, weighted total = %.3f' % (
275
+ length, weighted_total))
261
276
 
262
277
  # Print the slowest build steps (by weighted time).
263
- print ' Longest build steps:'
278
+ print(' Longest build steps:')
264
279
  entries.sort(key=lambda x: x.WeightedDuration())
265
280
  for target in entries[-long_count:]:
266
- print ' %8.1f weighted s to build %s (%.1f s CPU time)' % (
281
+ print(' %8.1f weighted s to build %s (%.1f s elapsed time)' % (
267
282
  target.WeightedDuration(),
268
- target.DescribeTargets(), target.Duration())
283
+ target.DescribeTargets(), target.Duration()))
269
284
 
270
285
  # Sum up the time by file extension/type of the output file
271
286
  count_by_ext = {}
@@ -273,27 +288,27 @@ def SummarizeEntries(entries):
273
288
  weighted_time_by_ext = {}
274
289
  # Scan through all of the targets to build up per-extension statistics.
275
290
  for target in entries:
276
- extension = GetExtension(target)
291
+ extension = GetExtension(target, extra_step_types)
277
292
  time_by_ext[extension] = time_by_ext.get(extension, 0) + target.Duration()
278
293
  weighted_time_by_ext[extension] = weighted_time_by_ext.get(extension,
279
294
  0) + target.WeightedDuration()
280
295
  count_by_ext[extension] = count_by_ext.get(extension, 0) + 1
281
296
 
282
- print ' Time by build-step type:'
297
+ print(' Time by build-step type:')
283
298
  # Copy to a list with extension name and total time swapped, to (time, ext)
284
299
  weighted_time_by_ext_sorted = sorted((y, x) for (x, y) in
285
300
  weighted_time_by_ext.items())
286
301
  # Print the slowest build target types (by weighted time):
287
302
  for time, extension in weighted_time_by_ext_sorted[-long_ext_count:]:
288
- print (' %8.1f s weighted time to generate %d %s files '
289
- '(%1.1f s CPU time)') % (time, count_by_ext[extension],
290
- extension, time_by_ext[extension])
303
+ print(' %8.1f s weighted time to generate %d %s files '
304
+ '(%1.1f s elapsed time sum)' % (time, count_by_ext[extension],
305
+ extension, time_by_ext[extension]))
291
306
 
292
- print ' %.1f s weighted time (%.1f s CPU time, %1.1fx parallelism)' % (
293
- length, total_cpu_time,
294
- total_cpu_time * 1.0 / length)
295
- print ' %d build steps completed, average of %1.2f/s' % (
296
- len(entries), len(entries) / (length))
307
+ print(' %.1f s weighted time (%.1f s elapsed time sum, %1.1fx '
308
+ 'parallelism)' % (length, total_cpu_time,
309
+ total_cpu_time * 1.0 / length))
310
+ print(' %d build steps completed, average of %1.2f/s' % (
311
+ len(entries), len(entries) / (length)))
297
312
 
298
313
 
299
314
  def main():
@@ -301,6 +316,10 @@ def main():
301
316
  parser = argparse.ArgumentParser()
302
317
  parser.add_argument('-C', dest='build_directory',
303
318
  help='Build directory.')
319
+ parser.add_argument(
320
+ '-s',
321
+ '--step-types',
322
+ help='semicolon separated fnmatch patterns for build-step grouping')
304
323
  parser.add_argument('--log-file',
305
324
  help="specific ninja log file to analyze.")
306
325
  args, _extra_args = parser.parse_known_args()
@@ -308,13 +327,22 @@ def main():
308
327
  log_file = os.path.join(args.build_directory, log_file)
309
328
  if args.log_file:
310
329
  log_file = args.log_file
330
+ if not args.step_types:
331
+ # Offer a convenient way to add extra step types automatically, including
332
+ # when this script is run by autoninja. get() returns None if the variable
333
+ # isn't set.
334
+ args.step_types = os.environ.get('chromium_step_types')
335
+ if args.step_types:
336
+ # Make room for the extra build types.
337
+ global long_ext_count
338
+ long_ext_count += len(args.step_types.split(';'))
311
339
 
312
340
  try:
313
341
  with open(log_file, 'r') as log:
314
342
  entries = ReadTargets(log, False)
315
- SummarizeEntries(entries)
343
+ SummarizeEntries(entries, args.step_types)
316
344
  except IOError:
317
- print 'Log file %r not found, no build summary created.' % log_file
345
+ print('Log file %r not found, no build summary created.' % log_file)
318
346
  return errno.ENOENT
319
347
 
320
348