bundler 2.2.29 → 2.5.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (330) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1129 -4
  3. data/README.md +4 -8
  4. data/bundler.gemspec +11 -11
  5. data/exe/bundle +5 -26
  6. data/exe/bundler +1 -1
  7. data/lib/bundler/.document +1 -0
  8. data/lib/bundler/build_metadata.rb +4 -4
  9. data/lib/bundler/capistrano.rb +1 -1
  10. data/lib/bundler/checksum.rb +254 -0
  11. data/lib/bundler/ci_detector.rb +75 -0
  12. data/lib/bundler/cli/add.rb +4 -4
  13. data/lib/bundler/cli/binstubs.rb +10 -6
  14. data/lib/bundler/cli/cache.rb +1 -1
  15. data/lib/bundler/cli/check.rb +3 -3
  16. data/lib/bundler/cli/common.rb +13 -3
  17. data/lib/bundler/cli/config.rb +18 -8
  18. data/lib/bundler/cli/console.rb +5 -4
  19. data/lib/bundler/cli/doctor.rb +12 -5
  20. data/lib/bundler/cli/exec.rb +1 -1
  21. data/lib/bundler/cli/fund.rb +1 -1
  22. data/lib/bundler/cli/gem.rb +141 -48
  23. data/lib/bundler/cli/info.rb +27 -17
  24. data/lib/bundler/cli/init.rb +6 -2
  25. data/lib/bundler/cli/install.rb +22 -39
  26. data/lib/bundler/cli/issue.rb +5 -4
  27. data/lib/bundler/cli/lock.rb +36 -29
  28. data/lib/bundler/cli/open.rb +9 -9
  29. data/lib/bundler/cli/outdated.rb +19 -12
  30. data/lib/bundler/cli/platform.rb +8 -6
  31. data/lib/bundler/cli/plugin.rb +9 -15
  32. data/lib/bundler/cli/pristine.rb +38 -30
  33. data/lib/bundler/cli/show.rb +3 -3
  34. data/lib/bundler/cli/update.rb +12 -7
  35. data/lib/bundler/cli/viz.rb +1 -1
  36. data/lib/bundler/cli.rb +266 -285
  37. data/lib/bundler/compact_index_client/cache.rb +53 -67
  38. data/lib/bundler/compact_index_client/cache_file.rb +153 -0
  39. data/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  40. data/lib/bundler/compact_index_client/parser.rb +84 -0
  41. data/lib/bundler/compact_index_client/updater.rb +83 -76
  42. data/lib/bundler/compact_index_client.rb +59 -87
  43. data/lib/bundler/constants.rb +9 -2
  44. data/lib/bundler/current_ruby.rb +12 -16
  45. data/lib/bundler/definition.rb +509 -319
  46. data/lib/bundler/dependency.rb +33 -71
  47. data/lib/bundler/digest.rb +71 -0
  48. data/lib/bundler/dsl.rb +88 -69
  49. data/lib/bundler/endpoint_specification.rb +32 -15
  50. data/lib/bundler/env.rb +5 -7
  51. data/lib/bundler/environment_preserver.rb +8 -22
  52. data/lib/bundler/errors.rb +101 -13
  53. data/lib/bundler/feature_flag.rb +0 -2
  54. data/lib/bundler/fetcher/base.rb +11 -11
  55. data/lib/bundler/fetcher/compact_index.rb +32 -52
  56. data/lib/bundler/fetcher/dependency.rb +3 -7
  57. data/lib/bundler/fetcher/downloader.rb +17 -16
  58. data/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  59. data/lib/bundler/fetcher/index.rb +2 -29
  60. data/lib/bundler/fetcher.rb +87 -79
  61. data/lib/bundler/force_platform.rb +18 -0
  62. data/lib/bundler/friendly_errors.rb +29 -40
  63. data/lib/bundler/gem_helper.rb +11 -23
  64. data/lib/bundler/gem_helpers.rb +30 -6
  65. data/lib/bundler/gem_version_promoter.rb +68 -109
  66. data/lib/bundler/graph.rb +9 -9
  67. data/lib/bundler/index.rb +71 -79
  68. data/lib/bundler/injector.rb +23 -11
  69. data/lib/bundler/inline.rb +11 -23
  70. data/lib/bundler/installer/gem_installer.rb +18 -11
  71. data/lib/bundler/installer/parallel_installer.rb +17 -65
  72. data/lib/bundler/installer/standalone.rb +56 -15
  73. data/lib/bundler/installer.rb +35 -61
  74. data/lib/bundler/lazy_specification.rb +92 -61
  75. data/lib/bundler/lockfile_generator.rb +12 -3
  76. data/lib/bundler/lockfile_parser.rb +137 -70
  77. data/lib/bundler/man/bundle-add.1 +19 -26
  78. data/lib/bundler/man/bundle-add.1.ronn +16 -4
  79. data/lib/bundler/man/bundle-binstubs.1 +4 -16
  80. data/lib/bundler/man/bundle-cache.1 +9 -24
  81. data/lib/bundler/man/bundle-cache.1.ronn +9 -2
  82. data/lib/bundler/man/bundle-check.1 +5 -12
  83. data/lib/bundler/man/bundle-check.1.ronn +3 -0
  84. data/lib/bundler/man/bundle-clean.1 +4 -11
  85. data/lib/bundler/man/bundle-clean.1.ronn +1 -1
  86. data/lib/bundler/man/bundle-config.1 +47 -224
  87. data/lib/bundler/man/bundle-config.1.ronn +40 -28
  88. data/lib/bundler/man/bundle-console.1 +35 -0
  89. data/lib/bundler/man/bundle-console.1.ronn +44 -0
  90. data/lib/bundler/man/bundle-doctor.1 +4 -18
  91. data/lib/bundler/man/bundle-exec.1 +16 -77
  92. data/lib/bundler/man/bundle-exec.1.ronn +8 -9
  93. data/lib/bundler/man/bundle-gem.1 +45 -72
  94. data/lib/bundler/man/bundle-gem.1.ronn +32 -5
  95. data/lib/bundler/man/bundle-help.1 +9 -0
  96. data/lib/bundler/man/bundle-help.1.ronn +12 -0
  97. data/lib/bundler/man/bundle-info.1 +5 -11
  98. data/lib/bundler/man/bundle-info.1.ronn +3 -3
  99. data/lib/bundler/man/bundle-init.1 +6 -11
  100. data/lib/bundler/man/bundle-init.1.ronn +2 -0
  101. data/lib/bundler/man/bundle-inject.1 +8 -18
  102. data/lib/bundler/man/bundle-inject.1.ronn +3 -1
  103. data/lib/bundler/man/bundle-install.1 +32 -155
  104. data/lib/bundler/man/bundle-install.1.ronn +11 -33
  105. data/lib/bundler/man/bundle-list.1 +4 -19
  106. data/lib/bundler/man/bundle-lock.1 +5 -29
  107. data/lib/bundler/man/bundle-open.1 +18 -18
  108. data/lib/bundler/man/bundle-open.1.ronn +9 -1
  109. data/lib/bundler/man/bundle-outdated.1 +17 -72
  110. data/lib/bundler/man/bundle-outdated.1.ronn +13 -18
  111. data/lib/bundler/man/bundle-platform.1 +16 -28
  112. data/lib/bundler/man/bundle-platform.1.ronn +14 -7
  113. data/lib/bundler/man/bundle-plugin.1 +58 -0
  114. data/lib/bundler/man/bundle-plugin.1.ronn +63 -0
  115. data/lib/bundler/man/bundle-pristine.1 +5 -16
  116. data/lib/bundler/man/bundle-remove.1 +4 -14
  117. data/lib/bundler/man/bundle-show.1 +3 -10
  118. data/lib/bundler/man/bundle-update.1 +19 -138
  119. data/lib/bundler/man/bundle-update.1.ronn +2 -1
  120. data/lib/bundler/man/bundle-version.1 +22 -0
  121. data/lib/bundler/man/bundle-version.1.ronn +24 -0
  122. data/lib/bundler/man/bundle-viz.1 +6 -15
  123. data/lib/bundler/man/bundle-viz.1.ronn +2 -0
  124. data/lib/bundler/man/bundle.1 +17 -51
  125. data/lib/bundler/man/bundle.1.ronn +12 -7
  126. data/lib/bundler/man/gemfile.5 +130 -346
  127. data/lib/bundler/man/gemfile.5.ronn +121 -86
  128. data/lib/bundler/man/index.txt +4 -0
  129. data/lib/bundler/match_metadata.rb +17 -0
  130. data/lib/bundler/match_platform.rb +1 -2
  131. data/lib/bundler/match_remote_metadata.rb +29 -0
  132. data/lib/bundler/mirror.rb +8 -10
  133. data/lib/bundler/plugin/api/source.rb +9 -13
  134. data/lib/bundler/plugin/index.rb +13 -5
  135. data/lib/bundler/plugin/installer/git.rb +0 -4
  136. data/lib/bundler/plugin/installer/path.rb +18 -0
  137. data/lib/bundler/plugin/installer/rubygems.rb +0 -8
  138. data/lib/bundler/plugin/installer.rb +42 -19
  139. data/lib/bundler/plugin/source_list.rb +4 -4
  140. data/lib/bundler/plugin.rb +16 -7
  141. data/lib/bundler/process_lock.rb +1 -1
  142. data/lib/bundler/remote_specification.rb +11 -5
  143. data/lib/bundler/resolver/base.rb +111 -0
  144. data/lib/bundler/resolver/candidate.rb +82 -0
  145. data/lib/bundler/resolver/incompatibility.rb +15 -0
  146. data/lib/bundler/resolver/package.rb +81 -0
  147. data/lib/bundler/resolver/root.rb +25 -0
  148. data/lib/bundler/resolver/spec_group.rb +53 -66
  149. data/lib/bundler/resolver.rb +419 -307
  150. data/lib/bundler/retry.rb +1 -1
  151. data/lib/bundler/ruby_dsl.rb +42 -7
  152. data/lib/bundler/ruby_version.rb +16 -22
  153. data/lib/bundler/rubygems_ext.rb +250 -64
  154. data/lib/bundler/rubygems_gem_installer.rb +90 -64
  155. data/lib/bundler/rubygems_integration.rb +81 -190
  156. data/lib/bundler/runtime.rb +8 -13
  157. data/lib/bundler/safe_marshal.rb +31 -0
  158. data/lib/bundler/self_manager.rb +206 -0
  159. data/lib/bundler/settings.rb +139 -57
  160. data/lib/bundler/setup.rb +13 -1
  161. data/lib/bundler/shared_helpers.rb +67 -36
  162. data/lib/bundler/source/git/git_proxy.rb +285 -82
  163. data/lib/bundler/source/git.rb +81 -41
  164. data/lib/bundler/source/metadata.rb +17 -16
  165. data/lib/bundler/source/path/installer.rb +1 -22
  166. data/lib/bundler/source/path.rb +13 -25
  167. data/lib/bundler/source/rubygems/remote.rb +1 -1
  168. data/lib/bundler/source/rubygems.rb +164 -234
  169. data/lib/bundler/source/rubygems_aggregate.rb +1 -1
  170. data/lib/bundler/source.rb +7 -6
  171. data/lib/bundler/source_list.rb +40 -32
  172. data/lib/bundler/source_map.rb +15 -2
  173. data/lib/bundler/spec_set.rb +156 -46
  174. data/lib/bundler/stub_specification.rb +18 -5
  175. data/lib/bundler/templates/Executable +3 -5
  176. data/lib/bundler/templates/Executable.bundler +7 -12
  177. data/lib/bundler/templates/Executable.standalone +4 -4
  178. data/lib/bundler/templates/Gemfile +0 -2
  179. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
  180. data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  181. data/lib/bundler/templates/newgem/Gemfile.tt +8 -2
  182. data/lib/bundler/templates/newgem/README.md.tt +7 -11
  183. data/lib/bundler/templates/newgem/Rakefile.tt +28 -4
  184. data/lib/bundler/templates/newgem/bin/console.tt +0 -4
  185. data/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  186. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  187. data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  188. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  189. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  190. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  191. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +13 -3
  192. data/lib/bundler/templates/newgem/gitignore.tt +3 -0
  193. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  194. data/lib/bundler/templates/newgem/newgem.gemspec.tt +25 -17
  195. data/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
  196. data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  197. data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  198. data/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
  199. data/lib/bundler/ui/rg_proxy.rb +1 -1
  200. data/lib/bundler/ui/shell.rb +38 -15
  201. data/lib/bundler/ui/silent.rb +21 -5
  202. data/lib/bundler/uri_credentials_filter.rb +2 -2
  203. data/lib/bundler/uri_normalizer.rb +23 -0
  204. data/lib/bundler/vendor/.document +1 -0
  205. data/lib/bundler/vendor/connection_pool/.document +1 -0
  206. data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  207. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
  208. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  209. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  210. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +92 -78
  211. data/lib/bundler/vendor/fileutils/.document +1 -0
  212. data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  213. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1340 -410
  214. data/lib/bundler/vendor/net-http-persistent/.document +1 -0
  215. data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  216. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
  217. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
  218. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  219. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +57 -57
  220. data/lib/bundler/vendor/pub_grub/.document +1 -0
  221. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  222. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  223. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  224. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  225. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  226. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  227. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  228. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  229. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  230. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
  231. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  232. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  233. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  234. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  235. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  236. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  237. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  238. data/lib/bundler/vendor/thor/.document +1 -0
  239. data/lib/bundler/vendor/thor/LICENSE.md +20 -0
  240. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
  241. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  242. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
  243. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +12 -14
  244. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +16 -6
  245. data/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -17
  246. data/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
  247. data/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
  248. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +10 -0
  249. data/lib/bundler/vendor/thor/lib/thor/error.rb +16 -20
  250. data/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
  251. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
  252. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
  253. data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +20 -1
  254. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
  255. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +27 -8
  256. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +63 -7
  257. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
  258. data/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
  259. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +48 -154
  260. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -46
  261. data/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  262. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +0 -45
  263. data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
  264. data/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  265. data/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  266. data/lib/bundler/vendor/thor/lib/thor/shell.rb +2 -2
  267. data/lib/bundler/vendor/thor/lib/thor/util.rb +9 -8
  268. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  269. data/lib/bundler/vendor/thor/lib/thor.rb +155 -8
  270. data/lib/bundler/vendor/tsort/.document +1 -0
  271. data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  272. data/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
  273. data/lib/bundler/vendor/uri/.document +1 -0
  274. data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  275. data/lib/bundler/vendor/uri/lib/uri/common.rb +316 -207
  276. data/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  277. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -2
  278. data/lib/bundler/vendor/uri/lib/uri/generic.rb +33 -13
  279. data/lib/bundler/vendor/uri/lib/uri/http.rb +40 -3
  280. data/lib/bundler/vendor/uri/lib/uri/https.rb +2 -2
  281. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +2 -2
  282. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  283. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -3
  284. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -23
  285. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +105 -47
  286. data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  287. data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  288. data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  289. data/lib/bundler/vendor/uri/lib/uri.rb +3 -3
  290. data/lib/bundler/vendored_net_http.rb +23 -0
  291. data/lib/bundler/vendored_persistent.rb +0 -36
  292. data/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  293. data/lib/bundler/vendored_timeout.rb +12 -0
  294. data/lib/bundler/{vendored_tmpdir.rb → vendored_tsort.rb} +1 -1
  295. data/lib/bundler/vendored_uri.rb +18 -1
  296. data/lib/bundler/version.rb +5 -1
  297. data/lib/bundler/vlad.rb +1 -1
  298. data/lib/bundler/worker.rb +7 -9
  299. data/lib/bundler/yaml_serializer.rb +21 -12
  300. data/lib/bundler.rb +114 -121
  301. metadata +87 -41
  302. data/lib/bundler/dep_proxy.rb +0 -55
  303. data/lib/bundler/gemdeps.rb +0 -29
  304. data/lib/bundler/psyched_yaml.rb +0 -22
  305. data/lib/bundler/templates/gems.rb +0 -8
  306. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  307. data/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  308. data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
  309. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  310. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  311. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  312. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  313. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  314. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  315. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  316. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  317. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  318. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  319. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  320. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  321. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  322. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  323. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  324. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  325. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  326. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  327. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  328. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  329. data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  330. data/lib/bundler/version_ranges.rb +0 -122
