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
@@ -7,12 +7,10 @@ module Bundler
7
7
  class Rubygems < Source
8
8
  autoload :Remote, File.expand_path("rubygems/remote", __dir__)
9
9
 
10
- # Use the API when installing less than X gems
11
- API_REQUEST_LIMIT = 500
12
10
  # Ask for X gems per API request
13
11
  API_REQUEST_SIZE = 50
14
12
 
15
- attr_reader :remotes, :caches
13
+ attr_accessor :remotes
16
14
 
17
15
  def initialize(options = {})
18
16
  @options = options
@@ -21,9 +19,15 @@ module Bundler
21
19
  @allow_remote = false
22
20
  @allow_cached = false
23
21
  @allow_local = options["allow_local"] || false
24
- @caches = [cache_path, *Bundler.rubygems.gem_cache]
22
+ @checksum_store = Checksum::Store.new
25
23
 
26
24
  Array(options["remotes"]).reverse_each {|r| add_remote(r) }
25
+
26
+ @lockfile_remotes = @remotes if options["from_lockfile"]
27
+ end
28
+
29
+ def caches
30
+ @caches ||= [cache_path, *Bundler.rubygems.gem_cache]
27
31
  end
28
32
 
29
33
  def local_only!
@@ -48,10 +52,11 @@ module Bundler
48
52
  end
49
53
 
50
54
  def cached!
55
+ return unless File.exist?(cache_path)
56
+
51
57
  return if @allow_cached
52
58
 
53
59
  @specs = nil
54
- @allow_local = true
55
60
  @allow_cached = true
56
61
  end
57
62
 
@@ -87,158 +92,128 @@ module Bundler
87
92
  end
88
93
 
89
94
  def self.from_lock(options)
90
- new(options)
95
+ options["remotes"] = Array(options.delete("remote")).reverse
96
+ new(options.merge("from_lockfile" => true))
91
97
  end
92
98
 
93
99
  def to_lock
94
100
  out = String.new("GEM\n")
95
- remotes.reverse_each do |remote|
96
- out << " remote: #{suppress_configured_credentials remote}\n"
101
+ lockfile_remotes.reverse_each do |remote|
102
+ out << " remote: #{remote}\n"
97
103
  end
98
104
  out << " specs:\n"
99
105
  end
100
106
 
101
- def to_err
107
+ def to_s
102
108
  if remotes.empty?
103
109
  "locally installed gems"
104
- elsif @allow_remote
110
+ elsif @allow_remote && @allow_cached && @allow_local
111
+ "rubygems repository #{remote_names}, cached gems or installed locally"
112
+ elsif @allow_remote && @allow_local
105
113
  "rubygems repository #{remote_names} or installed locally"
106
- elsif @allow_cached
107
- "cached gems from rubygems repository #{remote_names} or installed locally"
114
+ elsif @allow_remote
115
+ "rubygems repository #{remote_names}"
116
+ elsif @allow_cached && @allow_local
117
+ "cached gems or installed locally"
108
118
  else
109
119
  "locally installed gems"
110
120
  end
111
121
  end
112
122
 
113
- def to_s
123
+ def identifier
114
124
  if remotes.empty?
115
125
  "locally installed gems"
116
126
  else
117
- "rubygems repository #{remote_names} or installed locally"
127
+ "rubygems repository #{remote_names}"
118
128
  end
119
129
  end
120
- alias_method :name, :to_s
130
+ alias_method :name, :identifier
131
+ alias_method :to_gemfile, :identifier
121
132
 
122
133
  def specs
123
134
  @specs ||= begin
124
135
  # remote_specs usually generates a way larger Index than the other
125
- # sources, and large_idx.use small_idx is way faster than
126
- # small_idx.use large_idx.
127
- idx = @allow_remote ? remote_specs.dup : Index.new
128
- idx.use(cached_specs, :override_dupes) if @allow_cached || @allow_remote
129
- idx.use(installed_specs, :override_dupes) if @allow_local
130
- idx
131
- end
132
- end
136
+ # sources, and large_idx.merge! small_idx is way faster than
137
+ # small_idx.merge! large_idx.
138
+ index = @allow_remote ? remote_specs.dup : Index.new
139
+ index.merge!(cached_specs) if @allow_cached
140
+ index.merge!(installed_specs) if @allow_local
133
141
 
