libv8 7.3.492.27.0 → 8.4.255.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (718) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +11 -14
  4. data/CHANGELOG.md +10 -0
  5. data/README.md +10 -11
  6. data/Rakefile +30 -36
  7. data/ext/libv8/builder.rb +1 -1
  8. data/lib/libv8/version.rb +1 -1
  9. data/libv8.gemspec +1 -3
  10. data/vendor/depot_tools/{cipd.ps1 → .cipd_impl.ps1} +0 -0
  11. data/vendor/depot_tools/.gitattributes +1 -1
  12. data/vendor/depot_tools/.gitignore +7 -2
  13. data/vendor/depot_tools/.style.yapf +3 -1
  14. data/vendor/depot_tools/.vpython +55 -0
  15. data/vendor/depot_tools/.vpython3 +23 -0
  16. data/vendor/depot_tools/CROS_OWNERS +3 -1
  17. data/vendor/depot_tools/GOMA_OWNERS +9 -0
  18. data/vendor/depot_tools/LUCI_OWNERS +5 -0
  19. data/vendor/depot_tools/OWNERS +21 -6
  20. data/vendor/depot_tools/PRESUBMIT.py +35 -18
  21. data/vendor/depot_tools/README.git-cl.md +0 -14
  22. data/vendor/depot_tools/README.md +1 -1
  23. data/vendor/depot_tools/WATCHLISTS +2 -2
  24. data/vendor/depot_tools/auth.py +60 -772
  25. data/vendor/depot_tools/autoninja +12 -6
  26. data/vendor/depot_tools/autoninja.bat +14 -6
  27. data/vendor/depot_tools/autoninja.py +64 -27
  28. data/vendor/depot_tools/bb +1 -1
  29. data/vendor/depot_tools/bootstrap/{win/README.md → README.md} +28 -14
  30. data/vendor/depot_tools/bootstrap/{win/win_tools.py → bootstrap.py} +60 -43
  31. data/vendor/depot_tools/bootstrap/{win/git-bash.template.sh → git-bash.template.sh} +1 -1
  32. data/vendor/depot_tools/bootstrap/{win/git.template.bat → git.template.bat} +0 -0
  33. data/vendor/depot_tools/bootstrap/manifest.txt +27 -0
  34. data/vendor/depot_tools/bootstrap/manifest_bleeding_edge.txt +27 -0
  35. data/vendor/depot_tools/bootstrap/{win/profile.d.python.sh → profile.d.python.sh} +0 -0
  36. data/vendor/depot_tools/bootstrap/{win/python27.bleeding_edge.bat → python27.bat} +0 -0
  37. data/vendor/depot_tools/bootstrap/{win/python27.new.bat → python3.bat} +3 -3
  38. data/vendor/depot_tools/bootstrap/{win/win_tools.bat → win_tools.bat} +21 -16
  39. data/vendor/depot_tools/bootstrap_python3 +35 -0
  40. data/vendor/depot_tools/cbuildbot +1 -1
  41. data/vendor/depot_tools/chrome_set_ver +1 -1
  42. data/vendor/depot_tools/cipd +43 -39
  43. data/vendor/depot_tools/cipd.bat +2 -2
  44. data/vendor/depot_tools/cipd_client_version +1 -1
  45. data/vendor/depot_tools/cipd_client_version.digests +15 -14
  46. data/vendor/depot_tools/cipd_manifest.txt +31 -8
  47. data/vendor/depot_tools/cipd_manifest.versions +278 -158
  48. data/vendor/depot_tools/cit.py +9 -7
  49. data/vendor/depot_tools/clang_format.py +4 -1
  50. data/vendor/depot_tools/clang_format_merge_driver.py +10 -8
  51. data/vendor/depot_tools/compile_single_file.py +7 -2
  52. data/vendor/depot_tools/cpplint.py +51 -45
  53. data/vendor/depot_tools/cros +87 -0
  54. data/vendor/depot_tools/cros_sdk +1 -1
  55. data/vendor/depot_tools/crosjobs +13 -0
  56. data/vendor/depot_tools/detect_host_arch.py +0 -1
  57. data/vendor/depot_tools/dirmd +12 -0
  58. data/vendor/depot_tools/dirmd.bat +7 -0
  59. data/vendor/depot_tools/download_from_google_storage.py +47 -27
  60. data/vendor/depot_tools/ensure_bootstrap +14 -0
  61. data/vendor/depot_tools/fetch +14 -1
  62. data/vendor/depot_tools/fetch.bat +14 -1
  63. data/vendor/depot_tools/fetch.py +5 -7
  64. data/vendor/depot_tools/fetch_configs/chromium.py +6 -4
  65. data/vendor/depot_tools/fetch_configs/devtools-frontend.py +44 -0
  66. data/vendor/depot_tools/fetch_configs/ios_internal.py +10 -19
  67. data/vendor/depot_tools/fix_encoding.py +19 -5
  68. data/vendor/depot_tools/gclient +28 -12
  69. data/vendor/depot_tools/gclient-new-workdir.py +2 -0
  70. data/vendor/depot_tools/gclient.bat +18 -1
  71. data/vendor/depot_tools/gclient.py +160 -119
  72. data/vendor/depot_tools/gclient_eval.py +119 -107
  73. data/vendor/depot_tools/gclient_paths.py +67 -57
  74. data/vendor/depot_tools/gclient_scm.py +181 -159
  75. data/vendor/depot_tools/gclient_utils.py +177 -124
  76. data/vendor/depot_tools/gerrit_client.py +21 -13
  77. data/vendor/depot_tools/gerrit_util.py +188 -228
  78. data/vendor/depot_tools/git-cache +1 -1
  79. data/vendor/depot_tools/git-cl +1 -1
  80. data/vendor/depot_tools/git-drover +1 -1
  81. data/vendor/depot_tools/git-find-releases +1 -1
  82. data/vendor/depot_tools/git-footers +1 -1
  83. data/vendor/depot_tools/git-freeze +1 -1
  84. data/vendor/depot_tools/git-hyper-blame +1 -1
  85. data/vendor/depot_tools/git-map +1 -1
  86. data/vendor/depot_tools/git-map-branches +1 -1
  87. data/vendor/depot_tools/git-mark-merge-base +1 -1
  88. data/vendor/depot_tools/git-nav-downstream +1 -1
  89. data/vendor/depot_tools/git-new-branch +1 -1
  90. data/vendor/depot_tools/git-number +1 -1
  91. data/vendor/depot_tools/git-rebase-update +1 -1
  92. data/vendor/depot_tools/git-rename-branch +1 -1
  93. data/vendor/depot_tools/git-reparent-branch +1 -1
  94. data/vendor/depot_tools/git-retry +1 -1
  95. data/vendor/depot_tools/git-squash-branch +1 -1
  96. data/vendor/depot_tools/git-thaw +1 -1
  97. data/vendor/depot_tools/git-upstream-diff +1 -1
  98. data/vendor/depot_tools/git_cache.py +255 -360
  99. data/vendor/depot_tools/git_cl.py +1562 -2059
  100. data/vendor/depot_tools/git_cl_completion.sh +16 -2
  101. data/vendor/depot_tools/git_common.py +77 -32
  102. data/vendor/depot_tools/git_drover.py +17 -8
  103. data/vendor/depot_tools/git_find_releases.py +11 -9
  104. data/vendor/depot_tools/git_footers.py +13 -9
  105. data/vendor/depot_tools/git_freezer.py +3 -1
  106. data/vendor/depot_tools/git_hyper_blame.py +25 -32
  107. data/vendor/depot_tools/git_map.py +115 -93
  108. data/vendor/depot_tools/git_map_branches.py +11 -10
  109. data/vendor/depot_tools/git_mark_merge_base.py +8 -6
  110. data/vendor/depot_tools/git_nav_downstream.py +9 -6
  111. data/vendor/depot_tools/git_new_branch.py +39 -33
  112. data/vendor/depot_tools/git_number.py +28 -17
  113. data/vendor/depot_tools/git_rebase_update.py +50 -49
  114. data/vendor/depot_tools/git_rename_branch.py +2 -2
  115. data/vendor/depot_tools/git_reparent_branch.py +8 -6
  116. data/vendor/depot_tools/git_upstream_diff.py +4 -2
  117. data/vendor/depot_tools/gn.py +6 -4
  118. data/vendor/depot_tools/goma_auth +12 -0
  119. data/vendor/depot_tools/goma_auth.bat +8 -0
  120. data/vendor/depot_tools/goma_ctl +12 -0
  121. data/vendor/depot_tools/goma_ctl.bat +8 -0
  122. data/vendor/depot_tools/gsutil.py +5 -2
  123. data/vendor/depot_tools/gsutil.py.bat +8 -0
  124. data/vendor/depot_tools/gsutil.vpython +3 -1
  125. data/vendor/depot_tools/infra/config/OWNERS +2 -2
  126. data/vendor/depot_tools/infra/config/recipes.cfg +3 -2
  127. data/vendor/depot_tools/led +1 -1
  128. data/vendor/depot_tools/lockfile.py +116 -0
  129. data/vendor/depot_tools/luci-auth +1 -1
  130. data/vendor/depot_tools/lucicfg +1 -1
  131. data/vendor/depot_tools/mac_toolchain +1 -1
  132. data/vendor/depot_tools/man/html/depot_tools.html +1 -1
  133. data/vendor/depot_tools/man/html/depot_tools_tutorial.html +31 -25
  134. data/vendor/depot_tools/man/html/git-cl.html +1 -1
  135. data/vendor/depot_tools/man/html/git-drover.html +18 -18
  136. data/vendor/depot_tools/man/html/git-footers.html +1 -1
  137. data/vendor/depot_tools/man/html/git-freeze.html +3 -3
  138. data/vendor/depot_tools/man/html/git-hyper-blame.html +1 -1
  139. data/vendor/depot_tools/man/html/git-map-branches.html +2 -2
  140. data/vendor/depot_tools/man/html/git-map.html +1 -1
  141. data/vendor/depot_tools/man/html/git-mark-merge-base.html +1 -1
  142. data/vendor/depot_tools/man/html/git-nav-downstream.html +3 -3
  143. data/vendor/depot_tools/man/html/git-nav-upstream.html +12 -6
  144. data/vendor/depot_tools/man/html/git-new-branch.html +1 -1
  145. data/vendor/depot_tools/man/html/git-rebase-update.html +20 -1
  146. data/vendor/depot_tools/man/html/git-rename-branch.html +1 -1
  147. data/vendor/depot_tools/man/html/git-reparent-branch.html +1 -1
  148. data/vendor/depot_tools/man/html/git-retry.html +1 -1
  149. data/vendor/depot_tools/man/html/git-squash-branch.html +1 -1
  150. data/vendor/depot_tools/man/html/git-thaw.html +1 -1
  151. data/vendor/depot_tools/man/html/git-upstream-diff.html +10 -6
  152. data/vendor/depot_tools/man/man1/git-cl.1 +4 -4
  153. data/vendor/depot_tools/man/man1/git-drover.1 +21 -21
  154. data/vendor/depot_tools/man/man1/git-footers.1 +4 -4
  155. data/vendor/depot_tools/man/man1/git-freeze.1 +6 -6
  156. data/vendor/depot_tools/man/man1/git-hyper-blame.1 +4 -4
  157. data/vendor/depot_tools/man/man1/git-map-branches.1 +4 -4
  158. data/vendor/depot_tools/man/man1/git-map.1 +4 -4
  159. data/vendor/depot_tools/man/man1/git-mark-merge-base.1 +4 -4
  160. data/vendor/depot_tools/man/man1/git-nav-downstream.1 +6 -6
  161. data/vendor/depot_tools/man/man1/git-nav-upstream.1 +15 -9
  162. data/vendor/depot_tools/man/man1/git-new-branch.1 +3 -3
  163. data/vendor/depot_tools/man/man1/git-rebase-update.1 +14 -4
  164. data/vendor/depot_tools/man/man1/git-rename-branch.1 +4 -4
  165. data/vendor/depot_tools/man/man1/git-reparent-branch.1 +4 -4
  166. data/vendor/depot_tools/man/man1/git-retry.1 +4 -4
  167. data/vendor/depot_tools/man/man1/git-squash-branch.1 +4 -4
  168. data/vendor/depot_tools/man/man1/git-thaw.1 +4 -4
  169. data/vendor/depot_tools/man/man1/git-upstream-diff.1 +7 -13
  170. data/vendor/depot_tools/man/man7/depot_tools.7 +4 -4
  171. data/vendor/depot_tools/man/man7/depot_tools_tutorial.7 +31 -25
  172. data/vendor/depot_tools/man/src/common_demo_functions.sh +2 -2
  173. data/vendor/depot_tools/man/src/depot_tools_tutorial.txt +3 -3
  174. data/vendor/depot_tools/man/src/filter_demo_output.py +4 -2
  175. data/vendor/depot_tools/man/src/git-new-branch.txt +2 -1
  176. data/vendor/depot_tools/man/src/git-rebase-update.txt +8 -1
  177. data/vendor/depot_tools/metrics.README.md +8 -5
  178. data/vendor/depot_tools/metrics.py +7 -6
  179. data/vendor/depot_tools/metrics_utils.py +4 -14
  180. data/vendor/depot_tools/my_activity.py +85 -251
  181. data/vendor/depot_tools/ninja +1 -0
  182. data/vendor/depot_tools/ninja-mac +0 -0
  183. data/vendor/depot_tools/ninjalog_uploader.py +146 -145
  184. data/vendor/depot_tools/ninjalog_uploader_wrapper.py +69 -60
  185. data/vendor/depot_tools/owners.py +156 -43
  186. data/vendor/depot_tools/owners_finder.py +28 -14
  187. data/vendor/depot_tools/post_build_ninja_summary.py +76 -48
  188. data/vendor/depot_tools/presubmit_canned_checks.py +293 -106
  189. data/vendor/depot_tools/presubmit_support.py +527 -333
  190. data/vendor/depot_tools/prpc +1 -1
  191. data/vendor/depot_tools/pylint +2 -12
  192. data/vendor/depot_tools/pylint-1.5 +78 -0
  193. data/vendor/depot_tools/pylint-1.6 +78 -0
  194. data/vendor/depot_tools/pylint-1.7 +78 -0
  195. data/vendor/depot_tools/pylint-1.8 +78 -0
  196. data/vendor/depot_tools/pylint-1.9 +78 -0
  197. data/vendor/depot_tools/{depot-tools-auth.bat → pylint.bat} +2 -2
  198. data/vendor/depot_tools/pylint_main.py +45 -0
  199. data/vendor/depot_tools/pylintrc +14 -1
  200. data/vendor/depot_tools/python-bin/python3 +7 -0
  201. data/vendor/depot_tools/python_runner.sh +13 -8
  202. data/vendor/depot_tools/rdb +12 -0
  203. data/vendor/depot_tools/rdb.bat +7 -0
  204. data/vendor/depot_tools/recipes/OWNERS +0 -1
  205. data/vendor/depot_tools/recipes/README.recipes.md +218 -151
  206. data/vendor/depot_tools/recipes/recipe_modules/OWNERS +1 -1
  207. data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +17 -16
  208. data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +127 -78
  209. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +19 -4
  210. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +18 -3
  211. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +19 -4
  212. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +29 -8
  213. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +28 -10
  214. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +29 -8
  215. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +29 -8
  216. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/input_commit_with_id_without_repo.json +29 -8
  217. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/multiple_patch_refs.json +29 -8
  218. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +35 -10
  219. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{with_manifest_name.json → no_cp_checkout_HEAD.json} +25 -15
  220. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_branch_head.json +65 -0
  221. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_specific_commit.json +65 -0
  222. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_master.json +65 -0
  223. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/refs.json +29 -8
  224. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +29 -8
  225. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/resolve_chromium_fixed_version.json +117 -0
  226. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail.json +17 -11
  227. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +41 -10
  228. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +24 -11
  229. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +35 -10
  230. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +35 -10
  231. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +38 -11
  232. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +36 -11
  233. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +35 -10
  234. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +35 -10
  235. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +35 -10
  236. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/unrecognized_commit_repo.json +0 -5
  237. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_tags.json +29 -8
  238. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +95 -22
  239. data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +187 -114
  240. data/vendor/depot_tools/recipes/recipe_modules/bot_update/test_api.py +2 -2
  241. data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/do_not_retry_patch_failures_in_cq.py +42 -0
  242. data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/ensure_checkout.py +1 -0
  243. data/vendor/depot_tools/recipes/recipe_modules/cipd/__init__.py +0 -1
  244. data/vendor/depot_tools/recipes/recipe_modules/cipd/api.py +2 -2
  245. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic.json +0 -1
  246. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic_pkg.json +0 -1
  247. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-failed.json +2 -4
  248. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-many-instances.json +0 -1
  249. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/mac64.json +0 -1
  250. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_file.json +26 -6
  251. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_mode.json +23 -5
  252. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_verfile.json +23 -5
  253. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/win64.json +0 -1
  254. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk arch.json +0 -1
  255. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk bits.json +0 -1
  256. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_32.json +0 -1
  257. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_64.json +0 -1
  258. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_32.json +0 -1
  259. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_64.json +0 -1
  260. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_mips_64.json +0 -1
  261. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/mac_intel_64.json +0 -1
  262. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_32.json +0 -1
  263. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_64.json +0 -1
  264. data/vendor/depot_tools/recipes/recipe_modules/cipd/test_api.py +1 -1
  265. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +4 -1
  266. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +4 -2
  267. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +3 -1
  268. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +4 -2
  269. data/vendor/depot_tools/recipes/recipe_modules/gclient/__init__.py +2 -1
  270. data/vendor/depot_tools/recipes/recipe_modules/gclient/api.py +82 -13
  271. data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +23 -11
  272. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/basic.json +3 -4
  273. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/revision.json +3 -6
  274. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/tryserver.json +3 -4
  275. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.py +7 -7
  276. data/vendor/depot_tools/recipes/recipe_modules/gclient/resources/diff_deps.py +16 -0
  277. data/vendor/depot_tools/recipes/recipe_modules/gclient/test_api.py +4 -0
  278. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/basic.json +55 -0
  279. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/dont have revision yet.json +84 -0
  280. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/no change, exception.json +83 -0
  281. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/windows.json +55 -0
  282. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.py +88 -0
  283. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/patch_project.py +9 -21
  284. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/sync_failure.py +24 -0
  285. data/vendor/depot_tools/recipes/recipe_modules/gerrit/api.py +2 -1
  286. data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.expected/basic.json +7 -12
  287. data/vendor/depot_tools/recipes/recipe_modules/git/__init__.py +0 -2
  288. data/vendor/depot_tools/recipes/recipe_modules/git/api.py +9 -17
  289. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic.json +2 -8
  290. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_branch.json +2 -8
  291. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_file_name.json +2 -8
  292. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_hash.json +2 -8
  293. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_ref.json +2 -8
  294. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_submodule_update_force.json +2 -8
  295. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_tags.json +2 -8
  296. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/can_fail_build.json +3 -13
  297. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cannot_fail_build.json +2 -8
  298. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cat-file_test.json +4 -12
  299. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_delta.json +2 -10
  300. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_failed.json +1 -7
  301. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output.json +1 -7
  302. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output_fails_build.json +0 -8
  303. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/curl_trace_file.json +3 -10
  304. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/git-cache-checkout.json +3 -11
  305. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/platform_win.json +2 -8
  306. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/rebase_failed.json +3 -13
  307. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/remote_not_origin.json +2 -8
  308. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/set_got_revision.json +2 -8
  309. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.py +0 -5
  310. data/vendor/depot_tools/recipes/recipe_modules/git_cl/__init__.py +1 -1
  311. data/vendor/depot_tools/recipes/recipe_modules/git_cl/api.py +7 -13
  312. data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.expected/basic.json +21 -16
  313. data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.py +1 -2
  314. data/vendor/depot_tools/recipes/recipe_modules/gitiles/api.py +1 -1
  315. data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.expected/basic.json +0 -1
  316. data/vendor/depot_tools/recipes/recipe_modules/gitiles/resources/gerrit_client.py +2 -2
  317. data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.expected/basic.json +0 -1
  318. data/vendor/depot_tools/recipes/recipe_modules/gsutil/api.py +23 -8
  319. data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.expected/basic.json +52 -1
  320. data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.py +15 -0
  321. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/__init__.py +1 -0
  322. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/api.py +32 -8
  323. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/ancient_version.json +83 -0
  324. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/automatic_version.json +83 -0
  325. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/explicit_version.json +83 -0
  326. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/linux.json +0 -1
  327. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/mac.json +5 -4
  328. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/win.json +0 -1
  329. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.py +21 -2
  330. data/vendor/depot_tools/recipes/recipe_modules/presubmit/__init__.py +20 -0
  331. data/vendor/depot_tools/recipes/recipe_modules/presubmit/api.py +235 -3
  332. data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.expected/basic.json +13 -5
  333. data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.py +5 -1
  334. data/vendor/depot_tools/recipes/recipe_modules/presubmit/properties.proto +14 -0
  335. data/vendor/depot_tools/recipes/recipe_modules/presubmit/test_api.py +19 -0
  336. data/vendor/depot_tools/recipes/recipe_modules/presubmit/tests/execute.py +247 -0
  337. data/vendor/depot_tools/recipes/recipe_modules/presubmit/tests/prepare.py +49 -0
  338. data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +33 -45
  339. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/basic_tags.json +0 -1
  340. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch.json +64 -21
  341. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch_and_target_ref.json +64 -21
  342. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +1 -22
  343. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +1 -22
  344. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.py +5 -32
  345. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_fetch_ref_timeout.py +29 -0
  346. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_owner.expected/basic.json +5 -0
  347. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_owner.py +22 -0
  348. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_target_ref.py +32 -0
  349. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/linux.json +0 -1
  350. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/mac.json +0 -1
  351. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/win.json +2 -1
  352. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.py +1 -6
  353. data/vendor/depot_tools/recipes/recipes.py +49 -28
  354. data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +11 -6
  355. data/vendor/depot_tools/repo +698 -540
  356. data/vendor/depot_tools/roll-dep +14 -1
  357. data/vendor/depot_tools/roll-dep.bat +10 -1
  358. data/vendor/depot_tools/roll_dep.py +15 -10
  359. data/vendor/depot_tools/scm.py +95 -75
  360. data/vendor/depot_tools/setup_color.py +36 -2
  361. data/vendor/depot_tools/split_cl.py +44 -32
  362. data/vendor/depot_tools/subcommand.py +6 -6
  363. data/vendor/depot_tools/subprocess2.py +38 -322
  364. data/vendor/depot_tools/third_party/colorama/LICENSE.txt +0 -1
  365. data/vendor/depot_tools/third_party/colorama/README.chromium +4 -5
  366. data/vendor/depot_tools/third_party/colorama/README.rst +346 -0
  367. data/vendor/depot_tools/third_party/colorama/__init__.py +3 -4
  368. data/vendor/depot_tools/third_party/colorama/ansi.py +82 -30
  369. data/vendor/depot_tools/third_party/colorama/ansitowin32.py +105 -37
  370. data/vendor/depot_tools/third_party/colorama/initialise.py +39 -15
  371. data/vendor/depot_tools/third_party/colorama/win32.py +46 -28
  372. data/vendor/depot_tools/third_party/colorama/winterm.py +80 -31
  373. data/vendor/depot_tools/update_depot_tools +18 -8
  374. data/vendor/depot_tools/update_depot_tools.bat +19 -15
  375. data/vendor/depot_tools/upload_metrics.py +7 -6
  376. data/vendor/depot_tools/upload_to_google_storage.py +23 -16
  377. data/vendor/depot_tools/vpython +4 -4
  378. data/vendor/depot_tools/vpython.bat +1 -1
  379. data/vendor/depot_tools/vpython3 +55 -0
  380. data/vendor/depot_tools/vpython3.bat +12 -0
  381. data/vendor/depot_tools/watchlists.py +14 -11
  382. data/vendor/depot_tools/weekly +4 -2
  383. data/vendor/depot_tools/win32imports.py +61 -0
  384. data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +49 -41
  385. data/vendor/depot_tools/win_toolchain/package_from_installed.py +142 -149
  386. data/vendor/depot_tools/wtf +5 -3
  387. data/vendor/depot_tools/yapf +5 -1
  388. metadata +68 -343
  389. data/vendor/depot_tools/README.testing +0 -23
  390. data/vendor/depot_tools/annotated_gclient.py +0 -89
  391. data/vendor/depot_tools/appengine_mapper.py +0 -23
  392. data/vendor/depot_tools/bootstrap/win/manifest.txt +0 -20
  393. data/vendor/depot_tools/bootstrap/win/manifest_bleeding_edge.txt +0 -20
  394. data/vendor/depot_tools/bootstrap/win/pylint.new.bat +0 -7
  395. data/vendor/depot_tools/buildbucket.py +0 -186
  396. data/vendor/depot_tools/checkout.py +0 -431
  397. data/vendor/depot_tools/cros +0 -1
  398. data/vendor/depot_tools/dart_format.py +0 -58
  399. data/vendor/depot_tools/depot-tools-auth +0 -8
  400. data/vendor/depot_tools/depot-tools-auth.py +0 -102
  401. data/vendor/depot_tools/my_reviews.py +0 -396
  402. data/vendor/depot_tools/patch.py +0 -548
  403. data/vendor/depot_tools/pylint.py +0 -30
  404. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/buildbot.json +0 -239
  405. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_luci.json +0 -222
  406. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/__init__.py +0 -4
  407. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/api.py +0 -29
  408. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/basic.json +0 -15
  409. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_linux.json +0 -15
  410. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_mac.json +0 -15
  411. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_win.json +0 -15
  412. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_linux.json +0 -15
  413. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_mac.json +0 -15
  414. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_win.json +0 -15
  415. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_linux.json +0 -15
  416. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_mac.json +0 -15
  417. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_win.json +0 -15
  418. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.py +0 -33
  419. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/path_config.py +0 -66
  420. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/set_failure_hash_with_no_steps.json +0 -11
  421. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch.json +0 -45
  422. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch_luci.json +0 -45
  423. data/vendor/depot_tools/rietveld.py +0 -779
  424. data/vendor/depot_tools/roll-dep-svn +0 -8
  425. data/vendor/depot_tools/roll-dep-svn.bat +0 -12
  426. data/vendor/depot_tools/roll_dep_svn.py +0 -430
  427. data/vendor/depot_tools/support/chromite_wrapper +0 -96
  428. data/vendor/depot_tools/third_party/boto/LICENSE +0 -18
  429. data/vendor/depot_tools/third_party/boto/README.chromium +0 -43
  430. data/vendor/depot_tools/third_party/boto/README.rst +0 -163
  431. data/vendor/depot_tools/third_party/boto/__init__.py +0 -793
  432. data/vendor/depot_tools/third_party/boto/auth.py +0 -682
  433. data/vendor/depot_tools/third_party/boto/auth_handler.py +0 -58
  434. data/vendor/depot_tools/third_party/boto/cacerts/__init__.py +0 -22
  435. data/vendor/depot_tools/third_party/boto/cacerts/cacerts.txt +0 -2183
  436. data/vendor/depot_tools/third_party/boto/compat.py +0 -28
  437. data/vendor/depot_tools/third_party/boto/connection.py +0 -1081
  438. data/vendor/depot_tools/third_party/boto/contrib/__init__.py +0 -22
  439. data/vendor/depot_tools/third_party/boto/contrib/ymlmessage.py +0 -52
  440. data/vendor/depot_tools/third_party/boto/core/README +0 -58
  441. data/vendor/depot_tools/third_party/boto/core/__init__.py +0 -23
  442. data/vendor/depot_tools/third_party/boto/core/auth.py +0 -78
  443. data/vendor/depot_tools/third_party/boto/core/credentials.py +0 -154
  444. data/vendor/depot_tools/third_party/boto/core/dictresponse.py +0 -178
  445. data/vendor/depot_tools/third_party/boto/core/service.py +0 -67
  446. data/vendor/depot_tools/third_party/boto/datapipeline/__init__.py +0 -0
  447. data/vendor/depot_tools/third_party/boto/datapipeline/exceptions.py +0 -42
  448. data/vendor/depot_tools/third_party/boto/datapipeline/layer1.py +0 -546
  449. data/vendor/depot_tools/third_party/boto/ecs/__init__.py +0 -90
  450. data/vendor/depot_tools/third_party/boto/ecs/item.py +0 -153
  451. data/vendor/depot_tools/third_party/boto/exception.py +0 -476
  452. data/vendor/depot_tools/third_party/boto/file/README +0 -49
  453. data/vendor/depot_tools/third_party/boto/file/__init__.py +0 -28
  454. data/vendor/depot_tools/third_party/boto/file/bucket.py +0 -112
  455. data/vendor/depot_tools/third_party/boto/file/connection.py +0 -33
  456. data/vendor/depot_tools/third_party/boto/file/key.py +0 -199
  457. data/vendor/depot_tools/third_party/boto/file/simpleresultset.py +0 -30
  458. data/vendor/depot_tools/third_party/boto/fps/__init__.py +0 -21
  459. data/vendor/depot_tools/third_party/boto/fps/connection.py +0 -369
  460. data/vendor/depot_tools/third_party/boto/fps/exception.py +0 -344
  461. data/vendor/depot_tools/third_party/boto/fps/response.py +0 -175
  462. data/vendor/depot_tools/third_party/boto/gs/__init__.py +0 -22
  463. data/vendor/depot_tools/third_party/boto/gs/acl.py +0 -304
  464. data/vendor/depot_tools/third_party/boto/gs/bucket.py +0 -870
  465. data/vendor/depot_tools/third_party/boto/gs/bucketlistresultset.py +0 -64
  466. data/vendor/depot_tools/third_party/boto/gs/connection.py +0 -103
  467. data/vendor/depot_tools/third_party/boto/gs/cors.py +0 -169
  468. data/vendor/depot_tools/third_party/boto/gs/key.py +0 -704
  469. data/vendor/depot_tools/third_party/boto/gs/resumable_upload_handler.py +0 -659
  470. data/vendor/depot_tools/third_party/boto/gs/user.py +0 -54
  471. data/vendor/depot_tools/third_party/boto/handler.py +0 -44
  472. data/vendor/depot_tools/third_party/boto/https_connection.py +0 -124
  473. data/vendor/depot_tools/third_party/boto/jsonresponse.py +0 -163
  474. data/vendor/depot_tools/third_party/boto/manage/__init__.py +0 -23
  475. data/vendor/depot_tools/third_party/boto/manage/cmdshell.py +0 -241
  476. data/vendor/depot_tools/third_party/boto/manage/propget.py +0 -64
  477. data/vendor/depot_tools/third_party/boto/manage/server.py +0 -556
  478. data/vendor/depot_tools/third_party/boto/manage/task.py +0 -175
  479. data/vendor/depot_tools/third_party/boto/manage/test_manage.py +0 -34
  480. data/vendor/depot_tools/third_party/boto/manage/volume.py +0 -420
  481. data/vendor/depot_tools/third_party/boto/mashups/__init__.py +0 -23
  482. data/vendor/depot_tools/third_party/boto/mashups/interactive.py +0 -97
  483. data/vendor/depot_tools/third_party/boto/mashups/iobject.py +0 -115
  484. data/vendor/depot_tools/third_party/boto/mashups/order.py +0 -211
  485. data/vendor/depot_tools/third_party/boto/mashups/server.py +0 -395
  486. data/vendor/depot_tools/third_party/boto/plugin.py +0 -90
  487. data/vendor/depot_tools/third_party/boto/provider.py +0 -337
  488. data/vendor/depot_tools/third_party/boto/pyami/__init__.py +0 -22
  489. data/vendor/depot_tools/third_party/boto/pyami/bootstrap.py +0 -134
  490. data/vendor/depot_tools/third_party/boto/pyami/config.py +0 -229
  491. data/vendor/depot_tools/third_party/boto/pyami/copybot.cfg +0 -60
  492. data/vendor/depot_tools/third_party/boto/pyami/copybot.py +0 -97
  493. data/vendor/depot_tools/third_party/boto/pyami/helloworld.py +0 -28
  494. data/vendor/depot_tools/third_party/boto/pyami/launch_ami.py +0 -178
  495. data/vendor/depot_tools/third_party/boto/pyami/scriptbase.py +0 -44
  496. data/vendor/depot_tools/third_party/boto/pyami/startup.py +0 -60
  497. data/vendor/depot_tools/third_party/boto/regioninfo.py +0 -63
  498. data/vendor/depot_tools/third_party/boto/resultset.py +0 -169
  499. data/vendor/depot_tools/third_party/boto/roboto/__init__.py +0 -1
  500. data/vendor/depot_tools/third_party/boto/roboto/awsqueryrequest.py +0 -504
  501. data/vendor/depot_tools/third_party/boto/roboto/awsqueryservice.py +0 -121
  502. data/vendor/depot_tools/third_party/boto/roboto/param.py +0 -147
  503. data/vendor/depot_tools/third_party/boto/s3/__init__.py +0 -84
  504. data/vendor/depot_tools/third_party/boto/s3/acl.py +0 -164
  505. data/vendor/depot_tools/third_party/boto/s3/bucket.py +0 -1634
  506. data/vendor/depot_tools/third_party/boto/s3/bucketlistresultset.py +0 -139
  507. data/vendor/depot_tools/third_party/boto/s3/bucketlogging.py +0 -83
  508. data/vendor/depot_tools/third_party/boto/s3/connection.py +0 -540
  509. data/vendor/depot_tools/third_party/boto/s3/cors.py +0 -210
  510. data/vendor/depot_tools/third_party/boto/s3/deletemarker.py +0 -55
  511. data/vendor/depot_tools/third_party/boto/s3/key.py +0 -1712
  512. data/vendor/depot_tools/third_party/boto/s3/keyfile.py +0 -134
  513. data/vendor/depot_tools/third_party/boto/s3/lifecycle.py +0 -231
  514. data/vendor/depot_tools/third_party/boto/s3/multidelete.py +0 -138
  515. data/vendor/depot_tools/third_party/boto/s3/multipart.py +0 -315
  516. data/vendor/depot_tools/third_party/boto/s3/prefix.py +0 -42
  517. data/vendor/depot_tools/third_party/boto/s3/resumable_download_handler.py +0 -339
  518. data/vendor/depot_tools/third_party/boto/s3/tagging.py +0 -71
  519. data/vendor/depot_tools/third_party/boto/s3/user.py +0 -49
  520. data/vendor/depot_tools/third_party/boto/s3/website.py +0 -237
  521. data/vendor/depot_tools/third_party/boto/services/__init__.py +0 -23
  522. data/vendor/depot_tools/third_party/boto/services/bs.py +0 -179
  523. data/vendor/depot_tools/third_party/boto/services/message.py +0 -58
  524. data/vendor/depot_tools/third_party/boto/services/result.py +0 -136
  525. data/vendor/depot_tools/third_party/boto/services/service.py +0 -161
  526. data/vendor/depot_tools/third_party/boto/services/servicedef.py +0 -91
  527. data/vendor/depot_tools/third_party/boto/services/sonofmmm.cfg +0 -43
  528. data/vendor/depot_tools/third_party/boto/services/sonofmmm.py +0 -81
  529. data/vendor/depot_tools/third_party/boto/services/submit.py +0 -88
  530. data/vendor/depot_tools/third_party/boto/ses/__init__.py +0 -54
  531. data/vendor/depot_tools/third_party/boto/ses/connection.py +0 -521
  532. data/vendor/depot_tools/third_party/boto/ses/exceptions.py +0 -77
  533. data/vendor/depot_tools/third_party/boto/storage_uri.py +0 -835
  534. data/vendor/depot_tools/third_party/boto/sts/__init__.py +0 -55
  535. data/vendor/depot_tools/third_party/boto/sts/connection.py +0 -207
  536. data/vendor/depot_tools/third_party/boto/sts/credentials.py +0 -215
  537. data/vendor/depot_tools/third_party/boto/utils.py +0 -927
  538. data/vendor/depot_tools/third_party/colorama/README.txt +0 -304
  539. data/vendor/depot_tools/third_party/fancy_urllib/README +0 -22
  540. data/vendor/depot_tools/third_party/fancy_urllib/__init__.py +0 -460
  541. data/vendor/depot_tools/third_party/logilab/README.chromium +0 -6
  542. data/vendor/depot_tools/third_party/logilab/__init__.py +0 -0
  543. data/vendor/depot_tools/third_party/logilab/astroid/LICENSE.txt +0 -340
  544. data/vendor/depot_tools/third_party/logilab/astroid/README.chromium +0 -11
  545. data/vendor/depot_tools/third_party/logilab/astroid/__init__.py +0 -136
  546. data/vendor/depot_tools/third_party/logilab/astroid/__pkginfo__.py +0 -42
  547. data/vendor/depot_tools/third_party/logilab/astroid/arguments.py +0 -233
  548. data/vendor/depot_tools/third_party/logilab/astroid/as_string.py +0 -548
  549. data/vendor/depot_tools/third_party/logilab/astroid/astpeephole.py +0 -86
  550. data/vendor/depot_tools/third_party/logilab/astroid/bases.py +0 -636
  551. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_builtin_inference.py +0 -336
  552. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_dateutil.py +0 -15
  553. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_gi.py +0 -195
  554. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_mechanize.py +0 -18
  555. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_nose.py +0 -82
  556. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_numpy.py +0 -62
  557. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_pytest.py +0 -76
  558. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_qt.py +0 -44
  559. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_six.py +0 -288
  560. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_ssl.py +0 -65
  561. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_stdlib.py +0 -473
  562. data/vendor/depot_tools/third_party/logilab/astroid/builder.py +0 -263
  563. data/vendor/depot_tools/third_party/logilab/astroid/context.py +0 -81
  564. data/vendor/depot_tools/third_party/logilab/astroid/decorators.py +0 -75
  565. data/vendor/depot_tools/third_party/logilab/astroid/exceptions.py +0 -71
  566. data/vendor/depot_tools/third_party/logilab/astroid/inference.py +0 -359
  567. data/vendor/depot_tools/third_party/logilab/astroid/manager.py +0 -267
  568. data/vendor/depot_tools/third_party/logilab/astroid/mixins.py +0 -147
  569. data/vendor/depot_tools/third_party/logilab/astroid/modutils.py +0 -741
  570. data/vendor/depot_tools/third_party/logilab/astroid/node_classes.py +0 -1053
  571. data/vendor/depot_tools/third_party/logilab/astroid/nodes.py +0 -87
  572. data/vendor/depot_tools/third_party/logilab/astroid/objects.py +0 -186
  573. data/vendor/depot_tools/third_party/logilab/astroid/protocols.py +0 -470
  574. data/vendor/depot_tools/third_party/logilab/astroid/raw_building.py +0 -390
  575. data/vendor/depot_tools/third_party/logilab/astroid/rebuilder.py +0 -989
  576. data/vendor/depot_tools/third_party/logilab/astroid/scoped_nodes.py +0 -1716
  577. data/vendor/depot_tools/third_party/logilab/astroid/test_utils.py +0 -201
  578. data/vendor/depot_tools/third_party/logilab/astroid/transforms.py +0 -96
  579. data/vendor/depot_tools/third_party/logilab/astroid/util.py +0 -89
  580. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/LICENSE +0 -19
  581. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/README.chromium +0 -11
  582. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/__init__.py +0 -20
  583. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/cext.c +0 -1421
  584. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/compat.py +0 -9
  585. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/simple.py +0 -246
  586. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/slots.py +0 -414
  587. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/utils.py +0 -13
  588. data/vendor/depot_tools/third_party/logilab/wrapt/LICENSE +0 -24
  589. data/vendor/depot_tools/third_party/logilab/wrapt/README.chromium +0 -11
  590. data/vendor/depot_tools/third_party/logilab/wrapt/__init__.py +0 -19
  591. data/vendor/depot_tools/third_party/logilab/wrapt/_wrappers.c +0 -2729
  592. data/vendor/depot_tools/third_party/logilab/wrapt/arguments.py +0 -96
  593. data/vendor/depot_tools/third_party/logilab/wrapt/decorators.py +0 -512
  594. data/vendor/depot_tools/third_party/logilab/wrapt/importer.py +0 -228
  595. data/vendor/depot_tools/third_party/logilab/wrapt/wrappers.py +0 -901
  596. data/vendor/depot_tools/third_party/mock/LICENSE.txt +0 -26
  597. data/vendor/depot_tools/third_party/mock/README.chromium +0 -24
  598. data/vendor/depot_tools/third_party/mock/__init__.py +0 -2366
  599. data/vendor/depot_tools/third_party/oauth2client/LICENSE +0 -202
  600. data/vendor/depot_tools/third_party/oauth2client/MODIFICATIONS.diff +0 -66
  601. data/vendor/depot_tools/third_party/oauth2client/README.chromium +0 -15
  602. data/vendor/depot_tools/third_party/oauth2client/__init__.py +0 -5
  603. data/vendor/depot_tools/third_party/oauth2client/anyjson.py +0 -32
  604. data/vendor/depot_tools/third_party/oauth2client/appengine.py +0 -963
  605. data/vendor/depot_tools/third_party/oauth2client/client.py +0 -1363
  606. data/vendor/depot_tools/third_party/oauth2client/clientsecrets.py +0 -153
  607. data/vendor/depot_tools/third_party/oauth2client/crypt.py +0 -377
  608. data/vendor/depot_tools/third_party/oauth2client/django_orm.py +0 -134
  609. data/vendor/depot_tools/third_party/oauth2client/file.py +0 -124
  610. data/vendor/depot_tools/third_party/oauth2client/gce.py +0 -90
  611. data/vendor/depot_tools/third_party/oauth2client/keyring_storage.py +0 -109
  612. data/vendor/depot_tools/third_party/oauth2client/locked_file.py +0 -373
  613. data/vendor/depot_tools/third_party/oauth2client/multistore_file.py +0 -465
  614. data/vendor/depot_tools/third_party/oauth2client/old_run.py +0 -160
  615. data/vendor/depot_tools/third_party/oauth2client/tools.py +0 -243
  616. data/vendor/depot_tools/third_party/oauth2client/util.py +0 -196
  617. data/vendor/depot_tools/third_party/oauth2client/xsrfutil.py +0 -113
  618. data/vendor/depot_tools/third_party/protobuf26/README.chromium +0 -23
  619. data/vendor/depot_tools/third_party/protobuf26/__init__.py +0 -0
  620. data/vendor/depot_tools/third_party/protobuf26/compiler/__init__.py +0 -0
  621. data/vendor/depot_tools/third_party/protobuf26/compiler/plugin_pb2.py +0 -184
  622. data/vendor/depot_tools/third_party/protobuf26/descriptor.py +0 -849
  623. data/vendor/depot_tools/third_party/protobuf26/descriptor_database.py +0 -137
  624. data/vendor/depot_tools/third_party/protobuf26/descriptor_pb2.py +0 -1522
  625. data/vendor/depot_tools/third_party/protobuf26/descriptor_pool.py +0 -643
  626. data/vendor/depot_tools/third_party/protobuf26/internal/__init__.py +0 -0
  627. data/vendor/depot_tools/third_party/protobuf26/internal/api_implementation.py +0 -89
  628. data/vendor/depot_tools/third_party/protobuf26/internal/containers.py +0 -269
  629. data/vendor/depot_tools/third_party/protobuf26/internal/cpp_message.py +0 -663
  630. data/vendor/depot_tools/third_party/protobuf26/internal/decoder.py +0 -831
  631. data/vendor/depot_tools/third_party/protobuf26/internal/encoder.py +0 -788
  632. data/vendor/depot_tools/third_party/protobuf26/internal/enum_type_wrapper.py +0 -89
  633. data/vendor/depot_tools/third_party/protobuf26/internal/message_listener.py +0 -78
  634. data/vendor/depot_tools/third_party/protobuf26/internal/python_message.py +0 -1247
  635. data/vendor/depot_tools/third_party/protobuf26/internal/type_checkers.py +0 -328
  636. data/vendor/depot_tools/third_party/protobuf26/internal/wire_format.py +0 -268
  637. data/vendor/depot_tools/third_party/protobuf26/message.py +0 -284
  638. data/vendor/depot_tools/third_party/protobuf26/message_factory.py +0 -155
  639. data/vendor/depot_tools/third_party/protobuf26/reflection.py +0 -205
  640. data/vendor/depot_tools/third_party/protobuf26/service.py +0 -226
  641. data/vendor/depot_tools/third_party/protobuf26/service_reflection.py +0 -284
  642. data/vendor/depot_tools/third_party/protobuf26/symbol_database.py +0 -185
  643. data/vendor/depot_tools/third_party/protobuf26/text_encoding.py +0 -110
  644. data/vendor/depot_tools/third_party/protobuf26/text_format.py +0 -873
  645. data/vendor/depot_tools/third_party/pylint.py +0 -37
  646. data/vendor/depot_tools/third_party/pylint/LICENSE.txt +0 -340
  647. data/vendor/depot_tools/third_party/pylint/README.chromium +0 -30
  648. data/vendor/depot_tools/third_party/pylint/__init__.py +0 -46
  649. data/vendor/depot_tools/third_party/pylint/__main__.py +0 -3
  650. data/vendor/depot_tools/third_party/pylint/__pkginfo__.py +0 -80
  651. data/vendor/depot_tools/third_party/pylint/checkers/__init__.py +0 -123
  652. data/vendor/depot_tools/third_party/pylint/checkers/async.py +0 -82
  653. data/vendor/depot_tools/third_party/pylint/checkers/base.py +0 -2010
  654. data/vendor/depot_tools/third_party/pylint/checkers/classes.py +0 -1120
  655. data/vendor/depot_tools/third_party/pylint/checkers/design_analysis.py +0 -348
  656. data/vendor/depot_tools/third_party/pylint/checkers/exceptions.py +0 -369
  657. data/vendor/depot_tools/third_party/pylint/checkers/format.py +0 -993
  658. data/vendor/depot_tools/third_party/pylint/checkers/imports.py +0 -654
  659. data/vendor/depot_tools/third_party/pylint/checkers/logging.py +0 -258
  660. data/vendor/depot_tools/third_party/pylint/checkers/misc.py +0 -105
  661. data/vendor/depot_tools/third_party/pylint/checkers/newstyle.py +0 -169
  662. data/vendor/depot_tools/third_party/pylint/checkers/python3.py +0 -591
  663. data/vendor/depot_tools/third_party/pylint/checkers/raw_metrics.py +0 -129
  664. data/vendor/depot_tools/third_party/pylint/checkers/similar.py +0 -371
  665. data/vendor/depot_tools/third_party/pylint/checkers/spelling.py +0 -264
  666. data/vendor/depot_tools/third_party/pylint/checkers/stdlib.py +0 -280
  667. data/vendor/depot_tools/third_party/pylint/checkers/strings.py +0 -618
  668. data/vendor/depot_tools/third_party/pylint/checkers/typecheck.py +0 -974
  669. data/vendor/depot_tools/third_party/pylint/checkers/utils.py +0 -741
  670. data/vendor/depot_tools/third_party/pylint/checkers/variables.py +0 -1191
  671. data/vendor/depot_tools/third_party/pylint/config.py +0 -820
  672. data/vendor/depot_tools/third_party/pylint/epylint.py +0 -181
  673. data/vendor/depot_tools/third_party/pylint/extensions/__init__.py +0 -0
  674. data/vendor/depot_tools/third_party/pylint/extensions/check_docs.py +0 -311
  675. data/vendor/depot_tools/third_party/pylint/extensions/check_elif.py +0 -62
  676. data/vendor/depot_tools/third_party/pylint/graph.py +0 -179
  677. data/vendor/depot_tools/third_party/pylint/gui.py +0 -531
  678. data/vendor/depot_tools/third_party/pylint/interfaces.py +0 -102
  679. data/vendor/depot_tools/third_party/pylint/lint.py +0 -1381
  680. data/vendor/depot_tools/third_party/pylint/pyreverse/__init__.py +0 -5
  681. data/vendor/depot_tools/third_party/pylint/pyreverse/diadefslib.py +0 -230
  682. data/vendor/depot_tools/third_party/pylint/pyreverse/diagrams.py +0 -258
  683. data/vendor/depot_tools/third_party/pylint/pyreverse/inspector.py +0 -372
  684. data/vendor/depot_tools/third_party/pylint/pyreverse/main.py +0 -147
  685. data/vendor/depot_tools/third_party/pylint/pyreverse/utils.py +0 -210
  686. data/vendor/depot_tools/third_party/pylint/pyreverse/vcgutils.py +0 -198
  687. data/vendor/depot_tools/third_party/pylint/pyreverse/writer.py +0 -198
  688. data/vendor/depot_tools/third_party/pylint/reporters/__init__.py +0 -149
  689. data/vendor/depot_tools/third_party/pylint/reporters/guireporter.py +0 -27
  690. data/vendor/depot_tools/third_party/pylint/reporters/html.py +0 -108
  691. data/vendor/depot_tools/third_party/pylint/reporters/json.py +0 -64
  692. data/vendor/depot_tools/third_party/pylint/reporters/text.py +0 -237
  693. data/vendor/depot_tools/third_party/pylint/reporters/ureports/__init__.py +0 -106
  694. data/vendor/depot_tools/third_party/pylint/reporters/ureports/html_writer.py +0 -93
  695. data/vendor/depot_tools/third_party/pylint/reporters/ureports/nodes.py +0 -181
  696. data/vendor/depot_tools/third_party/pylint/reporters/ureports/text_writer.py +0 -99
  697. data/vendor/depot_tools/third_party/pylint/testutils.py +0 -414
  698. data/vendor/depot_tools/third_party/pylint/utils.py +0 -1148
  699. data/vendor/depot_tools/third_party/pymox/COPYING +0 -202
  700. data/vendor/depot_tools/third_party/pymox/MANIFEST.in +0 -5
  701. data/vendor/depot_tools/third_party/pymox/README +0 -56
  702. data/vendor/depot_tools/third_party/pymox/__init__.py +0 -0
  703. data/vendor/depot_tools/third_party/pymox/mox.py +0 -1643
  704. data/vendor/depot_tools/third_party/pymox/mox_test.py +0 -1708
  705. data/vendor/depot_tools/third_party/pymox/mox_test_helper.py +0 -76
  706. data/vendor/depot_tools/third_party/pymox/setup.py +0 -14
  707. data/vendor/depot_tools/third_party/pymox/stubout.py +0 -142
  708. data/vendor/depot_tools/third_party/pymox/stubout_test.py +0 -47
  709. data/vendor/depot_tools/third_party/pymox/stubout_testee.py +0 -2
  710. data/vendor/depot_tools/third_party/simplejson/LICENSE.txt +0 -19
  711. data/vendor/depot_tools/third_party/simplejson/PKG-INFO +0 -29
  712. data/vendor/depot_tools/third_party/simplejson/__init__.py +0 -437
  713. data/vendor/depot_tools/third_party/simplejson/decoder.py +0 -421
  714. data/vendor/depot_tools/third_party/simplejson/encoder.py +0 -501
  715. data/vendor/depot_tools/third_party/simplejson/ordered_dict.py +0 -119
  716. data/vendor/depot_tools/third_party/simplejson/scanner.py +0 -77
  717. data/vendor/depot_tools/third_party/simplejson/tool.py +0 -39
  718. data/vendor/depot_tools/third_party/upload.py +0 -2565
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh)
6
+ . "$(type -P python_runner.sh)"
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh)
6
+ . "$(type -P python_runner.sh)"
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh)
6
+ . "$(type -P python_runner.sh)"
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh)
6
+ . "$(type -P python_runner.sh)"
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh)
6
+ . "$(type -P python_runner.sh)"
@@ -5,4 +5,4 @@
5
5
 
