bundler 2.2.29 → 2.5.16

Sign up to get free protection for your applications and to get access to all the features.
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