134
- def install(spec, opts = {})
135
- force = opts[:force]
136
- ensure_builtin_gems_cached = opts[:ensure_builtin_gems_cached]
142
+ # complete with default specs, only if not already available in the
143
+ # index through remote, cached, or installed specs
144
+ index.use(default_specs) if @allow_local
137
145
 
138
- if ensure_builtin_gems_cached && builtin_gem?(spec)
139
- if !cached_path(spec)
140
- cached_built_in_gem(spec) unless spec.remote
141
- force = true
142
- else
143
- spec.loaded_from = loaded_from(spec)
144
- end
146
+ index
145
147
  end
148
+ end
146
149
 
147
- if installed?(spec) && !force
148
- print_using_message "Using #{version_message(spec)}"
150
+ def install(spec, options = {})
151
+ if (spec.default_gem? && !cached_built_in_gem(spec)) || (installed?(spec) && !options[:force])
152
+ print_using_message "Using #{version_message(spec, options[:previous_spec])}"
149
153
  return nil # no post-install message
150
154
  end
151
155
 
152
- # Download the gem to get the spec, because some specs that are returned
153
- # by rubygems.org are broken and wrong.
154
156
  if spec.remote
155
157
  # Check for this spec from other sources
156
- uris = [spec.remote.anonymized_uri]
157
- uris += remotes_for_spec(spec).map(&:anonymized_uri)
158
- uris.uniq!
158
+ uris = [spec.remote, *remotes_for_spec(spec)].map(&:anonymized_uri).uniq
159
159
  Installer.ambiguous_gems << [spec.name, *uris] if uris.length > 1
160
+ end
161
+
162
+ path = fetch_gem_if_possible(spec, options[:previous_spec])
163
+ raise GemNotFound, "Could not find #{spec.file_name} for installation" unless path
160
164
 
161
- path = fetch_gem(spec)
162
- begin
163
- s = Bundler.rubygems.spec_from_gem(path, Bundler.settings["trust-policy"])
164
- spec.__swap__(s)
165
- rescue StandardError
165
+ return if Bundler.settings[:no_install]
166
+
167
+ install_path = rubygems_dir
168
+ bin_path = Bundler.system_bindir
169
+
170
+ require_relative "../rubygems_gem_installer"
171
+
172
+ installer = Bundler::RubyGemsGemInstaller.at(
173
+ path,
174
+ security_policy: Bundler.rubygems.security_policies[Bundler.settings["trust-policy"]],
175
+ install_dir: install_path.to_s,
176
+ bin_dir: bin_path.to_s,
177
+ ignore_dependencies: true,
178
+ wrappers: true,
179
+ env_shebang: true,
180
+ build_args: options[:build_args],
181
+ bundler_extension_cache_path: extension_cache_path(spec)
182
+ )
183
+
184
+ if spec.remote
185
+ s = begin
186
+ installer.spec
187
+ rescue Gem::Package::FormatError
166
188
  Bundler.rm_rf(path)
167
189
  raise
190
+ rescue Gem::Security::Exception => e
191
+ raise SecurityError,
192
+ "The gem #{File.basename(path, ".gem")} can't be installed because " \
193
+ "the security policy didn't allow it, with the message: #{e.message}"
168
194
  end
195
+
196
+ spec.__swap__(s)
169
197
  end
170
198
 
171
- unless Bundler.settings[:no_install]
172
- message = "Installing #{version_message(spec)}"
173
- message += " with native extensions" if spec.extensions.any?
174
- Bundler.ui.confirm message
199
+ spec.source.checksum_store.register(spec, installer.gem_checksum)
175
200
 
176
- path = cached_gem(spec)
177
- if requires_sudo?
178
- install_path = Bundler.tmp(spec.full_name)
179
- bin_path = install_path.join("bin")
180
- else
181
- install_path = rubygems_dir
182
- bin_path = Bundler.system_bindir
183
- end
201
+ message = "Installing #{version_message(spec, options[:previous_spec])}"
202
+ message += " with native extensions" if spec.extensions.any?
203
+ Bundler.ui.confirm message
184
204
 