6
6
  SCRIPT=git_freezer.py
7
7
  set -- freeze "$@"
8
- . $(type -P python_runner.sh)
8
+ . "$(type -P python_runner.sh)"
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh)
6
+ . "$(type -P python_runner.sh)"
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh) | less -R
6
+ . "$(type -P python_runner.sh)"
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh)
6
+ . "$(type -P python_runner.sh)"
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh)
6
+ . "$(type -P python_runner.sh)"
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh)
6
+ . "$(type -P python_runner.sh)"
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh)
6
+ . "$(type -P python_runner.sh)"
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh)
6
+ . "$(type -P python_runner.sh)"
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh)
6
+ . "$(type -P python_runner.sh)"
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh)
6
+ . "$(type -P python_runner.sh)"
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh)
6
+ . "$(type -P python_runner.sh)"
@@ -5,4 +5,4 @@
5
5
 
6
6
  SCRIPT=git_retry.py
7
7
  set -- retry "$@"
8
- . $(type -P python_runner.sh)
8
+ . "$(type -P python_runner.sh)"
@@ -3,4 +3,4 @@
3
3
  # Use of this source code is governed by a BSD-style license that can be
4
4
  # found in the LICENSE file.
5
5
 
6
- . $(type -P python_runner.sh)
6
+ . "$(type -P python_runner.sh)"
@@ -10,4 +10,4 @@
10
10
 