@@ -2,11 +2,12 @@
2
2
 
3
3
  module Bundler
4
4
  class EnvironmentPreserver
5
- INTENTIONALLY_NIL = "BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL".freeze
5
+ INTENTIONALLY_NIL = "BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL"
6
6
  BUNDLER_KEYS = %w[
7
7
  BUNDLE_BIN_PATH
8
8
  BUNDLE_GEMFILE
9
9
  BUNDLER_VERSION
10
+ BUNDLER_SETUP
10
11
  GEM_HOME
11
12
  GEM_PATH
12
13
  MANPATH
@@ -15,17 +16,10 @@ module Bundler
15
16
  RUBYLIB
16
17
  RUBYOPT
17
18
  ].map(&:freeze).freeze
18
- BUNDLER_PREFIX = "BUNDLER_ORIG_".freeze
19
+ BUNDLER_PREFIX = "BUNDLER_ORIG_"
19
20
 
20
21
  def self.from_env
21
- new(env_to_hash(ENV), BUNDLER_KEYS)
22
- end
23
-
24
- def self.env_to_hash(env)
25
- to_hash = env.to_hash
26
- return to_hash unless Gem.win_platform?
27
-
28
- to_hash.each_with_object({}) {|(k,v), a| a[k.upcase] = v }
22
+ new(ENV.to_hash, BUNDLER_KEYS)
29
23
  end
