libv8 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 (639) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +3 -0
  5. data/.travis.yml +45 -0
  6. data/CHANGELOG.md +111 -0
  7. data/Gemfile +4 -0
  8. data/README.md +152 -0
  9. data/Rakefile +125 -0
  10. data/appveyor.yml.disabled +36 -0
  11. data/ext/libv8/arch.rb +20 -0
  12. data/ext/libv8/builder.rb +106 -0
  13. data/ext/libv8/extconf.rb +7 -0
  14. data/ext/libv8/location.rb +89 -0
  15. data/ext/libv8/paths.rb +28 -0
  16. data/lib/libv8.rb +9 -0
  17. data/lib/libv8/version.rb +3 -0
  18. data/libv8.gemspec +30 -0
  19. data/scaleway.png +0 -0
  20. data/spec/location_spec.rb +69 -0
  21. data/spec/spec_helper.rb +4 -0
  22. data/thefrontside.png +0 -0
  23. data/vendor/depot_tools/.cipd_impl.ps1 +129 -0
  24. data/vendor/depot_tools/.gitattributes +55 -0
  25. data/vendor/depot_tools/.gitignore +92 -0
  26. data/vendor/depot_tools/.style.yapf +4 -0
  27. data/vendor/depot_tools/.vpython +55 -0
  28. data/vendor/depot_tools/.vpython3 +23 -0
  29. data/vendor/depot_tools/CROS_OWNERS +7 -0
  30. data/vendor/depot_tools/GOMA_OWNERS +9 -0
  31. data/vendor/depot_tools/LICENSE +27 -0
  32. data/vendor/depot_tools/LUCI_OWNERS +5 -0
  33. data/vendor/depot_tools/OWNERS +39 -0
  34. data/vendor/depot_tools/PRESUBMIT.py +150 -0
  35. data/vendor/depot_tools/README.gclient.md +67 -0
  36. data/vendor/depot_tools/README.git-cl.md +99 -0
  37. data/vendor/depot_tools/README.md +78 -0
  38. data/vendor/depot_tools/WATCHLISTS +26 -0
  39. data/vendor/depot_tools/auth.py +163 -0
  40. data/vendor/depot_tools/autoninja +36 -0
  41. data/vendor/depot_tools/autoninja.bat +33 -0
  42. data/vendor/depot_tools/autoninja.py +148 -0
  43. data/vendor/depot_tools/bb +12 -0
  44. data/vendor/depot_tools/bb.bat +7 -0
  45. data/vendor/depot_tools/bootstrap/README.md +155 -0
  46. data/vendor/depot_tools/bootstrap/bootstrap.py +356 -0
  47. data/vendor/depot_tools/bootstrap/git-bash.template.sh +12 -0
  48. data/vendor/depot_tools/bootstrap/git.template.bat +5 -0
  49. data/vendor/depot_tools/bootstrap/manifest.txt +27 -0
  50. data/vendor/depot_tools/bootstrap/manifest_bleeding_edge.txt +27 -0
  51. data/vendor/depot_tools/bootstrap/profile.d.python.sh +20 -0
  52. data/vendor/depot_tools/bootstrap/python27.bat +46 -0
  53. data/vendor/depot_tools/bootstrap/python3.bat +46 -0
  54. data/vendor/depot_tools/bootstrap/win_tools.bat +79 -0
  55. data/vendor/depot_tools/bootstrap_python3 +35 -0
  56. data/vendor/depot_tools/breakpad.py +12 -0
  57. data/vendor/depot_tools/cbuildbot +1 -0
  58. data/vendor/depot_tools/chrome_set_ver +1 -0
  59. data/vendor/depot_tools/cipd +247 -0
  60. data/vendor/depot_tools/cipd.bat +67 -0
  61. data/vendor/depot_tools/cipd_bin_setup.bat +6 -0
  62. data/vendor/depot_tools/cipd_bin_setup.sh +22 -0
  63. data/vendor/depot_tools/cipd_client_version +1 -0
  64. data/vendor/depot_tools/cipd_client_version.digests +22 -0
  65. data/vendor/depot_tools/cipd_manifest.txt +63 -0
  66. data/vendor/depot_tools/cipd_manifest.versions +438 -0
  67. data/vendor/depot_tools/cit +8 -0
  68. data/vendor/depot_tools/cit.bat +12 -0
  69. data/vendor/depot_tools/cit.py +167 -0
  70. data/vendor/depot_tools/clang-format +8 -0
  71. data/vendor/depot_tools/clang-format.bat +12 -0
  72. data/vendor/depot_tools/clang_format.py +79 -0
  73. data/vendor/depot_tools/clang_format_merge_driver +8 -0
  74. data/vendor/depot_tools/clang_format_merge_driver.bat +12 -0
  75. data/vendor/depot_tools/clang_format_merge_driver.py +69 -0
  76. data/vendor/depot_tools/codereview.settings +6 -0
  77. data/vendor/depot_tools/compile_single_file +8 -0
  78. data/vendor/depot_tools/compile_single_file.bat +11 -0
  79. data/vendor/depot_tools/compile_single_file.py +79 -0
  80. data/vendor/depot_tools/cpplint.bat +11 -0
  81. data/vendor/depot_tools/cpplint.py +6097 -0
  82. data/vendor/depot_tools/cpplint_chromium.py +50 -0
  83. data/vendor/depot_tools/cros +87 -0
  84. data/vendor/depot_tools/cros_sdk +1 -0
  85. data/vendor/depot_tools/crosjobs +13 -0
  86. data/vendor/depot_tools/detect_host_arch.py +55 -0
  87. data/vendor/depot_tools/dirmd +12 -0
  88. data/vendor/depot_tools/dirmd.bat +7 -0
  89. data/vendor/depot_tools/download_from_google_storage +8 -0
  90. data/vendor/depot_tools/download_from_google_storage.bat +12 -0
  91. data/vendor/depot_tools/download_from_google_storage.py +634 -0
  92. data/vendor/depot_tools/ensure_bootstrap +53 -0
  93. data/vendor/depot_tools/fetch +21 -0
  94. data/vendor/depot_tools/fetch.bat +28 -0
  95. data/vendor/depot_tools/fetch.py +319 -0
  96. data/vendor/depot_tools/fetch_configs/android.py +34 -0
  97. data/vendor/depot_tools/fetch_configs/android_internal.py +34 -0
  98. data/vendor/depot_tools/fetch_configs/breakpad.py +44 -0
  99. data/vendor/depot_tools/fetch_configs/chromium.py +66 -0
  100. data/vendor/depot_tools/fetch_configs/config_util.py +52 -0
  101. data/vendor/depot_tools/fetch_configs/crashpad.py +41 -0
  102. data/vendor/depot_tools/fetch_configs/dart.py +45 -0
  103. data/vendor/depot_tools/fetch_configs/depot_tools.py +44 -0
  104. data/vendor/depot_tools/fetch_configs/devtools-frontend.py +44 -0
  105. data/vendor/depot_tools/fetch_configs/goma_client.py +41 -0
  106. data/vendor/depot_tools/fetch_configs/gyp.py +41 -0
  107. data/vendor/depot_tools/fetch_configs/infra.py +40 -0
  108. data/vendor/depot_tools/fetch_configs/infra_internal.py +45 -0
  109. data/vendor/depot_tools/fetch_configs/inspector_protocol.py +40 -0
  110. data/vendor/depot_tools/fetch_configs/ios.py +34 -0
  111. data/vendor/depot_tools/fetch_configs/ios_internal.py +39 -0
  112. data/vendor/depot_tools/fetch_configs/nacl.py +48 -0
  113. data/vendor/depot_tools/fetch_configs/naclports.py +47 -0
  114. data/vendor/depot_tools/fetch_configs/node-ci.py +41 -0
  115. data/vendor/depot_tools/fetch_configs/pdfium.py +40 -0
  116. data/vendor/depot_tools/fetch_configs/skia.py +41 -0
  117. data/vendor/depot_tools/fetch_configs/skia_buildbot.py +41 -0
  118. data/vendor/depot_tools/fetch_configs/syzygy.py +41 -0
  119. data/vendor/depot_tools/fetch_configs/v8.py +44 -0
  120. data/vendor/depot_tools/fetch_configs/webrtc.py +52 -0
  121. data/vendor/depot_tools/fetch_configs/webrtc_android.py +34 -0
  122. data/vendor/depot_tools/fetch_configs/webrtc_ios.py +34 -0
  123. data/vendor/depot_tools/fix_encoding.py +385 -0
  124. data/vendor/depot_tools/gclient +38 -0
  125. data/vendor/depot_tools/gclient-new-workdir.py +124 -0
  126. data/vendor/depot_tools/gclient.bat +32 -0
  127. data/vendor/depot_tools/gclient.py +3198 -0
  128. data/vendor/depot_tools/gclient_completion.sh +76 -0
  129. data/vendor/depot_tools/gclient_eval.py +891 -0
  130. data/vendor/depot_tools/gclient_paths.py +152 -0
  131. data/vendor/depot_tools/gclient_scm.py +1615 -0
  132. data/vendor/depot_tools/gclient_utils.py +1280 -0
  133. data/vendor/depot_tools/gerrit_client.py +151 -0
  134. data/vendor/depot_tools/gerrit_util.py +996 -0
  135. data/vendor/depot_tools/git-cache +6 -0
  136. data/vendor/depot_tools/git-cl +6 -0
  137. data/vendor/depot_tools/git-crrev-parse +53 -0
  138. data/vendor/depot_tools/git-drover +6 -0
  139. data/vendor/depot_tools/git-find-releases +6 -0
  140. data/vendor/depot_tools/git-footers +6 -0
  141. data/vendor/depot_tools/git-freeze +8 -0
  142. data/vendor/depot_tools/git-gs +9 -0
  143. data/vendor/depot_tools/git-hyper-blame +6 -0
  144. data/vendor/depot_tools/git-map +6 -0
  145. data/vendor/depot_tools/git-map-branches +6 -0
  146. data/vendor/depot_tools/git-mark-merge-base +6 -0
  147. data/vendor/depot_tools/git-nav-downstream +6 -0
  148. data/vendor/depot_tools/git-nav-upstream +6 -0
  149. data/vendor/depot_tools/git-new-branch +6 -0
  150. data/vendor/depot_tools/git-number +6 -0
  151. data/vendor/depot_tools/git-rebase-update +6 -0
  152. data/vendor/depot_tools/git-rename-branch +6 -0
  153. data/vendor/depot_tools/git-reparent-branch +6 -0
  154. data/vendor/depot_tools/git-retry +8 -0
  155. data/vendor/depot_tools/git-runhooks +23 -0
  156. data/vendor/depot_tools/git-squash-branch +6 -0
  157. data/vendor/depot_tools/git-templates/description +3 -0
  158. data/vendor/depot_tools/git-templates/hooks/applypatch-msg +4 -0
  159. data/vendor/depot_tools/git-templates/hooks/post-applypatch +4 -0
  160. data/vendor/depot_tools/git-templates/hooks/post-checkout +4 -0
  161. data/vendor/depot_tools/git-templates/hooks/post-commit +4 -0
  162. data/vendor/depot_tools/git-templates/hooks/post-merge +4 -0
  163. data/vendor/depot_tools/git-templates/hooks/post-update +4 -0
  164. data/vendor/depot_tools/git-templates/hooks/pre-applypatch +4 -0
  165. data/vendor/depot_tools/git-templates/hooks/pre-auto-gc +4 -0
  166. data/vendor/depot_tools/git-templates/hooks/pre-commit +4 -0
  167. data/vendor/depot_tools/git-templates/hooks/pre-rebase +4 -0
  168. data/vendor/depot_tools/git-templates/hooks/prepare-commit-msg +4 -0
  169. data/vendor/depot_tools/git-templates/info/exclude +6 -0
  170. data/vendor/depot_tools/git-thaw +13 -0
  171. data/vendor/depot_tools/git-upstream-diff +9 -0
  172. data/vendor/depot_tools/git_cache.py +786 -0
  173. data/vendor/depot_tools/git_cl.py +5158 -0
  174. data/vendor/depot_tools/git_cl_completion.sh +48 -0
  175. data/vendor/depot_tools/git_common.py +1101 -0
  176. data/vendor/depot_tools/git_dates.py +62 -0
  177. data/vendor/depot_tools/git_drover.py +469 -0
  178. data/vendor/depot_tools/git_find_releases.py +67 -0
  179. data/vendor/depot_tools/git_footers.py +261 -0
  180. data/vendor/depot_tools/git_freezer.py +40 -0
  181. data/vendor/depot_tools/git_hyper_blame.py +391 -0
  182. data/vendor/depot_tools/git_map.py +166 -0
  183. data/vendor/depot_tools/git_map_branches.py +354 -0
  184. data/vendor/depot_tools/git_mark_merge_base.py +73 -0
  185. data/vendor/depot_tools/git_nav_downstream.py +69 -0
  186. data/vendor/depot_tools/git_new_branch.py +82 -0
  187. data/vendor/depot_tools/git_number.py +301 -0
  188. data/vendor/depot_tools/git_rebase_update.py +351 -0
  189. data/vendor/depot_tools/git_rename_branch.py +55 -0
  190. data/vendor/depot_tools/git_reparent_branch.py +101 -0
  191. data/vendor/depot_tools/git_retry.py +181 -0
  192. data/vendor/depot_tools/git_squash_branch.py +28 -0
  193. data/vendor/depot_tools/git_upstream_diff.py +64 -0
  194. data/vendor/depot_tools/gn +8 -0
  195. data/vendor/depot_tools/gn.bat +12 -0
  196. data/vendor/depot_tools/gn.py +78 -0
  197. data/vendor/depot_tools/goma_auth +12 -0
  198. data/vendor/depot_tools/goma_auth.bat +8 -0
  199. data/vendor/depot_tools/goma_ctl +12 -0
  200. data/vendor/depot_tools/goma_ctl.bat +8 -0
  201. data/vendor/depot_tools/gsutil.py +190 -0
  202. data/vendor/depot_tools/gsutil.py.bat +23 -0
  203. data/vendor/depot_tools/gsutil.vpython +120 -0
  204. data/vendor/depot_tools/infra/README.md +1 -0
  205. data/vendor/depot_tools/infra/config/OWNERS +7 -0
  206. data/vendor/depot_tools/infra/config/README.md +1 -0
  207. data/vendor/depot_tools/infra/config/recipes.cfg +26 -0
  208. data/vendor/depot_tools/led +12 -0
  209. data/vendor/depot_tools/led.bat +7 -0
  210. data/vendor/depot_tools/lockfile.py +116 -0
  211. data/vendor/depot_tools/luci-auth +13 -0
  212. data/vendor/depot_tools/luci-auth.bat +8 -0
  213. data/vendor/depot_tools/lucicfg +12 -0
  214. data/vendor/depot_tools/lucicfg.bat +7 -0
  215. data/vendor/depot_tools/mac_toolchain +12 -0
  216. data/vendor/depot_tools/man/html/depot_tools.html +934 -0
  217. data/vendor/depot_tools/man/html/depot_tools_tutorial.html +1593 -0
  218. data/vendor/depot_tools/man/html/git-cl.html +1033 -0
  219. data/vendor/depot_tools/man/html/git-drover.html +1048 -0
  220. data/vendor/depot_tools/man/html/git-footers.html +878 -0
  221. data/vendor/depot_tools/man/html/git-freeze.html +859 -0
  222. data/vendor/depot_tools/man/html/git-hyper-blame.html +878 -0
  223. data/vendor/depot_tools/man/html/git-map-branches.html +904 -0
  224. data/vendor/depot_tools/man/html/git-map.html +887 -0
  225. data/vendor/depot_tools/man/html/git-mark-merge-base.html +826 -0
  226. data/vendor/depot_tools/man/html/git-nav-downstream.html +844 -0
  227. data/vendor/depot_tools/man/html/git-nav-upstream.html +853 -0
  228. data/vendor/depot_tools/man/html/git-new-branch.html +932 -0
  229. data/vendor/depot_tools/man/html/git-rebase-update.html +961 -0
  230. data/vendor/depot_tools/man/html/git-rename-branch.html +794 -0
  231. data/vendor/depot_tools/man/html/git-reparent-branch.html +847 -0
  232. data/vendor/depot_tools/man/html/git-retry.html +858 -0
  233. data/vendor/depot_tools/man/html/git-squash-branch.html +881 -0
  234. data/vendor/depot_tools/man/html/git-thaw.html +794 -0
  235. data/vendor/depot_tools/man/html/git-upstream-diff.html +923 -0
  236. data/vendor/depot_tools/man/man1/git-cl.1 +198 -0
  237. data/vendor/depot_tools/man/man1/git-drover.1 +330 -0
  238. data/vendor/depot_tools/man/man1/git-footers.1 +144 -0
  239. data/vendor/depot_tools/man/man1/git-freeze.1 +113 -0
  240. data/vendor/depot_tools/man/man1/git-hyper-blame.1 +128 -0
  241. data/vendor/depot_tools/man/man1/git-map-branches.1 +210 -0
  242. data/vendor/depot_tools/man/man1/git-map.1 +179 -0
  243. data/vendor/depot_tools/man/man1/git-mark-merge-base.1 +69 -0
  244. data/vendor/depot_tools/man/man1/git-nav-downstream.1 +112 -0
  245. data/vendor/depot_tools/man/man1/git-nav-upstream.1 +122 -0
  246. data/vendor/depot_tools/man/man1/git-new-branch.1 +176 -0
  247. data/vendor/depot_tools/man/man1/git-rebase-update.1 +177 -0
  248. data/vendor/depot_tools/man/man1/git-rename-branch.1 +53 -0
  249. data/vendor/depot_tools/man/man1/git-reparent-branch.1 +93 -0
  250. data/vendor/depot_tools/man/man1/git-retry.1 +108 -0
  251. data/vendor/depot_tools/man/man1/git-squash-branch.1 +129 -0
  252. data/vendor/depot_tools/man/man1/git-thaw.1 +54 -0
  253. data/vendor/depot_tools/man/man1/git-upstream-diff.1 +153 -0
  254. data/vendor/depot_tools/man/man7/depot_tools.7 +139 -0
  255. data/vendor/depot_tools/man/man7/depot_tools_tutorial.7 +1061 -0
  256. data/vendor/depot_tools/man/push_to_gs.sh +4 -0
  257. data/vendor/depot_tools/man/src/.gitignore +5 -0
  258. data/vendor/depot_tools/man/src/_aliases.txt +5 -0
  259. data/vendor/depot_tools/man/src/_footer.txt +8 -0
  260. data/vendor/depot_tools/man/src/_git-cl_desc.helper.txt +1 -0
  261. data/vendor/depot_tools/man/src/_git-drover_desc.helper.txt +2 -0
  262. data/vendor/depot_tools/man/src/_git-footers_desc.helper.txt +1 -0
  263. data/vendor/depot_tools/man/src/_git-freeze_desc.helper.txt +1 -0
  264. data/vendor/depot_tools/man/src/_git-hyper-blame_desc.helper.txt +1 -0
  265. data/vendor/depot_tools/man/src/_git-map-branches_desc.helper.txt +4 -0
  266. data/vendor/depot_tools/man/src/_git-map_desc.helper.txt +3 -0
  267. data/vendor/depot_tools/man/src/_git-mark-merge-base_desc.helper.txt +1 -0
  268. data/vendor/depot_tools/man/src/_git-nav-downstream_desc.helper.txt +1 -0
  269. data/vendor/depot_tools/man/src/_git-nav-upstream_desc.helper.txt +1 -0
  270. data/vendor/depot_tools/man/src/_git-new-branch_desc.helper.txt +1 -0
  271. data/vendor/depot_tools/man/src/_git-rebase-update_desc.helper.txt +1 -0
  272. data/vendor/depot_tools/man/src/_git-rename-branch_desc.helper.txt +1 -0
  273. data/vendor/depot_tools/man/src/_git-reparent-branch_desc.helper.txt +1 -0
  274. data/vendor/depot_tools/man/src/_git-retry_desc.helper.txt +2 -0
  275. data/vendor/depot_tools/man/src/_git-squash-branch_desc.helper.txt +1 -0
  276. data/vendor/depot_tools/man/src/_git-thaw_desc.helper.txt +2 -0
  277. data/vendor/depot_tools/man/src/_git-upstream-diff_desc.helper.txt +1 -0
  278. data/vendor/depot_tools/man/src/_helper_prefix.txt +1 -0
  279. data/vendor/depot_tools/man/src/asciidoc-override.css +7 -0
  280. data/vendor/depot_tools/man/src/common_demo_functions.sh +84 -0
  281. data/vendor/depot_tools/man/src/demo_repo.sh +43 -0
  282. data/vendor/depot_tools/man/src/depot_tools.txt +28 -0
  283. data/vendor/depot_tools/man/src/depot_tools_tutorial.demo.walkthrough.sh +155 -0
  284. data/vendor/depot_tools/man/src/depot_tools_tutorial.txt +432 -0
  285. data/vendor/depot_tools/man/src/filter_demo_output.py +141 -0
  286. data/vendor/depot_tools/man/src/git-cl.txt +119 -0
  287. data/vendor/depot_tools/man/src/git-drover.demo.1.sh +22 -0
  288. data/vendor/depot_tools/man/src/git-drover.demo.2.sh +23 -0
  289. data/vendor/depot_tools/man/src/git-drover.demo.3.sh +27 -0
  290. data/vendor/depot_tools/man/src/git-drover.demo.4.sh +39 -0
  291. data/vendor/depot_tools/man/src/git-drover.demo.common.sh +19 -0
  292. data/vendor/depot_tools/man/src/git-drover.txt +102 -0
  293. data/vendor/depot_tools/man/src/git-footers.demo.1.sh +17 -0
  294. data/vendor/depot_tools/man/src/git-footers.txt +71 -0
  295. data/vendor/depot_tools/man/src/git-freeze.demo.1.sh +23 -0
  296. data/vendor/depot_tools/man/src/git-freeze.txt +54 -0
  297. data/vendor/depot_tools/man/src/git-hyper-blame.demo.1.sh +3 -0
  298. data/vendor/depot_tools/man/src/git-hyper-blame.demo.2.sh +4 -0
  299. data/vendor/depot_tools/man/src/git-hyper-blame.demo.common.sh +57 -0
  300. data/vendor/depot_tools/man/src/git-hyper-blame.txt +85 -0
  301. data/vendor/depot_tools/man/src/git-map-branches.demo.1.sh +8 -0
  302. data/vendor/depot_tools/man/src/git-map-branches.txt +64 -0
  303. data/vendor/depot_tools/man/src/git-map.demo.1.sh +3 -0
  304. data/vendor/depot_tools/man/src/git-map.txt +67 -0
  305. data/vendor/depot_tools/man/src/git-mark-merge-base.txt +46 -0
  306. data/vendor/depot_tools/man/src/git-nav-downstream.demo.1.sh +12 -0
  307. data/vendor/depot_tools/man/src/git-nav-downstream.txt +40 -0
  308. data/vendor/depot_tools/man/src/git-nav-upstream.demo.1.sh +12 -0
  309. data/vendor/depot_tools/man/src/git-nav-upstream.txt +39 -0
  310. data/vendor/depot_tools/man/src/git-new-branch.demo.1.sh +17 -0
  311. data/vendor/depot_tools/man/src/git-new-branch.txt +82 -0
  312. data/vendor/depot_tools/man/src/git-rebase-update.txt +141 -0
  313. data/vendor/depot_tools/man/src/git-rename-branch.txt +28 -0
  314. data/vendor/depot_tools/man/src/git-reparent-branch.txt +61 -0
  315. data/vendor/depot_tools/man/src/git-retry.txt +67 -0
  316. data/vendor/depot_tools/man/src/git-squash-branch.demo.1.sh +12 -0
  317. data/vendor/depot_tools/man/src/git-squash-branch.txt +59 -0
  318. data/vendor/depot_tools/man/src/git-thaw.txt +29 -0
  319. data/vendor/depot_tools/man/src/git-upstream-diff.txt +107 -0
  320. data/vendor/depot_tools/man/src/make_docs.sh +260 -0
  321. data/vendor/depot_tools/man/src/prep_demo_repo.sh +103 -0
  322. data/vendor/depot_tools/metrics.README.md +101 -0
  323. data/vendor/depot_tools/metrics.py +297 -0
  324. data/vendor/depot_tools/metrics_utils.py +293 -0
  325. data/vendor/depot_tools/my_activity.py +971 -0
  326. data/vendor/depot_tools/ninja +44 -0
  327. data/vendor/depot_tools/ninja-linux32 +0 -0
  328. data/vendor/depot_tools/ninja-linux64 +0 -0
  329. data/vendor/depot_tools/ninja-mac +0 -0
  330. data/vendor/depot_tools/ninja.exe +0 -0
  331. data/vendor/depot_tools/ninjalog.README.md +64 -0
  332. data/vendor/depot_tools/ninjalog_uploader.py +233 -0
  333. data/vendor/depot_tools/ninjalog_uploader_wrapper.py +125 -0
  334. data/vendor/depot_tools/owners.py +641 -0
  335. data/vendor/depot_tools/owners_finder.py +385 -0
  336. data/vendor/depot_tools/post_build_ninja_summary.py +350 -0
  337. data/vendor/depot_tools/presubmit_canned_checks.py +1655 -0
  338. data/vendor/depot_tools/presubmit_support.py +1923 -0
  339. data/vendor/depot_tools/profile.xml +8 -0
  340. data/vendor/depot_tools/prpc +13 -0
  341. data/vendor/depot_tools/prpc.bat +8 -0
  342. data/vendor/depot_tools/pylint +9 -0
  343. data/vendor/depot_tools/pylint-1.5 +78 -0
  344. data/vendor/depot_tools/pylint-1.6 +78 -0
  345. data/vendor/depot_tools/pylint-1.7 +78 -0
  346. data/vendor/depot_tools/pylint-1.8 +78 -0
  347. data/vendor/depot_tools/pylint-1.9 +78 -0
  348. data/vendor/depot_tools/pylint.bat +12 -0
  349. data/vendor/depot_tools/pylint_main.py +45 -0
  350. data/vendor/depot_tools/pylintrc +349 -0
  351. data/vendor/depot_tools/python-bin/python3 +7 -0
  352. data/vendor/depot_tools/python_runner.sh +60 -0
  353. data/vendor/depot_tools/rdb +12 -0
  354. data/vendor/depot_tools/rdb.bat +7 -0
  355. data/vendor/depot_tools/recipes/OWNERS +4 -0
  356. data/vendor/depot_tools/recipes/README.recipes.md +1079 -0
  357. data/vendor/depot_tools/recipes/recipe_modules/OWNERS +1 -0
  358. data/vendor/depot_tools/recipes/recipe_modules/bot_update/OWNERS +2 -0
  359. data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +38 -0
  360. data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +516 -0
  361. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +117 -0
  362. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +117 -0
  363. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +118 -0
  364. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +211 -0
  365. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +194 -0
  366. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +211 -0
  367. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +211 -0
  368. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/input_commit_with_id_without_repo.json +210 -0
  369. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/multiple_patch_refs.json +214 -0
  370. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +265 -0
  371. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_HEAD.json +65 -0
  372. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_branch_head.json +65 -0
  373. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_specific_commit.json +65 -0
  374. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_master.json +65 -0
  375. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/refs.json +212 -0
  376. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +210 -0
  377. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/resolve_chromium_fixed_version.json +117 -0
  378. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail.json +95 -0
  379. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +209 -0
  380. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +193 -0
  381. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +265 -0
  382. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +261 -0
  383. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +261 -0
  384. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +265 -0
  385. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +265 -0
  386. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +265 -0
  387. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +265 -0
  388. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/unrecognized_commit_repo.json +8 -0
  389. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_tags.json +211 -0
  390. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +308 -0
  391. data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/__init__.py +0 -0
  392. data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +1258 -0
  393. data/vendor/depot_tools/recipes/recipe_modules/bot_update/test_api.py +93 -0
  394. data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/do_not_retry_patch_failures_in_cq.py +42 -0
  395. data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/ensure_checkout.py +35 -0
  396. data/vendor/depot_tools/recipes/recipe_modules/cipd/__init__.py +9 -0
  397. data/vendor/depot_tools/recipes/recipe_modules/cipd/api.py +455 -0
  398. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic.json +403 -0
  399. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic_pkg.json +403 -0
  400. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-failed.json +82 -0
  401. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-many-instances.json +411 -0
  402. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/mac64.json +403 -0
  403. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_file.json +315 -0
  404. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_mode.json +313 -0
  405. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_verfile.json +313 -0
  406. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/win64.json +403 -0
  407. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.py +187 -0
  408. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk arch.json +5 -0
  409. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk bits.json +5 -0
  410. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_32.json +12 -0
  411. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_64.json +12 -0
  412. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_32.json +12 -0
  413. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_64.json +12 -0
  414. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_mips_64.json +12 -0
  415. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/mac_intel_64.json +12 -0
  416. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_32.json +12 -0
  417. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_64.json +12 -0
  418. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.py +59 -0
  419. data/vendor/depot_tools/recipes/recipe_modules/cipd/test_api.py +93 -0
  420. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/__init__.py +9 -0
  421. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +75 -0
  422. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +83 -0
  423. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +83 -0
  424. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +83 -0
  425. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.py +55 -0
  426. data/vendor/depot_tools/recipes/recipe_modules/gclient/__init__.py +13 -0
  427. data/vendor/depot_tools/recipes/recipe_modules/gclient/api.py +428 -0
  428. data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +462 -0
  429. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/basic.json +238 -0
  430. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/revision.json +240 -0
  431. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/tryserver.json +238 -0
  432. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.py +95 -0
  433. data/vendor/depot_tools/recipes/recipe_modules/gclient/resources/diff_deps.py +16 -0
  434. data/vendor/depot_tools/recipes/recipe_modules/gclient/test_api.py +36 -0
  435. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/basic.json +55 -0
  436. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/dont have revision yet.json +84 -0
  437. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/no change, exception.json +83 -0
  438. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/windows.json +55 -0
  439. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.py +88 -0
  440. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/patch_project.py +92 -0
  441. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/sync_failure.py +24 -0
  442. data/vendor/depot_tools/recipes/recipe_modules/gerrit/__init__.py +8 -0
  443. data/vendor/depot_tools/recipes/recipe_modules/gerrit/api.py +178 -0
  444. data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.expected/basic.json +284 -0
  445. data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.py +73 -0
  446. data/vendor/depot_tools/recipes/recipe_modules/gerrit/test_api.py +53 -0
  447. data/vendor/depot_tools/recipes/recipe_modules/git/__init__.py +11 -0
  448. data/vendor/depot_tools/recipes/recipe_modules/git/api.py +405 -0
  449. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic.json +217 -0
  450. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_branch.json +217 -0
  451. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_file_name.json +219 -0
  452. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_hash.json +216 -0
  453. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_ref.json +217 -0
  454. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_submodule_update_force.json +218 -0
  455. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_tags.json +218 -0
  456. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/can_fail_build.json +164 -0
  457. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cannot_fail_build.json +220 -0
  458. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cat-file_test.json +239 -0
  459. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_delta.json +290 -0
  460. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_failed.json +220 -0
  461. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output.json +222 -0
  462. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output_fails_build.json +111 -0
  463. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/curl_trace_file.json +218 -0
  464. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/git-cache-checkout.json +265 -0
  465. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/platform_win.json +217 -0
  466. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/rebase_failed.json +221 -0
  467. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/remote_not_origin.json +219 -0
  468. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/set_got_revision.json +218 -0
  469. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.py +170 -0
  470. data/vendor/depot_tools/recipes/recipe_modules/git/resources/git_setup.py +52 -0
  471. data/vendor/depot_tools/recipes/recipe_modules/git/test_api.py +18 -0
  472. data/vendor/depot_tools/recipes/recipe_modules/git_cl/__init__.py +5 -0
  473. data/vendor/depot_tools/recipes/recipe_modules/git_cl/api.py +50 -0
  474. data/vendor/depot_tools/recipes/recipe_modules/git_cl/config.py +22 -0
  475. data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.expected/basic.json +105 -0
  476. data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.py +47 -0
  477. data/vendor/depot_tools/recipes/recipe_modules/gitiles/OWNERS +2 -0
  478. data/vendor/depot_tools/recipes/recipe_modules/gitiles/__init__.py +12 -0
  479. data/vendor/depot_tools/recipes/recipe_modules/gitiles/api.py +257 -0
  480. data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.expected/basic.json +596 -0
  481. data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.py +93 -0
  482. data/vendor/depot_tools/recipes/recipe_modules/gitiles/resources/gerrit_client.py +251 -0
  483. data/vendor/depot_tools/recipes/recipe_modules/gitiles/test_api.py +95 -0
  484. data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.expected/basic.json +5 -0
  485. data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.py +49 -0
  486. data/vendor/depot_tools/recipes/recipe_modules/gsutil/__init__.py +4 -0
  487. data/vendor/depot_tools/recipes/recipe_modules/gsutil/api.py +222 -0
  488. data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.expected/basic.json +247 -0
  489. data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.py +92 -0
  490. data/vendor/depot_tools/recipes/recipe_modules/gsutil/resources/gsutil_smart_retry.py +69 -0
  491. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/__init__.py +36 -0
  492. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/api.py +140 -0
  493. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/ancient_version.json +83 -0
  494. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/automatic_version.json +83 -0
  495. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/explicit_version.json +83 -0
  496. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/linux.json +21 -0
  497. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/mac.json +83 -0
  498. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/win.json +21 -0
  499. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.py +42 -0
  500. data/vendor/depot_tools/recipes/recipe_modules/presubmit/__init__.py +27 -0
  501. data/vendor/depot_tools/recipes/recipe_modules/presubmit/api.py +251 -0
  502. data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.expected/basic.json +27 -0
  503. data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.py +19 -0
  504. data/vendor/depot_tools/recipes/recipe_modules/presubmit/properties.proto +14 -0
  505. data/vendor/depot_tools/recipes/recipe_modules/presubmit/test_api.py +19 -0
  506. data/vendor/depot_tools/recipes/recipe_modules/presubmit/tests/execute.py +247 -0
  507. data/vendor/depot_tools/recipes/recipe_modules/presubmit/tests/prepare.py +49 -0
  508. data/vendor/depot_tools/recipes/recipe_modules/tryserver/__init__.py +18 -0
  509. data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +264 -0
  510. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/basic_tags.json +57 -0
  511. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch.json +190 -0
  512. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch_and_target_ref.json +190 -0
  513. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +21 -0
  514. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +22 -0
  515. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.py +95 -0
  516. data/vendor/depot_tools/recipes/recipe_modules/tryserver/test_api.py +14 -0
  517. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_fetch_ref_timeout.py +29 -0
  518. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_owner.expected/basic.json +5 -0
  519. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_owner.py +22 -0
  520. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_target_ref.py +32 -0
  521. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/__init__.py +25 -0
  522. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/api.py +137 -0
  523. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/linux.json +21 -0
  524. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/mac.json +21 -0
  525. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/win.json +108 -0
  526. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.py +21 -0
  527. data/vendor/depot_tools/recipes/recipes.py +249 -0
  528. data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +175 -0
  529. data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.py +56 -0
  530. data/vendor/depot_tools/recipes/trigger_recipe_roller.txt +13 -0
  531. data/vendor/depot_tools/repo +1194 -0
  532. data/vendor/depot_tools/roll-dep +21 -0
  533. data/vendor/depot_tools/roll-dep.bat +21 -0
  534. data/vendor/depot_tools/roll_dep.py +282 -0
  535. data/vendor/depot_tools/scm.py +415 -0
  536. data/vendor/depot_tools/setup_color.py +130 -0
  537. data/vendor/depot_tools/split_cl.py +263 -0
  538. data/vendor/depot_tools/subcommand.py +261 -0
  539. data/vendor/depot_tools/subprocess2.py +258 -0
  540. data/vendor/depot_tools/third_party/__init__.py +5 -0
  541. data/vendor/depot_tools/third_party/colorama/LICENSE.txt +27 -0
  542. data/vendor/depot_tools/third_party/colorama/README.chromium +12 -0
  543. data/vendor/depot_tools/third_party/colorama/README.rst +346 -0
  544. data/vendor/depot_tools/third_party/colorama/__init__.py +6 -0
  545. data/vendor/depot_tools/third_party/colorama/ansi.py +102 -0
  546. data/vendor/depot_tools/third_party/colorama/ansitowin32.py +257 -0
  547. data/vendor/depot_tools/third_party/colorama/initialise.py +80 -0
  548. data/vendor/depot_tools/third_party/colorama/win32.py +152 -0
  549. data/vendor/depot_tools/third_party/colorama/winterm.py +169 -0
  550. data/vendor/depot_tools/third_party/coverage/AUTHORS.txt +43 -0
  551. data/vendor/depot_tools/third_party/coverage/PKG-INFO +41 -0
  552. data/vendor/depot_tools/third_party/coverage/README.chromium +13 -0
  553. data/vendor/depot_tools/third_party/coverage/__init__.py +120 -0
  554. data/vendor/depot_tools/third_party/coverage/__main__.py +4 -0
  555. data/vendor/depot_tools/third_party/coverage/annotate.py +101 -0
  556. data/vendor/depot_tools/third_party/coverage/backward.py +184 -0
  557. data/vendor/depot_tools/third_party/coverage/bytecode.py +75 -0
  558. data/vendor/depot_tools/third_party/coverage/cmdline.py +740 -0
  559. data/vendor/depot_tools/third_party/coverage/codeunit.py +145 -0
  560. data/vendor/depot_tools/third_party/coverage/collector.py +353 -0
  561. data/vendor/depot_tools/third_party/coverage/config.py +213 -0
  562. data/vendor/depot_tools/third_party/coverage/control.py +776 -0
  563. data/vendor/depot_tools/third_party/coverage/data.py +278 -0
  564. data/vendor/depot_tools/third_party/coverage/debug.py +54 -0
  565. data/vendor/depot_tools/third_party/coverage/execfile.py +171 -0
  566. data/vendor/depot_tools/third_party/coverage/files.py +309 -0
  567. data/vendor/depot_tools/third_party/coverage/fullcoverage/encodings.py +57 -0
  568. data/vendor/depot_tools/third_party/coverage/html.py +387 -0
  569. data/vendor/depot_tools/third_party/coverage/htmlfiles/coverage_html.js +376 -0
  570. data/vendor/depot_tools/third_party/coverage/htmlfiles/index.html +104 -0
  571. data/vendor/depot_tools/third_party/coverage/htmlfiles/jquery-1.4.3.min.js +166 -0
  572. data/vendor/depot_tools/third_party/coverage/htmlfiles/jquery.hotkeys.js +99 -0
  573. data/vendor/depot_tools/third_party/coverage/htmlfiles/jquery.isonscreen.js +53 -0
  574. data/vendor/depot_tools/third_party/coverage/htmlfiles/jquery.min.js +166 -0
  575. data/vendor/depot_tools/third_party/coverage/htmlfiles/jquery.tablesorter.min.js +2 -0
  576. data/vendor/depot_tools/third_party/coverage/htmlfiles/keybd_closed.png +0 -0
  577. data/vendor/depot_tools/third_party/coverage/htmlfiles/keybd_open.png +0 -0
  578. data/vendor/depot_tools/third_party/coverage/htmlfiles/pyfile.html +90 -0
  579. data/vendor/depot_tools/third_party/coverage/htmlfiles/style.css +300 -0
  580. data/vendor/depot_tools/third_party/coverage/misc.py +163 -0
  581. data/vendor/depot_tools/third_party/coverage/parser.py +666 -0
  582. data/vendor/depot_tools/third_party/coverage/phystokens.py +208 -0
  583. data/vendor/depot_tools/third_party/coverage/report.py +92 -0
  584. data/vendor/depot_tools/third_party/coverage/results.py +286 -0
  585. data/vendor/depot_tools/third_party/coverage/summary.py +86 -0
  586. data/vendor/depot_tools/third_party/coverage/templite.py +166 -0
  587. data/vendor/depot_tools/third_party/coverage/version.py +9 -0
  588. data/vendor/depot_tools/third_party/coverage/xmlreport.py +155 -0
  589. data/vendor/depot_tools/third_party/httplib2/LICENSE +1339 -0
  590. data/vendor/depot_tools/third_party/httplib2/README.chromium +15 -0
  591. data/vendor/depot_tools/third_party/httplib2/__init__.py +1780 -0
  592. data/vendor/depot_tools/third_party/httplib2/cacerts.txt +2196 -0
  593. data/vendor/depot_tools/third_party/httplib2/iri2uri.py +110 -0
  594. data/vendor/depot_tools/third_party/httplib2/socks.py +448 -0
  595. data/vendor/depot_tools/third_party/repo/COPYING +202 -0
  596. data/vendor/depot_tools/third_party/repo/README.chromium +4 -0
  597. data/vendor/depot_tools/third_party/repo/__init__.py +0 -0
  598. data/vendor/depot_tools/third_party/repo/progress.py +117 -0
  599. data/vendor/depot_tools/third_party/retry_decorator/LICENSE.google +30 -0
  600. data/vendor/depot_tools/third_party/retry_decorator/__init__.py +0 -0
  601. data/vendor/depot_tools/third_party/retry_decorator/decorators.py +45 -0
  602. data/vendor/depot_tools/third_party/schema/.editorconfig +15 -0
  603. data/vendor/depot_tools/third_party/schema/.gitignore +174 -0
  604. data/vendor/depot_tools/third_party/schema/.travis.yml +37 -0
  605. data/vendor/depot_tools/third_party/schema/LICENSE-MIT +19 -0
  606. data/vendor/depot_tools/third_party/schema/MANIFEST.in +1 -0
  607. data/vendor/depot_tools/third_party/schema/README.chromium +12 -0
  608. data/vendor/depot_tools/third_party/schema/README.rst +382 -0
  609. data/vendor/depot_tools/third_party/schema/__init__.py +1 -0
  610. data/vendor/depot_tools/third_party/schema/schema.py +338 -0
  611. data/vendor/depot_tools/third_party/schema/setup.cfg +5 -0
  612. data/vendor/depot_tools/third_party/schema/setup.py +30 -0
  613. data/vendor/depot_tools/third_party/schema/test_schema.py +556 -0
  614. data/vendor/depot_tools/third_party/schema/tox.ini +33 -0
  615. data/vendor/depot_tools/third_party/six/LICENSE.txt +18 -0
  616. data/vendor/depot_tools/third_party/six/README.chromium +10 -0
  617. data/vendor/depot_tools/third_party/six/__init__.py +762 -0
  618. data/vendor/depot_tools/update_depot_tools +138 -0
  619. data/vendor/depot_tools/update_depot_tools.bat +65 -0
  620. data/vendor/depot_tools/update_depot_tools_toggle.py +38 -0
  621. data/vendor/depot_tools/upload_metrics.py +26 -0
  622. data/vendor/depot_tools/upload_to_google_storage.py +306 -0
  623. data/vendor/depot_tools/vpython +42 -0
  624. data/vendor/depot_tools/vpython.bat +7 -0
  625. data/vendor/depot_tools/vpython3 +55 -0
  626. data/vendor/depot_tools/vpython3.bat +12 -0
  627. data/vendor/depot_tools/watchlists.py +141 -0
  628. data/vendor/depot_tools/weekly +54 -0
  629. data/vendor/depot_tools/win32imports.py +61 -0
  630. data/vendor/depot_tools/win_toolchain/OWNERS +2 -0
  631. data/vendor/depot_tools/win_toolchain/README.md +74 -0
  632. data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +599 -0
  633. data/vendor/depot_tools/win_toolchain/package_from_installed.py +524 -0
  634. data/vendor/depot_tools/wtf +81 -0
  635. data/vendor/depot_tools/yapf +21 -0
  636. data/vendor/depot_tools/yapf.bat +12 -0
  637. data/vendor/depot_tools/zsh-goodies/README +6 -0
  638. data/vendor/depot_tools/zsh-goodies/_gclient +14 -0
  639. metadata +729 -0
