libv8 6.7.288.46.1 → 7.3.492.27.0beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (408) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -0
  3. data/CHANGELOG.md +4 -0
  4. data/README.md +2 -0
  5. data/ext/libv8/builder.rb +6 -2
  6. data/lib/libv8/version.rb +1 -1
  7. data/vendor/depot_tools/.gitattributes +1 -0
  8. data/vendor/depot_tools/.gitignore +7 -0
  9. data/vendor/depot_tools/CROS_OWNERS +5 -0
  10. data/vendor/depot_tools/OWNERS +12 -1
  11. data/vendor/depot_tools/PRESUBMIT.py +16 -9
  12. data/vendor/depot_tools/README.md +9 -2
  13. data/vendor/depot_tools/autoninja +14 -6
  14. data/vendor/depot_tools/autoninja.bat +11 -1
  15. data/vendor/depot_tools/autoninja.py +40 -18
  16. data/vendor/depot_tools/bb +12 -0
  17. data/vendor/depot_tools/bb.bat +7 -0
  18. data/vendor/depot_tools/bootstrap/win/manifest.txt +1 -1
  19. data/vendor/depot_tools/bootstrap/win/manifest_bleeding_edge.txt +1 -1
  20. data/vendor/depot_tools/bootstrap/win/win_tools.py +2 -1
  21. data/vendor/depot_tools/buildbucket.py +57 -4
  22. data/vendor/depot_tools/cipd +157 -44
  23. data/vendor/depot_tools/cipd.bat +51 -14
  24. data/vendor/depot_tools/cipd.ps1 +104 -42
  25. data/vendor/depot_tools/cipd_client_version +1 -1
  26. data/vendor/depot_tools/cipd_client_version.digests +21 -0
  27. data/vendor/depot_tools/cipd_manifest.txt +19 -6
  28. data/vendor/depot_tools/cipd_manifest.versions +318 -0
  29. data/vendor/depot_tools/clang_format.py +4 -4
  30. data/vendor/depot_tools/cpplint.py +44 -199
  31. data/vendor/depot_tools/dart_format.py +2 -2
  32. data/vendor/depot_tools/detect_host_arch.py +8 -3
  33. data/vendor/depot_tools/download_from_google_storage.py +47 -39
  34. data/vendor/depot_tools/fetch.py +30 -18
  35. data/vendor/depot_tools/fetch_configs/android_internal.py +34 -0
  36. data/vendor/depot_tools/fetch_configs/chromium.py +18 -1
  37. data/vendor/depot_tools/fetch_configs/config_util.py +4 -2
  38. data/vendor/depot_tools/fetch_configs/inspector_protocol.py +40 -0
  39. data/vendor/depot_tools/fetch_configs/node-ci.py +41 -0
  40. data/vendor/depot_tools/fix_encoding.py +3 -3
  41. data/vendor/depot_tools/gclient +1 -1
  42. data/vendor/depot_tools/gclient.py +415 -198
  43. data/vendor/depot_tools/gclient_eval.py +220 -171
  44. data/vendor/depot_tools/gclient_paths.py +142 -0
  45. data/vendor/depot_tools/gclient_scm.py +200 -51
  46. data/vendor/depot_tools/gclient_utils.py +88 -191
  47. data/vendor/depot_tools/gerrit_client.py +13 -0
  48. data/vendor/depot_tools/gerrit_util.py +158 -23
  49. data/vendor/depot_tools/git-nav-upstream +1 -1
  50. data/vendor/depot_tools/git_cache.py +77 -24
  51. data/vendor/depot_tools/git_cl.py +705 -1099
  52. data/vendor/depot_tools/git_common.py +9 -6
  53. data/vendor/depot_tools/git_map_branches.py +19 -2
  54. data/vendor/depot_tools/git_nav_downstream.py +3 -4
  55. data/vendor/depot_tools/git_rebase_update.py +14 -0
  56. data/vendor/depot_tools/git_reparent_branch.py +8 -2
  57. data/vendor/depot_tools/gn.py +38 -3
  58. data/vendor/depot_tools/gsutil.py +8 -3
  59. data/vendor/depot_tools/gsutil.py.bat +15 -0
  60. data/vendor/depot_tools/gsutil.vpython +16 -0
  61. data/vendor/depot_tools/infra/config/OWNERS +0 -1
  62. data/vendor/depot_tools/infra/config/recipes.cfg +3 -2
  63. data/vendor/depot_tools/lucicfg +12 -0
  64. data/vendor/depot_tools/lucicfg.bat +7 -0
  65. data/vendor/depot_tools/man/html/git-map-branches.html +34 -2
  66. data/vendor/depot_tools/man/html/git-new-branch.html +40 -32
  67. data/vendor/depot_tools/man/man1/git-map-branches.1 +24 -5
  68. data/vendor/depot_tools/man/man1/git-new-branch.1 +35 -27
  69. data/vendor/depot_tools/man/src/git-map-branches.demo.1.sh +1 -0
  70. data/vendor/depot_tools/man/src/git-map-branches.txt +10 -0
  71. data/vendor/depot_tools/man/src/git-new-branch.demo.1.sh +9 -4
  72. data/vendor/depot_tools/man/src/git-new-branch.txt +1 -1
  73. data/vendor/depot_tools/metrics.README.md +98 -0
  74. data/vendor/depot_tools/metrics.py +296 -0
  75. data/vendor/depot_tools/metrics_utils.py +303 -0
  76. data/vendor/depot_tools/my_activity.py +91 -29
  77. data/vendor/depot_tools/ninja +1 -1
  78. data/vendor/depot_tools/ninjalog.README.md +64 -0
  79. data/vendor/depot_tools/ninjalog_uploader.py +232 -0
  80. data/vendor/depot_tools/ninjalog_uploader_wrapper.py +116 -0
  81. data/vendor/depot_tools/owners.py +30 -13
  82. data/vendor/depot_tools/owners_finder.py +5 -2
  83. data/vendor/depot_tools/presubmit_canned_checks.py +188 -29
  84. data/vendor/depot_tools/presubmit_support.py +18 -41
  85. data/vendor/depot_tools/pylintrc +23 -19
  86. data/vendor/depot_tools/recipes/OWNERS +2 -0
  87. data/vendor/depot_tools/recipes/README.recipes.md +344 -151
  88. data/vendor/depot_tools/recipes/recipe_modules/bot_update/OWNERS +2 -0
  89. data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +2 -16
  90. data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +141 -99
  91. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +5 -8
  92. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +5 -8
  93. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +6 -98
  94. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +4 -9
  95. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +45 -5
  96. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +4 -9
  97. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +4 -9
  98. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{tryjob.json → input_commit_with_id_without_repo.json} +6 -11
  99. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{tryjob_empty_revision.json → multiple_patch_refs.json} +8 -9
  100. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +19 -29
  101. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{trychange.json → refs.json} +4 -9
  102. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +4 -9
  103. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail.json +51 -6
  104. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +50 -6
  105. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +51 -6
  106. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +17 -25
  107. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +17 -25
  108. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +18 -26
  109. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +18 -26
  110. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +26 -28
  111. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +45 -5
  112. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +17 -25
  113. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/unrecognized_commit_repo.json +13 -0
  114. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name.json +13 -152
  115. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_tags.json +4 -9
  116. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +185 -202
  117. data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +52 -157
  118. data/vendor/depot_tools/recipes/recipe_modules/bot_update/test_api.py +5 -14
  119. data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/ensure_checkout.py +34 -0
  120. data/vendor/depot_tools/recipes/recipe_modules/cipd/api.py +14 -2
  121. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic.json +4 -5
  122. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic_pkg.json +4 -5
  123. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-failed.json +7 -5
  124. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-many-instances.json +4 -5
  125. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/mac64.json +4 -5
  126. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_file.json +9 -3
  127. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_mode.json +9 -3
  128. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_verfile.json +9 -3
  129. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/win64.json +4 -5
  130. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk arch.json +2 -3
  131. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk bits.json +2 -3
  132. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_32.json +2 -3
  133. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_64.json +2 -3
  134. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_32.json +2 -3
  135. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_64.json +2 -3
  136. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_mips_64.json +2 -3
  137. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/mac_intel_64.json +2 -3
  138. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_32.json +2 -3
  139. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_64.json +2 -3
  140. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +13 -8
  141. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +18 -12
  142. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +18 -12
  143. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +18 -12
  144. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.py +3 -0
  145. data/vendor/depot_tools/recipes/recipe_modules/gclient/__init__.py +1 -0
  146. data/vendor/depot_tools/recipes/recipe_modules/gclient/api.py +58 -46
  147. data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +65 -22
  148. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/basic.json +20 -21
  149. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/buildbot.json +20 -21
  150. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/revision.json +20 -21
  151. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/tryserver.json +20 -21
  152. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.py +5 -2
  153. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/patch_project.py +62 -14
  154. data/vendor/depot_tools/recipes/recipe_modules/gerrit/api.py +24 -38
  155. data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.expected/basic.json +56 -50
  156. data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.py +15 -9
  157. data/vendor/depot_tools/recipes/recipe_modules/git/__init__.py +4 -1
  158. data/vendor/depot_tools/recipes/recipe_modules/git/api.py +34 -22
  159. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic.json +5 -6
  160. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_branch.json +5 -6
  161. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_file_name.json +5 -6
  162. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_hash.json +5 -6
  163. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_luci.json +222 -0
  164. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_ref.json +5 -6
  165. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_submodule_update_force.json +5 -6
  166. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_tags.json +224 -0
  167. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/can_fail_build.json +10 -6
  168. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cannot_fail_build.json +5 -7
  169. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cat-file_test.json +5 -6
  170. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_delta.json +5 -6
  171. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_failed.json +5 -7
  172. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output.json +5 -6
  173. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output_fails_build.json +10 -5
  174. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/curl_trace_file.json +5 -6
  175. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/git-cache-checkout.json +8 -9
  176. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/platform_win.json +5 -6
  177. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/rebase_failed.json +12 -8
  178. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/remote_not_origin.json +5 -6
  179. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/set_got_revision.json +5 -6
  180. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.py +27 -11
  181. data/vendor/depot_tools/recipes/recipe_modules/git_cl/api.py +1 -1
  182. data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.expected/basic.json +12 -13
  183. data/vendor/depot_tools/recipes/recipe_modules/gitiles/__init__.py +5 -0
  184. data/vendor/depot_tools/recipes/recipe_modules/gitiles/api.py +120 -5
  185. data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.expected/basic.json +45 -3
  186. data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.py +25 -0
  187. data/vendor/depot_tools/recipes/recipe_modules/gitiles/resources/gerrit_client.py +56 -4
  188. data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.expected/basic.json +6 -0
  189. data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.py +49 -0
  190. data/vendor/depot_tools/recipes/recipe_modules/gsutil/api.py +24 -13
  191. data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.expected/basic.json +13 -14
  192. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/basic.json +2 -3
  193. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_linux.json +2 -3
  194. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_mac.json +2 -3
  195. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_win.json +2 -3
  196. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_linux.json +2 -3
  197. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_mac.json +2 -3
  198. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_win.json +2 -3
  199. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_linux.json +2 -3
  200. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_mac.json +2 -3
  201. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_win.json +2 -3
  202. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/path_config.py +1 -2
  203. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/__init__.py +35 -0
  204. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/api.py +116 -0
  205. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/linux.json +22 -0
  206. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/mac.json +82 -0
  207. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/win.json +22 -0
  208. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.py +23 -0
  209. data/vendor/depot_tools/recipes/recipe_modules/presubmit/__init__.py +1 -0
  210. data/vendor/depot_tools/recipes/recipe_modules/presubmit/api.py +2 -7
  211. data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.expected/basic.json +7 -6
  212. data/vendor/depot_tools/recipes/recipe_modules/tryserver/__init__.py +1 -0
  213. data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +117 -8
  214. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/basic_tags.json +4 -5
  215. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/set_failure_hash_with_no_steps.json +7 -4
  216. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch.json +98 -7
  217. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch_and_target_ref.json +147 -0
  218. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch.json +8 -5
  219. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch_luci.json +8 -5
  220. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +9 -6
  221. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +9 -6
  222. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.py +27 -2
  223. data/vendor/depot_tools/recipes/recipe_modules/tryserver/test_api.py +14 -0
  224. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/__init__.py +25 -0
  225. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/api.py +137 -0
  226. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/linux.json +22 -0
  227. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/mac.json +22 -0
  228. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/win.json +107 -0
  229. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.py +26 -0
  230. data/vendor/depot_tools/recipes/recipes.py +37 -27
  231. data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +7 -10
  232. data/vendor/depot_tools/repo +34 -8
  233. data/vendor/depot_tools/roll_dep.py +52 -49
  234. data/vendor/depot_tools/scm.py +38 -23
  235. data/vendor/depot_tools/setup_color.py +4 -2
  236. data/vendor/depot_tools/split_cl.py +32 -4
  237. data/vendor/depot_tools/subprocess2.py +22 -4
  238. data/vendor/depot_tools/third_party/httplib2/README.chromium +2 -2
  239. data/vendor/depot_tools/third_party/httplib2/__init__.py +242 -158
  240. data/vendor/depot_tools/third_party/httplib2/cacerts.txt +57 -44
  241. data/vendor/depot_tools/third_party/httplib2/socks.py +15 -5
  242. data/vendor/depot_tools/third_party/logilab/README.chromium +2 -4
  243. data/vendor/depot_tools/third_party/logilab/astroid/README.chromium +2 -1
  244. data/vendor/depot_tools/third_party/logilab/astroid/__init__.py +10 -5
  245. data/vendor/depot_tools/third_party/logilab/astroid/__pkginfo__.py +5 -5
  246. data/vendor/depot_tools/third_party/logilab/astroid/arguments.py +233 -0
  247. data/vendor/depot_tools/third_party/logilab/astroid/as_string.py +82 -33
  248. data/vendor/depot_tools/third_party/logilab/astroid/bases.py +137 -153
  249. data/vendor/depot_tools/third_party/logilab/astroid/brain/{builtin_inference.py → brain_builtin_inference.py} +117 -26
  250. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_dateutil.py +15 -0
  251. data/vendor/depot_tools/third_party/logilab/astroid/brain/{py2gi.py → brain_gi.py} +48 -8
  252. data/vendor/depot_tools/third_party/logilab/astroid/brain/{py2mechanize.py → brain_mechanize.py} +0 -0
  253. data/vendor/depot_tools/third_party/logilab/astroid/brain/{pynose.py → brain_nose.py} +4 -1
  254. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_numpy.py +62 -0
  255. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_pytest.py +76 -0
  256. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_qt.py +44 -0
  257. data/vendor/depot_tools/third_party/logilab/astroid/brain/{pysix_moves.py → brain_six.py} +28 -1
  258. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_ssl.py +65 -0
  259. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_stdlib.py +473 -0
  260. data/vendor/depot_tools/third_party/logilab/astroid/builder.py +104 -81
  261. data/vendor/depot_tools/third_party/logilab/astroid/context.py +81 -0
  262. data/vendor/depot_tools/third_party/logilab/astroid/decorators.py +75 -0
  263. data/vendor/depot_tools/third_party/logilab/astroid/exceptions.py +20 -0
  264. data/vendor/depot_tools/third_party/logilab/astroid/inference.py +137 -183
  265. data/vendor/depot_tools/third_party/logilab/astroid/manager.py +45 -169
  266. data/vendor/depot_tools/third_party/logilab/astroid/mixins.py +37 -14
  267. data/vendor/depot_tools/third_party/logilab/astroid/modutils.py +112 -41
  268. data/vendor/depot_tools/third_party/logilab/astroid/node_classes.py +243 -156
  269. data/vendor/depot_tools/third_party/logilab/astroid/nodes.py +35 -22
  270. data/vendor/depot_tools/third_party/logilab/astroid/objects.py +186 -0
  271. data/vendor/depot_tools/third_party/logilab/astroid/protocols.py +157 -102
  272. data/vendor/depot_tools/third_party/logilab/astroid/raw_building.py +32 -8
  273. data/vendor/depot_tools/third_party/logilab/astroid/rebuilder.py +372 -309
  274. data/vendor/depot_tools/third_party/logilab/astroid/scoped_nodes.py +652 -420
  275. data/vendor/depot_tools/third_party/logilab/astroid/test_utils.py +4 -21
  276. data/vendor/depot_tools/third_party/logilab/astroid/transforms.py +96 -0
  277. data/vendor/depot_tools/third_party/logilab/astroid/util.py +89 -0
  278. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/LICENSE +19 -0
  279. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/README.chromium +11 -0
  280. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/__init__.py +20 -0
  281. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/cext.c +1421 -0
  282. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/compat.py +9 -0
  283. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/simple.py +246 -0
  284. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/slots.py +414 -0
  285. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/utils.py +13 -0
  286. data/vendor/depot_tools/third_party/logilab/wrapt/LICENSE +24 -0
  287. data/vendor/depot_tools/third_party/logilab/wrapt/README.chromium +11 -0
  288. data/vendor/depot_tools/third_party/logilab/wrapt/__init__.py +19 -0
  289. data/vendor/depot_tools/third_party/logilab/wrapt/_wrappers.c +2729 -0
  290. data/vendor/depot_tools/third_party/logilab/wrapt/arguments.py +96 -0
  291. data/vendor/depot_tools/third_party/logilab/wrapt/decorators.py +512 -0
  292. data/vendor/depot_tools/third_party/logilab/wrapt/importer.py +228 -0
  293. data/vendor/depot_tools/third_party/logilab/wrapt/wrappers.py +901 -0
  294. data/vendor/depot_tools/third_party/pylint/README.chromium +2 -25
  295. data/vendor/depot_tools/third_party/pylint/__pkginfo__.py +13 -3
  296. data/vendor/depot_tools/third_party/pylint/checkers/__init__.py +1 -2
  297. data/vendor/depot_tools/third_party/pylint/checkers/async.py +82 -0
  298. data/vendor/depot_tools/third_party/pylint/checkers/base.py +893 -119
  299. data/vendor/depot_tools/third_party/pylint/checkers/classes.py +342 -204
  300. data/vendor/depot_tools/third_party/pylint/checkers/design_analysis.py +51 -34
  301. data/vendor/depot_tools/third_party/pylint/checkers/exceptions.py +84 -47
  302. data/vendor/depot_tools/third_party/pylint/checkers/format.py +55 -30
  303. data/vendor/depot_tools/third_party/pylint/checkers/imports.py +314 -73
  304. data/vendor/depot_tools/third_party/pylint/checkers/logging.py +10 -8
  305. data/vendor/depot_tools/third_party/pylint/checkers/misc.py +2 -1
  306. data/vendor/depot_tools/third_party/pylint/checkers/newstyle.py +45 -48
  307. data/vendor/depot_tools/third_party/pylint/checkers/python3.py +31 -21
  308. data/vendor/depot_tools/third_party/pylint/checkers/raw_metrics.py +3 -3
  309. data/vendor/depot_tools/third_party/pylint/checkers/similar.py +4 -5
  310. data/vendor/depot_tools/third_party/pylint/checkers/spelling.py +24 -10
  311. data/vendor/depot_tools/third_party/pylint/checkers/stdlib.py +120 -56
  312. data/vendor/depot_tools/third_party/pylint/checkers/strings.py +38 -35
  313. data/vendor/depot_tools/third_party/pylint/checkers/typecheck.py +485 -138
  314. data/vendor/depot_tools/third_party/pylint/checkers/utils.py +319 -142
  315. data/vendor/depot_tools/third_party/pylint/checkers/variables.py +329 -207
  316. data/vendor/depot_tools/third_party/pylint/config.py +739 -76
  317. data/vendor/depot_tools/third_party/pylint/epylint.py +9 -5
  318. data/vendor/depot_tools/third_party/pylint/extensions/__init__.py +0 -0
  319. data/vendor/depot_tools/third_party/pylint/extensions/check_docs.py +311 -0
  320. data/vendor/depot_tools/third_party/pylint/extensions/check_elif.py +62 -0
  321. data/vendor/depot_tools/third_party/{logilab/common → pylint}/graph.py +30 -133
  322. data/vendor/depot_tools/third_party/pylint/gui.py +2 -2
  323. data/vendor/depot_tools/third_party/pylint/interfaces.py +21 -3
  324. data/vendor/depot_tools/third_party/pylint/lint.py +123 -140
  325. data/vendor/depot_tools/third_party/pylint/pyreverse/diadefslib.py +10 -13
  326. data/vendor/depot_tools/third_party/pylint/pyreverse/diagrams.py +15 -4
  327. data/vendor/depot_tools/third_party/pylint/pyreverse/inspector.py +372 -0
  328. data/vendor/depot_tools/third_party/pylint/pyreverse/main.py +30 -7
  329. data/vendor/depot_tools/third_party/pylint/pyreverse/utils.py +80 -2
  330. data/vendor/depot_tools/third_party/{logilab/common → pylint/pyreverse}/vcgutils.py +19 -37
  331. data/vendor/depot_tools/third_party/pylint/pyreverse/writer.py +3 -4
  332. data/vendor/depot_tools/third_party/pylint/reporters/__init__.py +34 -18
  333. data/vendor/depot_tools/third_party/pylint/reporters/guireporter.py +1 -1
  334. data/vendor/depot_tools/third_party/pylint/reporters/html.py +10 -3
  335. data/vendor/depot_tools/third_party/pylint/reporters/json.py +10 -4
  336. data/vendor/depot_tools/third_party/pylint/reporters/text.py +94 -3
  337. data/vendor/depot_tools/third_party/pylint/reporters/ureports/__init__.py +106 -0
  338. data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/html_writer.py +17 -57
  339. data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/nodes.py +52 -74
  340. data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/text_writer.py +14 -60
  341. data/vendor/depot_tools/third_party/pylint/testutils.py +22 -20
  342. data/vendor/depot_tools/third_party/pylint/utils.py +268 -44
  343. data/vendor/depot_tools/third_party/repo/progress.py +42 -0
  344. data/vendor/depot_tools/update_depot_tools +1 -1
  345. data/vendor/depot_tools/upload_metrics.py +25 -0
  346. data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +45 -15
  347. data/vendor/depot_tools/win_toolchain/package_from_installed.py +71 -24
  348. data/vendor/depot_tools/yapf +1 -1
  349. data/vendor/depot_tools/yapf.bat +1 -1
  350. metadata +92 -77
  351. data/vendor/depot_tools/git-crsync +0 -3
  352. data/vendor/depot_tools/infra/config/cq.cfg +0 -32
  353. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/apply_gerrit_ref.json +0 -29
  354. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/apply_gerrit_ref_custom.json +0 -29
  355. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/buildbot.json +0 -105
  356. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/shallow.json +0 -195
  357. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle_deprecated.json +0 -248
  358. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8.json +0 -248
  359. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name_no_patch.json +0 -105
  360. data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/apply_gerrit.py +0 -33
  361. data/vendor/depot_tools/third_party/logilab/astroid/brain/py2pytest.py +0 -31
  362. data/vendor/depot_tools/third_party/logilab/astroid/brain/py2qt4.py +0 -22
  363. data/vendor/depot_tools/third_party/logilab/astroid/brain/py2stdlib.py +0 -334
  364. data/vendor/depot_tools/third_party/logilab/astroid/inspector.py +0 -273
  365. data/vendor/depot_tools/third_party/logilab/astroid/utils.py +0 -239
  366. data/vendor/depot_tools/third_party/logilab/common/LICENSE.txt +0 -339
  367. data/vendor/depot_tools/third_party/logilab/common/README.chromium +0 -11
  368. data/vendor/depot_tools/third_party/logilab/common/__init__.py +0 -175
  369. data/vendor/depot_tools/third_party/logilab/common/__pkginfo__.py +0 -57
  370. data/vendor/depot_tools/third_party/logilab/common/cache.py +0 -114
  371. data/vendor/depot_tools/third_party/logilab/common/changelog.py +0 -238
  372. data/vendor/depot_tools/third_party/logilab/common/clcommands.py +0 -334
  373. data/vendor/depot_tools/third_party/logilab/common/cli.py +0 -211
  374. data/vendor/depot_tools/third_party/logilab/common/compat.py +0 -78
  375. data/vendor/depot_tools/third_party/logilab/common/configuration.py +0 -1105
  376. data/vendor/depot_tools/third_party/logilab/common/contexts.py +0 -5
  377. data/vendor/depot_tools/third_party/logilab/common/corbautils.py +0 -117
  378. data/vendor/depot_tools/third_party/logilab/common/daemon.py +0 -101
  379. data/vendor/depot_tools/third_party/logilab/common/date.py +0 -335
  380. data/vendor/depot_tools/third_party/logilab/common/dbf.py +0 -231
  381. data/vendor/depot_tools/third_party/logilab/common/debugger.py +0 -214
  382. data/vendor/depot_tools/third_party/logilab/common/decorators.py +0 -281
  383. data/vendor/depot_tools/third_party/logilab/common/deprecation.py +0 -189
  384. data/vendor/depot_tools/third_party/logilab/common/fileutils.py +0 -404
  385. data/vendor/depot_tools/third_party/logilab/common/interface.py +0 -71
  386. data/vendor/depot_tools/third_party/logilab/common/logging_ext.py +0 -195
  387. data/vendor/depot_tools/third_party/logilab/common/modutils.py +0 -702
  388. data/vendor/depot_tools/third_party/logilab/common/optik_ext.py +0 -392
  389. data/vendor/depot_tools/third_party/logilab/common/optparser.py +0 -92
  390. data/vendor/depot_tools/third_party/logilab/common/proc.py +0 -277
  391. data/vendor/depot_tools/third_party/logilab/common/pyro_ext.py +0 -180
  392. data/vendor/depot_tools/third_party/logilab/common/pytest.py +0 -1199
  393. data/vendor/depot_tools/third_party/logilab/common/registry.py +0 -1119
  394. data/vendor/depot_tools/third_party/logilab/common/shellutils.py +0 -462
  395. data/vendor/depot_tools/third_party/logilab/common/sphinx_ext.py +0 -87
  396. data/vendor/depot_tools/third_party/logilab/common/sphinxutils.py +0 -122
  397. data/vendor/depot_tools/third_party/logilab/common/table.py +0 -929
  398. data/vendor/depot_tools/third_party/logilab/common/tasksqueue.py +0 -101
  399. data/vendor/depot_tools/third_party/logilab/common/testlib.py +0 -1392
  400. data/vendor/depot_tools/third_party/logilab/common/textutils.py +0 -537
  401. data/vendor/depot_tools/third_party/logilab/common/tree.py +0 -369
  402. data/vendor/depot_tools/third_party/logilab/common/umessage.py +0 -194
  403. data/vendor/depot_tools/third_party/logilab/common/ureports/__init__.py +0 -172
  404. data/vendor/depot_tools/third_party/logilab/common/ureports/docbook_writer.py +0 -140
  405. data/vendor/depot_tools/third_party/logilab/common/urllib2ext.py +0 -89
  406. data/vendor/depot_tools/third_party/logilab/common/visitor.py +0 -109
  407. data/vendor/depot_tools/third_party/logilab/common/xmlrpcutils.py +0 -131
  408. data/vendor/depot_tools/third_party/logilab/common/xmlutils.py +0 -61
