libv8 5.3.332.38.5 → 5.6.326.50.0beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (352) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +0 -1
  3. data/CHANGELOG.md +2 -0
  4. data/ext/libv8/builder.rb +2 -2
  5. data/lib/libv8/version.rb +1 -1
  6. data/patches/0001-Build-a-standalone-static-library.patch +4 -4
  7. data/patches/0002-Don-t-compile-unnecessary-stuff.patch +16 -11
  8. data/patches/0003-Use-the-fPIC-flag-for-the-static-library.patch +4 -4
  9. data/patches/{0005-Do-not-embed-debug-symbols-in-macOS-libraries.patch → 0004-Do-not-embed-debug-symbols-in-macOS-libraries.patch} +4 -4
  10. data/vendor/depot_tools/.gitignore +4 -0
  11. data/vendor/depot_tools/OWNERS +0 -2
  12. data/vendor/depot_tools/PRESUBMIT.py +20 -23
  13. data/vendor/depot_tools/README.gclient.md +3 -3
  14. data/vendor/depot_tools/README.git-cl.md +13 -12
  15. data/vendor/depot_tools/README.md +2 -3
  16. data/vendor/depot_tools/WATCHLISTS +0 -1
  17. data/vendor/depot_tools/appengine_mapper.py +23 -0
  18. data/vendor/depot_tools/apply_issue.py +2 -8
  19. data/vendor/depot_tools/bootstrap/win/README.md +1 -8
  20. data/vendor/depot_tools/bootstrap/win/git_bootstrap.py +6 -16
  21. data/vendor/depot_tools/bootstrap/win/git_version.txt +1 -1
  22. data/vendor/depot_tools/bootstrap/win/git_version_bleeding_edge.txt +1 -1
  23. data/vendor/depot_tools/checkout.py +20 -433
  24. data/vendor/depot_tools/cipd +73 -0
  25. data/vendor/depot_tools/cipd.bat +12 -0
  26. data/vendor/depot_tools/cipd.ps1 +57 -0
  27. data/vendor/depot_tools/cipd_client_version +1 -0
  28. data/vendor/depot_tools/clang_format.py +9 -6
  29. data/vendor/depot_tools/clang_format_merge_driver +8 -0
  30. data/vendor/depot_tools/clang_format_merge_driver.bat +11 -0
  31. data/vendor/depot_tools/clang_format_merge_driver.py +67 -0
  32. data/vendor/depot_tools/codereview.settings +3 -2
  33. data/vendor/depot_tools/commit_queue.py +1 -1
  34. data/vendor/depot_tools/cpplint.py +2 -0
  35. data/vendor/depot_tools/fetch.py +1 -54
  36. data/vendor/depot_tools/fetch_configs/android.py +2 -2
  37. data/vendor/depot_tools/fetch_configs/breakpad.py +2 -3
  38. data/vendor/depot_tools/fetch_configs/chromium.py +2 -3
  39. data/vendor/depot_tools/fetch_configs/crashpad.py +2 -2
  40. data/vendor/depot_tools/fetch_configs/dart.py +2 -3
  41. data/vendor/depot_tools/fetch_configs/dartino.py +2 -3
  42. data/vendor/depot_tools/fetch_configs/dartium.py +2 -3
  43. data/vendor/depot_tools/fetch_configs/depot_tools.py +3 -6
  44. data/vendor/depot_tools/fetch_configs/gyp.py +2 -3
  45. data/vendor/depot_tools/fetch_configs/infra.py +2 -2
  46. data/vendor/depot_tools/fetch_configs/infra_internal.py +2 -2
  47. data/vendor/depot_tools/fetch_configs/ios.py +2 -2
  48. data/vendor/depot_tools/fetch_configs/ios_internal.py +2 -3
  49. data/vendor/depot_tools/fetch_configs/mojo.py +2 -3
  50. data/vendor/depot_tools/fetch_configs/nacl.py +2 -3
  51. data/vendor/depot_tools/fetch_configs/naclports.py +2 -3
  52. data/vendor/depot_tools/fetch_configs/pdfium.py +2 -2
  53. data/vendor/depot_tools/fetch_configs/skia.py +2 -2
  54. data/vendor/depot_tools/fetch_configs/skia_buildbot.py +2 -2
  55. data/vendor/depot_tools/fetch_configs/syzygy.py +2 -2
  56. data/vendor/depot_tools/fetch_configs/v8.py +2 -3
  57. data/vendor/depot_tools/fetch_configs/webrtc.py +5 -3
  58. data/vendor/depot_tools/fetch_configs/webrtc_android.py +2 -2
  59. data/vendor/depot_tools/fetch_configs/webrtc_ios.py +2 -2
  60. data/vendor/depot_tools/fix_encoding.py +6 -6
  61. data/vendor/depot_tools/gclient.py +136 -368
  62. data/vendor/depot_tools/gclient_scm.py +108 -647
  63. data/vendor/depot_tools/gclient_utils.py +22 -86
  64. data/vendor/depot_tools/gerrit_client.py +105 -0
  65. data/vendor/depot_tools/gerrit_util.py +174 -67
  66. data/vendor/depot_tools/git-crrev-parse +6 -7
  67. data/vendor/depot_tools/git-gs +1 -1
  68. data/vendor/depot_tools/git_cache.py +68 -18
  69. data/vendor/depot_tools/git_cherry_pick_upload.py +4 -4
  70. data/vendor/depot_tools/git_cl.py +1028 -961
  71. data/vendor/depot_tools/git_common.py +2 -3
  72. data/vendor/depot_tools/git_drover.py +0 -1
  73. data/vendor/depot_tools/git_footers.py +3 -43
  74. data/vendor/depot_tools/git_rebase_update.py +9 -1
  75. data/vendor/depot_tools/git_squash_branch.py +1 -1
  76. data/vendor/depot_tools/infra/config/cq.cfg +8 -1
  77. data/vendor/depot_tools/infra/config/recipes.cfg +1 -1
  78. data/vendor/depot_tools/man/html/depot_tools.html +3 -11
  79. data/vendor/depot_tools/man/html/depot_tools_tutorial.html +9 -9
  80. data/vendor/depot_tools/man/html/git-cherry-pick-upload.html +2 -2
  81. data/vendor/depot_tools/man/html/git-drover.html +17 -17
  82. data/vendor/depot_tools/man/html/git-footers.html +2 -2
  83. data/vendor/depot_tools/man/html/git-freeze.html +4 -4
  84. data/vendor/depot_tools/man/html/git-hyper-blame.html +2 -2
  85. data/vendor/depot_tools/man/html/git-map-branches.html +2 -2
  86. data/vendor/depot_tools/man/html/git-map.html +2 -2
  87. data/vendor/depot_tools/man/html/git-mark-merge-base.html +2 -2
  88. data/vendor/depot_tools/man/html/git-nav-downstream.html +2 -2
  89. data/vendor/depot_tools/man/html/git-nav-upstream.html +2 -2
  90. data/vendor/depot_tools/man/html/git-new-branch.html +2 -2
  91. data/vendor/depot_tools/man/html/git-rebase-update.html +2 -2
  92. data/vendor/depot_tools/man/html/git-rename-branch.html +2 -2
  93. data/vendor/depot_tools/man/html/git-reparent-branch.html +2 -2
  94. data/vendor/depot_tools/man/html/git-retry.html +3 -3
  95. data/vendor/depot_tools/man/html/git-squash-branch.html +3 -3
  96. data/vendor/depot_tools/man/html/git-thaw.html +2 -2
  97. data/vendor/depot_tools/man/html/git-upstream-diff.html +3 -3
  98. data/vendor/depot_tools/man/man1/git-cherry-pick-upload.1 +4 -4
  99. data/vendor/depot_tools/man/man1/git-drover.1 +19 -19
  100. data/vendor/depot_tools/man/man1/git-footers.1 +4 -4
  101. data/vendor/depot_tools/man/man1/git-freeze.1 +6 -6
  102. data/vendor/depot_tools/man/man1/git-hyper-blame.1 +4 -4
  103. data/vendor/depot_tools/man/man1/git-map-branches.1 +4 -4
  104. data/vendor/depot_tools/man/man1/git-map.1 +4 -4
  105. data/vendor/depot_tools/man/man1/git-mark-merge-base.1 +4 -4
  106. data/vendor/depot_tools/man/man1/git-nav-downstream.1 +4 -4
  107. data/vendor/depot_tools/man/man1/git-nav-upstream.1 +4 -4
  108. data/vendor/depot_tools/man/man1/git-new-branch.1 +4 -4
  109. data/vendor/depot_tools/man/man1/git-rebase-update.1 +4 -4
  110. data/vendor/depot_tools/man/man1/git-rename-branch.1 +4 -4
  111. data/vendor/depot_tools/man/man1/git-reparent-branch.1 +4 -4
  112. data/vendor/depot_tools/man/man1/git-retry.1 +5 -5
  113. data/vendor/depot_tools/man/man1/git-squash-branch.1 +5 -5
  114. data/vendor/depot_tools/man/man1/git-thaw.1 +4 -4
  115. data/vendor/depot_tools/man/man1/git-upstream-diff.1 +5 -5
  116. data/vendor/depot_tools/man/man7/depot_tools.7 +5 -10
  117. data/vendor/depot_tools/man/man7/depot_tools_tutorial.7 +4 -4
  118. data/vendor/depot_tools/man/src/depot_tools.txt +1 -1
  119. data/vendor/depot_tools/man/src/depot_tools_tutorial.txt +7 -7
  120. data/vendor/depot_tools/man/src/filter_demo_output.py +2 -2
  121. data/vendor/depot_tools/man/src/git-footers.demo.1.sh +1 -1
  122. data/vendor/depot_tools/man/src/git-retry.txt +1 -1
  123. data/vendor/depot_tools/man/src/git-squash-branch.txt +2 -2
  124. data/vendor/depot_tools/man/src/git-upstream-diff.txt +1 -1
  125. data/vendor/depot_tools/my_activity.py +6 -3
  126. data/vendor/depot_tools/my_reviews.py +1 -1
  127. data/vendor/depot_tools/ninja +2 -2
  128. data/vendor/depot_tools/ninja-linux32 +0 -0
  129. data/vendor/depot_tools/ninja-linux64 +0 -0
  130. data/vendor/depot_tools/ninja-mac +0 -0
  131. data/vendor/depot_tools/ninja.exe +0 -0
  132. data/vendor/depot_tools/owners.py +14 -3
  133. data/vendor/depot_tools/presubmit_canned_checks.py +46 -67
  134. data/vendor/depot_tools/presubmit_support.py +109 -371
  135. data/vendor/depot_tools/pylintrc +83 -56
  136. data/vendor/depot_tools/recipe_modules/OWNERS +1 -0
  137. data/vendor/depot_tools/recipe_modules/bot_update/__init__.py +18 -9
  138. data/vendor/depot_tools/recipe_modules/bot_update/api.py +56 -55
  139. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/basic.json +3 -7
  140. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/basic_output_manifest.json +3 -7
  141. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/basic_with_branch_heads.json +3 -7
  142. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/buildbot.json +52 -0
  143. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/clobber.json +19 -10
  144. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/gerrit_no_rebase_patch_ref.json +19 -10
  145. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/gerrit_no_reset.json +19 -10
  146. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/no_shallow.json +19 -10
  147. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/reset_root_solution_revision.json +19 -10
  148. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/trychange.json +3 -7
  149. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/trychange_oauth2.json +2 -54
  150. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/trychange_oauth2_buildbot.json +56 -0
  151. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/{forced.json → trychange_oauth2_json.json} +6 -9
  152. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/trychange_oauth2_json_win.json +54 -0
  153. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/tryjob.json +9 -9
  154. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/tryjob_fail.json +9 -9
  155. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/tryjob_fail_patch.json +9 -9
  156. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/tryjob_fail_patch_download.json +9 -9
  157. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/tryjob_gerrit_angle.json +20 -10
  158. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/tryjob_gerrit_angle_deprecated.json +59 -0
  159. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/tryjob_v8.json +9 -9
  160. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/tryjob_v8_head_by_default.json +20 -10
  161. data/vendor/depot_tools/recipe_modules/bot_update/example.py +45 -63
  162. data/vendor/depot_tools/recipe_modules/bot_update/resources/bot_update.py +210 -807
  163. data/vendor/depot_tools/recipe_modules/bot_update/test_api.py +34 -45
  164. data/vendor/depot_tools/recipe_modules/cipd/api.py +59 -84
  165. data/vendor/depot_tools/recipe_modules/cipd/example.expected/basic.json +71 -117
  166. data/vendor/depot_tools/recipe_modules/cipd/example.expected/describe-failed.json +14 -60
  167. data/vendor/depot_tools/recipe_modules/cipd/example.expected/describe-many-instances.json +71 -117
  168. data/vendor/depot_tools/recipe_modules/cipd/example.expected/mac64.json +71 -117
  169. data/vendor/depot_tools/recipe_modules/cipd/example.expected/win64.json +71 -117
  170. data/vendor/depot_tools/recipe_modules/cipd/example.py +2 -12
  171. data/vendor/depot_tools/recipe_modules/cipd/test_api.py +0 -9
  172. data/vendor/depot_tools/recipe_modules/depot_tools/api.py +6 -0
  173. data/vendor/depot_tools/recipe_modules/depot_tools/example.expected/basic.json +7 -0
  174. data/vendor/depot_tools/recipe_modules/depot_tools/example.expected/win.json +7 -0
  175. data/vendor/depot_tools/recipe_modules/depot_tools/example.py +3 -0
  176. data/vendor/depot_tools/recipe_modules/gclient/__init__.py +4 -0
  177. data/vendor/depot_tools/recipe_modules/gclient/api.py +9 -22
  178. data/vendor/depot_tools/recipe_modules/gclient/config.py +18 -5
  179. data/vendor/depot_tools/recipe_modules/gclient/example.expected/basic.json +14 -14
  180. data/vendor/depot_tools/recipe_modules/gclient/example.expected/buildbot.json +211 -0
  181. data/vendor/depot_tools/recipe_modules/gclient/example.expected/revision.json +16 -14
  182. data/vendor/depot_tools/recipe_modules/gclient/example.expected/tryserver.json +16 -14
  183. data/vendor/depot_tools/recipe_modules/gclient/example.py +13 -11
  184. data/vendor/depot_tools/recipe_modules/gerrit/__init__.py +6 -0
  185. data/vendor/depot_tools/recipe_modules/gerrit/api.py +63 -0
  186. data/vendor/depot_tools/recipe_modules/gerrit/example.expected/basic.json +64 -0
  187. data/vendor/depot_tools/recipe_modules/gerrit/example.py +35 -0
  188. data/vendor/depot_tools/recipe_modules/gerrit/test_api.py +24 -0
  189. data/vendor/depot_tools/recipe_modules/git/__init__.py +4 -0
  190. data/vendor/depot_tools/recipe_modules/git/api.py +155 -142
  191. data/vendor/depot_tools/recipe_modules/git/example.expected/basic.json +43 -17
  192. data/vendor/depot_tools/recipe_modules/git/example.expected/basic_branch.json +43 -17
  193. data/vendor/depot_tools/recipe_modules/git/example.expected/basic_file_name.json +43 -17
  194. data/vendor/depot_tools/recipe_modules/git/example.expected/basic_hash.json +43 -17
  195. data/vendor/depot_tools/recipe_modules/git/example.expected/basic_ref.json +43 -17
  196. data/vendor/depot_tools/recipe_modules/git/example.expected/basic_submodule_update_force.json +43 -17
  197. data/vendor/depot_tools/recipe_modules/git/example.expected/can_fail_build.json +13 -13
  198. data/vendor/depot_tools/recipe_modules/git/example.expected/cannot_fail_build.json +43 -17
  199. data/vendor/depot_tools/recipe_modules/git/example.expected/cat-file_test.json +45 -19
  200. data/vendor/depot_tools/recipe_modules/git/example.expected/count-objects_delta.json +45 -19
  201. data/vendor/depot_tools/recipe_modules/git/example.expected/count-objects_failed.json +43 -17
  202. data/vendor/depot_tools/recipe_modules/git/example.expected/count-objects_with_bad_output.json +43 -17
  203. data/vendor/depot_tools/recipe_modules/git/example.expected/count-objects_with_bad_output_fails_build.json +8 -8
  204. data/vendor/depot_tools/recipe_modules/git/example.expected/curl_trace_file.json +44 -18
  205. data/vendor/depot_tools/recipe_modules/git/example.expected/git-cache-checkout.json +48 -22
  206. data/vendor/depot_tools/recipe_modules/git/example.expected/platform_win.json +43 -17
  207. data/vendor/depot_tools/recipe_modules/git/example.expected/rebase_failed.json +42 -16
  208. data/vendor/depot_tools/recipe_modules/git/example.expected/remote_not_origin.json +43 -17
  209. data/vendor/depot_tools/recipe_modules/git/example.expected/set_got_revision.json +43 -17
  210. data/vendor/depot_tools/recipe_modules/git/example.py +9 -3
  211. data/vendor/depot_tools/recipe_modules/git_cl/__init__.py +4 -0
  212. data/vendor/depot_tools/recipe_modules/git_cl/api.py +8 -8
  213. data/vendor/depot_tools/recipe_modules/git_cl/example.py +1 -1
  214. data/vendor/depot_tools/recipe_modules/gsutil/__init__.py +4 -0
  215. data/vendor/depot_tools/recipe_modules/gsutil/api.py +196 -0
  216. data/vendor/depot_tools/recipe_modules/gsutil/example.expected/basic.json +186 -0
  217. data/vendor/depot_tools/recipe_modules/gsutil/example.py +77 -0
  218. data/vendor/depot_tools/recipe_modules/gsutil/resources/gsutil_smart_retry.py +69 -0
  219. data/vendor/depot_tools/recipe_modules/infra_paths/__init__.py +3 -0
  220. data/vendor/depot_tools/recipe_modules/infra_paths/api.py +20 -3
  221. data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/basic.json +3 -1
  222. data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/paths_buildbot_linux.json +3 -1
  223. data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/paths_buildbot_mac.json +3 -1
  224. data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/paths_buildbot_win.json +3 -1
  225. data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/paths_kitchen_linux.json +3 -1
  226. data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/paths_kitchen_mac.json +3 -1
  227. data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/paths_kitchen_win.json +3 -1
  228. data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/paths_swarmbucket_linux.json +3 -1
  229. data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/paths_swarmbucket_mac.json +3 -1
  230. data/vendor/depot_tools/recipe_modules/infra_paths/example.expected/paths_swarmbucket_win.json +3 -1
  231. data/vendor/depot_tools/recipe_modules/infra_paths/example.py +6 -1
  232. data/vendor/depot_tools/recipe_modules/infra_paths/path_config.py +4 -6
  233. data/vendor/depot_tools/recipe_modules/rietveld/__init__.py +5 -0
  234. data/vendor/depot_tools/recipe_modules/rietveld/api.py +12 -9
  235. data/vendor/depot_tools/recipe_modules/rietveld/example.expected/basic.json +2 -24
  236. data/vendor/depot_tools/recipe_modules/rietveld/example.expected/buildbot.json +30 -0
  237. data/vendor/depot_tools/recipe_modules/rietveld/example.py +12 -6
  238. data/vendor/depot_tools/recipe_modules/tryserver/__init__.py +4 -0
  239. data/vendor/depot_tools/recipe_modules/tryserver/api.py +46 -70
  240. data/vendor/depot_tools/recipe_modules/tryserver/example.expected/set_failure_hash_with_no_steps.json +8 -0
  241. data/vendor/depot_tools/recipe_modules/tryserver/example.expected/{with_svn_patch.json → with_gerrit_patch.json} +1 -31
  242. data/vendor/depot_tools/recipe_modules/tryserver/example.expected/with_gerrit_patch_deprecated.json +39 -0
  243. data/vendor/depot_tools/recipe_modules/tryserver/example.expected/with_git_patch.json +2 -2
  244. data/vendor/depot_tools/recipe_modules/tryserver/example.expected/with_git_patch_luci.json +8 -0
  245. data/vendor/depot_tools/recipe_modules/tryserver/example.expected/with_rietveld_patch.json +3 -3
  246. data/vendor/depot_tools/recipe_modules/tryserver/example.expected/with_rietveld_patch_new.json +3 -3
  247. data/vendor/depot_tools/recipe_modules/tryserver/example.expected/with_wrong_patch.json +1 -1
  248. data/vendor/depot_tools/recipe_modules/tryserver/example.expected/with_wrong_patch_new.json +1 -1
  249. data/vendor/depot_tools/recipe_modules/tryserver/example.py +35 -5
  250. data/vendor/depot_tools/recipes.py +52 -28
  251. data/vendor/depot_tools/repo +216 -69
  252. data/vendor/depot_tools/rietveld.py +20 -15
  253. data/vendor/depot_tools/roll_dep.py +1 -1
  254. data/vendor/depot_tools/scm.py +11 -826
  255. data/vendor/depot_tools/subprocess2.py +5 -5
  256. data/vendor/depot_tools/third_party/cq_client/README.depot_tools.md +2 -0
  257. data/vendor/depot_tools/third_party/cq_client/README.md +5 -1
  258. data/vendor/depot_tools/third_party/cq_client/cq.pb.go +183 -104
  259. data/vendor/depot_tools/third_party/cq_client/cq.proto +43 -27
  260. data/vendor/depot_tools/third_party/cq_client/cq_pb2.py +95 -29
  261. data/vendor/depot_tools/third_party/cq_client/testdata/cq_both.cfg +67 -0
  262. data/vendor/depot_tools/third_party/cq_client/testdata/cq_gerrit.cfg +1 -2
  263. data/vendor/depot_tools/third_party/cq_client/testdata/cq_rietveld.cfg +0 -3
  264. data/vendor/depot_tools/third_party/upload.py +44 -24
  265. data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +0 -5
  266. metadata +38 -93
  267. data/patches/0004-Reinterpret-thread-hash-for-FreeBSD-too.patch +0 -25
  268. data/vendor/depot_tools/git-auto-svn +0 -6
  269. data/vendor/depot_tools/git_auto_svn.py +0 -122
  270. data/vendor/depot_tools/man/html/git-auto-svn.html +0 -837
  271. data/vendor/depot_tools/man/man1/git-auto-svn.1 +0 -113
  272. data/vendor/depot_tools/man/src/_git-auto-svn_desc.helper.txt +0 -1
  273. data/vendor/depot_tools/man/src/git-auto-svn.txt +0 -69
  274. data/vendor/depot_tools/recipe_modules/bot_update/example.expected/off.json +0 -43
  275. data/vendor/depot_tools/recipe_modules/cipd/example.expected/install-failed.json +0 -31
  276. data/vendor/depot_tools/recipe_modules/cipd/resources/bootstrap.py +0 -218
  277. data/vendor/depot_tools/recipe_modules/tryserver/test_api.py +0 -7
  278. data/vendor/depot_tools/third_party/gsutil/CHECKSUM +0 -1
  279. data/vendor/depot_tools/third_party/gsutil/COPYING +0 -202
  280. data/vendor/depot_tools/third_party/gsutil/LICENSE.third_party +0 -295
  281. data/vendor/depot_tools/third_party/gsutil/MANIFEST.in +0 -5
  282. data/vendor/depot_tools/third_party/gsutil/README +0 -38
  283. data/vendor/depot_tools/third_party/gsutil/README.chromium +0 -25
  284. data/vendor/depot_tools/third_party/gsutil/README.pkg +0 -49
  285. data/vendor/depot_tools/third_party/gsutil/ReleaseNotes.txt +0 -825
  286. data/vendor/depot_tools/third_party/gsutil/VERSION +0 -1
  287. data/vendor/depot_tools/third_party/gsutil/gslib/README +0 -5
  288. data/vendor/depot_tools/third_party/gsutil/gslib/__init__.py +0 -22
  289. data/vendor/depot_tools/third_party/gsutil/gslib/addlhelp/__init__.py +0 -15
  290. data/vendor/depot_tools/third_party/gsutil/gslib/addlhelp/acls.py +0 -234
  291. data/vendor/depot_tools/third_party/gsutil/gslib/addlhelp/anon.py +0 -57
  292. data/vendor/depot_tools/third_party/gsutil/gslib/addlhelp/command_opts.py +0 -116
  293. data/vendor/depot_tools/third_party/gsutil/gslib/addlhelp/dev.py +0 -139
  294. data/vendor/depot_tools/third_party/gsutil/gslib/addlhelp/metadata.py +0 -186
  295. data/vendor/depot_tools/third_party/gsutil/gslib/addlhelp/naming.py +0 -173
  296. data/vendor/depot_tools/third_party/gsutil/gslib/addlhelp/prod.py +0 -160
  297. data/vendor/depot_tools/third_party/gsutil/gslib/addlhelp/projects.py +0 -130
  298. data/vendor/depot_tools/third_party/gsutil/gslib/addlhelp/subdirs.py +0 -110
  299. data/vendor/depot_tools/third_party/gsutil/gslib/addlhelp/support.py +0 -86
  300. data/vendor/depot_tools/third_party/gsutil/gslib/addlhelp/versioning.py +0 -242
  301. data/vendor/depot_tools/third_party/gsutil/gslib/addlhelp/wildcards.py +0 -170
  302. data/vendor/depot_tools/third_party/gsutil/gslib/bucket_listing_ref.py +0 -175
  303. data/vendor/depot_tools/third_party/gsutil/gslib/command.py +0 -725
  304. data/vendor/depot_tools/third_party/gsutil/gslib/command_runner.py +0 -102
  305. data/vendor/depot_tools/third_party/gsutil/gslib/commands/__init__.py +0 -15
  306. data/vendor/depot_tools/third_party/gsutil/gslib/commands/cat.py +0 -131
  307. data/vendor/depot_tools/third_party/gsutil/gslib/commands/chacl.py +0 -523
  308. data/vendor/depot_tools/third_party/gsutil/gslib/commands/config.py +0 -662
  309. data/vendor/depot_tools/third_party/gsutil/gslib/commands/cp.py +0 -1819
  310. data/vendor/depot_tools/third_party/gsutil/gslib/commands/disablelogging.py +0 -101
  311. data/vendor/depot_tools/third_party/gsutil/gslib/commands/enablelogging.py +0 -149
  312. data/vendor/depot_tools/third_party/gsutil/gslib/commands/getacl.py +0 -82
  313. data/vendor/depot_tools/third_party/gsutil/gslib/commands/getcors.py +0 -121
  314. data/vendor/depot_tools/third_party/gsutil/gslib/commands/getdefacl.py +0 -86
  315. data/vendor/depot_tools/third_party/gsutil/gslib/commands/getlogging.py +0 -137
  316. data/vendor/depot_tools/third_party/gsutil/gslib/commands/getversioning.py +0 -116
  317. data/vendor/depot_tools/third_party/gsutil/gslib/commands/getwebcfg.py +0 -122
  318. data/vendor/depot_tools/third_party/gsutil/gslib/commands/help.py +0 -218
  319. data/vendor/depot_tools/third_party/gsutil/gslib/commands/ls.py +0 -578
  320. data/vendor/depot_tools/third_party/gsutil/gslib/commands/mb.py +0 -172
  321. data/vendor/depot_tools/third_party/gsutil/gslib/commands/mv.py +0 -159
  322. data/vendor/depot_tools/third_party/gsutil/gslib/commands/perfdiag.py +0 -903
  323. data/vendor/depot_tools/third_party/gsutil/gslib/commands/rb.py +0 -113
  324. data/vendor/depot_tools/third_party/gsutil/gslib/commands/rm.py +0 -237
  325. data/vendor/depot_tools/third_party/gsutil/gslib/commands/setacl.py +0 -138
  326. data/vendor/depot_tools/third_party/gsutil/gslib/commands/setcors.py +0 -145
  327. data/vendor/depot_tools/third_party/gsutil/gslib/commands/setdefacl.py +0 -105
  328. data/vendor/depot_tools/third_party/gsutil/gslib/commands/setmeta.py +0 -420
  329. data/vendor/depot_tools/third_party/gsutil/gslib/commands/setversioning.py +0 -114
  330. data/vendor/depot_tools/third_party/gsutil/gslib/commands/setwebcfg.py +0 -190
  331. data/vendor/depot_tools/third_party/gsutil/gslib/commands/update.py +0 -305
  332. data/vendor/depot_tools/third_party/gsutil/gslib/commands/version.py +0 -150
  333. data/vendor/depot_tools/third_party/gsutil/gslib/exception.py +0 -76
  334. data/vendor/depot_tools/third_party/gsutil/gslib/help_provider.py +0 -81
  335. data/vendor/depot_tools/third_party/gsutil/gslib/name_expansion.py +0 -550
  336. data/vendor/depot_tools/third_party/gsutil/gslib/no_op_auth_plugin.py +0 -30
  337. data/vendor/depot_tools/third_party/gsutil/gslib/plurality_checkable_iterator.py +0 -56
  338. data/vendor/depot_tools/third_party/gsutil/gslib/project_id.py +0 -67
  339. data/vendor/depot_tools/third_party/gsutil/gslib/storage_uri_builder.py +0 -56
  340. data/vendor/depot_tools/third_party/gsutil/gslib/thread_pool.py +0 -79
  341. data/vendor/depot_tools/third_party/gsutil/gslib/util.py +0 -167
  342. data/vendor/depot_tools/third_party/gsutil/gslib/wildcard_iterator.py +0 -498
  343. data/vendor/depot_tools/third_party/gsutil/gsutil +0 -384
  344. data/vendor/depot_tools/third_party/gsutil/gsutil.spec.in +0 -75
  345. data/vendor/depot_tools/third_party/gsutil/oauth2_plugin/__init__.py +0 -22
  346. data/vendor/depot_tools/third_party/gsutil/oauth2_plugin/oauth2_client.py +0 -630
  347. data/vendor/depot_tools/third_party/gsutil/oauth2_plugin/oauth2_client_test.py +0 -374
  348. data/vendor/depot_tools/third_party/gsutil/oauth2_plugin/oauth2_helper.py +0 -103
  349. data/vendor/depot_tools/third_party/gsutil/oauth2_plugin/oauth2_plugin.py +0 -24
  350. data/vendor/depot_tools/third_party/gsutil/pkg_util.py +0 -60
  351. data/vendor/depot_tools/third_party/gsutil/plugins/__init__.py +0 -0
  352. data/vendor/depot_tools/third_party/gsutil/plugins/sso_auth.py +0 -105