11
11
  SCRIPT=git_freezer.py
12
12
  set -- thaw "$@"
13
- . $(type -P python_runner.sh)
13
+ . "$(type -P python_runner.sh)"
@@ -6,4 +6,4 @@
6
6
  # git_upstream_diff.py -- Provide the diff between the current branch and its
7
7
  # upstream.
8
8
 
9
- . $(type -P python_runner.sh)
9
+ . "$(type -P python_runner.sh)"
@@ -13,21 +13,20 @@ import logging
13
13
  import optparse
14
14
  import os
15
15
  import re
16
+ import subprocess
17
+ import sys
16
18
  import tempfile
17
19
  import threading
18
20
  import time
19
- import subprocess
20
- import sys
21
21
 
22
22
  try:
23
23
  import urlparse
24
24
  except ImportError: # For Py3 compatibility
25
25
  import urllib.parse as urlparse
26
26
 
27
- import zipfile
28
-
29
27
  from download_from_google_storage import Gsutil
30
28
  import gclient_utils
29
+ import lockfile
31
30
  import subcommand
32
31
 
33
32
  # Analogous to gc.autopacklimit git config.
@@ -42,9 +41,6 @@ except NameError:
42
41
  class WinErr(Exception):
43
42
  pass
44
43
 
45
- class LockError(Exception):
46
- pass
47
-
48
44
  class ClobberNeeded(Exception):