30
24
 
31
25
  # @param env [Hash]
@@ -38,15 +32,7 @@ module Bundler
38
32
 
39
33
  # Replaces `ENV` with the bundler environment variables backed up
40
34
  def replace_with_backup
41
- ENV.replace(backup) unless Gem.win_platform?
42
-
43
- # Fallback logic for Windows below to workaround
44
- # https://bugs.ruby-lang.org/issues/16798. Can be dropped once all
45
- # supported rubies include the fix for that.
46
-
47
- ENV.clear
48
-
49
- backup.each {|k, v| ENV[k] = v }
35
+ ENV.replace(backup)
50
36
  end
51
37
 
52
38
  # @return [Hash]
@@ -54,9 +40,9 @@ module Bundler
54
40
  env = @original.clone
55
41
  @keys.each do |key|
56
42
  value = env[key]
57
- if !value.nil? && !value.empty?
43
+ if !value.nil?
58
44
  env[@prefix + key] ||= value
59
- elsif value.nil?
45
+ else
60
46
  env[@prefix + key] ||= INTENTIONALLY_NIL
61
47
  end
62
48
  end
@@ -68,7 +54,7 @@ module Bundler
68
54
  env = @original.clone
69
55
  @keys.each do |key|
70
56
  value_original = env[@prefix + key]