@@ -88,6 +88,19 @@ def CMDchanges(parser, args):
88
88
  write_result(result, opt)
89
89
 
90
90
 
91
+ @subcommand.usage('')
92
+ def CMDabandon(parser, args):
93
+ parser.add_option('-c', '--change', type=int, help='change number')
94
+ parser.add_option('-m', '--message', default='', help='reason for abandoning')
95
+
96
+ (opt, args) = parser.parse_args(args)
97
+ result = gerrit_util.AbandonChange(
98
+ urlparse.urlparse(opt.host).netloc,
99
+ opt.change, opt.message)
100
+ logging.info(result)
101
+ write_result(result, opt)
102
+
103
+
91
104
  class OptionParser(optparse.OptionParser):
92
105
  """Creates the option parse and add --verbose support."""
93
106
  def __init__(self, *args, **kwargs):
@@ -16,6 +16,7 @@ import json
16
16
  import logging
17
17
  import netrc
18
18
  import os
19
+ import random
19
20
  import re
20
21
  import socket
21
22
  import stat
@@ -25,16 +26,20 @@ import time
25
26
  import urllib
26
27
  import urlparse
27
28
  from cStringIO import StringIO
29
+ from multiprocessing.pool import ThreadPool
28
30
 
29
31
  import auth
30
32
  import gclient_utils