49
45
  pass
50
46
 
@@ -71,7 +67,7 @@ def exponential_backoff_retry(fn, excs=(Exception,), name=None, count=10,
71
67
  Returns: The return value of the successful fn.
72
68
  """
73
69
  printerr = printerr or logging.warning
74
- for i in xrange(count):
70
+ for i in range(count):
75
71
  try:
76
72
  return fn()
77
73
  except excs as e:
@@ -84,116 +80,6 @@ def exponential_backoff_retry(fn, excs=(Exception,), name=None, count=10,
84
80
  sleep_time *= 2
85
81
 
86
82
 
87
- class Lockfile(object):
88
- """Class to represent a cross-platform process-specific lockfile."""
89
-
90
- def __init__(self, path, timeout=0):
91
- self.path = os.path.abspath(path)
92
- self.timeout = timeout
93
- self.lockfile = self.path + ".lock"
94
- self.pid = os.getpid()
95
-
96
- def _read_pid(self):
97
- """Read the pid stored in the lockfile.
98
-
99
- Note: This method is potentially racy. By the time it returns the lockfile
100
- may have been unlocked, removed, or stolen by some other process.
101
- """
102
- try:
103
- with open(self.lockfile, 'r') as f:
104
- pid = int(f.readline().strip())
105
- except (IOError, ValueError):
106
- pid = None
107
- return pid
108
-
109
- def _make_lockfile(self):
110
- """Safely creates a lockfile containing the current pid."""
111
- open_flags = (os.O_CREAT | os.O_EXCL | os.O_WRONLY)
112
- fd = os.open(self.lockfile, open_flags, 0o644)
113
- f = os.fdopen(fd, 'w')
114
- print(self.pid, file=f)
115
- f.close()
116
-
117
- def _remove_lockfile(self):
118
- """Delete the lockfile. Complains (implicitly) if it doesn't exist.
119
-
120
- See gclient_utils.py:rmtree docstring for more explanation on the
121
- windows case.
122
- """
123
- if sys.platform == 'win32':
124
- lockfile = os.path.normcase(self.lockfile)
125
-
126
- def delete():
127
- exitcode = subprocess.call(['cmd.exe', '/c',
128
- 'del', '/f', '/q', lockfile])
129
- if exitcode != 0:
130
- raise LockError('Failed to remove lock: %s' % (lockfile,))
131
- exponential_backoff_retry(
132
- delete,
133
- excs=(LockError,),
134
- name='del [%s]' % (lockfile,))
135
- else:
136
- os.remove(self.lockfile)
137
-
138
- def lock(self):
139
- """Acquire the lock.
140
-
141
- This will block with a deadline of self.timeout seconds.
142
- """
143
- elapsed = 0
144
- while True:
145
- try:
146
- self._make_lockfile()
147
- return
148
- except OSError as e:
149
- if elapsed < self.timeout:
150
- sleep_time = max(10, min(3, self.timeout - elapsed))
151
- logging.info('Could not create git cache lockfile; '
152
- 'will retry after sleep(%d).', sleep_time);
153
- elapsed += sleep_time
154
- time.sleep(sleep_time)
155
- continue
156
- if e.errno == errno.EEXIST:
157
- raise LockError("%s is already locked" % self.path)
158
- else:
159
- raise LockError("Failed to create %s (err %s)" % (self.path, e.errno))
160
-
161
- def unlock(self):
162
- """Release the lock."""
163
- try:
164
- if not self.is_locked():
165
- raise LockError("%s is not locked" % self.path)
166
- if not self.i_am_locking():
167
- raise LockError("%s is locked, but not by me" % self.path)
168
- self._remove_lockfile()
169
- except WinErr:
170
- # Windows is unreliable when it comes to file locking. YMMV.
171
- pass
172
-
173
- def break_lock(self):
174
- """Remove the lock, even if it was created by someone else."""
175
- try:
176
- self._remove_lockfile()
177
- return True
178
- except OSError as exc:
179
- if exc.errno == errno.ENOENT:
180
- return False
181
- else:
182
- raise
183
-
184
- def is_locked(self):
185
- """Test if the file is locked by anyone.
186
-
187
- Note: This method is potentially racy. By the time it returns the lockfile
188
- may have been unlocked, removed, or stolen by some other process.
189
- """
190
- return os.path.exists(self.lockfile)
191
-
192
- def i_am_locking(self):
193
- """Test if the file is locked by this process."""
194
- return self.is_locked() and self.pid == self._read_pid()
195
-
196
-
197
83
  class Mirror(object):
198
84
 
199
85
  git_exe = 'git.bat' if sys.platform.startswith('win') else 'git'
@@ -251,13 +137,13 @@ class Mirror(object):
251
137
  u = urlparse.urlparse(self.url)
252
138
  if u.netloc == 'chromium.googlesource.com':
253
139
  return 'chromium-git-cache'
254
- # TODO(tandrii): delete once LUCI migration is completed.
255
- # Only public hosts will be supported going forward.
256
- elif u.netloc == 'chrome-internal.googlesource.com':
257
- return 'chrome-git-cache'
258
140
  # Not recognized.
259
141
  return None
260
142
 
143
+ @property
144
+ def _gs_path(self):
145
+ return 'gs://%s/v2/%s' % (self.bootstrap_bucket, self.basedir)
146
+
261
147
  @classmethod
262
148
  def FromPath(cls, path):
263
149
  return cls(cls.CacheDirToUrl(path))
@@ -265,6 +151,11 @@ class Mirror(object):
265
151
  @staticmethod
266
152
  def UrlToCacheDir(url):
267
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
+
268
159
  parsed = urlparse.urlparse(url)
269
160
  norm_url = parsed.netloc + parsed.path
270
161
  if norm_url.endswith('.git'):
@@ -294,7 +185,7 @@ class Mirror(object):
294
185
  cachepath = subprocess.check_output(
295
186
  [cls.git_exe, 'config'] +
296
187
  cls._GIT_CONFIG_LOCATION +
297
- ['cache.cachepath']).strip()
188
+ ['cache.cachepath']).decode('utf-8', 'ignore').strip()
298
189
  except subprocess.CalledProcessError:
299
190
  cachepath = os.environ.get('GIT_CACHE_PATH', cls.UNSET_CACHEPATH)
300
191
  setattr(cls, 'cachepath', cachepath)
@@ -305,6 +196,23 @@ class Mirror(object):
305
196
  '$GIT_CACHE_PATH is set.')
306
197
  return ret
307
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
+
308
216
  def Rename(self, src, dst):
309
217
  # This is somehow racy on Windows.
310
218
  # Catching OSError because WindowsError isn't portable and
@@ -372,87 +280,42 @@ class Mirror(object):
372
280
  """
373
281
  if not self.bootstrap_bucket:
374
282
  return False
375
- python_fallback = (
376
- (sys.platform.startswith('win') and
377
- not gclient_utils.FindExecutable('7z')) or
378
- (not gclient_utils.FindExecutable('unzip')) or
379
- ('ZIP64_SUPPORT' not in subprocess.check_output(["unzip", "-v"]))
380
- )
381
-
382
- gs_folder = 'gs://%s/%s' % (self.bootstrap_bucket, self.basedir)
283
+
383
284
  gsutil = Gsutil(self.gsutil_exe, boto_path=None)
384
- # Get the most recent version of the zipfile.
385
- _, ls_out, ls_err = gsutil.check_call('ls', gs_folder)
386
-
387
- def compare_filenames(a, b):
388
- # |a| and |b| look like gs://.../.../9999.zip. They both have the same
389
- # gs://bootstrap_bucket/basedir/ prefix because they come from the same
390
- # `gsutil ls`.
391
- # This function only compares the numeral parts before .zip.
392
- regex_pattern = r'/(\d+)\.zip$'
393
- match_a = re.search(regex_pattern, a)
394
- match_b = re.search(regex_pattern, b)
395
- if (match_a is not None) and (match_b is not None):
396
- num_a = int(match_a.group(1))
397
- num_b = int(match_b.group(1))
398
- return cmp(num_a, num_b)
399
- # If it doesn't match the format, fallback to string comparison.
400
- return cmp(a, b)
401
-
402
- ls_out_sorted = sorted(ls_out.splitlines(), cmp=compare_filenames)
403
- if not ls_out_sorted:
404
- # This repo is not on Google Storage.
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:
405
295
  self.print('No bootstrap file for %s found in %s, stderr:\n %s' %
406
296
  (self.mirror_path, self.bootstrap_bucket,
407
- ' '.join((ls_err or '').splitlines(True))))
297
+ ' '.join((ls_err or '').splitlines(True))))
408
298
  return False
