libv8 8.4.255.0

Sign up to get free protection for your applications and to get access to all the features.
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,130 @@
1
+ #!/usr/bin/env python
2
+ # Copyright (c) 2016 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
+ from __future__ import print_function
7
+
8
+ import ctypes
9
+ import os
10
+ import platform
11
+ import subprocess
12
+ import sys
13
+ from third_party import colorama
14
+
15
+ IS_TTY = None
16
+ OUT_TYPE = 'unknown'
17
+
18
+
19
+ def enable_native_ansi():
20
+ """Enables native ANSI sequences in console. Windows 10 only.
21
+
22
+ Returns whether successful.
23
+ """
24
+ kernel32 = ctypes.windll.kernel32
25
+ ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x04
26
+
27
+ out_handle = kernel32.GetStdHandle(subprocess.STD_OUTPUT_HANDLE)
28
+
29
+ # GetConsoleMode fails if the terminal isn't native.
30
+ mode = ctypes.wintypes.DWORD()
31
+ if kernel32.GetConsoleMode(out_handle, ctypes.byref(mode)) == 0:
32
+ return False
33
+
34
+ if not (mode.value & ENABLE_VIRTUAL_TERMINAL_PROCESSING):
35
+ if kernel32.SetConsoleMode(
36
+ out_handle, mode.value | ENABLE_VIRTUAL_TERMINAL_PROCESSING) == 0:
37
+ print(
38
+ 'kernel32.SetConsoleMode to enable ANSI sequences failed',
39
+ file=sys.stderr)
40
+ return False
41
+
42
+ return True
43
+
44
+
45
+ def init():
46
+ # should_wrap instructs colorama to wrap stdout/stderr with an ASNI colorcode
47
+ # interpreter that converts them to SetConsoleTextAttribute calls. This only
48
+ # should be True in cases where we're connected to cmd.exe's console. Setting
49
+ # this to True on non-windows systems has no effect.
50
+ should_wrap = False
51
+ global IS_TTY, OUT_TYPE
52
+ IS_TTY = sys.stdout.isatty()
53
+ if IS_TTY:
54
+ # Yay! We detected a console in the normal way. It doesn't really matter
55
+ # if it's windows or not, we win.
56
+ OUT_TYPE = 'console'
57
+ should_wrap = True
58
+ elif sys.platform.startswith('win'):
59
+ # assume this is some sort of file
60
+ OUT_TYPE = 'file (win)'
61
+
62
+ import msvcrt
63
+ h = msvcrt.get_osfhandle(sys.stdout.fileno())
64
+ # h is the win32 HANDLE for stdout.
65
+ ftype = ctypes.windll.kernel32.GetFileType(h)
66
+ if ftype == 2: # FILE_TYPE_CHAR
67
+ # This is a normal cmd console, but we'll only get here if we're running
68
+ # inside a `git command` which is actually git->bash->command. Not sure
69
+ # why isatty doesn't detect this case.
70
+ OUT_TYPE = 'console (cmd via msys)'
71
+ IS_TTY = True
72
+ should_wrap = True
73
+ elif ftype == 3: # FILE_TYPE_PIPE
74
+ OUT_TYPE = 'pipe (win)'
75
+ # This is some kind of pipe on windows. This could either be a real pipe
76
+ # or this could be msys using a pipe to emulate a pty. We use the same
77
+ # algorithm that msys-git uses to determine if it's connected to a pty or
78
+ # not.
79
+
80
+ # This function and the structures are defined in the MSDN documentation
81
+ # using the same names.
82
+ def NT_SUCCESS(status):
83
+ # The first two bits of status are the severity. The success
84
+ # severities are 0 and 1, and the !success severities are 2 and 3.
85
+ # Therefore since ctypes interprets the default restype of the call
86
+ # to be an 'C int' (which is guaranteed to be signed 32 bits), All
87
+ # success codes are positive, and all !success codes are negative.
88
+ return status >= 0
89
+
90
+ class UNICODE_STRING(ctypes.Structure):
91
+ _fields_ = [('Length', ctypes.c_ushort),
92
+ ('MaximumLength', ctypes.c_ushort),
93
+ ('Buffer', ctypes.c_wchar_p)]
94
+
95
+ class OBJECT_NAME_INFORMATION(ctypes.Structure):
96
+ _fields_ = [('Name', UNICODE_STRING),
97
+ ('NameBuffer', ctypes.c_wchar_p)]
98
+
99
+ buf = ctypes.create_string_buffer(1024)
100
+ # Ask NT what the name of the object our stdout HANDLE is. It would be
101
+ # possible to use GetFileInformationByHandleEx, but it's only available
102
+ # on Vista+. If you're reading this in 2017 or later, feel free to
103
+ # refactor this out.
104
+ #
105
+ # The '1' here is ObjectNameInformation
106
+ if NT_SUCCESS(ctypes.windll.ntdll.NtQueryObject(h, 1, buf, len(buf)-2,
107
+ None)):
108
+ out = OBJECT_NAME_INFORMATION.from_buffer(buf)
109
+ name = out.Name.Buffer.split('\\')[-1]
110
+ IS_TTY = name.startswith('msys-') and '-pty' in name
111
+ if IS_TTY:
112
+ OUT_TYPE = 'bash (msys)'
113
+ else:
114
+ # A normal file, or an unknown file type.
115
+ pass
116
+ else:
117
+ # This is non-windows, so we trust isatty.
118
+ OUT_TYPE = 'pipe or file'
119
+
120
+ # Enable native ANSI color codes on Windows 10.
121
+ if IS_TTY and platform.release() == '10':
122
+ if enable_native_ansi():
123
+ should_wrap = False
124
+
125
+ colorama.init(wrap=should_wrap)
126
+
127
+ if __name__ == '__main__':
128
+ init()
129
+ print('IS_TTY:', IS_TTY)
130
+ print('OUT_TYPE:', OUT_TYPE)
@@ -0,0 +1,263 @@
1
+ #!/usr/bin/env python
2
+ # Copyright 2017 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
+ """Splits a branch into smaller branches and uploads CLs."""
7
+
8
+ from __future__ import print_function
9
+
10
+ import collections
11
+ import os
12
+ import re
13
+ import subprocess2
14
+ import sys
15
+ import tempfile
16
+
17
+ import gclient_utils
18
+ import git_footers
19
+ import owners
20
+ import owners_finder
21
+ import scm
22
+
23
+ import git_common as git
24
+
25
+
26
+ # If a call to `git cl split` will generate more than this number of CLs, the
27
+ # command will prompt the user to make sure they know what they're doing. Large
28
+ # numbers of CLs generated by `git cl split` have caused infrastructure issues
29
+ # in the past.
30
+ CL_SPLIT_FORCE_LIMIT = 10
31
+
32
+
33
+ def ReadFile(file_path):
34
+ """Returns the content of |file_path|."""
35
+ with open(file_path) as f:
36
+ content = f.read()
37
+ return content
38
+
39
+
40
+ def EnsureInGitRepository():
41
+ """Throws an exception if the current directory is not a git repository."""
42
+ git.run('rev-parse')
43
+
44
+
45
+ def CreateBranchForDirectory(prefix, directory, upstream):
46
+ """Creates a branch named |prefix| + "_" + |directory| + "_split".
47
+
48
+ Return false if the branch already exists. |upstream| is used as upstream for
49
+ the created branch.
50
+ """
51
+ existing_branches = set(git.branches(use_limit = False))
52
+ branch_name = prefix + '_' + directory + '_split'
53
+ if branch_name in existing_branches:
54
+ return False
55
+ git.run('checkout', '-t', upstream, '-b', branch_name)
56
+ return True
57
+
58
+
59
+ def FormatDescriptionOrComment(txt, directory):
60
+ """Replaces $directory with |directory| in |txt|."""
61
+ return txt.replace('$directory', '/' + directory)
62
+
63
+
64
+ def AddUploadedByGitClSplitToDescription(description):
65
+ """Adds a 'This CL was uploaded by git cl split.' line to |description|.
66
+
67
+ The line is added before footers, or at the end of |description| if it has no
68
+ footers.
69
+ """
70
+ split_footers = git_footers.split_footers(description)
71
+ lines = split_footers[0]
72
+ if not lines[-1] or lines[-1].isspace():
73
+ lines = lines + ['']
74
+ lines = lines + ['This CL was uploaded by git cl split.']
75
+ if split_footers[1]:
76
+ lines += [''] + split_footers[1]
77
+ return '\n'.join(lines)
78
+
79
+
80
+ def UploadCl(refactor_branch, refactor_branch_upstream, directory, files,
81
+ description, comment, reviewers, changelist, cmd_upload,
82
+ cq_dry_run, enable_auto_submit, repository_root):
83
+ """Uploads a CL with all changes to |files| in |refactor_branch|.
84
+
85
+ Args:
86
+ refactor_branch: Name of the branch that contains the changes to upload.
87
+ refactor_branch_upstream: Name of the upstream of |refactor_branch|.
88
+ directory: Path to the directory that contains the OWNERS file for which
89
+ to upload a CL.
90
+ files: List of AffectedFile instances to include in the uploaded CL.
91
+ description: Description of the uploaded CL.
92
+ comment: Comment to post on the uploaded CL.
93
+ reviewers: A set of reviewers for the CL.
94
+ changelist: The Changelist class.
95
+ cmd_upload: The function associated with the git cl upload command.
96
+ cq_dry_run: If CL uploads should also do a cq dry run.
97
+ enable_auto_submit: If CL uploads should also enable auto submit.
98
+ """
99
+ # Create a branch.
100
+ if not CreateBranchForDirectory(
101
+ refactor_branch, directory, refactor_branch_upstream):
102
+ print('Skipping ' + directory + ' for which a branch already exists.')
103
+ return
104
+
105
+ # Checkout all changes to files in |files|.
106
+ deleted_files = []
107
+ modified_files = []
108
+ for action, f in files:
109
+ abspath = os.path.abspath(os.path.join(repository_root, f))
110
+ if action == 'D':
111
+ deleted_files.append(abspath)
112
+ else:
113
+ modified_files.append(abspath)
114
+
115
+ if deleted_files:
116
+ git.run(*['rm'] + deleted_files)
117
+ if modified_files:
118
+ git.run(*['checkout', refactor_branch, '--'] + modified_files)
119
+
120
+ # Commit changes. The temporary file is created with delete=False so that it
121
+ # can be deleted manually after git has read it rather than automatically
122
+ # when it is closed.
123
+ with gclient_utils.temporary_file() as tmp_file:
124
+ gclient_utils.FileWrite(
125
+ tmp_file, FormatDescriptionOrComment(description, directory))
126
+ git.run('commit', '-F', tmp_file)
127
+
128
+ # Upload a CL.
129
+ upload_args = ['-f', '-r', ','.join(reviewers)]
130
+ if cq_dry_run:
131
+ upload_args.append('--cq-dry-run')
132
+ if not comment:
133
+ upload_args.append('--send-mail')
134
+ if enable_auto_submit:
135
+ upload_args.append('--enable-auto-submit')
136
+ print('Uploading CL for ' + directory + '.')
137
+ cmd_upload(upload_args)
138
+ if comment:
139
+ changelist().AddComment(FormatDescriptionOrComment(comment, directory),
140
+ publish=True)
141
+
142
+
143
+ def GetFilesSplitByOwners(owners_database, files):
144
+ """Returns a map of files split by OWNERS file.
145
+
146
+ Returns:
147
+ A map where keys are paths to directories containing an OWNERS file and
148
+ values are lists of files sharing an OWNERS file.
149
+ """
150
+ files_split_by_owners = collections.defaultdict(list)
151
+ for action, path in files:
152
+ enclosing_dir = owners_database.enclosing_dir_with_owners(path)
153
+ files_split_by_owners[enclosing_dir].append((action, path))
154
+ return files_split_by_owners
155
+
156
+
157
+ def PrintClInfo(cl_index, num_cls, directory, file_paths, description,
158
+ reviewers):
159
+ """Prints info about a CL.
160
+
161
+ Args:
162
+ cl_index: The index of this CL in the list of CLs to upload.
163
+ num_cls: The total number of CLs that will be uploaded.
164
+ directory: Path to the directory that contains the OWNERS file for which
165
+ to upload a CL.
166
+ file_paths: A list of files in this CL.
167
+ description: The CL description.
168
+ reviewers: A set of reviewers for this CL.
169
+ """
170
+ description_lines = FormatDescriptionOrComment(description,
171
+ directory).splitlines()
172
+ indented_description = '\n'.join([' ' + l for l in description_lines])
173
+
174
+ print('CL {}/{}'.format(cl_index, num_cls))
175
+ print('Path: {}'.format(directory))
176
+ print('Reviewers: {}'.format(', '.join(reviewers)))
177
+ print('\n' + indented_description + '\n')
178
+ print('\n'.join(file_paths))
179
+ print()
180
+
181
+
182
+ def SplitCl(description_file, comment_file, changelist, cmd_upload, dry_run,
183
+ cq_dry_run, enable_auto_submit, repository_root):
184
+ """"Splits a branch into smaller branches and uploads CLs.
185
+
186
+ Args:
187
+ description_file: File containing the description of uploaded CLs.
188
+ comment_file: File containing the comment of uploaded CLs.
189
+ changelist: The Changelist class.
190
+ cmd_upload: The function associated with the git cl upload command.
191
+ dry_run: Whether this is a dry run (no branches or CLs created).
192
+ cq_dry_run: If CL uploads should also do a cq dry run.
193
+ enable_auto_submit: If CL uploads should also enable auto submit.
194
+
195
+ Returns:
196
+ 0 in case of success. 1 in case of error.
197
+ """
198
+ description = AddUploadedByGitClSplitToDescription(ReadFile(description_file))
199
+ comment = ReadFile(comment_file) if comment_file else None
200
+
201
+ try:
202
+ EnsureInGitRepository()
203
+
204
+ cl = changelist()
205
+ upstream = cl.GetCommonAncestorWithUpstream()
206
+ files = [
207
+ (action.strip(), f)
208
+ for action, f in scm.GIT.CaptureStatus(repository_root, upstream)
209
+ ]
210
+
211
+ if not files:
212
+ print('Cannot split an empty CL.')
213
+ return 1
214
+
215
+ author = git.run('config', 'user.email').strip() or None
216
+ refactor_branch = git.current_branch()
217
+ assert refactor_branch, "Can't run from detached branch."
218
+ refactor_branch_upstream = git.upstream(refactor_branch)
219
+ assert refactor_branch_upstream, \
220
+ "Branch %s must have an upstream." % refactor_branch
221
+
222
+ owners_database = owners.Database(repository_root, open, os.path)
223
+ owners_database.load_data_needed_for([f for _, f in files])
224
+
225
+ files_split_by_owners = GetFilesSplitByOwners(owners_database, files)
226
+
227
+ num_cls = len(files_split_by_owners)
228
+ print('Will split current branch (' + refactor_branch + ') into ' +
229
+ str(num_cls) + ' CLs.\n')
230
+ if cq_dry_run and num_cls > CL_SPLIT_FORCE_LIMIT:
231
+ print(
232
+ 'This will generate "%r" CLs. This many CLs can potentially generate'
233
+ ' too much load on the build infrastructure. Please email'
234
+ ' infra-dev@chromium.org to ensure that this won\'t break anything.'
235
+ ' The infra team reserves the right to cancel your jobs if they are'
236
+ ' overloading the CQ.' % num_cls)
237
+ answer = gclient_utils.AskForData('Proceed? (y/n):')
238
+ if answer.lower() != 'y':
239
+ return 0
240
+
241
+ for cl_index, (directory, files) in \
242
+ enumerate(files_split_by_owners.items(), 1):
243
+ # Use '/' as a path separator in the branch name and the CL description
244
+ # and comment.
245
+ directory = directory.replace(os.path.sep, '/')
246
+ file_paths = [f for _, f in files]
247
+ reviewers = owners_database.reviewers_for(file_paths, author)
248
+
249
+ if dry_run:
250
+ PrintClInfo(cl_index, num_cls, directory, file_paths, description,
251
+ reviewers)
252
+ else:
253
+ UploadCl(refactor_branch, refactor_branch_upstream, directory, files,
254
+ description, comment, reviewers, changelist, cmd_upload,
255
+ cq_dry_run, enable_auto_submit, repository_root)
256
+
257
+ # Go back to the original branch.
258
+ git.run('checkout', refactor_branch)
259
+
260
+ except subprocess2.CalledProcessError as cpe:
261
+ sys.stderr.write(cpe.stderr)
262
+ return 1
263
+ return 0
@@ -0,0 +1,261 @@
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
+ """Manages subcommands in a script.
6
+
7
+ Each subcommand should look like this:
8
+ @usage('[pet name]')
9
+ def CMDpet(parser, args):
10
+ '''Prints a pet.
11
+
12
+ Many people likes pet. This command prints a pet for your pleasure.
13
+ '''
14
+ parser.add_option('--color', help='color of your pet')
15
+ options, args = parser.parse_args(args)
16
+ if len(args) != 1:
17
+ parser.error('A pet name is required')
18
+ pet = args[0]
19
+ if options.color:
20
+ print('Nice %s %d' % (options.color, pet))
21
+ else:
22
+ print('Nice %s' % pet)
23
+ return 0
24
+
25
+ Explanation:
26
+ - usage decorator alters the 'usage: %prog' line in the command's help.
27
+ - docstring is used to both short help line and long help line.
28
+ - parser can be augmented with arguments.
29
+ - return the exit code.
30
+ - Every function in the specified module with a name starting with 'CMD' will
31
+ be a subcommand.
32
+ - The module's docstring will be used in the default 'help' page.
33
+ - If a command has no docstring, it will not be listed in the 'help' page.
34
+ Useful to keep compatibility commands around or aliases.
35
+ - If a command is an alias to another one, it won't be documented. E.g.:
36
+ CMDoldname = CMDnewcmd
37
+ will result in oldname not being documented but supported and redirecting to
38
+ newcmd. Make it a real function that calls the old function if you want it
39
+ to be documented.
40
+ - CMDfoo_bar will be command 'foo-bar'.
41
+ """
42
+
43
+ import difflib
44
+ import sys
45
+ import textwrap
46
+
47
+
48
+ def usage(more):
49
+ """Adds a 'usage_more' property to a CMD function."""
50
+ def hook(fn):
51
+ fn.usage_more = more
52
+ return fn
53
+ return hook
54
+
55
+
56
+ def epilog(text):
57
+ """Adds an 'epilog' property to a CMD function.
58
+
59
+ It will be shown in the epilog. Usually useful for examples.
60
+ """
61
+ def hook(fn):
62
+ fn.epilog = text
63
+ return fn
64
+ return hook
65
+
66
+
67
+ def CMDhelp(parser, args):
68
+ """Prints list of commands or help for a specific command."""
69
+ # This is the default help implementation. It can be disabled or overridden if
70
+ # wanted.
71
+ if not any(i in ('-h', '--help') for i in args):
72
+ args = args + ['--help']
73
+ parser.parse_args(args)
74
+ # Never gets there.
75
+ assert False
76
+
77
+
78
+ def _get_color_module():
79
+ """Returns the colorama module if available.
80
+
81
+ If so, assumes colors are supported and return the module handle.
82
+ """
83
+ return sys.modules.get('colorama') or sys.modules.get('third_party.colorama')
84
+
85
+
86
+ def _function_to_name(name):
87
+ """Returns the name of a CMD function."""
88
+ return name[3:].replace('_', '-')
89
+
90
+
91
+ class CommandDispatcher(object):
92
+ def __init__(self, module):
93
+ """module is the name of the main python module where to look for commands.
94
+
95
+ The python builtin variable __name__ MUST be used for |module|. If the
96
+ script is executed in the form 'python script.py', __name__ == '__main__'
97
+ and sys.modules['script'] doesn't exist. On the other hand if it is unit
98
+ tested, __main__ will be the unit test's module so it has to reference to
99
+ itself with 'script'. __name__ always match the right value.
100
+ """
101
+ self.module = sys.modules[module]
102
+
103
+ def enumerate_commands(self):
104
+ """Returns a dict of command and their handling function.
105
+
106
+ The commands must be in the '__main__' modules. To import a command from a
107
+ submodule, use:
108
+ from mysubcommand import CMDfoo
109
+
110
+ Automatically adds 'help' if not already defined.
111
+
112
+ Normalizes '_' in the commands to '-'.
113
+
114
+ A command can be effectively disabled by defining a global variable to None,
115
+ e.g.:
116
+ CMDhelp = None
117
+ """
118
+ cmds = dict(
119
+ (_function_to_name(name), getattr(self.module, name))
120
+ for name in dir(self.module) if name.startswith('CMD'))
121
+ cmds.setdefault('help', CMDhelp)
122
+ return cmds
123
+
124
+ def find_nearest_command(self, name_asked):
125
+ """Retrieves the function to handle a command as supplied by the user.
126
+
127
+ It automatically tries to guess the _intended command_ by handling typos
128
+ and/or incomplete names.
129
+ """
130
+ commands = self.enumerate_commands()
131
+ name_to_dash = name_asked.replace('_', '-')
132
+ if name_to_dash in commands:
133
+ return commands[name_to_dash]
134
+
135
+ # An exact match was not found. Try to be smart and look if there's
136
+ # something similar.
137
+ commands_with_prefix = [c for c in commands if c.startswith(name_asked)]
138
+ if len(commands_with_prefix) == 1:
139
+ return commands[commands_with_prefix[0]]
140
+
141
+ # A #closeenough approximation of levenshtein distance.
142
+ def close_enough(a, b):
143
+ return difflib.SequenceMatcher(a=a, b=b).ratio()
144
+
145
+ hamming_commands = sorted(
146
+ ((close_enough(c, name_asked), c) for c in commands),
147
+ reverse=True)
148
+ if (hamming_commands[0][0] - hamming_commands[1][0]) < 0.3:
149
+ # Too ambiguous.
150
+ return
151
+
152
+ if hamming_commands[0][0] < 0.8:
153
+ # Not similar enough. Don't be a fool and run a random command.
154
+ return
155
+
156
+ return commands[hamming_commands[0][1]]
157
+
158
+ def _gen_commands_list(self):
159
+ """Generates the short list of supported commands."""
160
+ commands = self.enumerate_commands()
161
+ docs = sorted(
162
+ (cmd_name, self._create_command_summary(cmd_name, handler))
163
+ for cmd_name, handler in commands.items())
164
+ # Skip commands without a docstring.
165
+ docs = [i for i in docs if i[1]]
166
+ # Then calculate maximum length for alignment:
167
+ length = max(len(c) for c in commands)
168
+
169
+ # Look if color is supported.
170
+ colors = _get_color_module()
171
+ green = reset = ''
172
+ if colors:
173
+ green = colors.Fore.GREEN
174
+ reset = colors.Fore.RESET
175
+ return (
176
+ 'Commands are:\n' +
177
+ ''.join(
178
+ ' %s%-*s%s %s\n' % (green, length, cmd_name, reset, doc)
179
+ for cmd_name, doc in docs))
180
+
181
+ def _add_command_usage(self, parser, command):
182
+ """Modifies an OptionParser object with the function's documentation."""
183
+ cmd_name = _function_to_name(command.__name__)
184
+ if cmd_name == 'help':
185
+ cmd_name = '<command>'
186
+ # Use the module's docstring as the description for the 'help' command if
187
+ # available.
188
+ parser.description = (self.module.__doc__ or '').rstrip()
189
+ if parser.description:
190
+ parser.description += '\n\n'
191
+ parser.description += self._gen_commands_list()
192
+ # Do not touch epilog.
193
+ else:
194
+ # Use the command's docstring if available. For commands, unlike module
195
+ # docstring, realign.
196
+ lines = (command.__doc__ or '').rstrip().splitlines()
197
+ if lines[:1]:
198
+ rest = textwrap.dedent('\n'.join(lines[1:]))
199
+ parser.description = '\n'.join((lines[0], rest))
200
+ else:
201
+ parser.description = lines[0] if lines else ''
202
+ if parser.description:
203
+ parser.description += '\n'
204
+ parser.epilog = getattr(command, 'epilog', None)
205
+ if parser.epilog:
206
+ parser.epilog = '\n' + parser.epilog.strip() + '\n'
207
+
208
+ more = getattr(command, 'usage_more', '')
209
+ extra = '' if not more else ' ' + more
210
+ parser.set_usage('usage: %%prog %s [options]%s' % (cmd_name, extra))
211
+
212
+ @staticmethod
213
+ def _create_command_summary(cmd_name, command):
214
+ """Creates a oneliner summary from the command's docstring."""
215
+ if cmd_name != _function_to_name(command.__name__):
216
+ # Skip aliases. For example using at module level:
217
+ # CMDfoo = CMDbar
218
+ return ''
219
+ doc = command.__doc__ or ''
220
+ line = doc.split('\n', 1)[0].rstrip('.')
221
+ if not line:
222
+ return line
223
+ return (line[0].lower() + line[1:]).strip()
224
+
225
+ def execute(self, parser, args):
226
+ """Dispatches execution to the right command.
227
+
228
+ Fallbacks to 'help' if not disabled.
229
+ """
230
+ # Unconditionally disable format_description() and format_epilog().
231
+ # Technically, a formatter should be used but it's not worth (yet) the
232
+ # trouble.
233
+ parser.format_description = lambda _: parser.description or ''
234
+ parser.format_epilog = lambda _: parser.epilog or ''
235
+
236
+ if args:
237
+ if args[0] in ('-h', '--help') and len(args) > 1:
238
+ # Reverse the argument order so 'tool --help cmd' is rewritten to
239
+ # 'tool cmd --help'.
240
+ args = [args[1], args[0]] + args[2:]
241
+ command = self.find_nearest_command(args[0])
242
+ if command:
243
+ if command.__name__ == 'CMDhelp' and len(args) > 1:
244
+ # Reverse the argument order so 'tool help cmd' is rewritten to
245
+ # 'tool cmd --help'. Do it here since we want 'tool help cmd' to work
246
+ # too.
247
+ args = [args[1], '--help'] + args[2:]
248
+ command = self.find_nearest_command(args[0]) or command
249
+
250
+ # "fix" the usage and the description now that we know the subcommand.
251
+ self._add_command_usage(parser, command)
252
+ return command(parser, args[1:])
253
+
254
+ cmdhelp = self.enumerate_commands().get('help')
255
+ if cmdhelp:
256
+ # Not a known command. Default to help.
257
+ self._add_command_usage(parser, cmdhelp)
258
+ return cmdhelp(parser, args)
259
+
260
+ # Nothing can be done.
261
+ return 2