33
+ import metrics
34
+ import metrics_utils
31
35
  import subprocess2
32
36
  from third_party import httplib2
33
37
 
34
38
  LOGGER = logging.getLogger()
35
- # With a starting sleep time of 1 second, 2^n exponential backoff, and six
36
- # total tries, the sleep time between the first and last tries will be 31s.
37
- TRY_LIMIT = 6
39
+ # With a starting sleep time of 1.5 seconds, 2^n exponential backoff, and seven
40
+ # total tries, the sleep time between the first and last tries will be 94.5 sec.
41
+ # TODO(crbug.com/881860): Lower this when crbug.com/877717 is fixed.
42
+ TRY_LIMIT = 7
38
43
 
39
44
 
40
45
  # Controls the transport protocol used to communicate with gerrit.
@@ -102,9 +107,27 @@ class CookiesAuthenticator(Authenticator):
102
107
  Expected case for developer workstations.
103
108
  """
104
109
 
110
+ _EMPTY = object()
111
+
105
112
  def __init__(self):
106
- self.netrc = self._get_netrc()
107
- self.gitcookies = self._get_gitcookies()
113
+ # Credentials will be loaded lazily on first use. This ensures Authenticator
114
+ # get() can always construct an authenticator, even if something is broken.
115
+ # This allows 'creds-check' to proceed to actually checking creds later,
116
+ # rigorously (instead of blowing up with a cryptic error if they are wrong).
117
+ self._netrc = self._EMPTY
118
+ self._gitcookies = self._EMPTY
119
+
120
+ @property
121
+ def netrc(self):
122
+ if self._netrc is self._EMPTY:
123
+ self._netrc = self._get_netrc()
124
+ return self._netrc
125
+
126
+ @property
127
+ def gitcookies(self):
128
+ if self._gitcookies is self._EMPTY:
129
+ self._gitcookies = self._get_gitcookies()
130
+ return self._gitcookies
108
131
 
109
132
  @classmethod
110
133
  def get_new_password_url(cls, host):
@@ -117,6 +140,10 @@ class CookiesAuthenticator(Authenticator):
117
140
 
118
141
  @classmethod
119
142
  def get_new_password_message(cls, host):
143
+ if host is None:
144
+ return ('Git host for gerrit upload is unknown. Check your remote '
145
+ 'and the branch your branch is tracking. This tool assumes '
146
+ 'that you are using a git server at *.googlesource.com.')
120
147
  assert not host.startswith('http')
121
148
  # Assume *.googlesource.com pattern.
122
149
  parts = host.split('.')
@@ -134,16 +161,17 @@ class CookiesAuthenticator(Authenticator):
134
161
  def _get_netrc(cls):
135
162
  # Buffer the '.netrc' path. Use an empty file if it doesn't exist.
136
163
  path = cls.get_netrc_path()
137
- content = ''
138
- if os.path.exists(path):
139
- st = os.stat(path)
140
- if st.st_mode & (stat.S_IRWXG | stat.S_IRWXO):
141
- print >> sys.stderr, (
142
- 'WARNING: netrc file %s cannot be used because its file '
143
- 'permissions are insecure. netrc file permissions should be '
144
- '600.' % path)
145
- with open(path) as fd:
146
- content = fd.read()
164
+ if not os.path.exists(path):
165
+ return netrc.netrc(os.devnull)
166
+
167
+ st = os.stat(path)
168
+ if st.st_mode & (stat.S_IRWXG | stat.S_IRWXO):
169
+ print >> sys.stderr, (
170
+ 'WARNING: netrc file %s cannot be used because its file '
171
+ 'permissions are insecure. netrc file permissions should be '
172
+ '600.' % path)
173
+ with open(path) as fd:
174
+ content = fd.read()
147
175
 
148
176
  # Load the '.netrc' file. We strip comments from it because processing them
149
177
  # can trigger a bug in Windows. See crbug.com/664664.
@@ -198,11 +226,13 @@ class CookiesAuthenticator(Authenticator):
198
226
  continue
199
227
  domain, xpath, key, value = fields[0], fields[2], fields[5], fields[6]
200
228
  if xpath == '/' and key == 'o':
201
- login, secret_token = value.split('=', 1)
202
- gitcookies[domain] = (login, secret_token)
229
+ if value.startswith('git-'):
230
+ login, secret_token = value.split('=', 1)
231
+ gitcookies[domain] = (login, secret_token)
232
+ else:
233
+ gitcookies[domain] = ('', value)
203
234
  except (IndexError, ValueError, TypeError) as exc:
204
235
  LOGGER.warning(exc)
205
-
206
236
  return gitcookies
207
237
 
208
238
  def _get_auth_for_host(self, host):
@@ -214,7 +244,10 @@ class CookiesAuthenticator(Authenticator):
214
244
  def get_auth_header(self, host):
215
245
  a = self._get_auth_for_host(host)
216
246
  if a:
217
- return 'Basic %s' % (base64.b64encode('%s:%s' % (a[0], a[2])))
247
+ if a[0]:
248
+ return 'Basic %s' % (base64.b64encode('%s:%s' % (a[0], a[2])))
249
+ else:
250
+ return 'Bearer %s' % a[2]
218
251
  return None
219
252
 
220
253
  def get_auth_email(self, host):
@@ -359,6 +392,8 @@ def CreateHttpConn(host, path, reqtype='GET', headers=None, body=None):
359
392
  if body:
360
393
  LOGGER.debug(body)
361
394
  conn = GetConnectionObject()
395
+ # HACK: httplib.Http has no such attribute; we store req_host here for later
396
+ # use in ReadHttpResponse.
362
397
  conn.req_host = host
363
398
  conn.req_params = {
364
399
  'uri': urlparse.urljoin('%s://%s' % (GERRIT_PROTOCOL, host), url),
@@ -378,10 +413,18 @@ def ReadHttpResponse(conn, accept_statuses=frozenset([200])):
378
413
  Common additions include 204, 400, and 404.
379
414
  Returns: A string buffer containing the connection's reply.
380
415
  """