409
- latest_checkout = ls_out_sorted[-1]
410
299
 
411
- # Download zip file to a temporary directory.
412
300
  try:
301
+ # create new temporary directory locally
413
302
  tempdir = tempfile.mkdtemp(prefix='_cache_tmp', dir=self.GetCachePath())
414
- self.print('Downloading %s' % latest_checkout)
303
+ self.RunGit(['init', '--bare'], cwd=tempdir)
304
+ self.print('Downloading files in %s/* into %s.' %
305
+ (latest_dir, tempdir))
415
306
  with self.print_duration_of('download'):
416
- code = gsutil.call('cp', latest_checkout, tempdir)
307
+ code = gsutil.call('-m', 'cp', '-r', latest_dir + "/*",
308
+ tempdir)
417
309
  if code:
418
310
  return False
419
- filename = os.path.join(tempdir, latest_checkout.split('/')[-1])
420
-
421
- # Unpack the file with 7z on Windows, unzip on linux, or fallback.
422
- with self.print_duration_of('unzip'):
423
- if not python_fallback:
424
- if sys.platform.startswith('win'):
425
- cmd = ['7z', 'x', '-o%s' % directory, '-tzip', filename]
426
- else:
427
- cmd = ['unzip', filename, '-d', directory]
428
- retcode = subprocess.call(cmd)
429
- else:
430
- try:
431
- with zipfile.ZipFile(filename, 'r') as f:
432
- f.printdir()
433
- f.extractall(directory)
434
- except Exception as e:
435
- self.print('Encountered error: %s' % str(e), file=sys.stderr)
436
- retcode = 1
437
- else:
438
- retcode = 0
439
- finally:
440
- # Clean up the downloaded zipfile.
441
- #
442
- # This is somehow racy on Windows.
443
- # Catching OSError because WindowsError isn't portable and
444
- # pylint complains.
445
- exponential_backoff_retry(
446
- lambda: gclient_utils.rm_file_or_tree(tempdir),
447
- excs=(OSError,),
448
- name='rmtree [%s]' % (tempdir,),
449
- printerr=self.print)
450
-
451
- if retcode:
452
- self.print(
453
- 'Extracting bootstrap zipfile %s failed.\n'
454
- 'Resuming normal operations.' % filename)
311
+ except Exception as e:
312
+ self.print('Encountered error: %s' % str(e), file=sys.stderr)
313
+ gclient_utils.rmtree(tempdir)
455
314
  return False