71
- next if value_original.nil? || value_original.empty?
57
+ next if value_original.nil?
72
58
  if value_original == INTENTIONALLY_NIL
73
59
  env.delete(key)
74
60
  else
@@ -21,16 +21,7 @@ module Bundler
21
21
  class InstallError < BundlerError; status_code(5); end
22
22
 
23
23
  # Internal error, should be rescued
24
- class VersionConflict < BundlerError
25
- attr_reader :conflicts
26
-
27
- def initialize(conflicts, msg = nil)
28
- super(msg)
29
- @conflicts = conflicts
30
- end
31
-
32
- status_code(6)
33
- end
24
+ class SolveFailure < BundlerError; status_code(6); end
34
25
 
35
26
  class GemNotFound < BundlerError; status_code(7); end
36
27
  class InstallHookError < BundlerError; status_code(8); end
@@ -41,25 +32,69 @@ module Bundler
41
32
  class GemspecError < BundlerError; status_code(14); end
42
33
  class InvalidOption < BundlerError; status_code(15); end
43
34
  class ProductionError < BundlerError; status_code(16); end
35
+
44
36
  class HTTPError < BundlerError
45
37
  status_code(17)
46
38
  def filter_uri(uri)
47
39
  URICredentialsFilter.credential_filtered_uri(uri)
48
40
  end
49
41
  end
42
+
50
43
  class RubyVersionMismatch < BundlerError; status_code(18); end
51
44
  class SecurityError < BundlerError; status_code(19); end
52
45
  class LockfileError < BundlerError; status_code(20); end
53
46
  class CyclicDependencyError < BundlerError; status_code(21); end
54
47
  class GemfileLockNotFound < BundlerError; status_code(22); end
55
48
  class PluginError < BundlerError; status_code(29); end
56
- class SudoNotPermittedError < BundlerError; status_code(30); end
57
49
  class ThreadCreationError < BundlerError; status_code(33); end
58
50
  class APIResponseMismatchError < BundlerError; status_code(34); end
59
51
  class APIResponseInvalidDependenciesError < BundlerError; status_code(35); end
60
52
  class GemfileEvalError < GemfileError; end
61
53
  class MarshalError < StandardError; end
62
54
 