@@ -1,498 +0,0 @@
1
- # Copyright 2010 Google Inc. All Rights Reserved.
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a
4
- # copy of this software and associated documentation files (the
5
- # "Software"), to deal in the Software without restriction, including
6
- # without limitation the rights to use, copy, modify, merge, publish, dis-
7
- # tribute, sublicense, and/or sell copies of the Software, and to permit
8
- # persons to whom the Software is furnished to do so, subject to the fol-
9
- # lowing conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included
12
- # in all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15
- # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
16
- # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
17
- # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
18
- # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20
- # IN THE SOFTWARE.
21
-
22
- """Implementation of wildcarding over StorageUris.
23
-
24
- StorageUri is an abstraction that Google introduced in the boto library,
25
- for representing storage provider-independent bucket and object names with
26
- a shorthand URI-like syntax (see boto/boto/storage_uri.py) The current
27
- class provides wildcarding support for StorageUri objects (including both
28
- bucket and file system objects), allowing one to express collections of
29
- objects with syntax like the following:
30
- gs://mybucket/images/*.png
31
- file:///tmp/???abc???
32
-
33
- We provide wildcarding support as part of gsutil rather than as part
34
- of boto because wildcarding is really part of shell command-like
35
- functionality.
36
-
37
- A comment about wildcard semantics: We support both single path component
38
- wildcards (e.g., using '*') and recursive wildcards (using '**'), for both
39
- file and cloud URIs. For example,
40
- gs://bucket/doc/*/*.html
41
- would enumerate HTML files one directory down from gs://bucket/doc, while
42
- gs://bucket/**/*.html
43
- would enumerate HTML files in all objects contained in the bucket.
44
-
45
- Note also that if you use file system wildcards it's likely your shell
46
- interprets the wildcarding before passing the command to gsutil. For example:
47
- % gsutil cp /opt/eclipse/*/*.html gs://bucket/eclipse
48
- would likely be expanded by the shell into the following before running gsutil:
49
- % gsutil cp /opt/eclipse/RUNNING.html gs://bucket/eclipse
50
-
51
- Note also that most shells don't support '**' wildcarding (I think only
52
- zsh does). If you want to use '**' wildcarding with such a shell you can
53
- single quote each wildcarded string, so it gets passed uninterpreted by the
54
- shell to gsutil (at which point gsutil will perform the wildcarding expansion):
55
- % gsutil cp '/opt/eclipse/**/*.html' gs://bucket/eclipse
56
- """
57
-
58
- import boto
59
- import fnmatch
60
- import glob
61
- import os
62
- import re
63
- import sys
64
- import urllib
65
-
66
- from boto.s3.prefix import Prefix
67
- from boto.storage_uri import BucketStorageUri
68
- from bucket_listing_ref import BucketListingRef
69
-
70
- # Regex to determine if a string contains any wildcards.
71
- WILDCARD_REGEX = re.compile('[*?\[\]]')
72
-
73
- WILDCARD_OBJECT_ITERATOR = 'wildcard_object_iterator'
74
- WILDCARD_BUCKET_ITERATOR = 'wildcard_bucket_iterator'
75
-
76
-
77
- class WildcardIterator(object):
78
- """Base class for wildcarding over StorageUris.
79
-
80
- This class implements support for iterating over StorageUris that
81
- contain wildcards.
82
-
83
- The base class is abstract; you should instantiate using the
84
- wildcard_iterator() static factory method, which chooses the right
85
- implementation depending on the StorageUri.
86
- """
87
-
88
- def __repr__(self):
89
- """Returns string representation of WildcardIterator."""
90
- return 'WildcardIterator(%s)' % self.wildcard_uri
91
-
92
-
93
- class CloudWildcardIterator(WildcardIterator):
94
- """WildcardIterator subclass for buckets and objects.
95
-
96
- Iterates over BucketListingRef matching the StorageUri wildcard. It's
97
- much more efficient to request the Key from the BucketListingRef (via
98
- GetKey()) than to request the StorageUri and then call uri.get_key()
99
- to retrieve the key, for cases where you want to get metadata that's
100
- available in the Bucket (for example to get the name and size of
101
- each object), because that information is available in the bucket GET
102
- results. If you were to iterate over URIs for such cases and then get
103
- the name and size info from each resulting StorageUri, it would cause
104
- an additional object GET request for each of the result URIs.
105
- """
106
-
107
- def __init__(self, wildcard_uri, proj_id_handler,
108
- bucket_storage_uri_class=BucketStorageUri, all_versions=False,
109
- headers=None, debug=0):
110
- """
111
- Instantiates an iterator over BucketListingRef matching given wildcard URI.
112
-
113
- Args:
114
- wildcard_uri: StorageUri that contains the wildcard to iterate.
115
- proj_id_handler: ProjectIdHandler to use for current command.
116
- bucket_storage_uri_class: BucketStorageUri interface.
117
- Settable for testing/mocking.
118
- headers: Dictionary containing optional HTTP headers to pass to boto.
119
- debug: Debug level to pass in to boto connection (range 0..3).
120
- """
121
- self.wildcard_uri = wildcard_uri
122
- # Make a copy of the headers so any updates we make during wildcard
123
- # expansion aren't left in the input params (specifically, so we don't
124
- # include the x-goog-project-id header needed by a subset of cases, in
125
- # the data returned to caller, which could then be used in other cases
126
- # where that header must not be passed).
127
- if headers is None:
128
- self.headers = {}
129
- else:
130
- self.headers = headers.copy()
131
- self.proj_id_handler = proj_id_handler
132
- self.bucket_storage_uri_class = bucket_storage_uri_class
133
- self.all_versions = all_versions
134
- self.debug = debug
135
-
136
- def __iter__(self):
137
- """Python iterator that gets called when iterating over cloud wildcard.
138
-
139
- Yields:
140
- BucketListingRef, or empty iterator if no matches.
141
- """
142
- # First handle bucket wildcarding, if any.
143
- if ContainsWildcard(self.wildcard_uri.bucket_name):
144
- regex = fnmatch.translate(self.wildcard_uri.bucket_name)
145
- bucket_uris = []
146
- prog = re.compile(regex)
147
- self.proj_id_handler.FillInProjectHeaderIfNeeded(WILDCARD_BUCKET_ITERATOR,
148
- self.wildcard_uri,
149
- self.headers)
150
- for b in self.wildcard_uri.get_all_buckets(headers=self.headers):
151
- if prog.match(b.name):
152
- # Use str(b.name) because get_all_buckets() returns Unicode
153
- # string, which when used to construct x-goog-copy-src metadata
154
- # requests for object-to-object copies causes pathname '/' chars
155
- # to be entity-encoded (bucket%2Fdir instead of bucket/dir),
156
- # which causes the request to fail.
157
- uri_str = '%s://%s' % (self.wildcard_uri.scheme,
158
- urllib.quote_plus(str(b.name)))
159
- bucket_uris.append(
160
- boto.storage_uri(
161
- uri_str, debug=self.debug,
162
- bucket_storage_uri_class=self.bucket_storage_uri_class,
163
- suppress_consec_slashes=False))
164
- else:
165
- bucket_uris = [self.wildcard_uri.clone_replace_name('')]
166
-
167
- # Now iterate over bucket(s), and handle object wildcarding, if any.
168
- self.proj_id_handler.FillInProjectHeaderIfNeeded(WILDCARD_OBJECT_ITERATOR,
169
- self.wildcard_uri,
170
- self.headers)
171
- for bucket_uri in bucket_uris:
172
- if self.wildcard_uri.names_bucket():
173
- # Bucket-only URI.
174
- yield BucketListingRef(bucket_uri, key=None, prefix=None,
175
- headers=self.headers)
176
- else:
177
- # URI contains an object name. If there's no wildcard just yield
178
- # the needed URI.
179
- if not ContainsWildcard(self.wildcard_uri.object_name):
180
- uri_to_yield = bucket_uri.clone_replace_name(
181
- self.wildcard_uri.object_name)
182
- yield BucketListingRef(uri_to_yield, key=None, prefix=None,
183
- headers=self.headers)
184
- else:
185
- # URI contains a wildcard. Expand iteratively by building
186
- # prefix/delimiter bucket listing request, filtering the results per
187
- # the current level's wildcard, and continuing with the next component
188
- # of the wildcard. See _BuildBucketFilterStrings() documentation
189
- # for details.
190
- #
191
- # Initialize the iteration with bucket name from bucket_uri but
192
- # object name from self.wildcard_uri. This is needed to handle cases
193
- # where both the bucket and object names contain wildcards.
194
- uris_needing_expansion = [
195
- bucket_uri.clone_replace_name(self.wildcard_uri.object_name)]
196
- while len(uris_needing_expansion) > 0:
197
- uri = uris_needing_expansion.pop(0)
198
- (prefix, delimiter, prefix_wildcard, suffix_wildcard) = (
199
- self._BuildBucketFilterStrings(uri.object_name))
200
- prog = re.compile(fnmatch.translate(prefix_wildcard))
201
- # List bucket for objects matching prefix up to delimiter.
202
- for key in bucket_uri.list_bucket(prefix=prefix,
203
- delimiter=delimiter,
204
- headers=self.headers,
205
- all_versions=self.all_versions):
206
- # Check that the prefix regex matches rstripped key.name (to
207
- # correspond with the rstripped prefix_wildcard from
208
- # _BuildBucketFilterStrings()).
209
- if prog.match(key.name.rstrip('/')):
210
- if suffix_wildcard and key.name.rstrip('/') != suffix_wildcard:
211
- if isinstance(key, Prefix):
212
- # There's more wildcard left to expand.
213
- uris_needing_expansion.append(
214
- uri.clone_replace_name(key.name.rstrip('/') + '/'
215
- + suffix_wildcard))
216
- else:
217
- # Done expanding.
218
- expanded_uri = uri.clone_replace_key(key)
219
-
220
- if isinstance(key, Prefix):
221
- yield BucketListingRef(expanded_uri, key=None, prefix=key,
222
- headers=self.headers)
223
- else:
224
- if self.all_versions:
225
- yield BucketListingRef(expanded_uri, key=key, prefix=None,
226
- headers=self.headers)
227
- else:
228
- # Yield BLR wrapping version-less URI.
229
- yield BucketListingRef(expanded_uri.clone_replace_name(
230
- expanded_uri.object_name), key=key, prefix=None,
231
- headers=self.headers)
232
-
233
- def _BuildBucketFilterStrings(self, wildcard):
234
- """
235
- Builds strings needed for querying a bucket and filtering results to
236
- implement wildcard object name matching.
237
-
238
- Args:
239
- wildcard: The wildcard string to match to objects.
240
-
241
- Returns:
242
- (prefix, delimiter, prefix_wildcard, suffix_wildcard)
243
- where:
244
- prefix is the prefix to be sent in bucket GET request.
245
- delimiter is the delimiter to be sent in bucket GET request.
246
- prefix_wildcard is the wildcard to be used to filter bucket GET results.
247
- suffix_wildcard is wildcard to be appended to filtered bucket GET
248
- results for next wildcard expansion iteration.
249
- For example, given the wildcard gs://bucket/abc/d*e/f*.txt we
250
- would build prefix= abc/d, delimiter=/, prefix_wildcard=d*e, and
251
- suffix_wildcard=f*.txt. Using this prefix and delimiter for a bucket
252
- listing request will then produce a listing result set that can be
253
- filtered using this prefix_wildcard; and we'd use this suffix_wildcard
254
- to feed into the next call(s) to _BuildBucketFilterStrings(), for the
255
- next iteration of listing/filtering.
256
-
257
- Raises:
258
- AssertionError if wildcard doesn't contain any wildcard chars.
259
- """
260
- # Generate a request prefix if the object name part of the wildcard starts
261
- # with a non-wildcard string (e.g., that's true for 'gs://bucket/abc*xyz').
262
- match = WILDCARD_REGEX.search(wildcard)
263
- if not match:
264
- # Input "wildcard" has no wildcard chars, so just return tuple that will
265
- # cause a bucket listing to match the given input wildcard. Example: if
266
- # previous iteration yielded gs://bucket/dir/ with suffix_wildcard abc,
267
- # the next iteration will call _BuildBucketFilterStrings() with
268
- # gs://bucket/dir/abc, and we will return prefix ='dir/abc',
269
- # delimiter='/', prefix_wildcard='dir/abc', and suffix_wildcard=''.
270
- prefix = wildcard
271
- delimiter = '/'
272
- prefix_wildcard = wildcard
273
- suffix_wildcard = ''
274
- else:
275
- if match.start() > 0:
276
- # Wildcard does not occur at beginning of object name, so construct a
277
- # prefix string to send to server.
278
- prefix = wildcard[:match.start()]
279
- wildcard_part = wildcard[match.start():]
280
- else:
281
- prefix = None
282
- wildcard_part = wildcard
283
- end = wildcard_part.find('/')
284
- if end != -1:
285
- wildcard_part = wildcard_part[:end+1]
286
- # Remove trailing '/' so we will match gs://bucket/abc* as well as
287
- # gs://bucket/abc*/ with the same wildcard regex.
288
- prefix_wildcard = ((prefix or '') + wildcard_part).rstrip('/')
289
- suffix_wildcard = wildcard[match.end():]
290
- end = suffix_wildcard.find('/')
291
- if end == -1:
292
- suffix_wildcard = ''
293
- else:
294
- suffix_wildcard = suffix_wildcard[end+1:]
295
- # To implement recursive (**) wildcarding, if prefix_wildcard
296
- # suffix_wildcard starts with '**' don't send a delimiter, and combine
297
- # suffix_wildcard at end of prefix_wildcard.
298
- if prefix_wildcard.find('**') != -1:
299
- delimiter = None
300
- prefix_wildcard = prefix_wildcard + suffix_wildcard
301
- suffix_wildcard = ''
302
- else:
303
- delimiter = '/'
304
- delim_pos = suffix_wildcard.find(delimiter)
305
- # The following debug output is useful for tracing how the algorithm
306
- # walks through a multi-part wildcard like gs://bucket/abc/d*e/f*.txt
307
- if self.debug > 1:
308
- sys.stderr.write(
309
- 'DEBUG: wildcard=%s, prefix=%s, delimiter=%s, '
310
- 'prefix_wildcard=%s, suffix_wildcard=%s\n' %
311
- (wildcard, prefix, delimiter, prefix_wildcard, suffix_wildcard))
312
- return (prefix, delimiter, prefix_wildcard, suffix_wildcard)
313
-
314
- def IterKeys(self):
315
- """
316
- Convenience iterator that runs underlying iterator and returns Key for each
317
- iteration.
318
-
319
- Yields:
320
- Subclass of boto.s3.key.Key, or empty iterator if no matches.
321
-
322
- Raises:
323
- WildcardException: for bucket-only uri.
324
- """
325
- for bucket_listing_ref in self. __iter__():
326
- if bucket_listing_ref.HasKey():
327
- yield bucket_listing_ref.GetKey()
328
-
329
- def IterUris(self):
330
- """
331
- Convenience iterator that runs underlying iterator and returns StorageUri
332
- for each iteration.
333
-
334
- Yields:
335
- StorageUri, or empty iterator if no matches.
336
- """
337
- for bucket_listing_ref in self. __iter__():
338
- yield bucket_listing_ref.GetUri()
339
-
340
- def IterUrisForKeys(self):
341
- """
342
- Convenience iterator that runs underlying iterator and returns the
343
- StorageUri for each iterated BucketListingRef that has a Key.
344
-
345
- Yields:
346
- StorageUri, or empty iterator if no matches.
347
- """
348
- for bucket_listing_ref in self. __iter__():
349
- if bucket_listing_ref.HasKey():
350
- yield bucket_listing_ref.GetUri()
351
-
352
-
353
- class FileWildcardIterator(WildcardIterator):
354
- """WildcardIterator subclass for files and directories.
355
-
356
- If you use recursive wildcards ('**') only a single such wildcard is
357
- supported. For example you could use the wildcard '**/*.txt' to list all .txt
358
- files in any subdirectory of the current directory, but you couldn't use a
359
- wildcard like '**/abc/**/*.txt' (which would, if supported, let you find .txt
360
- files in any subdirectory named 'abc').
361
- """
362
-
363
- def __init__(self, wildcard_uri, headers=None, debug=0):
364
- """
365
- Instantiate an iterator over BucketListingRefs matching given wildcard URI.
366
-
367
- Args:
368
- wildcard_uri: StorageUri that contains the wildcard to iterate.
369
- headers: Dictionary containing optional HTTP headers to pass to boto.
370
- debug: Debug level to pass in to boto connection (range 0..3).
371
- """
372
- self.wildcard_uri = wildcard_uri
373
- self.headers = headers
374
- self.debug = debug
375
-
376
- def __iter__(self):
377
- wildcard = self.wildcard_uri.object_name
378
- match = re.search('\*\*', wildcard)
379
- if match:
380
- # Recursive wildcarding request ('.../**/...').
381
- # Example input: wildcard = '/tmp/tmp2pQJAX/**/*'
382
- base_dir = wildcard[:match.start()-1]
383
- remaining_wildcard = wildcard[match.start()+2:]
384
- # At this point for the above example base_dir = '/tmp/tmp2pQJAX' and
385
- # remaining_wildcard = '/*'
386
- if remaining_wildcard.startswith('*'):
387
- raise WildcardException('Invalid wildcard with more than 2 consecutive '
388
- '*s (%s)' % wildcard)
389
- # If there was no remaining wildcard past the recursive wildcard,
390
- # treat it as if it were a '*'. For example, file://tmp/** is equivalent
391
- # to file://tmp/**/*
392
- if not remaining_wildcard:
393
- remaining_wildcard = '*'
394
- # Skip slash(es).
395
- remaining_wildcard = remaining_wildcard.lstrip(os.sep)
396
- filepaths = []
397
- for dirpath, unused_dirnames, filenames in os.walk(base_dir):
398
- filepaths.extend(
399
- os.path.join(dirpath, f) for f in fnmatch.filter(filenames,
400
- remaining_wildcard)
401
- )
402
- else:
403
- # Not a recursive wildcarding request.
404
- filepaths = glob.glob(wildcard)
405
- for filepath in filepaths:
406
- expanded_uri = self.wildcard_uri.clone_replace_name(filepath)
407
- yield BucketListingRef(expanded_uri)
408
-
409
- def IterKeys(self):
410
- """
411
- Placeholder to allow polymorphic use of WildcardIterator.
412
-
413
- Raises:
414
- WildcardException: in all cases.
415
- """
416
- raise WildcardException(
417
- 'Iterating over Keys not possible for file wildcards')
418
-
419
- def IterUris(self):
420
- """
421
- Convenience iterator that runs underlying iterator and returns StorageUri
422
- for each iteration.
423
-
424
- Yields:
425
- StorageUri, or empty iterator if no matches.
426
- """
427
- for bucket_listing_ref in self. __iter__():
428
- yield bucket_listing_ref.GetUri()
429
-
430
-
431
- class WildcardException(StandardError):
432
- """Exception thrown for invalid wildcard URIs."""
433
-
434
- def __init__(self, reason):
435
- StandardError.__init__(self)
436
- self.reason = reason
437
-
438
- def __repr__(self):
439
- return 'WildcardException: %s' % self.reason
440
-
441
- def __str__(self):
442
- return 'WildcardException: %s' % self.reason
443
-
444
-
445
- def wildcard_iterator(uri_or_str, proj_id_handler,
446
- bucket_storage_uri_class=BucketStorageUri,
447
- all_versions=False,
448
- headers=None, debug=0):
449
- """Instantiate a WildCardIterator for the given StorageUri.
450
-
451
- Args:
452
- uri_or_str: StorageUri or URI string naming wildcard objects to iterate.
453
- proj_id_handler: ProjectIdHandler to use for current command.
454
- bucket_storage_uri_class: BucketStorageUri interface.
455
- Settable for testing/mocking.
456
- headers: Dictionary containing optional HTTP headers to pass to boto.
457
- debug: Debug level to pass in to boto connection (range 0..3).
458
-
459
- Returns:
460
- A WildcardIterator that handles the requested iteration.
461
- """
462
-
463
- if isinstance(uri_or_str, basestring):
464
- # Disable enforce_bucket_naming, to allow bucket names containing wildcard
465
- # chars.
466
- uri = boto.storage_uri(
467
- uri_or_str, debug=debug, validate=False,
468
- bucket_storage_uri_class=bucket_storage_uri_class,
469
- suppress_consec_slashes=False)
470
- else:
471
- uri = uri_or_str
472
-
473
- if uri.is_cloud_uri():
474
- return CloudWildcardIterator(
475
- uri, proj_id_handler,
476
- bucket_storage_uri_class=bucket_storage_uri_class,
477
- all_versions=all_versions,
478
- headers=headers,
479
- debug=debug)
480
- elif uri.is_file_uri():
481
- return FileWildcardIterator(uri, headers=headers, debug=debug)
482
- else:
483
- raise WildcardException('Unexpected type of StorageUri (%s)' % uri)
484
-
485
-
486
- def ContainsWildcard(uri_or_str):
487
- """Checks whether uri_or_str contains a wildcard.
488
-
489
- Args:
490
- uri_or_str: StorageUri or URI string to check.
491
-
492
- Returns:
493
- bool indicator.
494
- """
495
- if isinstance(uri_or_str, basestring):
496
- return bool(WILDCARD_REGEX.search(uri_or_str))
497
- else:
498
- return bool(WILDCARD_REGEX.search(uri_or_str.uri))