315
+ # delete the old directory
316
+ if os.path.exists(directory):
317
+ gclient_utils.rmtree(directory)
318
+ self.Rename(tempdir, directory)
456
319
  return True
457
320
 
458
321
  def contains_revision(self, revision):
@@ -493,7 +356,7 @@ class Mirror(object):
493
356
  try:
494
357
  config_fetchspecs = subprocess.check_output(
495
358
  [self.git_exe, 'config', '--get-all', 'remote.origin.fetch'],
496
- cwd=self.mirror_path)
359
+ cwd=self.mirror_path).decode('utf-8', 'ignore')
497
360
  for fetchspec in config_fetchspecs.splitlines():
498
361
  self.fetch_specs.add(self.parse_fetch_spec(fetchspec))
499
362
  except subprocess.CalledProcessError:
@@ -502,61 +365,77 @@ class Mirror(object):
502
365
  '%s and "git cache fetch" again.'
503
366
  % os.path.join(self.mirror_path, 'config'))
504
367
 
505
- def _ensure_bootstrapped(self, depth, bootstrap, force=False):
506
- tempdir = None
368
+ def _ensure_bootstrapped(
369
+ self, depth, bootstrap, reset_fetch_config, force=False):
507
370
  pack_dir = os.path.join(self.mirror_path, 'objects', 'pack')