381
- sleep_time = 1
416
+ sleep_time = 1.5
382
417
  for idx in range(TRY_LIMIT):
418
+ before_response = time.time()
383
419
  response, contents = conn.request(**conn.req_params)
384
420
 
421
+ response_time = time.time() - before_response
422
+ metrics.collector.add_repeated(
423
+ 'http_requests',
424
+ metrics_utils.extract_http_metrics(
425
+ conn.req_params['uri'], conn.req_params['method'], response.status,
426
+ response_time))
427
+
385
428
  # Check if this is an authentication issue.
386
429
  www_authenticate = response.get('www-authenticate')
387
430
  if (response.status in (httplib.UNAUTHORIZED, httplib.FOUND) and
@@ -413,11 +456,23 @@ def ReadHttpResponse(conn, accept_statuses=frozenset([200])):
413
456
  conn.req_host, conn.req_params['method'],
414
457
  conn.req_params['uri'],
415
458
  http_version, http_version, response.status, response.reason)
459
+ if response.status == 404:
460
+ # TODO(crbug/881860): remove this hack.
461
+ # HACK: try different Gerrit mirror as a workaround for potentially
462
+ # out-of-date mirror hit through default routing.
463
+ if conn.req_host == 'chromium-review.googlesource.com':
464
+ conn.req_params['uri'] = _UseGerritMirror(
465
+ conn.req_params['uri'], 'chromium-review.googlesource.com')
466
+ # And don't increase sleep_time in this case, since we suspect we've
467
+ # just asked wrong git mirror before.
468
+ sleep_time /= 2.0
469
+
416
470
  if TRY_LIMIT - idx > 1:
417
471
  LOGGER.info('Will retry in %d seconds (%d more times)...',
418
472
  sleep_time, TRY_LIMIT - idx - 1)
419
473
  time.sleep(sleep_time)
420
474
  sleep_time = sleep_time * 2
475
+ # end of retries loop
421
476
  if response.status not in accept_statuses:
422
477
  if response.status in (401, 403):
423
478
  print('Your Gerrit credentials might be misconfigured. Try: \n'
@@ -562,6 +617,18 @@ def GetGerritFetchUrl(host):
562
617
  return '%s://%s/' % (GERRIT_PROTOCOL, host)
563
618
 
564
619
 
620
+ def GetCodeReviewTbrScore(host, project):
621
+ """Given a gerrit host name and project, return the Code-Review score for TBR.
622
+ """
623
+ conn = CreateHttpConn(host, '/projects/%s' % urllib.quote(project, safe=''))
624
+ project = ReadHttpJsonResponse(conn)
625
+ if ('labels' not in project
626
+ or 'Code-Review' not in project['labels']
627
+ or 'values' not in project['labels']['Code-Review']):
628
+ return 1
629
+ return max([int(x) for x in project['labels']['Code-Review']['values']])
630
+
631
+
565
632
  def GetChangePageUrl(host, change_number):
566
633
  """Given a gerrit host name and change number, return change page url."""
567
634
  return '%s://%s/#/c/%d/' % (GERRIT_PROTOCOL, host, change_number)
@@ -621,6 +688,12 @@ def GetChangeComments(host, change):
621
688
  return ReadHttpJsonResponse(CreateHttpConn(host, path))
622
689
 
623
690
 
691
+ def GetChangeRobotComments(host, change):
692
+ """Get the line- and file-level robot comments on a change."""
693
+ path = 'changes/%s/robotcomments' % change
694
+ return ReadHttpJsonResponse(CreateHttpConn(host, path))
695
+
696
+
624
697
  def AbandonChange(host, change, msg=''):
625
698
  """Abandon a gerrit change."""
626
699
  path = 'changes/%s/abandon' % change
@@ -863,11 +936,34 @@ def GetAccountDetails(host, account_id='self'):
863
936
 
864
937
  Documentation:
865
938
  https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#get-account
939
+
940
+ Returns None if account is not found (i.e., Gerrit returned 404).
866
941
  """
867
- if account_id != 'self':
868
- account_id = int(account_id)
869
942
  conn = CreateHttpConn(host, '/accounts/%s' % account_id)
870
- return ReadHttpJsonResponse(conn)
943
+ return ReadHttpJsonResponse(conn, accept_statuses=[200, 404])
944
+
945
+
946
+ def ValidAccounts(host, accounts, max_threads=10):
947
+ """Returns a mapping from valid account to its details.
948
+
949
+ Invalid accounts, either not existing or without unique match,
950
+ are not present as returned dictionary keys.
951
+ """
952
+ assert not isinstance(accounts, basestring), type(accounts)
953
+ accounts = list(set(accounts))
954
+ if not accounts:
955
+ return {}
956
+ def get_one(account):
957
+ try:
958
+ return account, GetAccountDetails(host, account)
959
+ except GerritError:
960
+ return None, None
961
+ valid = {}
962
+ with contextlib.closing(ThreadPool(min(max_threads, len(accounts)))) as pool:
963
+ for account, details in pool.map(get_one, accounts):
964
+ if account and details:
965
+ valid[account] = details
966
+ return valid
871
967
 
872
968
 
873
969
  def PercentEncodeForGitRef(original):
@@ -899,3 +995,42 @@ def tempdir():
899
995
  finally:
900
996
  if tdir:
901
997
  gclient_utils.rmtree(tdir)
998
+
999
+
1000
+ def ChangeIdentifier(project, change_number):
1001
+ """Returns change identifier "project~number" suitable for |change| arg of
1002
+ this module API.
1003
+
1004
+ Such format is allows for more efficient Gerrit routing of HTTP requests,
1005
+ comparing to specifying just change_number.
1006
+ """
1007
+ assert int(change_number)
1008
+ return '%s~%s' % (urllib.quote(project, safe=''), change_number)
1009
+
1010
+
1011
+ # TODO(crbug/881860): remove this hack.
1012
+ _GERRIT_MIRROR_PREFIXES = ['us1', 'us2', 'us3', 'eu1']
1013
+ assert all(3 == len(p) for p in _GERRIT_MIRROR_PREFIXES)
1014
+
1015
+
1016
+ def _UseGerritMirror(url, host):
1017
+ """Returns new url which uses randomly selected mirror for a gerrit host.
1018
+
1019
+ url's host should be for a given host or a result of prior call to this
1020
+ function.
1021
+
1022
+ Assumes url has a single occurence of the host substring.
1023
+ """
1024
+ assert host in url
1025
+ suffix = '-mirror-' + host
1026
+ prefixes = set(_GERRIT_MIRROR_PREFIXES)
1027
+ prefix_len = len(_GERRIT_MIRROR_PREFIXES[0])
1028
+ st = url.find(suffix)
1029
+ if st == -1:
1030
+ actual_host = host
1031
+ else:
1032
+ # Already uses some mirror.
1033
+ assert st >= prefix_len, (uri, host, st, prefix_len)
1034
+ prefixes.remove(url[st-prefix_len:st])
1035
+ actual_host = url[st-prefix_len:st+len(suffix)]
1036
+ return url.replace(actual_host, random.choice(list(prefixes)) + suffix)
@@ -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
- git checkout '@{u}'
6
+ git checkout "$(git rev-parse --abbrev-ref "@{u}")"
@@ -6,6 +6,7 @@
6
6
  """A git command for managing a local cache of git repositories."""
7
7
 
8
8
  from __future__ import print_function
9
+
9
10
  import contextlib
10
11
  import errno
11
12
  import logging
@@ -17,7 +18,12 @@ import threading
17
18
  import time
18
19
  import subprocess
19
20
  import sys
20
- import urlparse
21
+
22
+ try:
23
+ import urlparse
24
+ except ImportError: # For Py3 compatibility
25
+ import urllib.parse as urlparse
26
+
21
27
  import zipfile
22
28
 
23
29
  from download_from_google_storage import Gsutil
@@ -195,6 +201,11 @@ class Mirror(object):
195
201
  os.path.dirname(os.path.abspath(__file__)), 'gsutil.py')
196
202
  cachepath_lock = threading.Lock()
197
203
 
204
+ UNSET_CACHEPATH = object()
205
+
206
+ # Used for tests
207
+ _GIT_CONFIG_LOCATION = []
208
+
198
209
  @staticmethod
199
210
  def parse_fetch_spec(spec):
200
211
  """Parses and canonicalizes a fetch spec.
@@ -234,9 +245,14 @@ class Mirror(object):
234
245
 
235
246
  @property
236
247
  def bootstrap_bucket(self):
248
+ b = os.getenv('OVERRIDE_BOOTSTRAP_BUCKET')
249
+ if b:
250
+ return b
237
251
  u = urlparse.urlparse(self.url)
238
252
  if u.netloc == 'chromium.googlesource.com':
239
253
  return 'chromium-git-cache'
254
+ # TODO(tandrii): delete once LUCI migration is completed.
255
+ # Only public hosts will be supported going forward.
240
256
  elif u.netloc == 'chrome-internal.googlesource.com':
241
257
  return 'chrome-git-cache'
242
258
  # Not recognized.
@@ -253,6 +269,10 @@ class Mirror(object):
253
269
  norm_url = parsed.netloc + parsed.path
254
270
  if norm_url.endswith('.git'):
255
271
  norm_url = norm_url[:-len('.git')]
272
+
273
+ # Use the same dir for authenticated URLs and unauthenticated URLs.
274
+ norm_url = norm_url.replace('googlesource.com/a/', 'googlesource.com/')
275
+
256
276
  return norm_url.replace('-', '--').replace('/', '-').lower()
257
277
 
258
278
  @staticmethod
@@ -272,14 +292,18 @@ class Mirror(object):
272
292
  if not hasattr(cls, 'cachepath'):
273
293
  try:
274
294
  cachepath = subprocess.check_output(
275
- [cls.git_exe, 'config', '--global', 'cache.cachepath']).strip()
295
+ [cls.git_exe, 'config'] +
296
+ cls._GIT_CONFIG_LOCATION +
297
+ ['cache.cachepath']).strip()
276
298
  except subprocess.CalledProcessError:
277
- cachepath = None
278
- if not cachepath:
279
- raise RuntimeError(
280
- 'No global cache.cachepath git configuration found.')
299
+ cachepath = os.environ.get('GIT_CACHE_PATH', cls.UNSET_CACHEPATH)
281
300
  setattr(cls, 'cachepath', cachepath)
282
- return getattr(cls, 'cachepath')
301
+
302
+ ret = getattr(cls, 'cachepath')
303
+ if ret is cls.UNSET_CACHEPATH:
304
+ raise RuntimeError('No cache.cachepath git configuration or '
305
+ '$GIT_CACHE_PATH is set.')
306
+ return ret
283
307
 
284
308
  def Rename(self, src, dst):
285
309
  # This is somehow racy on Windows.
@@ -302,10 +326,19 @@ class Mirror(object):
302
326
  self.print('running "git %s" in "%s"' % (' '.join(cmd), cwd))
303
327
  gclient_utils.CheckCallAndFilter([self.git_exe] + cmd, **kwargs)
304
328
 
305
- def config(self, cwd=None):
329
+ def config(self, cwd=None, reset_fetch_config=False):
306
330
  if cwd is None:
307
331
  cwd = self.mirror_path
308
332
 
333
+ if reset_fetch_config:
334
+ try:
335
+ self.RunGit(['config', '--unset-all', 'remote.origin.fetch'], cwd=cwd)
336
+ except subprocess.CalledProcessError as e:
337
+ # If exit code was 5, it means we attempted to unset a config that
338
+ # didn't exist. Ignore it.
339
+ if e.returncode != 5:
340
+ raise
341
+
309
342
  # Don't run git-gc in a daemon. Bad things can happen if it gets killed.