185
- Bundler.mkdir_p bin_path, :no_sudo => true unless spec.executables.empty? || Bundler.rubygems.provides?(">= 2.7.5")
186
-
187
- require_relative "../rubygems_gem_installer"
188
-
189
- installed_spec = Bundler::RubyGemsGemInstaller.at(
190
- path,
191
- :install_dir => install_path.to_s,
192
- :bin_dir => bin_path.to_s,
193
- :ignore_dependencies => true,
194
- :wrappers => true,
195
- :env_shebang => true,
196
- :build_args => opts[:build_args],
197
- :bundler_expected_checksum => spec.respond_to?(:checksum) && spec.checksum,
198
- :bundler_extension_cache_path => extension_cache_path(spec)
199
- ).install
200
- spec.full_gem_path = installed_spec.full_gem_path
201
-
202
- # SUDO HAX
203
- if requires_sudo?
204
- Bundler.rubygems.repository_subdirectories.each do |name|
205
- src = File.join(install_path, name, "*")
206
- dst = File.join(rubygems_dir, name)
207
- if name == "extensions" && Dir.glob(src).any?
208
- src = File.join(src, "*/*")
209
- ext_src = Dir.glob(src).first
210
- ext_src.gsub!(src[0..-6], "")
211
- dst = File.dirname(File.join(dst, ext_src))
212
- end
213
- SharedHelpers.filesystem_access(dst) do |p|
214
- Bundler.mkdir_p(p)
215
- end
216
- Bundler.sudo "cp -R #{src} #{dst}" if Dir[src].any?
217
- end
205
+ installed_spec = installer.install
218
206
 
219
- spec.executables.each do |exe|
220
- SharedHelpers.filesystem_access(Bundler.system_bindir) do |p|
221
- Bundler.mkdir_p(p)
222
- end
223
- Bundler.sudo "cp -R #{install_path}/bin/#{exe} #{Bundler.system_bindir}/"
224
- end
225
- end
226
- installed_spec.loaded_from = loaded_from(spec)
227
- end
228
- spec.loaded_from = loaded_from(spec)
207
+ spec.full_gem_path = installed_spec.full_gem_path
208
+ spec.loaded_from = installed_spec.loaded_from
209
+ spec.base_dir = installed_spec.base_dir
229
210
 
230
211
  spec.post_install_message
231
- ensure
232
- Bundler.rm_rf(install_path) if requires_sudo?
233
212
  end
234
213
 
235
214
  def cache(spec, custom_path = nil)
236
- if builtin_gem?(spec)
237
- cached_path = cached_built_in_gem(spec)
238
- else
239
- cached_path = cached_gem(spec)
240
- end
241
- raise GemNotFound, "Missing gem file '#{spec.full_name}.gem'." unless cached_path
215
+ cached_path = Bundler.settings[:cache_all_platforms] ? fetch_gem_if_possible(spec) : cached_gem(spec)
216
+ raise GemNotFound, "Missing gem file '#{spec.file_name}'." unless cached_path
242
217
  return if File.dirname(cached_path) == Bundler.app_cache.to_s
243
218
  Bundler.ui.info " * #{File.basename(cached_path)}"
244
219
  FileUtils.cp(cached_path, Bundler.app_cache(custom_path))
@@ -265,12 +240,8 @@ module Bundler
265
240
  @remotes.unshift(uri) unless @remotes.include?(uri)
266
241
  end
267
242
 
268
- def equivalent_remotes?(other_remotes)
269
- other_remotes.map(&method(:remove_auth)) == @remotes.map(&method(:remove_auth))
270
- end
271
-
272
243
  def spec_names
273
- if @allow_remote && dependency_api_available?
244
+ if dependency_api_available?
274
245
  remote_specs.spec_names
275
246
  else
276
247
  []
@@ -278,22 +249,25 @@ module Bundler
278
249
  end
279
250
 
280
251
  def unmet_deps