508
371
  pack_files = []
509
-
510
372
  if os.path.isdir(pack_dir):
511
373
  pack_files = [f for f in os.listdir(pack_dir) if f.endswith('.pack')]
512
- self.print('%s has %d .pack files, re-bootstrapping if >%d' %
513
- (self.mirror_path, len(pack_files), GC_AUTOPACKLIMIT))
374
+ self.print('%s has %d .pack files, re-bootstrapping if >%d or ==0' %
375
+ (self.mirror_path, len(pack_files), GC_AUTOPACKLIMIT))
514
376
 
515
377
  should_bootstrap = (force or
516
378
  not self.exists() or
517
- len(pack_files) > GC_AUTOPACKLIMIT)
518
- if should_bootstrap:
519
- if self.exists():
520
- # Re-bootstrapping an existing mirror; preserve existing fetch spec.
521
- self._preserve_fetchspec()
522
- tempdir = tempfile.mkdtemp(
523
- prefix='_cache_tmp', suffix=self.basedir, dir=self.GetCachePath())
524
- bootstrapped = not depth and bootstrap and self.bootstrap_repo(tempdir)
525
- if bootstrapped:
526
- # Bootstrap succeeded; delete previous cache, if any.
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.
527
393
  gclient_utils.rmtree(self.mirror_path)
528
- elif not self.exists() or not self.supported_project():
529
- # Bootstrap failed due to either
530
- # 1. No previous cache
531
- # 2. Project doesn't have a bootstrap zip file
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.
532
407
  # Start with a bare git dir.
533
- self.RunGit(['init', '--bare'], cwd=tempdir)
408
+ self.RunGit(['init', '--bare'], cwd=self.mirror_path)
534
409
  else:
535
410
  # Bootstrap failed, previous cache exists; warn and continue.
536
411
  logging.warn(
537
412
  'Git cache has a lot of pack files (%d). Tried to re-bootstrap '
538
413
  'but failed. Continuing with non-optimized repository.'
539
414
  % len(pack_files))
540
- gclient_utils.rmtree(tempdir)
541
- tempdir = None
542
- else:
543
- if depth and os.path.exists(os.path.join(self.mirror_path, 'shallow')):
544
- logging.warn(
545
- 'Shallow fetch requested, but repo cache already exists.')
546
- return tempdir
547
415
 
548
- def _fetch(self, rundir, verbose, depth, reset_fetch_config):
416
+ def _fetch(self,
417
+ rundir,
418
+ verbose,
419
+ depth,
420
+ no_fetch_tags,
421
+ reset_fetch_config,
422
+ prune=True):
549
423
  self.config(rundir, reset_fetch_config)
550
- v = []
551
- d = []
424
+
425
+ fetch_cmd = ['fetch']
552
426
  if verbose:
553
- v = ['-v', '--progress']
427
+ fetch_cmd.extend(['-v', '--progress'])
554
428
  if depth:
555
- d = ['--depth', str(depth)]
556
- fetch_cmd = ['fetch'] + v + d + ['origin']
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
+
557
436
  fetch_specs = subprocess.check_output(
558
437
  [self.git_exe, 'config', '--get-all', 'remote.origin.fetch'],
559
- cwd=rundir).strip().splitlines()
438
+ cwd=rundir).decode('utf-8', 'ignore').strip().splitlines()
560
439
  for spec in fetch_specs:
561
440
  try:
562
441
  self.print('Fetching %s' % spec)
@@ -567,61 +446,110 @@ class Mirror(object):
567
446
  raise ClobberNeeded() # Corrupted cache.
568
447
  logging.warn('Fetch of %s failed' % spec)
569
448
 
570
- def populate(self, depth=None, shallow=False, bootstrap=False,
571
- verbose=False, ignore_lock=False, lock_timeout=0,
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,
572
456
  reset_fetch_config=False):
573
457
  assert self.GetCachePath()
574
458
  if shallow and not depth:
575
459
  depth = 10000
576
460
  gclient_utils.safe_makedirs(self.GetCachePath())
577
461
 
578
- lockfile = Lockfile(self.mirror_path, lock_timeout)
579
- if not ignore_lock:
580
- lockfile.lock()
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)
581
484
 
582
- tempdir = None
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')
583
530
  try:
584
- tempdir = self._ensure_bootstrapped(depth, bootstrap)
585
- rundir = tempdir or self.mirror_path
586
- self._fetch(rundir, verbose, depth, reset_fetch_config)
587
- except ClobberNeeded:
588
- # This is a major failure, we need to clean and force a bootstrap.
589
- gclient_utils.rmtree(rundir)
590
- self.print(GIT_CACHE_CORRUPT_MESSAGE)
591
- tempdir = self._ensure_bootstrapped(depth, bootstrap, force=True)
592
- assert tempdir
593
- self._fetch(tempdir, verbose, depth, reset_fetch_config)
531
+ gsutil.call('cp', ready_file_name, '%s.ready' % (dest_prefix))
594
532
  finally:
595
- if tempdir:
596
- if os.path.exists(self.mirror_path):
597
- gclient_utils.rmtree(self.mirror_path)
598
- self.Rename(tempdir, self.mirror_path)
599
- if not ignore_lock:
600
- lockfile.unlock()
601
-
602
- def update_bootstrap(self, prune=False):
603
- # The files are named <git number>.zip
604
- gen_number = subprocess.check_output(
605
- [self.git_exe, 'number', 'master'], cwd=self.mirror_path).strip()
606
- # Run Garbage Collect to compress packfile.
607
- self.RunGit(['gc', '--prune=all'])
608
- # Creating a temp file and then deleting it ensures we can use this name.
609
- _, tmp_zipfile = tempfile.mkstemp(suffix='.zip')
610
- os.remove(tmp_zipfile)
611
- subprocess.call(['zip', '-r', tmp_zipfile, '.'], cwd=self.mirror_path)
612
- gsutil = Gsutil(path=self.gsutil_exe, boto_path=None)
613
- gs_folder = 'gs://%s/%s' % (self.bootstrap_bucket, self.basedir)
614
- dest_name = '%s/%s.zip' % (gs_folder, gen_number)
615
- gsutil.call('cp', tmp_zipfile, dest_name)
616
- os.remove(tmp_zipfile)
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)
617
552
 