310
343
  try:
311
344
  self.RunGit(['config', 'gc.autodetach', '0'], cwd=cwd)
@@ -339,21 +372,34 @@ class Mirror(object):
339
372
  """
340
373
  if not self.bootstrap_bucket:
341
374
  return False
342
- python_fallback = False
343
- if (sys.platform.startswith('win') and
344
- not gclient_utils.FindExecutable('7z')):
345
- python_fallback = True
346
- elif sys.platform.startswith('darwin'):
347
- # The OSX version of unzip doesn't support zip64.
348
- python_fallback = True
349
- elif not gclient_utils.FindExecutable('unzip'):
350
- python_fallback = True
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
+ )
351
381
 
352
382
  gs_folder = 'gs://%s/%s' % (self.bootstrap_bucket, self.basedir)
353
383
  gsutil = Gsutil(self.gsutil_exe, boto_path=None)
354
384
  # Get the most recent version of the zipfile.
355
385
  _, ls_out, ls_err = gsutil.check_call('ls', gs_folder)
356
- ls_out_sorted = sorted(ls_out.splitlines())
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)
357
403
  if not ls_out_sorted:
358
404
  # This repo is not on Google Storage.
359
405
  self.print('No bootstrap file for %s found in %s, stderr:\n %s' %
@@ -499,8 +545,8 @@ class Mirror(object):
499
545
  'Shallow fetch requested, but repo cache already exists.')
500
546
  return tempdir
501
547
 
502
- def _fetch(self, rundir, verbose, depth):
503
- self.config(rundir)
548
+ def _fetch(self, rundir, verbose, depth, reset_fetch_config):
549
+ self.config(rundir, reset_fetch_config)
504
550
  v = []
505
551
  d = []
506
552
  if verbose:
@@ -522,7 +568,8 @@ class Mirror(object):
522
568
  logging.warn('Fetch of %s failed' % spec)
523
569
 
524
570
  def populate(self, depth=None, shallow=False, bootstrap=False,
525
- verbose=False, ignore_lock=False, lock_timeout=0):
571
+ verbose=False, ignore_lock=False, lock_timeout=0,
572
+ reset_fetch_config=False):
526
573
  assert self.GetCachePath()
527
574
  if shallow and not depth:
528
575
  depth = 10000
@@ -536,14 +583,14 @@ class Mirror(object):
536
583
  try:
537
584
  tempdir = self._ensure_bootstrapped(depth, bootstrap)
538
585
  rundir = tempdir or self.mirror_path
539
- self._fetch(rundir, verbose, depth)
586
+ self._fetch(rundir, verbose, depth, reset_fetch_config)
540
587
  except ClobberNeeded:
541
588
  # This is a major failure, we need to clean and force a bootstrap.
542
589
  gclient_utils.rmtree(rundir)
543
590
  self.print(GIT_CACHE_CORRUPT_MESSAGE)
544
591
  tempdir = self._ensure_bootstrapped(depth, bootstrap, force=True)
545
592
  assert tempdir
546
- self._fetch(tempdir, verbose, depth)
593
+ self._fetch(tempdir, verbose, depth, reset_fetch_config)
547
594
  finally:
548
595
  if tempdir:
549
596
  if os.path.exists(self.mirror_path):
@@ -684,6 +731,8 @@ def CMDpopulate(parser, args):
684
731
  parser.add_option('--ignore_locks', '--ignore-locks',
685
732
  action='store_true',
686
733
  help='Don\'t try to lock repository')
734
+ parser.add_option('--reset-fetch-config', action='store_true', default=False,
735
+ help='Reset the fetch config before populating the cache.')
687
736
 
688
737
  options, args = parser.parse_args(args)
689
738
  if not len(args) == 1:
@@ -697,6 +746,7 @@ def CMDpopulate(parser, args):
697
746
  'bootstrap': not options.no_bootstrap,
698
747
  'ignore_lock': options.ignore_locks,
699
748
  'lock_timeout': options.timeout,
749
+ 'reset_fetch_config': options.reset_fetch_config,
700
750
  }
701
751
  if options.depth:
702
752
  kwargs['depth'] = options.depth
@@ -795,7 +845,10 @@ class OptionParser(optparse.OptionParser):
795
845
  def __init__(self, *args, **kwargs):
796
846
  optparse.OptionParser.__init__(self, *args, prog='git cache', **kwargs)
797
847
  self.add_option('-c', '--cache-dir',
798
- help='Path to the directory containing the cache')
848
+ help=(
849
+ 'Path to the directory containing the caches. Normally '
850
+ 'deduced from git config cache.cachepath or '
851
+ '$GIT_CACHE_PATH.'))
799
852
  self.add_option('-v', '--verbose', action='count', default=1,
800
853
  help='Increase verbosity (can be passed multiple times)')
801
854
  self.add_option('-q', '--quiet', action='store_true',