281
- if @allow_remote && dependency_api_available?
252
+ if dependency_api_available?
282
253
  remote_specs.unmet_dependency_names
283
254
  else
284
255
  []
285
256
  end
286
257
  end
287
258
 
288
- def fetchers
289
- @fetchers ||= remotes.map do |uri|
259
+ def remote_fetchers
260
+ @remote_fetchers ||= remotes.to_h do |uri|
290
261
  remote = Source::Rubygems::Remote.new(uri)
291
- Bundler::Fetcher.new(remote)
292
- end
262
+ [remote, Bundler::Fetcher.new(remote)]
263
+ end.freeze
264
+ end
265
+
266
+ def fetchers
267
+ @fetchers ||= remote_fetchers.values.freeze
293
268
  end
294
269
 
295
270
  def double_check_for(unmet_dependency_names)
296
- return unless @allow_remote
297
271
  return unless dependency_api_available?
298
272
 
299
273
  unmet_dependency_names = unmet_dependency_names.call
@@ -308,7 +282,9 @@ module Bundler
308
282
 
309
283
  Bundler.ui.debug "Double checking for #{unmet_dependency_names || "all specs (due to the size of the request)"} in #{self}"
310
284
 
311
- fetch_names(api_fetchers, unmet_dependency_names, specs, false)
285
+ fetch_names(api_fetchers, unmet_dependency_names, remote_specs)
286
+
287
+ specs.use remote_specs
312
288
  end
313
289
 
314
290
  def dependency_names_to_double_check
@@ -327,7 +303,7 @@ module Bundler
327
303
  end
328
304
 
329
305
  def dependency_api_available?
330
- api_fetchers.any?
306
+ @allow_remote && api_fetchers.any?
331
307
  end
332
308
 
333
309
  protected
@@ -337,7 +313,7 @@ module Bundler
337
313
  end
338
314
 
339
315
  def credless_remotes
340
- remotes.map(&method(:suppress_configured_credentials))
316
+ remotes.map(&method(:remove_auth))
341
317
  end
342
318
 
343
319
  def remotes_for_spec(spec)
@@ -347,42 +323,35 @@ module Bundler
347
323
  end
348
324
  end
349
325
 
350
- def loaded_from(spec)
351
- "#{rubygems_dir}/specifications/#{spec.full_name}.gemspec"
352
- end
353
-
354
326
  def cached_gem(spec)
355
- cached_gem = cached_path(spec)
356
- unless cached_gem
357
- raise Bundler::GemNotFound, "Could not find #{spec.file_name} for installation"
327
+ if spec.default_gem?
328
+ cached_built_in_gem(spec)
329
+ else
330
+ cached_path(spec)
358
331
  end
359
- cached_gem
360
332
  end
361
333
 
362
334
  def cached_path(spec)
363
- possibilities = @caches.map {|p| "#{p}/#{spec.file_name}" }
335
+ global_cache_path = download_cache_path(spec)
336
+ caches << global_cache_path if global_cache_path
337
+
338
+ possibilities = caches.map {|p| package_path(p, spec) }
364
339
  possibilities.find {|p| File.exist?(p) }
365
340
  end
366
341
 
342
+ def package_path(cache_path, spec)
343
+ "#{cache_path}/#{spec.file_name}"
344
+ end
345
+
367
346
  def normalize_uri(uri)
368
- uri = uri.to_s
369
- uri = "#{uri}/" unless uri =~ %r{/$}
347
+ uri = URINormalizer.normalize_suffix(uri.to_s)
370
348
  require_relative "../vendored_uri"
371
- uri = Bundler::URI(uri)
349
+ uri = Gem::URI(uri)
372
350
  raise ArgumentError, "The source must be an absolute URI. For example:\n" \
373
- "source 'https://rubygems.org'" if !uri.absolute? || (uri.is_a?(Bundler::URI::HTTP) && uri.host.nil?)
351
+ "source 'https://rubygems.org'" if !uri.absolute? || (uri.is_a?(Gem::URI::HTTP) && uri.host.nil?)
374
352
  uri
375
353
  end
376
354
 