618
- # Remove all other files in the same directory.
619
- if prune:
620
- _, ls_out, _ = gsutil.check_call('ls', gs_folder)
621
- for filename in ls_out.splitlines():
622
- if filename == dest_name:
623
- continue
624
- gsutil.call('rm', filename)
625
553
 
626
554
  @staticmethod
627
555
  def DeleteTmpPackFiles(path):
@@ -638,45 +566,6 @@ class Mirror(object):
638
566
  except OSError:
639
567
  logging.warn('Unable to delete temporary pack file %s' % f)
640
568
 
641
- @classmethod
642
- def BreakLocks(cls, path):
643
- did_unlock = False
644
- lf = Lockfile(path)
645
- if lf.break_lock():
646
- did_unlock = True
647
- # Look for lock files that might have been left behind by an interrupted
648
- # git process.
649
- lf = os.path.join(path, 'config.lock')
650
- if os.path.exists(lf):
651
- os.remove(lf)
652
- did_unlock = True
653
- cls.DeleteTmpPackFiles(path)
654
- return did_unlock
655
-
656
- def unlock(self):
657
- return self.BreakLocks(self.mirror_path)
658
-
659
- @classmethod
660
- def UnlockAll(cls):
661
- cachepath = cls.GetCachePath()
662
- if not cachepath:
663
- return
664
- dirlist = os.listdir(cachepath)
665
- repo_dirs = set([os.path.join(cachepath, path) for path in dirlist
666
- if os.path.isdir(os.path.join(cachepath, path))])
667
- for dirent in dirlist:
668
- if dirent.startswith('_cache_tmp') or dirent.startswith('tmp'):
669
- gclient_utils.rm_file_or_tree(os.path.join(cachepath, dirent))
670
- elif (dirent.endswith('.lock') and
671
- os.path.isfile(os.path.join(cachepath, dirent))):
672
- repo_dirs.add(os.path.join(cachepath, dirent[:-5]))
673
-
674
- unlocked_repos = []
675
- for repo_dir in repo_dirs:
676
- if cls.BreakLocks(repo_dir):
677
- unlocked_repos.append(repo_dir)
678
-
679
- return unlocked_repos
680
569
 
681
570
  @subcommand.usage('[url of repo to check for caching]')
682
571
  def CMDexists(parser, args):
@@ -700,19 +589,27 @@ def CMDupdate_bootstrap(parser, args):
700
589
  print('Sorry, update bootstrap will not work on Windows.', file=sys.stderr)
701
590
  return 1
702
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.')
703
596
  parser.add_option('--prune', action='store_true',
704
- help='Prune all other cached zipballs of the same repo.')
597
+ help='Prune all other cached bundles of the same repo.')
705
598
 
706
- # First, we need to ensure the cache is populated.
707
599
  populate_args = args[:]
708
- populate_args.append('--no-bootstrap')
709
- CMDpopulate(parser, populate_args)
710
-
711
- # Get the repo directory.
712
600
  options, args = parser.parse_args(args)
713
601
  url = args[0]
714
602
  mirror = Mirror(url)
715
- mirror.update_bootstrap(options.prune)
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)
716
613
  return 0
717
614
 
718
615
 
@@ -721,6 +618,11 @@ def CMDpopulate(parser, args):
721
618
  """Ensure that the cache has all up-to-date objects for the given repo."""
722
619
  parser.add_option('--depth', type='int',
723
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.'))
724
626
  parser.add_option('--shallow', '-s', action='store_true',
725
627
  help='Only cache 10000 commits of history')
726
628
  parser.add_option('--ref', action='append',
@@ -728,23 +630,31 @@ def CMDpopulate(parser, args):
728
630
  parser.add_option('--no_bootstrap', '--no-bootstrap',
729
631
  action='store_true',
730
632
  help='Don\'t bootstrap from Google Storage')
731
- parser.add_option('--ignore_locks', '--ignore-locks',
633
+ parser.add_option('--ignore_locks',
634
+ '--ignore-locks',
732
635
  action='store_true',
733
- help='Don\'t try to lock repository')
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')
734
640
  parser.add_option('--reset-fetch-config', action='store_true', default=False,
735
641
  help='Reset the fetch config before populating the cache.')
736
642
 
737
643
  options, args = parser.parse_args(args)
738
644
  if not len(args) == 1:
739
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.')
740
650
  url = args[0]
741
651
 
742
652
  mirror = Mirror(url, refs=options.ref)
743
653
  kwargs = {
654
+ 'no_fetch_tags': options.no_fetch_tags,
744
655
  'verbose': options.verbose,
745
656
  'shallow': options.shallow,
746
657
  'bootstrap': not options.no_bootstrap,
747
- 'ignore_lock': options.ignore_locks,
748
658
  'lock_timeout': options.timeout,
749
659
  'reset_fetch_config': options.reset_fetch_config,
750
660
  }
@@ -760,6 +670,11 @@ def CMDfetch(parser, args):
760
670
  parser.add_option('--no_bootstrap', '--no-bootstrap',
761
671
  action='store_true',
762
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.'))
763
678
  options, args = parser.parse_args(args)
764
679
 
765
680
  # Figure out which remotes to fetch. This mimics the behavior of regular
@@ -769,16 +684,18 @@ def CMDfetch(parser, args):
769
684
  remotes = []
770
685
  if options.all:
771
686
  assert not args, 'fatal: fetch --all does not take a repository argument'
772
- remotes = subprocess.check_output([Mirror.git_exe, 'remote']).splitlines()
687
+ remotes = subprocess.check_output([Mirror.git_exe, 'remote'])
688
+ remotes = remotes.decode('utf-8', 'ignore').splitlines()
773
689
  elif args:
774
690
  remotes = args
775
691
  else:
776
692
  current_branch = subprocess.check_output(
777
- [Mirror.git_exe, 'rev-parse', '--abbrev-ref', 'HEAD']).strip()
693
+ [Mirror.git_exe, 'rev-parse', '--abbrev-ref', 'HEAD'])
694
+ current_branch = current_branch.decode('utf-8', 'ignore').strip()
778
695
  if current_branch != 'HEAD':
779
696
  upstream = subprocess.check_output(
780
- [Mirror.git_exe, 'config', 'branch.%s.remote' % current_branch]
781
- ).strip()
697
+ [Mirror.git_exe, 'config', 'branch.%s.remote' % current_branch])
698
+ upstream = upstream.decode('utf-8', 'ignore').strip()
782
699
  if upstream and upstream != '.':
783
700
  remotes = [upstream]
784
701
  if not remotes:
@@ -786,57 +703,35 @@ def CMDfetch(parser, args):
786
703
 
787
704
  cachepath = Mirror.GetCachePath()
788
705
  git_dir = os.path.abspath(subprocess.check_output(
789
- [Mirror.git_exe, 'rev-parse', '--git-dir']))
706
+ [Mirror.git_exe, 'rev-parse', '--git-dir']).decode('utf-8', 'ignore'))
790
707
  git_dir = os.path.abspath(git_dir)
791
708
  if git_dir.startswith(cachepath):
792
709
  mirror = Mirror.FromPath(git_dir)
793
710
  mirror.populate(
794
- bootstrap=not options.no_bootstrap, lock_timeout=options.timeout)
711
+ bootstrap=not options.no_bootstrap,
712
+ no_fetch_tags=options.no_fetch_tags,
713
+ lock_timeout=options.timeout)
795
714
  return 0
796
715
  for remote in remotes:
797
716
  remote_url = subprocess.check_output(
798
- [Mirror.git_exe, 'config', 'remote.%s.url' % remote]).strip()
717
+ [Mirror.git_exe, 'config', 'remote.%s.url' % remote])
718
+ remote_url = remote_url.decode('utf-8', 'ignore').strip()
799
719
  if remote_url.startswith(cachepath):
800
720
  mirror = Mirror.FromPath(remote_url)
801
721
  mirror.print = lambda *args: None
802
722
  print('Updating git cache...')
803
723
  mirror.populate(
804
- bootstrap=not options.no_bootstrap, lock_timeout=options.timeout)
724
+ bootstrap=not options.no_bootstrap,
725
+ no_fetch_tags=options.no_fetch_tags,
726
+ lock_timeout=options.timeout)
805
727
  subprocess.check_call([Mirror.git_exe, 'fetch', remote])
806
728
  return 0
807
729
 
808
730
 
809
- @subcommand.usage('[url of repo to unlock, or -a|--all]')
731
+ @subcommand.usage('do not use - it is a noop.')
810
732
  def CMDunlock(parser, args):
811
- """Unlock one or all repos if their lock files are still around."""
812
- parser.add_option('--force', '-f', action='store_true',
813
- help='Actually perform the action')
814
- parser.add_option('--all', '-a', action='store_true',
815
- help='Unlock all repository caches')
816
- options, args = parser.parse_args(args)
817
- if len(args) > 1 or (len(args) == 0 and not options.all):
818
- parser.error('git cache unlock takes exactly one repo url, or --all')
819
-
820
- if not options.force:
821
- cachepath = Mirror.GetCachePath()
822
- lockfiles = [os.path.join(cachepath, path)
823
- for path in os.listdir(cachepath)
824
- if path.endswith('.lock') and os.path.isfile(path)]
825
- parser.error('git cache unlock requires -f|--force to do anything. '
826
- 'Refusing to unlock the following repo caches: '
827
- ', '.join(lockfiles))
828
-
829
- unlocked_repos = []
830
- if options.all:
831
- unlocked_repos.extend(Mirror.UnlockAll())
832
- else:
833
- m = Mirror(args[0])
834
- if m.unlock():
835
- unlocked_repos.append(m.mirror_path)
836
-
837
- if unlocked_repos:
838
- logging.info('Broke locks on these caches:\n %s' % '\n '.join(
839
- unlocked_repos))
733
+ """This command does nothing."""
734
+ print('This command does nothing and will be removed in the future.')
840
735
 
841
736
 
842
737
  class OptionParser(optparse.OptionParser):