@@ -0,0 +1,385 @@
1
+ # Copyright 2013 The Chromium Authors. All rights reserved.
2
+ # Use of this source code is governed by a BSD-style license that can be
3
+ # found in the LICENSE file.
4
+
5
+ """Interactive tool for finding reviewers/owners for a change."""
6
+
7
+ from __future__ import print_function
8
+
9
+ import os
10
+ import copy
11
+ import owners as owners_module
12
+ import random
13
+
14
+
15
+ import gclient_utils
16
+
17
+
18
+ def first(iterable):
19
+ for element in iterable:
20
+ return element
21
+
22
+
23
+ class OwnersFinder(object):
24
+ COLOR_LINK = '\033[4m'
25
+ COLOR_BOLD = '\033[1;32m'
26
+ COLOR_GREY = '\033[0;37m'
27
+ COLOR_RESET = '\033[0m'
28
+
29
+ indentation = 0
30
+
31
+ def __init__(self, files, local_root, author, reviewers,
32
+ fopen, os_path,
33
+ email_postfix='@chromium.org',
34
+ disable_color=False,
35
+ override_files=None,
36
+ ignore_author=False):
37
+ self.email_postfix = email_postfix
38
+
39
+ if os.name == 'nt' or disable_color:
40
+ self.COLOR_LINK = ''
41
+ self.COLOR_BOLD = ''
42
+ self.COLOR_GREY = ''
43
+ self.COLOR_RESET = ''
44
+
45
+ self.db = owners_module.Database(local_root, fopen, os_path)
46
+ self.db.override_files = override_files or {}
47
+ self.db.load_data_needed_for(files)
48
+
49
+ self.os_path = os_path
50
+
51
+ self.author = author
52
+
53
+ filtered_files = files
54
+
55
+ reviewers = list(reviewers)
56
+ if author and not ignore_author:
57
+ reviewers.append(author)
58
+
59
+ # Eliminate files that existing reviewers can review.
60
+ filtered_files = list(self.db.files_not_covered_by(
61
+ filtered_files, reviewers))
62
+
63
+ # If some files are eliminated.
64
+ if len(filtered_files) != len(files):
65
+ files = filtered_files
66
+ # Reload the database.
67
+ self.db = owners_module.Database(local_root, fopen, os_path)
68
+ self.db.override_files = override_files or {}
69
+ self.db.load_data_needed_for(files)
70
+
71
+ self.all_possible_owners = self.db.all_possible_owners(files, None)
72
+ if author and author in self.all_possible_owners:
73
+ del self.all_possible_owners[author]
74
+
75
+ self.owners_to_files = {}
76
+ self._map_owners_to_files(files)
77
+
78
+ self.files_to_owners = {}
79
+ self._map_files_to_owners()
80
+
81
+ self.owners_score = self.db.total_costs_by_owner(
82
+ self.all_possible_owners, files)
83
+
84
+ self.original_files_to_owners = copy.deepcopy(self.files_to_owners)
85
+ self.comments = self.db.comments
86
+
87
+ # This is the queue that will be shown in the interactive questions.
88
+ # It is initially sorted by the score in descending order. In the
89
+ # interactive questions a user can choose to "defer" its decision, then the
90
+ # owner will be put to the end of the queue and shown later.
91
+ self.owners_queue = []
92
+
93
+ self.unreviewed_files = set()
94
+ self.reviewed_by = {}
95
+ self.selected_owners = set()
96
+ self.deselected_owners = set()
97
+ self.reset()
98
+
99
+ def run(self):
100
+ self.reset()
101
+ while self.owners_queue and self.unreviewed_files:
102
+ owner = self.owners_queue[0]
103
+
104
+ if (owner in self.selected_owners) or (owner in self.deselected_owners):
105
+ continue
106
+
107
+ if not any((file_name in self.unreviewed_files)
108
+ for file_name in self.owners_to_files[owner]):
109
+ self.deselect_owner(owner)
110
+ continue
111
+
112
+ self.print_info(owner)
113
+
114
+ while True:
115
+ inp = self.input_command(owner)
116
+ if inp == 'y' or inp == 'yes':
117
+ self.select_owner(owner)
118
+ break
119
+ elif inp == 'n' or inp == 'no':
120
+ self.deselect_owner(owner)
121
+ break
122
+ elif inp == '' or inp == 'd' or inp == 'defer':
123
+ self.owners_queue.append(self.owners_queue.pop(0))
124
+ break
125
+ elif inp == 'f' or inp == 'files':
126
+ self.list_files()
127
+ break
128
+ elif inp == 'o' or inp == 'owners':
129
+ self.list_owners(self.owners_queue)
130
+ break
131
+ elif inp == 'p' or inp == 'pick':
132
+ self.pick_owner(gclient_utils.AskForData('Pick an owner: '))
133
+ break
134
+ elif inp.startswith('p ') or inp.startswith('pick '):
135
+ self.pick_owner(inp.split(' ', 2)[1].strip())
136
+ break
137
+ elif inp == 'r' or inp == 'restart':
138
+ self.reset()
139
+ break
140
+ elif inp == 'q' or inp == 'quit':
141
+ # Exit with error
142
+ return 1
143
+
144
+ self.print_result()
145
+ return 0
146
+
147
+ def _map_owners_to_files(self, files):
148
+ for owner in self.all_possible_owners:
149
+ for dir_name, _ in self.all_possible_owners[owner]:
150
+ for file_name in files:
151
+ if file_name.startswith(dir_name):
152
+ self.owners_to_files.setdefault(owner, set())
153
+ self.owners_to_files[owner].add(file_name)
154
+
155
+ def _map_files_to_owners(self):
156
+ for owner in self.owners_to_files:
157
+ for file_name in self.owners_to_files[owner]:
158
+ self.files_to_owners.setdefault(file_name, set())
159
+ self.files_to_owners[file_name].add(owner)
160
+
161
+ def reset(self):
162
+ self.files_to_owners = copy.deepcopy(self.original_files_to_owners)
163
+ self.unreviewed_files = set(self.files_to_owners.keys())
164
+ self.reviewed_by = {}
165
+ self.selected_owners = set()
166
+ self.deselected_owners = set()
167
+
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])
174
+ self.find_mandatory_owners()
175
+
176
+ def select_owner(self, owner, findMandatoryOwners=True):
177
+ if owner in self.selected_owners or owner in self.deselected_owners\
178
+ or not (owner in self.owners_queue):
179
+ return
180
+ self.writeln('Selected: ' + owner)
181
+ self.owners_queue.remove(owner)
182
+ self.selected_owners.add(owner)
183
+ for file_name in filter(
184
+ lambda file_name: file_name in self.unreviewed_files,
185
+ self.owners_to_files[owner]):
186
+ self.unreviewed_files.remove(file_name)
187
+ self.reviewed_by[file_name] = owner
188
+ if findMandatoryOwners:
189
+ self.find_mandatory_owners()
190
+
191
+ def deselect_owner(self, owner, findMandatoryOwners=True):
192
+ if owner in self.selected_owners or owner in self.deselected_owners\
193
+ or not (owner in self.owners_queue):
194
+ return
195
+ self.writeln('Deselected: ' + owner)
196
+ self.owners_queue.remove(owner)
197
+ self.deselected_owners.add(owner)
198
+ for file_name in self.owners_to_files[owner] & self.unreviewed_files:
199
+ self.files_to_owners[file_name].remove(owner)
200
+ if findMandatoryOwners:
201
+ self.find_mandatory_owners()
202
+
203
+ def find_mandatory_owners(self):
204
+ continues = True
205
+ for owner in self.owners_queue:
206
+ if owner in self.selected_owners:
207
+ continue
208
+ if owner in self.deselected_owners:
209
+ continue
210
+ if len(self.owners_to_files[owner] & self.unreviewed_files) == 0:
211
+ self.deselect_owner(owner, False)
212
+
213
+ while continues:
214
+ continues = False
215
+ for file_name in filter(
216
+ lambda file_name: len(self.files_to_owners[file_name]) == 1,
217
+ self.unreviewed_files):
218
+ owner = first(self.files_to_owners[file_name])
219
+ self.select_owner(owner, False)
220
+ continues = True
221
+ break
222
+
223
+ def print_comments(self, owner):
224
+ if owner not in self.comments:
225
+ self.writeln(self.bold_name(owner))
226
+ else:
227
+ self.writeln(self.bold_name(owner) + ' is commented as:')
228
+ self.indent()
229
+ if owners_module.GLOBAL_STATUS in self.comments[owner]:
230
+ self.writeln(
231
+ self.greyed(self.comments[owner][owners_module.GLOBAL_STATUS]) +
232
+ ' (global status)')
233
+ if len(self.comments[owner]) == 1:
234
+ self.unindent()
235
+ return
236
+ for path in self.comments[owner]:
237
+ if path == owners_module.GLOBAL_STATUS:
238
+ continue
239
+ elif len(self.comments[owner][path]) > 0:
240
+ self.writeln(self.greyed(self.comments[owner][path]) +
241
+ ' (at ' + self.bold(path or '<root>') + ')')
242
+ else:
243
+ self.writeln(self.greyed('[No comment] ') + ' (at ' +
244
+ self.bold(path or '<root>') + ')')
245
+ self.unindent()
246
+
247
+ def print_file_info(self, file_name, except_owner=''):
248
+ if file_name not in self.unreviewed_files:
249
+ self.writeln(self.greyed(file_name +
250
+ ' (by ' +
251
+ self.bold_name(self.reviewed_by[file_name]) +
252
+ ')'))
253
+ else:
254
+ if len(self.files_to_owners[file_name]) <= 3:
255
+ other_owners = []
256
+ for ow in self.files_to_owners[file_name]:
257
+ if ow != except_owner:
258
+ other_owners.append(self.bold_name(ow))
259
+ self.writeln(file_name +
260
+ ' [' + (', '.join(other_owners)) + ']')
261
+ else:
262
+ self.writeln(file_name + ' [' +
263
+ self.bold(str(len(self.files_to_owners[file_name]))) +
264
+ ']')
265
+
266
+ def print_file_info_detailed(self, file_name):
267
+ self.writeln(file_name)
268
+ self.indent()
269
+ for ow in sorted(self.files_to_owners[file_name]):
270
+ if ow in self.deselected_owners:
271
+ self.writeln(self.bold_name(self.greyed(ow)))
272
+ elif ow in self.selected_owners:
273
+ self.writeln(self.bold_name(self.greyed(ow)))
274
+ else:
275
+ self.writeln(self.bold_name(ow))
276
+ self.unindent()
277
+
278
+ def print_owned_files_for(self, owner):
279
+ # Print owned files
280
+ self.print_comments(owner)
281
+ self.writeln(self.bold_name(owner) + ' owns ' +
282
+ str(len(self.owners_to_files[owner])) + ' file(s):')
283
+ self.indent()
284
+ for file_name in sorted(self.owners_to_files[owner]):
285
+ self.print_file_info(file_name, owner)
286
+ self.unindent()
287
+ self.writeln()
288
+
289
+ def list_owners(self, owners_queue):
290
+ if (len(self.owners_to_files) - len(self.deselected_owners) -
291
+ len(self.selected_owners)) > 3:
292
+ for ow in owners_queue:
293
+ if ow not in self.deselected_owners and ow not in self.selected_owners:
294
+ self.print_comments(ow)
295
+ else:
296
+ for ow in owners_queue:
297
+ if ow not in self.deselected_owners and ow not in self.selected_owners:
298
+ self.writeln()
299
+ self.print_owned_files_for(ow)
300
+
301
+ def list_files(self):
302
+ self.indent()
303
+ if len(self.unreviewed_files) > 5:
304
+ for file_name in sorted(self.unreviewed_files):
305
+ self.print_file_info(file_name)
306
+ else:
307
+ for file_name in self.unreviewed_files:
308
+ self.print_file_info_detailed(file_name)
309
+ self.unindent()
310
+
311
+ def pick_owner(self, ow):
312
+ # Allowing to omit domain suffixes
313
+ if ow not in self.owners_to_files:
314
+ if ow + self.email_postfix in self.owners_to_files:
315
+ ow += self.email_postfix
316
+
317
+ if ow not in self.owners_to_files:
318
+ self.writeln('You cannot pick ' + self.bold_name(ow) + ' manually. ' +
319
+ 'It\'s an invalid name or not related to the change list.')
320
+ return False
321
+ elif ow in self.selected_owners:
322
+ self.writeln('You cannot pick ' + self.bold_name(ow) + ' manually. ' +
323
+ 'It\'s already selected.')
324
+ return False
325
+ elif ow in self.deselected_owners:
326
+ self.writeln('You cannot pick ' + self.bold_name(ow) + ' manually.' +
327
+ 'It\'s already unselected.')
328
+ return False
329
+
330
+ self.select_owner(ow)
331
+ return True
332
+
333
+ def print_result(self):
334
+ # Print results
335
+ self.writeln()
336
+ self.writeln()
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()
350
+
351
+ def bold(self, text):
352
+ return self.COLOR_BOLD + text + self.COLOR_RESET
353
+
354
+ def bold_name(self, name):
355
+ return (self.COLOR_BOLD +
356
+ name.replace(self.email_postfix, '') + self.COLOR_RESET)
357
+
358
+ def greyed(self, text):
359
+ return self.COLOR_GREY + text + self.COLOR_RESET
360
+
361
+ def indent(self):
362
+ self.indentation += 1
363
+
364
+ def unindent(self):
365
+ self.indentation -= 1
366
+
367
+ def print_indent(self):
368
+ return ' ' * self.indentation
369
+
370
+ def writeln(self, text=''):
371
+ print(self.print_indent() + text)
372
+
373
+ def hr(self):
374
+ self.writeln('=====================')
375
+
376
+ def print_info(self, owner):
377
+ self.hr()
378
+ self.writeln(
379
+ self.bold(str(len(self.unreviewed_files))) + ' file(s) left.')
380
+ self.print_owned_files_for(owner)
381
+
382
+ def input_command(self, owner):
383
+ self.writeln('Add ' + self.bold_name(owner) + ' as your reviewer? ')
384
+ return gclient_utils.AskForData(
385
+ '[yes/no/Defer/pick/files/owners/quit/restart]: ').lower()
@@ -0,0 +1,350 @@
1
+ #!/usr/bin/env vpython
2
+ # Copyright (c) 2018 The Chromium Authors. All rights reserved.
3
+ # Use of this source code is governed by a BSD-style license that can be
4
+ # found in the LICENSE file.
5
+
6
+ """Summarize the last ninja build, invoked with ninja's -C syntax.
7
+
8
+ This script is designed to be automatically run after each ninja build in
9
+ order to summarize the build's performance. Making build performance information
10
+ more visible should make it easier to notice anomalies and opportunities. To use
11
+ this script on Windows just set NINJA_SUMMARIZE_BUILD=1 and run autoninja.bat.
12
+
13
+ On Linux you can get autoninja to invoke this script using this syntax:
14
+
15
+ $ NINJA_SUMMARIZE_BUILD=1 autoninja -C out/Default/ chrome
16
+
17
+ You can also call this script directly using ninja's syntax to specify the
18
+ output directory of interest:
19
+
20
+ > python post_build_ninja_summary.py -C out/Default
21
+
22
+ Typical output looks like this:
23
+
24
+ >ninja -C out\debug_component base
25
+ ninja.exe -C out\debug_component base -j 960 -l 48 -d keeprsp
26
+ ninja: Entering directory `out\debug_component'
27
+ [1 processes, 1/1 @ 0.3/s : 3.092s ] Regenerating ninja files
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
42
+
43
+ If no gn clean has been done then results will be for the last non-NULL
44
+ invocation of ninja. Ideas for future statistics, and implementations are
45
+ appreciated.
46
+
47
+ The "weighted" time is the elapsed time of each build step divided by the number
48
+ of tasks that were running in parallel. This makes it an excellent approximation
49
+ of how "important" a slow step was. A link that is entirely or mostly serialized
50
+ will have a weighted time that is the same or similar to its elapsed time. A
51
+ compile that runs in parallel with 999 other compiles will have a weighted time
52
+ that is tiny."""
53
+
54
+ from __future__ import print_function
55
+
56
+ import argparse
57
+ import errno
58
+ import fnmatch
59
+ import os
60
+ import sys
61
+
62
+
63
+ # The number of long build times to report:
64
+ long_count = 10
65
+ # The number of long times by extension to report
66
+ long_ext_count = 10
67
+
68
+
69
+ class Target:
70
+ """Represents a single line read for a .ninja_log file."""
71
+ def __init__(self, start, end):
72
+ """Creates a target object by passing in the start/end times in seconds
73
+ as a float."""
74
+ self.start = start
75
+ self.end = end
76
+ # A list of targets, appended to by the owner of this object.
77
+ self.targets = []
78
+ self.weighted_duration = 0.0
79
+
80
+ def Duration(self):
81
+ """Returns the task duration in seconds as a float."""
82
+ return self.end - self.start
83
+
84
+ def SetWeightedDuration(self, weighted_duration):
85
+ """Sets the duration, in seconds, passed in as a float."""
86
+ self.weighted_duration = weighted_duration
87
+
88
+ def WeightedDuration(self):
89
+ """Returns the task's weighted duration in seconds as a float.
90
+
91
+ Weighted_duration takes the elapsed time of the task and divides it
92
+ by how many other tasks were running at the same time. Thus, it
93
+ represents the approximate impact of this task on the total build time,
94
+ with serialized or serializing steps typically ending up with much
95
+ longer weighted durations.
96
+ weighted_duration should always be the same or shorter than duration.
97
+ """
98
+ # Allow for modest floating-point errors
99
+ epsilon = 0.000002
100
+ if (self.weighted_duration > self.Duration() + epsilon):
101
+ print('%s > %s?' % (self.weighted_duration, self.Duration()))
102
+ assert(self.weighted_duration <= self.Duration() + epsilon)
103
+ return self.weighted_duration
104
+
105
+ def DescribeTargets(self):
106
+ """Returns a printable string that summarizes the targets."""
107
+ if len(self.targets) == 1:
108
+ return self.targets[0]
109
+ # Some build steps generate dozens of outputs - handle them sanely.
110
+ # It's a bit odd that if there are three targets we return all three
111
+ # but if there are more than three we just return two, but this works
112
+ # well in practice.
113
+ elif len(self.targets) > 3:
114
+ return '(%d items) ' % len(self.targets) + (
115
+ ', '.join(self.targets[:2]) + ', ...')
116
+ else:
117
+ return ', '.join(self.targets)
118
+
119
+
120
+ # Copied with some modifications from ninjatracing
121
+ def ReadTargets(log, show_all):
122
+ """Reads all targets from .ninja_log file |log_file|, sorted by duration.
123
+
124
+ The result is a list of Target objects."""
125
+ header = log.readline()
126
+ assert header == '# ninja log v5\n', \
127
+ 'unrecognized ninja log version %r' % header
128
+ targets_dict = {}
129
+ last_end_seen = 0.0
130
+ for line in log:
131
+ parts = line.strip().split('\t')
132
+ if len(parts) != 5:
133
+ # If ninja.exe is rudely halted then the .ninja_log file may be
134
+ # corrupt. Silently continue.
135
+ continue
136
+ start, end, _, name, cmdhash = parts # Ignore restat.
137
+ # Convert from integral milliseconds to float seconds.
138
+ start = int(start) / 1000.0
139
+ end = int(end) / 1000.0
140
+ if not show_all and end < last_end_seen:
141
+ # An earlier time stamp means that this step is the first in a new
142
+ # build, possibly an incremental build. Throw away the previous
143
+ # data so that this new build will be displayed independently.
144
+ # This has to be done by comparing end times because records are
145
+ # written to the .ninja_log file when commands complete, so end
146
+ # times are guaranteed to be in order, but start times are not.
147
+ targets_dict = {}
148
+ target = None
149
+ if cmdhash in targets_dict:
150
+ target = targets_dict[cmdhash]
151
+ if not show_all and (target.start != start or target.end != end):
152
+ # If several builds in a row just run one or two build steps then
153
+ # the end times may not go backwards so the last build may not be
154
+ # detected as such. However in many cases there will be a build step
155
+ # repeated in the two builds and the changed start/stop points for
156
+ # that command, identified by the hash, can be used to detect and
157
+ # reset the target dictionary.
158
+ targets_dict = {}
159
+ target = None
160
+ if not target:
161
+ targets_dict[cmdhash] = target = Target(start, end)
162
+ last_end_seen = end
163
+ target.targets.append(name)
164
+ return targets_dict.values()
165
+
166
+
167
+ def GetExtension(target, extra_patterns):
168
+ """Return the file extension that best represents a target.
169
+
170
+ For targets that generate multiple outputs it is important to return a
171
+ consistent 'canonical' extension. Ultimately the goal is to group build steps
172
+ by type."""
173
+ for output in target.targets:
174
+ if extra_patterns:
175
+ for fn_pattern in extra_patterns.split(';'):
176
+ if fnmatch.fnmatch(output, '*' + fn_pattern + '*'):
177
+ return fn_pattern
178
+ # Not a true extension, but a good grouping.
179
+ if output.endswith('type_mappings'):
180
+ extension = 'type_mappings'
181
+ break
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
+
189
+ if len(extension) == 0:
190
+ extension = '(no extension found)'
191
+
192
+ if ext1 in ['.pdb', '.dll', '.exe']:
193
+ extension = 'PEFile (linking)'
194
+ # Make sure that .dll and .exe are grouped together and that the
195
+ # .dll.lib files don't cause these to be listed as libraries
196
+ break
197
+ if ext1 in ['.so', '.TOC']:
198
+ extension = '.so (linking)'
199
+ # Attempt to identify linking, avoid identifying as '.TOC'
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
211
+ return extension
212
+
213
+
214
+ def SummarizeEntries(entries, extra_step_types):
215
+ """Print a summary of the passed in list of Target objects."""
216
+
217
+ # Create a list that is in order by time stamp and has entries for the
218
+ # beginning and ending of each build step (one time stamp may have multiple
219
+ # entries due to multiple steps starting/stopping at exactly the same time).
220
+ # Iterate through this list, keeping track of which tasks are running at all
221
+ # times. At each time step calculate a running total for weighted time so
222
+ # that when each task ends its own weighted time can easily be calculated.
223
+ task_start_stop_times = []
224
+
225
+ earliest = -1
226
+ latest = 0
227
+ total_cpu_time = 0
228
+ for target in entries:
229
+ if earliest < 0 or target.start < earliest:
230
+ earliest = target.start
231
+ if target.end > latest:
232
+ latest = target.end
233
+ total_cpu_time += target.Duration()
234
+ task_start_stop_times.append((target.start, 'start', target))
235
+ task_start_stop_times.append((target.end, 'stop', target))
236
+ length = latest - earliest
237
+ weighted_total = 0.0
238
+
239
+ task_start_stop_times.sort()
240
+ # Now we have all task start/stop times sorted by when they happen. If a
241
+ # task starts and stops on the same time stamp then the start will come
242
+ # first because of the alphabet, which is important for making this work
243
+ # correctly.
244
+ # Track the tasks which are currently running.
245
+ running_tasks = {}
246
+ # Record the time we have processed up to so we know how to calculate time
247
+ # deltas.
248
+ last_time = task_start_stop_times[0][0]
249
+ # Track the accumulated weighted time so that it can efficiently be added
250
+ # to individual tasks.
251
+ last_weighted_time = 0.0
252
+ # Scan all start/stop events.
253
+ for event in task_start_stop_times:
254
+ time, action_name, target = event
255
+ # Accumulate weighted time up to now.
256
+ num_running = len(running_tasks)
257
+ if num_running > 0:
258
+ # Update the total weighted time up to this moment.
259
+ last_weighted_time += (time - last_time) / float(num_running)
260
+ if action_name == 'start':
261
+ # Record the total weighted task time when this task starts.
262
+ running_tasks[target] = last_weighted_time
263
+ if action_name == 'stop':
264
+ # Record the change in the total weighted task time while this task ran.
265
+ weighted_duration = last_weighted_time - running_tasks[target]
266
+ target.SetWeightedDuration(weighted_duration)
267
+ weighted_total += weighted_duration
268
+ del running_tasks[target]
269
+ last_time = time
270
+ assert(len(running_tasks) == 0)
271
+
272
+ # Warn if the sum of weighted times is off by more than half a second.
273
+ if abs(length - weighted_total) > 500:
274
+ print('Discrepancy!!! Length = %.3f, weighted total = %.3f' % (
275
+ length, weighted_total))
276
+
277
+ # Print the slowest build steps (by weighted time).
278
+ print(' Longest build steps:')
279
+ entries.sort(key=lambda x: x.WeightedDuration())
280
+ for target in entries[-long_count:]:
281
+ print(' %8.1f weighted s to build %s (%.1f s elapsed time)' % (
282
+ target.WeightedDuration(),
283
+ target.DescribeTargets(), target.Duration()))
284
+
285
+ # Sum up the time by file extension/type of the output file
286
+ count_by_ext = {}
287
+ time_by_ext = {}
288
+ weighted_time_by_ext = {}
289
+ # Scan through all of the targets to build up per-extension statistics.
290
+ for target in entries:
291
+ extension = GetExtension(target, extra_step_types)
292
+ time_by_ext[extension] = time_by_ext.get(extension, 0) + target.Duration()
293
+ weighted_time_by_ext[extension] = weighted_time_by_ext.get(extension,
294
+ 0) + target.WeightedDuration()
295
+ count_by_ext[extension] = count_by_ext.get(extension, 0) + 1
296
+
297
+ print(' Time by build-step type:')
298
+ # Copy to a list with extension name and total time swapped, to (time, ext)
299
+ weighted_time_by_ext_sorted = sorted((y, x) for (x, y) in
300
+ weighted_time_by_ext.items())
301
+ # Print the slowest build target types (by weighted time):
302
+ for time, extension in weighted_time_by_ext_sorted[-long_ext_count:]:
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]))
306
+
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)))
312
+
313
+
314
+ def main():
315
+ log_file = '.ninja_log'
316
+ parser = argparse.ArgumentParser()
317
+ parser.add_argument('-C', dest='build_directory',
318
+ help='Build directory.')
319
+ parser.add_argument(
320
+ '-s',
321
+ '--step-types',
322
+ help='semicolon separated fnmatch patterns for build-step grouping')
323
+ parser.add_argument('--log-file',
324
+ help="specific ninja log file to analyze.")
325
+ args, _extra_args = parser.parse_known_args()
326
+ if args.build_directory:
327
+ log_file = os.path.join(args.build_directory, log_file)
328
+ if args.log_file:
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(';'))
339
+
340
+ try:
341
+ with open(log_file, 'r') as log:
342
+ entries = ReadTargets(log, False)
343
+ SummarizeEntries(entries, args.step_types)
344
+ except IOError:
345
+ print('Log file %r not found, no build summary created.' % log_file)
346
+ return errno.ENOENT
347
+
348
+
349
+ if __name__ == '__main__':
350
+ sys.exit(main())