377
- def suppress_configured_credentials(remote)
378
- remote_nouser = remove_auth(remote)
379
- if remote.userinfo && remote.userinfo == Bundler.settings[remote_nouser]
380
- remote_nouser
381
- else
382
- remote
383
- end
384
- end
385
-
386
355
  def remove_auth(remote)
387
356
  if remote.user || remote.password
388
357
  remote.dup.tap {|uri| uri.user = uri.password = nil }.to_s
@@ -393,7 +362,7 @@ module Bundler
393
362
 
394
363
  def installed_specs
395
364
  @installed_specs ||= Index.build do |idx|
396
- Bundler.rubygems.all_specs.reverse_each do |spec|
365
+ Bundler.rubygems.installed_specs.reverse_each do |spec|
397
366
  spec.source = self
398
367
  if Bundler.rubygems.spec_missing_extensions?(spec, false)
399
368
  Bundler.ui.debug "Source #{self} is ignoring #{spec} because it is missing extensions"
@@ -404,12 +373,20 @@ module Bundler
404
373
  end
405
374
  end
406
375
 
376
+ def default_specs
377
+ @default_specs ||= Index.build do |idx|
378
+ Bundler.rubygems.default_specs.each do |spec|
379
+ spec.source = self
380
+ idx << spec
381
+ end
382
+ end
383
+ end
384
+
407
385
  def cached_specs
408
386
  @cached_specs ||= begin
409
- idx = @allow_local ? installed_specs.dup : Index.new
387
+ idx = Index.new
410
388
 
411
389
  Dir["#{cache_path}/*.gem"].each do |gemfile|
412
- next if gemfile =~ /^bundler\-[\d\.]+?\.gem/
413
390
  s ||= Bundler.rubygems.spec_from_gem(gemfile)
414
391
  s.source = self
415
392
  idx << s
@@ -420,83 +397,67 @@ module Bundler
420
397
  end
421
398
 
422
399
  def api_fetchers
423
- fetchers.select {|f| f.use_api && f.fetchers.first.api_fetcher? }
400
+ fetchers.select(&:api_fetcher?)
424
401
  end
425
402
 
426
403
  def remote_specs
427
404
  @remote_specs ||= Index.build do |idx|
428
405
  index_fetchers = fetchers - api_fetchers
429
406
 
430
- # gather lists from non-api sites
431
- fetch_names(index_fetchers, nil, idx, false)
432
-
433
- # because ensuring we have all the gems we need involves downloading
434
- # the gemspecs of those gems, if the non-api sites contain more than
435
- # about 500 gems, we treat all sites as non-api for speed.
436
- allow_api = idx.size < API_REQUEST_LIMIT && dependency_names.size < API_REQUEST_LIMIT
437
- Bundler.ui.debug "Need to query more than #{API_REQUEST_LIMIT} gems." \
438
- " Downloading full index instead..." unless allow_api
439
-
440
- fetch_names(api_fetchers, allow_api && dependency_names, idx, false)
407
+ if index_fetchers.empty?
408
+ fetch_names(api_fetchers, dependency_names, idx)
409
+ else
410
+ fetch_names(fetchers, nil, idx)
411
+ end
441
412
  end
442
413
  end
443
414
 
444
- def fetch_names(fetchers, dependency_names, index, override_dupes)
415
+ def fetch_names(fetchers, dependency_names, index)
445
416
  fetchers.each do |f|
446
417
  if dependency_names
447
418
  Bundler.ui.info "Fetching gem metadata from #{URICredentialsFilter.credential_filtered_uri(f.uri)}", Bundler.ui.debug?
448
- index.use f.specs_with_retry(dependency_names, self), override_dupes
419
+ index.use f.specs_with_retry(dependency_names, self)
449
420
  Bundler.ui.info "" unless Bundler.ui.debug? # new line now that the dots are over
450
421
  else
451
422
  Bundler.ui.info "Fetching source index from #{URICredentialsFilter.credential_filtered_uri(f.uri)}"
452
- index.use f.specs_with_retry(nil, self), override_dupes
423
+ index.use f.specs_with_retry(nil, self)
453
424
  end