55
+ class ChecksumMismatchError < SecurityError
56
+ def initialize(lock_name, existing, checksum)
57
+ @lock_name = lock_name
58
+ @existing = existing
59
+ @checksum = checksum
60
+ end
61
+
62
+ def message
63
+ <<~MESSAGE
64
+ Bundler found mismatched checksums. This is a potential security risk.
65
+ #{@lock_name} #{@existing.to_lock}
66
+ from #{@existing.sources.join("\n and ")}
67
+ #{@lock_name} #{@checksum.to_lock}
68
+ from #{@checksum.sources.join("\n and ")}
69
+
70
+ #{mismatch_resolution_instructions}
71
+ To ignore checksum security warnings, disable checksum validation with
72
+ `bundle config set --local disable_checksum_validation true`
73
+ MESSAGE
74
+ end
75
+
76
+ def mismatch_resolution_instructions
77
+ removable, remote = [@existing, @checksum].partition(&:removable?)
78
+ case removable.size
79
+ when 0
80
+ msg = +"Mismatched checksums each have an authoritative source:\n"
81
+ msg << " 1. #{@existing.sources.reject(&:removable?).map(&:to_s).join(" and ")}\n"
82
+ msg << " 2. #{@checksum.sources.reject(&:removable?).map(&:to_s).join(" and ")}\n"
83
+ msg << "You may need to alter your Gemfile sources to resolve this issue.\n"
84
+ when 1
85
+ msg = +"If you trust #{remote.first.sources.first}, to resolve this issue you can:\n"
86
+ msg << removable.first.removal_instructions
87
+ when 2
88
+ msg = +"To resolve this issue you can either:\n"
89
+ msg << @checksum.removal_instructions
90
+ msg << "or if you are sure that the new checksum from #{@checksum.sources.first} is correct:\n"
91
+ msg << @existing.removal_instructions
92
+ end
93
+ end
94
+
95
+ status_code(37)
96
+ end
97
+
63
98
  class PermissionError < BundlerError
64
99
  def initialize(path, permission_type = :write)
65
100
  @path = path
@@ -75,10 +110,22 @@ module Bundler
75
110
  end
76
111
  end
77
112
 
113
+ def permission_type
114
+ case @permission_type
115
+ when :create
116
+ "executable permissions for all parent directories and write permissions for `#{parent_folder}`"
117
+ else
118
+ "#{@permission_type} permissions for that path"
119
+ end
120
+ end
121
+
122
+ def parent_folder
123
+ File.dirname(@path)
124
+ end
125
+
78
126
  def message
79
127
  "There was an error while trying to #{action} `#{@path}`. " \
80
- "It is likely that you need to grant #{@permission_type} permissions " \
81
- "for that path."
128
+ "It is likely that you need to grant #{permission_type}."
82
129
  end
83
130
 
84
131
  status_code(23)
@@ -156,4 +203,45 @@ module Bundler
156
203
 
157
204
  status_code(32)
158
205
  end
206
+
207
+ class DirectoryRemovalError < BundlerError
208
+ def initialize(orig_exception, msg)
209
+ full_message = "#{msg}.\n" \
210
+ "The underlying error was #{orig_exception.class}: #{orig_exception.message}, with backtrace:\n" \
211
+ " #{orig_exception.backtrace.join("\n ")}\n\n" \
212
+ "Bundler Error Backtrace:"
213
+ super(full_message)
214
+ end
215
+
216
+ status_code(36)
217
+ end
218
+
219
+ class InsecureInstallPathError < BundlerError
220
+ def initialize(path)
221
+ @path = path
222
+ end
223
+
224
+ def message
225
+ "The installation path is insecure. Bundler cannot continue.\n" \
226
+ "#{@path} is world-writable (without sticky bit).\n" \
227
+ "Bundler cannot safely replace gems in world-writeable directories due to potential vulnerabilities.\n" \
228
+ "Please change the permissions of this directory or choose a different install path."
229
+ end
230
+
231
+ status_code(38)
232
+ end
233
+
234
+ class CorruptBundlerInstallError < BundlerError
235
+ def initialize(loaded_spec)
236
+ @loaded_spec = loaded_spec
237
+ end
238
+
239
+ def message
240
+ "The running version of Bundler (#{Bundler::VERSION}) does not match the version of the specification installed for it (#{@loaded_spec.version}). " \
241
+ "This can be caused by reinstalling Ruby without removing previous installation, leaving around an upgraded default version of Bundler. " \
242
+ "Reinstalling Ruby from scratch should fix the problem."
243
+ end
244
+
245
+ status_code(39)
246
+ end
159
247
  end
@@ -37,9 +37,7 @@ module Bundler
37
37
  settings_flag(:plugins) { @bundler_version >= Gem::Version.new("1.14") }
38
38
  settings_flag(:print_only_version_number) { bundler_3_mode? }
39
39
  settings_flag(:setup_makes_kernel_gem_public) { !bundler_3_mode? }
40
- settings_flag(:suppress_install_using_messages) { bundler_3_mode? }
41
40
  settings_flag(:update_requires_all_flag) { bundler_4_mode? }
42
- settings_flag(:use_gem_version_promoter_for_major_updates) { bundler_3_mode? }
43
41
 
44
42
  settings_option(:default_cli_command) { bundler_3_mode? ? :cli_help : :install }
45
43
 
@@ -6,12 +6,14 @@ module Bundler
6
6
  attr_reader :downloader
