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,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2014 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2015 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
+
7
+ # This git extension converts a chromium commit number to its git commit hash.
8
+ # It accepts the following input formats:
9
+ #
10
+ # $ git crrev-parse Cr-Commit-Position: refs/heads/master@{#311769}
11
+ # $ git crrev-parse ' Cr-Commit-Position: refs/heads/master@{#311769}'
12
+ # $ git crrev-parse 'Cr-Commit-Position: refs/heads/master@{#311769}'
13
+ # $ git crrev-parse refs/heads/master@{#311769}
14
+ #
15
+ # It also works for branches (assuming you have branches in your local
16
+ # checkout):
17
+ #
18
+ # $ git crrev-parse refs/branch-heads/2278@{#2}
19
+ #
20
+ # If you don't specify a branch, refs/heads/master is assumed:
21
+ #
22
+ # $ git crrev-parse @{#311769}
23
+ # $ git crrev-parse 311769
24
+
25
+ # Developer note: this script makes heavy use of prefix/suffix/pattern
26
+ # substitution for bash variables. Refer to the "Parameter Expansion"
27
+ # section of the man page for bash.
28
+
29
+ while [ -n "$1" ]; do
30
+ if [[ "$1" = "Cr-Commit-Position:" ]] && [[ "$2" =~ .*@\{#[0-9][0-9]*\} ]]; then
31
+ commit_pos="$2"
32
+ shift
33
+ else
34
+ commit_pos="${1#*Cr-Commit-Position: }"
35
+ fi
36
+ ref="${commit_pos%@\{#*\}}"
37
+ if [ "$ref" = "$commit_pos" -o -z "$ref" ]; then
38
+ ref="refs/heads/master"
39
+ fi
40
+ remote_ref="${ref/refs\/heads/refs\/remotes\/origin}"
41
+ remote_ref="${remote_ref/refs\/branch-heads/refs\/remotes\/branch-heads}"
42
+ remote_ref="${remote_ref//\\}"
43
+ num="${commit_pos#*@\{\#}"
44
+ num="${num%\}}"
45
+ if [ -z "$ref" -o -z "$num" ]; then
46
+ git rev-parse "$1"
47
+ else
48
+ grep_str="^Cr-Commit-Position: $ref@{#$num}"
49
+ git rev-list -n 1 --grep="$grep_str" "$remote_ref"
50
+ fi
51
+
52
+ shift
53
+ done
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2015 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ SCRIPT=git_freezer.py
7
+ set -- freeze "$@"
8
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,9 @@
1
+ #!/bin/sh
2
+ # Copyright (c) 2012 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
+ git grep -n -e "$@" -- "*.h" "*.hpp" "*.cpp" "*.c" "*.cc" "*.cpp" "*.inl"\
6
+ "*.grd" "*.grdp" "*.idl" "*.m" "*.mm" "*.py" "*.sh" "*.cfg" "*.tac" "*.go"\
7
+ "*.vcproj" "*.vsprops" "*.make" "*.gyp" "*.gypi" "*.isolate" "*.java"\
8
+ "*.js" "*.html" "*.css" "*.ebuild" "*.pl" "*.pm" "*.yaml" "*.gn" "*.gni"\
9
+ "*.json" "DEPS" "*/DEPS" "*.mojom" "*.proto"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ git checkout "$(git rev-parse --abbrev-ref "@{u}")"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2013 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ SCRIPT=git_retry.py
7
+ set -- retry "$@"
8
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env bash
2
+
3
+ while test "$PWD" != "/"; do
4
+ if test -f "$PWD/src/.gitmodules"; then
5
+ break
6
+ fi
7
+ cd ..
8
+ done
9
+ if ! test -f "$PWD/src/.gitmodules"; then
10
+ echo "Could not find the root of your checkout; aborting." 1>&2
11
+ exit 1
12
+ fi
13
+
14
+ gclient_spec="solutions=[{'name':'src','url':None,'deps_file':'.DEPS.git'}]"
15
+ kernel_name=$(uname -s)
16
+ if [ "${kernel_name:0:5}" = "MINGW" ]; then
17
+ dir="${0%\\*}"
18
+ cmd "/C ${dir}\\python.bat ${dir}\\gclient.py runhooks --spec=$gclient_spec"
19
+ else
20
+ dir="$(dirname $0)"
21
+ PYTHONDONTWRITEBYTECODE=1 exec python "$dir/gclient.py" runhooks --spec="$gclient_spec"
22
+ fi
23
+ exit $?
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,3 @@
1
+ # Copyright (c) 2012 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.
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+
3
+ [ -e "build/git-hooks/applypatch-msg" ] && exec sh "build/git-hooks/applypatch-msg" "$@"
4
+ exit 0
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+
3
+ [ -e "build/git-hooks/post-applypatch" ] && exec sh "build/git-hooks/post-applypatch" "$@"
4
+ exit 0
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+
3
+ [ -e "build/git-hooks/post-checkout" ] && exec sh "build/git-hooks/post-checkout" "$@"
4
+ exit 0
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+
3
+ [ -e "build/git-hooks/post-commit" ] && exec sh "build/git-hooks/post-commit" "$@"
4
+ exit 0
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+
3
+ [ -e "build/git-hooks/post-merge" ] && exec sh "build/git-hooks/post-merge" "$@"
4
+ exit 0
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+
3
+ [ -e "build/git-hooks/post-update" ] && exec sh "build/git-hooks/post-update" "$@"
4
+ exit 0
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+
3
+ [ -e "build/git-hooks/pre-applypatch" ] && exec sh "build/git-hooks/pre-applypatch" "$@"
4
+ exit 0
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+
3
+ [ -e "build/git-hooks/pre-auto-gc" ] && exec sh "build/git-hooks/pre-auto-gc" "$@"
4
+ exit 0
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+
3
+ [ -e "build/git-hooks/pre-commit" ] && exec sh "build/git-hooks/pre-commit" "$@"
4
+ exit 0
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+
3
+ [ -e "build/git-hooks/pre-rebase" ] && exec sh "build/git-hooks/pre-rebase" "$@"
4
+ exit 0
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+
3
+ [ -e "build/git-hooks/prepare-commit-msg" ] && exec sh "build/git-hooks/prepare-commit-msg" "$@"
4
+ exit 0
@@ -0,0 +1,6 @@
1
+ # git ls-files --others --exclude-from=.git/info/exclude
2
+ # Lines that start with '#' are comments.
3
+ # For a project mostly in C, the following would be a good set of
4
+ # exclude patterns (uncomment them if you want to use them):
5
+ # *.[oa]
6
+ # *~
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ # git_freezer.py thaw -- a git-command to reverse the effect of the 'git freeze'
7
+ # command. Any changes suspended on this branch with the freeze command will be
8
+ # restored to the state they were in immediately prior to running the freeze
9
+ # command.
10
+
11
+ SCRIPT=git_freezer.py
12
+ set -- thaw "$@"
13
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright 2014 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
+ # git_upstream_diff.py -- Provide the diff between the current branch and its
7
+ # upstream.
8
+
9
+ . "$(type -P python_runner.sh)"
@@ -0,0 +1,786 @@
1
+ #!/usr/bin/env python
2
+ # Copyright 2014 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
+ """A git command for managing a local cache of git repositories."""
7
+
8
+ from __future__ import print_function
9
+
10
+ import contextlib
11
+ import errno
12
+ import logging
13
+ import optparse
14
+ import os
15
+ import re
16
+ import subprocess
17
+ import sys
18
+ import tempfile
19
+ import threading
20
+ import time
21
+
22
+ try:
23
+ import urlparse
24
+ except ImportError: # For Py3 compatibility
25
+ import urllib.parse as urlparse
26
+
27
+ from download_from_google_storage import Gsutil
28
+ import gclient_utils
29
+ import lockfile
30
+ import subcommand
31
+
32
+ # Analogous to gc.autopacklimit git config.
33
+ GC_AUTOPACKLIMIT = 50
34
+
35
+ GIT_CACHE_CORRUPT_MESSAGE = 'WARNING: The Git cache is corrupt.'
36
+
37
+ try:
38
+ # pylint: disable=undefined-variable
39
+ WinErr = WindowsError
40
+ except NameError:
41
+ class WinErr(Exception):
42
+ pass
43
+
44
+ class ClobberNeeded(Exception):
45
+ pass
46
+
47
+
48
+ def exponential_backoff_retry(fn, excs=(Exception,), name=None, count=10,
49
+ sleep_time=0.25, printerr=None):
50
+ """Executes |fn| up to |count| times, backing off exponentially.
51
+
52
+ Args:
53
+ fn (callable): The function to execute. If this raises a handled
54
+ exception, the function will retry with exponential backoff.
55
+ excs (tuple): A tuple of Exception types to handle. If one of these is
56
+ raised by |fn|, a retry will be attempted. If |fn| raises an Exception
57
+ that is not in this list, it will immediately pass through. If |excs|
58
+ is empty, the Exception base class will be used.
59
+ name (str): Optional operation name to print in the retry string.
60
+ count (int): The number of times to try before allowing the exception to
61
+ pass through.
62
+ sleep_time (float): The initial number of seconds to sleep in between
63
+ retries. This will be doubled each retry.
64
+ printerr (callable): Function that will be called with the error string upon
65
+ failures. If None, |logging.warning| will be used.
66
+
67
+ Returns: The return value of the successful fn.
68
+ """
69
+ printerr = printerr or logging.warning
70
+ for i in range(count):
71
+ try:
72
+ return fn()
73
+ except excs as e:
74
+ if (i+1) >= count:
75
+ raise
76
+
77
+ printerr('Retrying %s in %.2f second(s) (%d / %d attempts): %s' % (
78
+ (name or 'operation'), sleep_time, (i+1), count, e))
79
+ time.sleep(sleep_time)
80
+ sleep_time *= 2
81
+
82
+
83
+ class Mirror(object):
84
+
85
+ git_exe = 'git.bat' if sys.platform.startswith('win') else 'git'
86
+ gsutil_exe = os.path.join(
87
+ os.path.dirname(os.path.abspath(__file__)), 'gsutil.py')
88
+ cachepath_lock = threading.Lock()
89
+
90
+ UNSET_CACHEPATH = object()
91
+
92
+ # Used for tests
93
+ _GIT_CONFIG_LOCATION = []
94
+
95
+ @staticmethod
96
+ def parse_fetch_spec(spec):
97
+ """Parses and canonicalizes a fetch spec.
98
+
99
+ Returns (fetchspec, value_regex), where value_regex can be used
100
+ with 'git config --replace-all'.
101
+ """
102
+ parts = spec.split(':', 1)
103
+ src = parts[0].lstrip('+').rstrip('/')
104
+ if not src.startswith('refs/'):
105
+ src = 'refs/heads/%s' % src
106
+ dest = parts[1].rstrip('/') if len(parts) > 1 else src
107
+ regex = r'\+%s:.*' % src.replace('*', r'\*')
108
+ return ('+%s:%s' % (src, dest), regex)
109
+
110
+ def __init__(self, url, refs=None, print_func=None):
111
+ self.url = url
112
+ self.fetch_specs = set([self.parse_fetch_spec(ref) for ref in (refs or [])])
113
+ self.basedir = self.UrlToCacheDir(url)
114
+ self.mirror_path = os.path.join(self.GetCachePath(), self.basedir)
115
+ if print_func:
116
+ self.print = self.print_without_file
117
+ self.print_func = print_func
118
+ else:
119
+ self.print = print
120
+
121
+ def print_without_file(self, message, **_kwargs):
122
+ self.print_func(message)
123
+
124
+ @contextlib.contextmanager
125
+ def print_duration_of(self, what):
126
+ start = time.time()
127
+ try:
128
+ yield
129
+ finally:
130
+ self.print('%s took %.1f minutes' % (what, (time.time() - start) / 60.0))
131
+
132
+ @property
133
+ def bootstrap_bucket(self):
134
+ b = os.getenv('OVERRIDE_BOOTSTRAP_BUCKET')
135
+ if b:
136
+ return b
137
+ u = urlparse.urlparse(self.url)
138
+ if u.netloc == 'chromium.googlesource.com':
139
+ return 'chromium-git-cache'
140
+ # Not recognized.
141
+ return None
142
+
143
+ @property
144
+ def _gs_path(self):
145
+ return 'gs://%s/v2/%s' % (self.bootstrap_bucket, self.basedir)
146
+
147
+ @classmethod
148
+ def FromPath(cls, path):
149
+ return cls(cls.CacheDirToUrl(path))
150
+
151
+ @staticmethod
152
+ def UrlToCacheDir(url):
153
+ """Convert a git url to a normalized form for the cache dir path."""
154
+ if os.path.isdir(url):
155
+ # Ignore the drive letter in Windows
156
+ url = os.path.splitdrive(url)[1]
157
+ return url.replace('-', '--').replace(os.sep, '-')
158
+
159
+ parsed = urlparse.urlparse(url)
160
+ norm_url = parsed.netloc + parsed.path
161
+ if norm_url.endswith('.git'):
162
+ norm_url = norm_url[:-len('.git')]
163
+
164
+ # Use the same dir for authenticated URLs and unauthenticated URLs.
165
+ norm_url = norm_url.replace('googlesource.com/a/', 'googlesource.com/')
166
+
167
+ return norm_url.replace('-', '--').replace('/', '-').lower()
168
+
169
+ @staticmethod
170
+ def CacheDirToUrl(path):
171
+ """Convert a cache dir path to its corresponding url."""
172
+ netpath = re.sub(r'\b-\b', '/', os.path.basename(path)).replace('--', '-')
173
+ return 'https://%s' % netpath
174
+
175
+ @classmethod
176
+ def SetCachePath(cls, cachepath):
177
+ with cls.cachepath_lock:
178
+ setattr(cls, 'cachepath', cachepath)
179
+
180
+ @classmethod
181
+ def GetCachePath(cls):
182
+ with cls.cachepath_lock:
183
+ if not hasattr(cls, 'cachepath'):
184
+ try:
185
+ cachepath = subprocess.check_output(
186
+ [cls.git_exe, 'config'] +
187
+ cls._GIT_CONFIG_LOCATION +
188
+ ['cache.cachepath']).decode('utf-8', 'ignore').strip()
189
+ except subprocess.CalledProcessError:
190
+ cachepath = os.environ.get('GIT_CACHE_PATH', cls.UNSET_CACHEPATH)
191
+ setattr(cls, 'cachepath', cachepath)
192
+
193
+ ret = getattr(cls, 'cachepath')
194
+ if ret is cls.UNSET_CACHEPATH:
195
+ raise RuntimeError('No cache.cachepath git configuration or '
196
+ '$GIT_CACHE_PATH is set.')
197
+ return ret
198
+
199
+ @staticmethod
200
+ def _GetMostRecentCacheDirectory(ls_out_set):
201
+ ready_file_pattern = re.compile(r'.*/(\d+).ready$')
202
+ ready_dirs = []
203
+
204
+ for name in ls_out_set:
205
+ m = ready_file_pattern.match(name)
206
+ # Given <path>/<number>.ready,
207
+ # we are interested in <path>/<number> directory
208
+ if m and (name[:-len('.ready')] + '/') in ls_out_set:
209
+ ready_dirs.append((int(m.group(1)), name[:-len('.ready')]))
210
+
211
+ if not ready_dirs:
212
+ return None
213
+
214
+ return max(ready_dirs)[1]
215
+
216
+ def Rename(self, src, dst):
217
+ # This is somehow racy on Windows.
218
+ # Catching OSError because WindowsError isn't portable and
219
+ # pylint complains.
220
+ exponential_backoff_retry(
221
+ lambda: os.rename(src, dst),
222
+ excs=(OSError,),
223
+ name='rename [%s] => [%s]' % (src, dst),
224
+ printerr=self.print)
225
+
226
+ def RunGit(self, cmd, **kwargs):
227
+ """Run git in a subprocess."""
228
+ cwd = kwargs.setdefault('cwd', self.mirror_path)
229
+ kwargs.setdefault('print_stdout', False)
230
+ kwargs.setdefault('filter_fn', self.print)
231
+ env = kwargs.get('env') or kwargs.setdefault('env', os.environ.copy())
232
+ env.setdefault('GIT_ASKPASS', 'true')
233
+ env.setdefault('SSH_ASKPASS', 'true')
234
+ self.print('running "git %s" in "%s"' % (' '.join(cmd), cwd))
235
+ gclient_utils.CheckCallAndFilter([self.git_exe] + cmd, **kwargs)
236
+
237
+ def config(self, cwd=None, reset_fetch_config=False):
238
+ if cwd is None:
239
+ cwd = self.mirror_path
240
+
241
+ if reset_fetch_config:
242
+ try:
243
+ self.RunGit(['config', '--unset-all', 'remote.origin.fetch'], cwd=cwd)
244
+ except subprocess.CalledProcessError as e:
245
+ # If exit code was 5, it means we attempted to unset a config that
246
+ # didn't exist. Ignore it.
247
+ if e.returncode != 5:
248
+ raise
249
+
250
+ # Don't run git-gc in a daemon. Bad things can happen if it gets killed.
251
+ try:
252
+ self.RunGit(['config', 'gc.autodetach', '0'], cwd=cwd)
253
+ except subprocess.CalledProcessError:
254
+ # Hard error, need to clobber.
255
+ raise ClobberNeeded()
256
+
257
+ # Don't combine pack files into one big pack file. It's really slow for
258
+ # repositories, and there's no way to track progress and make sure it's
259
+ # not stuck.
260
+ if self.supported_project():
261
+ self.RunGit(['config', 'gc.autopacklimit', '0'], cwd=cwd)
262
+
263
+ # Allocate more RAM for cache-ing delta chains, for better performance
264
+ # of "Resolving deltas".
265
+ self.RunGit(['config', 'core.deltaBaseCacheLimit',
266
+ gclient_utils.DefaultDeltaBaseCacheLimit()], cwd=cwd)
267
+
268
+ self.RunGit(['config', 'remote.origin.url', self.url], cwd=cwd)
269
+ self.RunGit(['config', '--replace-all', 'remote.origin.fetch',
270
+ '+refs/heads/*:refs/heads/*', r'\+refs/heads/\*:.*'], cwd=cwd)
271
+ for spec, value_regex in self.fetch_specs:
272
+ self.RunGit(
273
+ ['config', '--replace-all', 'remote.origin.fetch', spec, value_regex],
274
+ cwd=cwd)
275
+
276
+ def bootstrap_repo(self, directory):
277
+ """Bootstrap the repo from Google Storage if possible.
278
+
279
+ More apt-ly named bootstrap_repo_from_cloud_if_possible_else_do_nothing().
280
+ """
281
+ if not self.bootstrap_bucket:
282
+ return False
283
+
284
+ gsutil = Gsutil(self.gsutil_exe, boto_path=None)
285
+
286
+ # Get the most recent version of the directory.
287
+ # This is determined from the most recent version of a .ready file.
288
+ # The .ready file is only uploaded when an entire directory has been
289
+ # uploaded to GS.
290
+ _, ls_out, ls_err = gsutil.check_call('ls', self._gs_path)
291
+ ls_out_set = set(ls_out.strip().splitlines())
292
+ latest_dir = self._GetMostRecentCacheDirectory(ls_out_set)
293
+
294
+ if not latest_dir:
295
+ self.print('No bootstrap file for %s found in %s, stderr:\n %s' %
296
+ (self.mirror_path, self.bootstrap_bucket,
297
+ ' '.join((ls_err or '').splitlines(True))))
298
+ return False
299
+
300
+ try:
301
+ # create new temporary directory locally
302
+ tempdir = tempfile.mkdtemp(prefix='_cache_tmp', dir=self.GetCachePath())
303
+ self.RunGit(['init', '--bare'], cwd=tempdir)
304
+ self.print('Downloading files in %s/* into %s.' %
305
+ (latest_dir, tempdir))
306
+ with self.print_duration_of('download'):
307
+ code = gsutil.call('-m', 'cp', '-r', latest_dir + "/*",
308
+ tempdir)
309
+ if code:
310
+ return False
311
+ except Exception as e:
312
+ self.print('Encountered error: %s' % str(e), file=sys.stderr)
313
+ gclient_utils.rmtree(tempdir)
314
+ return False
315
+ # delete the old directory
316
+ if os.path.exists(directory):
317
+ gclient_utils.rmtree(directory)
318
+ self.Rename(tempdir, directory)
319
+ return True
320
+
321
+ def contains_revision(self, revision):
322
+ if not self.exists():
323
+ return False
324
+
325
+ if sys.platform.startswith('win'):
326
+ # Windows .bat scripts use ^ as escape sequence, which means we have to
327
+ # escape it with itself for every .bat invocation.
328
+ needle = '%s^^^^{commit}' % revision
329
+ else:
330
+ needle = '%s^{commit}' % revision
331
+ try:
332
+ # cat-file exits with 0 on success, that is git object of given hash was
333
+ # found.
334
+ self.RunGit(['cat-file', '-e', needle])
335
+ return True
336
+ except subprocess.CalledProcessError:
337
+ return False
338
+
339
+ def exists(self):
340
+ return os.path.isfile(os.path.join(self.mirror_path, 'config'))
341
+
342
+ def supported_project(self):
343
+ """Returns true if this repo is known to have a bootstrap zip file."""
344
+ u = urlparse.urlparse(self.url)
345
+ return u.netloc in [
346
+ 'chromium.googlesource.com',
347
+ 'chrome-internal.googlesource.com']
348
+
349
+ def _preserve_fetchspec(self):
350
+ """Read and preserve remote.origin.fetch from an existing mirror.
351
+
352
+ This modifies self.fetch_specs.
353
+ """
354
+ if not self.exists():
355
+ return
356
+ try:
357
+ config_fetchspecs = subprocess.check_output(
358
+ [self.git_exe, 'config', '--get-all', 'remote.origin.fetch'],
359
+ cwd=self.mirror_path).decode('utf-8', 'ignore')
360
+ for fetchspec in config_fetchspecs.splitlines():
361
+ self.fetch_specs.add(self.parse_fetch_spec(fetchspec))
362
+ except subprocess.CalledProcessError:
363
+ logging.warn('Tried and failed to preserve remote.origin.fetch from the '
364
+ 'existing cache directory. You may need to manually edit '
365
+ '%s and "git cache fetch" again.'
366
+ % os.path.join(self.mirror_path, 'config'))
367
+
368
+ def _ensure_bootstrapped(
369
+ self, depth, bootstrap, reset_fetch_config, force=False):
370
+ pack_dir = os.path.join(self.mirror_path, 'objects', 'pack')
371
+ pack_files = []
372
+ if os.path.isdir(pack_dir):
373
+ pack_files = [f for f in os.listdir(pack_dir) if f.endswith('.pack')]
374
+ self.print('%s has %d .pack files, re-bootstrapping if >%d or ==0' %
375
+ (self.mirror_path, len(pack_files), GC_AUTOPACKLIMIT))
376
+
377
+ should_bootstrap = (force or
378
+ not self.exists() or
379
+ len(pack_files) > GC_AUTOPACKLIMIT or
380
+ len(pack_files) == 0)
381
+
382
+ if not should_bootstrap:
383
+ if depth and os.path.exists(os.path.join(self.mirror_path, 'shallow')):
384
+ logging.warn(
385
+ 'Shallow fetch requested, but repo cache already exists.')
386
+ return
387
+
388
+ if not self.exists():
389
+ if os.path.exists(self.mirror_path):
390
+ # If the mirror path exists but self.exists() returns false, we're
391
+ # in an unexpected state. Nuke the previous mirror directory and
392
+ # start fresh.
393
+ gclient_utils.rmtree(self.mirror_path)
394
+ os.mkdir(self.mirror_path)
395
+ elif not reset_fetch_config:
396
+ # Re-bootstrapping an existing mirror; preserve existing fetch spec.
397
+ self._preserve_fetchspec()
398
+
399
+ bootstrapped = (not depth and bootstrap and
400
+ self.bootstrap_repo(self.mirror_path))
401
+
402
+ if not bootstrapped:
403
+ if not self.exists() or not self.supported_project():
404
+ # Bootstrap failed due to:
405
+ # 1. No previous cache.
406
+ # 2. Project doesn't have a bootstrap folder.
407
+ # Start with a bare git dir.
408
+ self.RunGit(['init', '--bare'], cwd=self.mirror_path)
409
+ else:
410
+ # Bootstrap failed, previous cache exists; warn and continue.
411
+ logging.warn(
412
+ 'Git cache has a lot of pack files (%d). Tried to re-bootstrap '
413
+ 'but failed. Continuing with non-optimized repository.'
414
+ % len(pack_files))
415
+
416
+ def _fetch(self,
417
+ rundir,
418
+ verbose,
419
+ depth,
420
+ no_fetch_tags,
421
+ reset_fetch_config,
422
+ prune=True):
423
+ self.config(rundir, reset_fetch_config)
424
+
425
+ fetch_cmd = ['fetch']
426
+ if verbose:
427
+ fetch_cmd.extend(['-v', '--progress'])
428
+ if depth:
429
+ fetch_cmd.extend(['--depth', str(depth)])
430
+ if no_fetch_tags:
431
+ fetch_cmd.append('--no-tags')
432
+ if prune:
433
+ fetch_cmd.append('--prune')
434
+ fetch_cmd.append('origin')
435
+
436
+ fetch_specs = subprocess.check_output(
437
+ [self.git_exe, 'config', '--get-all', 'remote.origin.fetch'],
438
+ cwd=rundir).decode('utf-8', 'ignore').strip().splitlines()
439
+ for spec in fetch_specs:
440
+ try:
441
+ self.print('Fetching %s' % spec)
442
+ with self.print_duration_of('fetch %s' % spec):
443
+ self.RunGit(fetch_cmd + [spec], cwd=rundir, retry=True)
444
+ except subprocess.CalledProcessError:
445
+ if spec == '+refs/heads/*:refs/heads/*':
446
+ raise ClobberNeeded() # Corrupted cache.
447
+ logging.warn('Fetch of %s failed' % spec)
448
+
449
+ def populate(self,
450
+ depth=None,
451
+ no_fetch_tags=False,
452
+ shallow=False,
453
+ bootstrap=False,
454
+ verbose=False,
455
+ lock_timeout=0,
456
+ reset_fetch_config=False):
457
+ assert self.GetCachePath()
458
+ if shallow and not depth:
459
+ depth = 10000
460
+ gclient_utils.safe_makedirs(self.GetCachePath())
461
+
462
+ with lockfile.lock(self.mirror_path, lock_timeout):
463
+ try:
464
+ self._ensure_bootstrapped(depth, bootstrap, reset_fetch_config)
465
+ self._fetch(self.mirror_path, verbose, depth, no_fetch_tags,
466
+ reset_fetch_config)
467
+ except ClobberNeeded:
468
+ # This is a major failure, we need to clean and force a bootstrap.
469
+ gclient_utils.rmtree(self.mirror_path)
470
+ self.print(GIT_CACHE_CORRUPT_MESSAGE)
471
+ self._ensure_bootstrapped(depth,
472
+ bootstrap,
473
+ reset_fetch_config,
474
+ force=True)
475
+ self._fetch(self.mirror_path, verbose, depth, no_fetch_tags,
476
+ reset_fetch_config)
477
+
478
+ def update_bootstrap(self, prune=False, gc_aggressive=False):
479
+ # The folder is <git number>
480
+ gen_number = subprocess.check_output(
481
+ [self.git_exe, 'number', 'master'],
482
+ cwd=self.mirror_path).decode('utf-8', 'ignore').strip()
483
+ gsutil = Gsutil(path=self.gsutil_exe, boto_path=None)
484
+
485
+ src_name = self.mirror_path
486
+ dest_prefix = '%s/%s' % (self._gs_path, gen_number)
487
+
488
+ # ls_out lists contents in the format: gs://blah/blah/123...
489
+ _, ls_out, _ = gsutil.check_call('ls', self._gs_path)
490
+
491
+ # Check to see if folder already exists in gs
492
+ ls_out_set = set(ls_out.strip().splitlines())
493
+ if (dest_prefix + '/' in ls_out_set and
494
+ dest_prefix + '.ready' in ls_out_set):
495
+ print('Cache %s already exists.' % dest_prefix)
496
+ return
497
+
498
+ # Run Garbage Collect to compress packfile.
499
+ gc_args = ['gc', '--prune=all']
500
+ if gc_aggressive:
501
+ # The default "gc --aggressive" is often too aggressive for some machines,
502
+ # since it attempts to create as many threads as there are CPU cores,
503
+ # while not limiting per-thread memory usage, which puts too much pressure
504
+ # on RAM on high-core machines, causing them to thrash. Using lower-level
505
+ # commands gives more control over those settings.
506
+
507
+ # This might not be strictly necessary, but it's fast and is normally run
508
+ # by 'gc --aggressive', so it shouldn't hurt.
509
+ self.RunGit(['reflog', 'expire', '--all'])
510
+
511
+ # These are the default repack settings for 'gc --aggressive'.
512
+ gc_args = ['repack', '-d', '-l', '-f', '--depth=50', '--window=250', '-A',
513
+ '--unpack-unreachable=all']
514
+ # A 1G memory limit seems to provide comparable pack results as the
515
+ # default, even for our largest repos, while preventing runaway memory (at
516
+ # least on current Chromium builders which have about 4G RAM per core).
517
+ gc_args.append('--window-memory=1g')
518
+ # NOTE: It might also be possible to avoid thrashing with a larger window
519
+ # (e.g. "--window-memory=2g") by limiting the number of threads created
520
+ # (e.g. "--threads=[cores/2]"). Some limited testing didn't show much
521
+ # difference in outcomes on our current repos, but it might be worth
522
+ # trying if the repos grow much larger and the packs don't seem to be
523
+ # getting compressed enough.
524
+ self.RunGit(gc_args)
525
+
526
+ gsutil.call('-m', 'cp', '-r', src_name, dest_prefix)
527
+
528
+ # Create .ready file and upload
529
+ _, ready_file_name = tempfile.mkstemp(suffix='.ready')
530
+ try:
531
+ gsutil.call('cp', ready_file_name, '%s.ready' % (dest_prefix))
532
+ finally:
533
+ os.remove(ready_file_name)
534
+
535
+ # remove all other directory/.ready files in the same gs_path
536
+ # except for the directory/.ready file previously created
537
+ # which can be used for bootstrapping while the current one is
538
+ # being uploaded
539
+ if not prune:
540
+ return
541
+ prev_dest_prefix = self._GetMostRecentCacheDirectory(ls_out_set)
542
+ if not prev_dest_prefix:
543
+ return
544
+ for path in ls_out_set:
545
+ if (path == prev_dest_prefix + '/' or
546
+ path == prev_dest_prefix + '.ready'):
547
+ continue
548
+ if path.endswith('.ready'):
549
+ gsutil.call('rm', path)
550
+ continue
551
+ gsutil.call('-m', 'rm', '-r', path)
552
+
553
+
554
+ @staticmethod
555
+ def DeleteTmpPackFiles(path):
556
+ pack_dir = os.path.join(path, 'objects', 'pack')
557
+ if not os.path.isdir(pack_dir):
558
+ return
559
+ pack_files = [f for f in os.listdir(pack_dir) if
560
+ f.startswith('.tmp-') or f.startswith('tmp_pack_')]
561
+ for f in pack_files:
562
+ f = os.path.join(pack_dir, f)
563
+ try:
564
+ os.remove(f)
565
+ logging.warn('Deleted stale temporary pack file %s' % f)
566
+ except OSError:
567
+ logging.warn('Unable to delete temporary pack file %s' % f)
568
+
569
+
570
+ @subcommand.usage('[url of repo to check for caching]')
571
+ def CMDexists(parser, args):
572
+ """Check to see if there already is a cache of the given repo."""
573
+ _, args = parser.parse_args(args)
574
+ if not len(args) == 1:
575
+ parser.error('git cache exists only takes exactly one repo url.')
576
+ url = args[0]
577
+ mirror = Mirror(url)
578
+ if mirror.exists():
579
+ print(mirror.mirror_path)
580
+ return 0
581
+ return 1
582
+
583
+
584
+ @subcommand.usage('[url of repo to create a bootstrap zip file]')
585
+ def CMDupdate_bootstrap(parser, args):
586
+ """Create and uploads a bootstrap tarball."""
587
+ # Lets just assert we can't do this on Windows.
588
+ if sys.platform.startswith('win'):
589
+ print('Sorry, update bootstrap will not work on Windows.', file=sys.stderr)
590
+ return 1
591
+
592
+ parser.add_option('--skip-populate', action='store_true',
593
+ help='Skips "populate" step if mirror already exists.')
594
+ parser.add_option('--gc-aggressive', action='store_true',
595
+ help='Run aggressive repacking of the repo.')
596
+ parser.add_option('--prune', action='store_true',
597
+ help='Prune all other cached bundles of the same repo.')
598
+
599
+ populate_args = args[:]
600
+ options, args = parser.parse_args(args)
601
+ url = args[0]
602
+ mirror = Mirror(url)
603
+ if not options.skip_populate or not mirror.exists():
604
+ CMDpopulate(parser, populate_args)
605
+ else:
606
+ print('Skipped populate step.')
607
+
608
+ # Get the repo directory.
609
+ _, args2 = parser.parse_args(args)
610
+ url = args2[0]
611
+ mirror = Mirror(url)
612
+ mirror.update_bootstrap(options.prune, options.gc_aggressive)
613
+ return 0
614
+
615
+
616
+ @subcommand.usage('[url of repo to add to or update in cache]')
617
+ def CMDpopulate(parser, args):
618
+ """Ensure that the cache has all up-to-date objects for the given repo."""
619
+ parser.add_option('--depth', type='int',
620
+ help='Only cache DEPTH commits of history')
621
+ parser.add_option(
622
+ '--no-fetch-tags',
623
+ action='store_true',
624
+ help=('Don\'t fetch tags from the server. This can speed up '
625
+ 'fetch considerably when there are many tags.'))
626
+ parser.add_option('--shallow', '-s', action='store_true',
627
+ help='Only cache 10000 commits of history')
628
+ parser.add_option('--ref', action='append',
629
+ help='Specify additional refs to be fetched')
630
+ parser.add_option('--no_bootstrap', '--no-bootstrap',
631
+ action='store_true',
632
+ help='Don\'t bootstrap from Google Storage')
633
+ parser.add_option('--ignore_locks',
634
+ '--ignore-locks',
635
+ action='store_true',
636
+ help='NOOP. This flag will be removed in the future.')
637
+ parser.add_option('--break-locks',
638
+ action='store_true',
639
+ help='Break any existing lock instead of just ignoring it')
640
+ parser.add_option('--reset-fetch-config', action='store_true', default=False,
641
+ help='Reset the fetch config before populating the cache.')
642
+
643
+ options, args = parser.parse_args(args)
644
+ if not len(args) == 1:
645
+ parser.error('git cache populate only takes exactly one repo url.')
646
+ if options.ignore_locks:
647
+ print('ignore_locks is no longer used. Please remove its usage.')
648
+ if options.break_locks:
649
+ print('break_locks is no longer used. Please remove its usage.')
650
+ url = args[0]
651
+
652
+ mirror = Mirror(url, refs=options.ref)
653
+ kwargs = {
654
+ 'no_fetch_tags': options.no_fetch_tags,
655
+ 'verbose': options.verbose,
656
+ 'shallow': options.shallow,
657
+ 'bootstrap': not options.no_bootstrap,
658
+ 'lock_timeout': options.timeout,
659
+ 'reset_fetch_config': options.reset_fetch_config,
660
+ }
661
+ if options.depth:
662
+ kwargs['depth'] = options.depth
663
+ mirror.populate(**kwargs)
664
+
665
+
666
+ @subcommand.usage('Fetch new commits into cache and current checkout')
667
+ def CMDfetch(parser, args):
668
+ """Update mirror, and fetch in cwd."""
669
+ parser.add_option('--all', action='store_true', help='Fetch all remotes')
670
+ parser.add_option('--no_bootstrap', '--no-bootstrap',
671
+ action='store_true',
672
+ help='Don\'t (re)bootstrap from Google Storage')
673
+ parser.add_option(
674
+ '--no-fetch-tags',
675
+ action='store_true',
676
+ help=('Don\'t fetch tags from the server. This can speed up '
677
+ 'fetch considerably when there are many tags.'))
678
+ options, args = parser.parse_args(args)
679
+
680
+ # Figure out which remotes to fetch. This mimics the behavior of regular
681
+ # 'git fetch'. Note that in the case of "stacked" or "pipelined" branches,
682
+ # this will NOT try to traverse up the branching structure to find the
683
+ # ultimate remote to update.
684
+ remotes = []
685
+ if options.all:
686
+ assert not args, 'fatal: fetch --all does not take a repository argument'
687
+ remotes = subprocess.check_output([Mirror.git_exe, 'remote'])
688
+ remotes = remotes.decode('utf-8', 'ignore').splitlines()
689
+ elif args:
690
+ remotes = args
691
+ else:
692
+ current_branch = subprocess.check_output(
693
+ [Mirror.git_exe, 'rev-parse', '--abbrev-ref', 'HEAD'])
694
+ current_branch = current_branch.decode('utf-8', 'ignore').strip()
695
+ if current_branch != 'HEAD':
696
+ upstream = subprocess.check_output(
697
+ [Mirror.git_exe, 'config', 'branch.%s.remote' % current_branch])
698
+ upstream = upstream.decode('utf-8', 'ignore').strip()
699
+ if upstream and upstream != '.':
700
+ remotes = [upstream]
701
+ if not remotes:
702
+ remotes = ['origin']
703
+
704
+ cachepath = Mirror.GetCachePath()
705
+ git_dir = os.path.abspath(subprocess.check_output(
706
+ [Mirror.git_exe, 'rev-parse', '--git-dir']).decode('utf-8', 'ignore'))
707
+ git_dir = os.path.abspath(git_dir)
708
+ if git_dir.startswith(cachepath):
709
+ mirror = Mirror.FromPath(git_dir)
710
+ mirror.populate(
711
+ bootstrap=not options.no_bootstrap,
712
+ no_fetch_tags=options.no_fetch_tags,
713
+ lock_timeout=options.timeout)
714
+ return 0
715
+ for remote in remotes:
716
+ remote_url = subprocess.check_output(
717
+ [Mirror.git_exe, 'config', 'remote.%s.url' % remote])
718
+ remote_url = remote_url.decode('utf-8', 'ignore').strip()
719
+ if remote_url.startswith(cachepath):
720
+ mirror = Mirror.FromPath(remote_url)
721
+ mirror.print = lambda *args: None
722
+ print('Updating git cache...')
723
+ mirror.populate(
724
+ bootstrap=not options.no_bootstrap,
725
+ no_fetch_tags=options.no_fetch_tags,
726
+ lock_timeout=options.timeout)
727
+ subprocess.check_call([Mirror.git_exe, 'fetch', remote])
728
+ return 0
729
+
730
+
731
+ @subcommand.usage('do not use - it is a noop.')
732
+ def CMDunlock(parser, args):
733
+ """This command does nothing."""
734
+ print('This command does nothing and will be removed in the future.')
735
+
736
+
737
+ class OptionParser(optparse.OptionParser):
738
+ """Wrapper class for OptionParser to handle global options."""
739
+
740
+ def __init__(self, *args, **kwargs):
741
+ optparse.OptionParser.__init__(self, *args, prog='git cache', **kwargs)
742
+ self.add_option('-c', '--cache-dir',
743
+ help=(
744
+ 'Path to the directory containing the caches. Normally '
745
+ 'deduced from git config cache.cachepath or '
746
+ '$GIT_CACHE_PATH.'))
747
+ self.add_option('-v', '--verbose', action='count', default=1,
748
+ help='Increase verbosity (can be passed multiple times)')
749
+ self.add_option('-q', '--quiet', action='store_true',
750
+ help='Suppress all extraneous output')
751
+ self.add_option('--timeout', type='int', default=0,
752
+ help='Timeout for acquiring cache lock, in seconds')
753
+
754
+ def parse_args(self, args=None, values=None):
755
+ options, args = optparse.OptionParser.parse_args(self, args, values)
756
+ if options.quiet:
757
+ options.verbose = 0
758
+
759
+ levels = [logging.ERROR, logging.WARNING, logging.INFO, logging.DEBUG]
760
+ logging.basicConfig(level=levels[min(options.verbose, len(levels) - 1)])
761
+
762
+ try:
763
+ global_cache_dir = Mirror.GetCachePath()
764
+ except RuntimeError:
765
+ global_cache_dir = None
766
+ if options.cache_dir:
767
+ if global_cache_dir and (
768
+ os.path.abspath(options.cache_dir) !=
769
+ os.path.abspath(global_cache_dir)):
770
+ logging.warn('Overriding globally-configured cache directory.')
771
+ Mirror.SetCachePath(options.cache_dir)
772
+
773
+ return options, args
774
+
775
+
776
+ def main(argv):
777
+ dispatcher = subcommand.CommandDispatcher(__name__)
778
+ return dispatcher.execute(OptionParser(), argv)
779
+
780
+
781
+ if __name__ == '__main__':
782
+ try:
783
+ sys.exit(main(sys.argv[1:]))
784
+ except KeyboardInterrupt:
785
+ sys.stderr.write('interrupted\n')
786
+ sys.exit(1)