454
425
  end
455
426
  end
456
427
 
457
- def fetch_gem(spec)
458
- return false unless spec.remote
428
+ def fetch_gem_if_possible(spec, previous_spec = nil)
429
+ if spec.remote
430
+ fetch_gem(spec, previous_spec)
431
+ else
432
+ cached_gem(spec)
433
+ end
434
+ end
459
435
 
436
+ def fetch_gem(spec, previous_spec = nil)
460
437
  spec.fetch_platform
461
438
 
462
- download_path = requires_sudo? ? Bundler.tmp(spec.full_name) : rubygems_dir
463
- gem_path = "#{rubygems_dir}/cache/#{spec.full_name}.gem"
439
+ cache_path = download_cache_path(spec) || default_cache_path_for(rubygems_dir)
440
+ gem_path = package_path(cache_path, spec)
441
+ return gem_path if File.exist?(gem_path)
464
442
 
465
- SharedHelpers.filesystem_access("#{download_path}/cache") do |p|
443
+ SharedHelpers.filesystem_access(cache_path) do |p|
466
444
  FileUtils.mkdir_p(p)
467
445
  end
468
- download_gem(spec, download_path)
469
-
470
- if requires_sudo?
471
- SharedHelpers.filesystem_access("#{rubygems_dir}/cache") do |p|
472
- Bundler.mkdir_p(p)
473
- end
474
- Bundler.sudo "mv #{download_path}/cache/#{spec.full_name}.gem #{gem_path}"
475
- end
446
+ download_gem(spec, cache_path, previous_spec)
476
447
 
477
448
  gem_path
478
- ensure
479
- Bundler.rm_rf(download_path) if requires_sudo?
480
- end
481
-
482
- def builtin_gem?(spec)
483
- # Ruby 2.1, where all included gems have this summary
484
- return true if spec.summary =~ /is bundled with Ruby/
485
-
486
- # Ruby 2.0, where gemspecs are stored in specifications/default/
487
- spec.loaded_from && spec.loaded_from.include?("specifications/default/")
488
449
  end
489
450
 
490
451
  def installed?(spec)
491
- installed_specs[spec].any?
452
+ installed_specs[spec].any? && !spec.deleted_gem?
492
453
  end
493
454
 
494
- def requires_sudo?
495
- Bundler.requires_sudo?
455
+ def rubygems_dir
456
+ Bundler.bundle_path
496
457
  end
497
458
 
498
- def rubygems_dir
499
- Bundler.rubygems.gem_dir
459
+ def default_cache_path_for(dir)
460
+ "#{dir}/cache"
500
461
  end
501
462
 
502
463
  def cache_path
@@ -505,58 +466,27 @@ module Bundler
505
466
 
506
467
  private
507
468
 
469
+ def lockfile_remotes
470
+ @lockfile_remotes || credless_remotes
471
+ end
472
+
508
473
  # Checks if the requested spec exists in the global cache. If it does,
509
474
  # we copy it to the download path, and if it does not, we download it.
510
475
  #
511
476
  # @param [Specification] spec
512
477
  # the spec we want to download or retrieve from the cache.
513
478
  #
514
- # @param [String] download_path
479
+ # @param [String] download_cache_path
515
480
  # the local directory the .gem will end up in.
516
481
  #