7
7
  attr_reader :display_uri
8
8
  attr_reader :remote
9
+ attr_reader :gem_remote_fetcher
9
10
 
10
- def initialize(downloader, remote, display_uri)
11
+ def initialize(downloader, remote, display_uri, gem_remote_fetcher)
11
12
  raise "Abstract class" if self.class == Base
12
13
  @downloader = downloader
13
14
  @remote = remote
14
15
  @display_uri = display_uri
16
+ @gem_remote_fetcher = gem_remote_fetcher
15
17
  end
16
18
 
17
19
  def remote_uri
@@ -19,14 +21,12 @@ module Bundler
19
21
  end
20
22
 
21
23
  def fetch_uri
22
- @fetch_uri ||= begin
23
- if remote_uri.host == "rubygems.org"
24
- uri = remote_uri.dup
25
- uri.host = "index.rubygems.org"
26
- uri
27
- else
28
- remote_uri
29
- end
24
+ @fetch_uri ||= if remote_uri.host == "rubygems.org"
25
+ uri = remote_uri.dup
26
+ uri.host = "index.rubygems.org"
27
+ uri
28
+ else
29
+ remote_uri
30
30
  end
31
31
  end
32
32
 
@@ -40,9 +40,9 @@ module Bundler
40
40
 
41
41
  private
42
42
 
43
- def log_specs(debug_msg)
43
+ def log_specs(&block)
44
44
  if Bundler.ui.debug?
45
- Bundler.ui.debug debug_msg
45
+ Bundler.ui.debug yield
46
46
  else
47
47
  Bundler.ui.info ".", false
48
48
  end
@@ -4,25 +4,21 @@ require_relative "base"
4
4
  require_relative "../worker"
5
5
 
6
6
  module Bundler
7
- autoload :CompactIndexClient, File.expand_path("../compact_index_client", __dir__)
8
-
9
7
  class Fetcher
10
8
  class CompactIndex < Base
11
9
  def self.compact_index_request(method_name)
12
10
  method = instance_method(method_name)
13
11
  undef_method(method_name)
14
12
  define_method(method_name) do |*args, &blk|
15
- begin
16
- method.bind(self).call(*args, &blk)
17
- rescue NetworkDownError, CompactIndexClient::Updater::MisMatchedChecksumError => e
18
- raise HTTPError, e.message
19
- rescue AuthenticationRequiredError
20
- # Fail since we got a 401 from the server.
21
- raise
22
- rescue HTTPError => e
23
- Bundler.ui.trace(e)
24
- nil
25
- end
13
+ method.bind(self).call(*args, &blk)
14
+ rescue NetworkDownError, CompactIndexClient::Updater::MismatchedChecksumError => e
15
+ raise HTTPError, e.message
16
+ rescue AuthenticationRequiredError, BadAuthenticationError
17
+ # Fail since we got a 401 from the server.
18
+ raise
19
+ rescue HTTPError => e
20
+ Bundler.ui.trace(e)
21
+ nil
26
22
  end
27
23
  end
28
24
 
@@ -37,43 +33,27 @@ module Bundler
37
33
  remaining_gems = gem_names.dup
38
34
 
39
35
  until remaining_gems.empty?
40
- log_specs "Looking up gems #{remaining_gems.inspect}"
41
-
42
- deps = begin
43
- parallel_compact_index_client.dependencies(remaining_gems)
44
- rescue TooManyRequestsError
45
- @bundle_worker.stop if @bundle_worker
46
- @bundle_worker = nil # reset it. Not sure if necessary
47
- serial_compact_index_client.dependencies(remaining_gems)
48
- end
49
- next_gems = deps.map {|d| d[3].map(&:first).flatten(1) }.flatten(1).uniq
36
+ log_specs { "Looking up gems #{remaining_gems.inspect}" }
37
+ deps = fetch_gem_infos(remaining_gems).flatten(1)
38
+ next_gems = deps.flat_map {|d| d[CompactIndexClient::INFO_DEPS].flat_map(&:first) }.uniq
50
39
  deps.each {|dep| gem_info << dep }
51
40
  complete_gems.concat(deps.map(&:first)).uniq!
52
41
  remaining_gems = next_gems - complete_gems
53
42
  end
54
- @bundle_worker.stop if @bundle_worker
43
+ @bundle_worker&.stop
55
44
  @bundle_worker = nil # reset it. Not sure if necessary
56
45
 
57
46
  gem_info
58
47
  end
59
48
 
60
- def fetch_spec(spec)
61
- spec -= [nil, "ruby", ""]
62
- contents = compact_index_client.spec(*spec)
63
- return nil if contents.nil?
64
- contents.unshift(spec.first)
65
- contents[3].map! {|d| Gem::Dependency.new(*d) }
66
- EndpointSpecification.new(*contents)
67
- end
68
- compact_index_request :fetch_spec
69
-
70
49
  def available?
71
- return nil unless SharedHelpers.md5_available?
72
- user_home = Bundler.user_home
73
- return nil unless user_home.directory? && user_home.writable?
50
+ unless SharedHelpers.md5_available?
51
+ Bundler.ui.debug("FIPS mode is enabled, bundler can't use the CompactIndex API")
52
+ return nil
53
+ end
74
54
  # Read info file checksums out of /versions, so we can know if gems are up to date
75
- fetch_uri.scheme != "file" && compact_index_client.update_and_parse_checksums!
76
- rescue CompactIndexClient::Updater::MisMatchedChecksumError => e
55
+ compact_index_client.available?
56
+ rescue CompactIndexClient::Updater::MismatchedChecksumError => e
77
57
  Bundler.ui.debug(e.message)
78
58
  nil
79
59
  end
@@ -92,20 +72,20 @@ module Bundler
92
72
  end
93
73
  end
94
74
 
95
- def parallel_compact_index_client
96
- compact_index_client.execution_mode = lambda do |inputs, &blk|
97
- func = lambda {|object, _index| blk.call(object) }
98
- worker = bundle_worker(func)
99
- inputs.each {|input| worker.enq(input) }
100
- inputs.map { worker.deq }
101
- end
102
-
103
- compact_index_client
75
+ def fetch_gem_infos(names)
76
+ in_parallel(names) {|name| compact_index_client.info(name) }
77
+ rescue TooManyRequestsError # rubygems.org is rate limiting us, slow down.
78
+ @bundle_worker&.stop
79
+ @bundle_worker = nil # reset it. Not sure if necessary
80
+ compact_index_client.reset!
81
+ names.map {|name| compact_index_client.info(name) }
104
82
  end
105
83
 
106
- def serial_compact_index_client
107
- compact_index_client.sequential_execution_mode!
108
- compact_index_client
84
+ def in_parallel(inputs, &blk)
85
+ func = lambda {|object, _index| blk.call(object) }
86
+ worker = bundle_worker(func)
87
+ inputs.each {|input| worker.enq(input) }
88
+ inputs.map { worker.deq }
109
89
  end
110
90
 
111
91
  def bundle_worker(func = nil)
@@ -132,7 +112,7 @@ module Bundler
132
112
  rescue NetworkDownError => e
133
113
  raise unless Bundler.feature_flag.allow_offline_install? && headers["If-None-Match"]
134
114
  ui.warn "Using the cached data for the new index because of a network error: #{e}"
135
- Net::HTTPNotModified.new(nil, nil, nil)
115
+ Gem::Net::HTTPNotModified.new(nil, nil, nil)
136
116
  end
137
117
  end
138
118
  end
@@ -24,7 +24,7 @@ module Bundler
24
24
  def specs(gem_names, full_dependency_list = [], last_spec_list = [])
25
25
  query_list = gem_names.uniq - full_dependency_list
26
26
 
27
- log_specs "Query List: #{query_list.inspect}"
27
+ log_specs { "Query List: #{query_list.inspect}" }
28
28
 
29
29
  return last_spec_list if query_list.empty?
30
30
 
@@ -34,14 +34,10 @@ module Bundler
34
34
 
35
35
  returned_gems = spec_list.map(&:first).uniq
36
36
  specs(deps_list, full_dependency_list + returned_gems, spec_list + last_spec_list)
37
- rescue MarshalError
37
+ rescue MarshalError, HTTPError, GemspecError
38
38
  Bundler.ui.info "" unless Bundler.ui.debug? # new line now that the dots are over
39
39
  Bundler.ui.debug "could not fetch from the dependency API, trying the full index"
40
40
  nil
41
- rescue HTTPError, GemspecError
42
- Bundler.ui.info "" unless Bundler.ui.debug? # new line now that the dots are over
43
- Bundler.ui.debug "could not fetch from the dependency API\nit's suggested to retry using the full index via `bundle install --full-index`"
44
- nil
45
41
  end
46
42
 
47
43
  def dependency_specs(gem_names)
@@ -55,7 +51,7 @@ module Bundler
55
51
  gem_list = []
56
52
  gem_names.each_slice(Source::Rubygems::API_REQUEST_SIZE) do |names|
57
53
  marshalled_deps = downloader.fetch(dependency_api_uri(names)).body
58
- gem_list.concat(Bundler.load_marshal(marshalled_deps))
54
+ gem_list.concat(Bundler.safe_load_marshal(marshalled_deps))
59
55
  end
60
56
  gem_list
61
57
  end
@@ -20,31 +20,35 @@ module Bundler
20
20
  Bundler.ui.debug("HTTP #{response.code} #{response.message} #{filtered_uri}")
21
21
 
22
22
  case response
23
- when Net::HTTPSuccess, Net::HTTPNotModified
23
+ when Gem::Net::HTTPSuccess, Gem::Net::HTTPNotModified
24
24
  response
25
- when Net::HTTPRedirection
26
- new_uri = Bundler::URI.parse(response["location"])
25
+ when Gem::Net::HTTPRedirection
26
+ new_uri = Gem::URI.parse(response["location"])
27
27
  if new_uri.host == uri.host
28
28
  new_uri.user = uri.user
29
29
  new_uri.password = uri.password
30
30
  end
31
31
  fetch(new_uri, headers, counter + 1)
32
- when Net::HTTPRequestedRangeNotSatisfiable
32
+ when Gem::Net::HTTPRequestedRangeNotSatisfiable
33
33
  new_headers = headers.dup
34
34
  new_headers.delete("Range")
35
35
  new_headers["Accept-Encoding"] = "gzip"
36
36
  fetch(uri, new_headers)
37
- when Net::HTTPRequestEntityTooLarge
37
+ when Gem::Net::HTTPRequestEntityTooLarge
38
38
  raise FallbackError, response.body
39
- when Net::HTTPTooManyRequests
39
+ when Gem::Net::HTTPTooManyRequests
40
40
  raise TooManyRequestsError, response.body