517
- def download_gem(spec, download_path)
518
- local_path = File.join(download_path, "cache/#{spec.full_name}.gem")
519
-
520
- if (cache_path = download_cache_path(spec)) && cache_path.file?
521
- SharedHelpers.filesystem_access(local_path) do
522
- FileUtils.cp(cache_path, local_path)
523
- end
524
- else
525
- uri = spec.remote.uri
526
- Bundler.ui.confirm("Fetching #{version_message(spec)}")
527
- rubygems_local_path = Bundler.rubygems.download_gem(spec, uri, download_path)
528
-
529
- # older rubygems return varying file:// variants depending on version
530
- rubygems_local_path = rubygems_local_path.gsub(/\Afile:/, "") unless Bundler.rubygems.provides?(">= 3.2.0.rc.2")
531
- rubygems_local_path = rubygems_local_path.gsub(%r{\A//}, "") if Bundler.rubygems.provides?("< 3.1.0")
532
-
533
- if rubygems_local_path != local_path
534
- SharedHelpers.filesystem_access(local_path) do
535
- FileUtils.mv(rubygems_local_path, local_path)
536
- end
537
- end
538
- cache_globally(spec, local_path)
539
- end
540
- end
541
-
542
- # Checks if the requested spec exists in the global cache. If it does
543
- # not, we create the relevant global cache subdirectory if it does not
544
- # exist and copy the spec from the local cache to the global cache.
545
- #
546
- # @param [Specification] spec
547
- # the spec we want to copy to the global cache.
548
- #
549
- # @param [String] local_cache_path
550
- # the local directory from which we want to copy the .gem.
482
+ # @param [Specification] previous_spec
483
+ # the spec previously locked
551
484
  #
552
- def cache_globally(spec, local_cache_path)
553
- return unless cache_path = download_cache_path(spec)
554
- return if cache_path.exist?
555
-
556
- SharedHelpers.filesystem_access(cache_path.dirname, &:mkpath)
557
- SharedHelpers.filesystem_access(cache_path) do
558
- FileUtils.cp(local_cache_path, cache_path)
559
- end
485
+ def download_gem(spec, download_cache_path, previous_spec = nil)
486
+ uri = spec.remote.uri
487
+ Bundler.ui.confirm("Fetching #{version_message(spec, previous_spec)}")
488
+ gem_remote_fetcher = remote_fetchers.fetch(spec.remote).gem_remote_fetcher
489
+ Bundler.rubygems.download_gem(spec, uri, download_cache_path, gem_remote_fetcher)
560
490
  end
561
491
 
562
492
  # Returns the global cache path of the calling Rubygems::Source object.
@@ -575,7 +505,7 @@ module Bundler
575
505
  return unless remote = spec.remote
576
506
  return unless cache_slug = remote.cache_slug
577
507
 
578
- Bundler.user_cache.join("gems", cache_slug, spec.file_name)
508
+ Bundler.user_cache.join("gems", cache_slug)
579
509
  end
580
510
 
581
511
  def extension_cache_slug(spec)
@@ -16,7 +16,7 @@ module Bundler
16
16
  @index
17
17
  end
18
18
 
19
- def to_err
19
+ def identifier
20
20
  to_s
21
21
  end
22
22
 
@@ -11,17 +11,18 @@ module Bundler
11
11
 
12
12
  attr_accessor :dependency_names
13
13
 
14
+ attr_reader :checksum_store
15
+
14
16
  def unmet_deps
15
17
  specs.unmet_dependency_names
16
18
  end
17
19
 
18
- def version_message(spec)
20
+ def version_message(spec, locked_spec = nil)
19
21
  message = "#{spec.name} #{spec.version}"
20
22
  message += " (#{spec.platform})" if spec.platform != Gem::Platform::RUBY && !spec.platform.nil?
21
23
 
22
- if Bundler.locked_gems
23
- locked_spec = Bundler.locked_gems.specs.find {|s| s.name == spec.name }
24
- locked_spec_version = locked_spec.version if locked_spec
24
+ if locked_spec
25
+ locked_spec_version = locked_spec.version
25
26
  if locked_spec_version && spec.version != locked_spec_version
26
27
  message += Bundler.ui.add_color(" (was #{locked_spec_version})", version_color(spec.version, locked_spec_version))
27
28
  end
@@ -67,7 +68,7 @@ module Bundler
67
68
  "#<#{self.class}:0x#{object_id} #{self}>"
68
69
  end
69
70
 
70
- def to_err
71
+ def identifier
71
72
  to_s
72
73
  end
73
74
 
@@ -101,7 +102,7 @@ module Bundler
101
102
  end
102
103
 
103
104
  def print_using_message(message)
104
- if !message.include?("(was ") && Bundler.feature_flag.suppress_install_using_messages?
105
+ if !message.include?("(was ")
105
106
  Bundler.ui.debug message
106
107
  else
107
108
  Bundler.ui.info message