41
- when Net::HTTPUnauthorized
41
+ when Gem::Net::HTTPUnauthorized
42
42
  raise BadAuthenticationError, uri.host if uri.userinfo
43
43
  raise AuthenticationRequiredError, uri.host
44
- when Net::HTTPNotFound
45
- raise FallbackError, "Net::HTTPNotFound: #{filtered_uri}"
44
+ when Gem::Net::HTTPForbidden
45
+ raise AuthenticationForbiddenError, uri.host
46
+ when Gem::Net::HTTPNotFound
47
+ raise FallbackError, "Gem::Net::HTTPNotFound: #{filtered_uri}"
46
48
  else
47
- raise HTTPError, "#{response.class}#{": #{response.body}" unless response.body.empty?}"
49
+ message = "Gem::#{response.class.name.gsub(/\AGem::/, "")}"
50
+ message += ": #{response.body}" unless response.body.empty?
51
+ raise HTTPError, message
48
52
  end
49
53
  end
50
54
 
@@ -54,21 +58,18 @@ module Bundler
54
58
  filtered_uri = URICredentialsFilter.credential_filtered_uri(uri)
55
59
 
56
60
  Bundler.ui.debug "HTTP GET #{filtered_uri}"
57
- req = Net::HTTP::Get.new uri.request_uri, headers
61
+ req = Gem::Net::HTTP::Get.new uri.request_uri, headers
58
62
  if uri.user
59
63
  user = CGI.unescape(uri.user)
60
64
  password = uri.password ? CGI.unescape(uri.password) : nil
61
65
  req.basic_auth(user, password)
62
66
  end
63
67
  connection.request(uri, req)
64
- rescue NoMethodError => e
65
- raise unless ["undefined method", "use_ssl="].all? {|snippet| e.message.include? snippet }
66
- raise LoadError.new("cannot load such file -- openssl")
67
68
  rescue OpenSSL::SSL::SSLError
68
69
  raise CertificateFailureError.new(uri)
69
70
  rescue *HTTP_ERRORS => e
70
71
  Bundler.ui.trace e
71
- if e.is_a?(SocketError) || e.message =~ /host down:/
72
+ if e.is_a?(SocketError) || e.message.to_s.include?("host down:")
72
73
  raise NetworkDownError, "Could not reach host #{uri.host}. Check your network " \
73
74
  "connection and try again."
74
75
  else
@@ -80,7 +81,7 @@ module Bundler
80
81
  private
81
82
 
82
83
  def validate_uri_scheme!(uri)
83
- return if uri.scheme =~ /\Ahttps?\z/
84
+ return if /\Ahttps?\z/.match?(uri.scheme)
84
85
  raise InvalidOption,
85
86
  "The request uri `#{uri}` has an invalid scheme (`#{uri.scheme}`). " \
86
87
  "Did you mean `http` or `https`?"
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rubygems/remote_fetcher"
4
+
5
+ module Bundler
6
+ class Fetcher
7
+ class GemRemoteFetcher < Gem::RemoteFetcher
8
+ def request(*args)
9
+ super do |req|
10
+ req.delete("User-Agent") if headers["User-Agent"]
11
+ yield req if block_given?
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -6,7 +6,7 @@ module Bundler
6
6
  class Fetcher
7
7
  class Index < Base
8
8
  def specs(_gem_names)
9
- Bundler.rubygems.fetch_all_remote_specs(remote)
9
+ Bundler.rubygems.fetch_all_remote_specs(remote, gem_remote_fetcher)
10
10
  rescue Gem::RemoteFetcher::FetchError => e
11
11
  case e.message
12
12
  when /certificate verify failed/
@@ -15,38 +15,11 @@ module Bundler
15
15
  raise BadAuthenticationError, remote_uri if remote_uri.userinfo
16
16
  raise AuthenticationRequiredError, remote_uri
17
17
  when /403/
18
- raise BadAuthenticationError, remote_uri if remote_uri.userinfo
19
- raise AuthenticationRequiredError, remote_uri
18
+ raise AuthenticationForbiddenError, remote_uri
20
19
  else
21
20
  raise HTTPError, "Could not fetch specs from #{display_uri} due to underlying error <#{e.message}>"
22
21
  end
23
22
  end
24
-
25
- def fetch_spec(spec)
26
- spec -= [nil, "ruby", ""]
27
- spec_file_name = "#{spec.join "-"}.gemspec"
28
-
29
- uri = Bundler::URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
30
- if uri.scheme == "file"
31
- path = Bundler.rubygems.correct_for_windows_path(uri.path)
32
- Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(path))
33
- elsif cached_spec_path = gemspec_cached_path(spec_file_name)
34
- Bundler.load_gemspec(cached_spec_path)
35
- else
36
- Bundler.load_marshal Bundler.rubygems.inflate(downloader.fetch(uri).body)
37
- end
38
- rescue MarshalError
39
- raise HTTPError, "Gemspec #{spec} contained invalid data.\n" \
40
- "Your network or your gem server is probably having issues right now."
41
- end
42
-
43
- private
44
-
45
- # cached gem specification path, if one exists
46
- def gemspec_cached_path(spec_file_name)
47
- paths = Bundler.rubygems.spec_cache_dirs.map {|dir| File.join(dir, spec_file_name) }
48
- paths.find {|path| File.file? path }
49
- end
50
23
  end
51
24
  end
52
25
  end