bundler 2.2.27 → 2.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (353) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1328 -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 +7 -5
  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 +4 -4
  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 +2 -5
  19. data/lib/bundler/cli/doctor.rb +16 -9
  20. data/lib/bundler/cli/exec.rb +2 -1
  21. data/lib/bundler/cli/fund.rb +1 -1
  22. data/lib/bundler/cli/gem.rb +153 -40
  23. data/lib/bundler/cli/info.rb +27 -17
  24. data/lib/bundler/cli/init.rb +6 -2
  25. data/lib/bundler/cli/inject.rb +1 -1
  26. data/lib/bundler/cli/install.rb +34 -42
  27. data/lib/bundler/cli/issue.rb +5 -4
  28. data/lib/bundler/cli/lock.rb +54 -28
  29. data/lib/bundler/cli/open.rb +9 -9
  30. data/lib/bundler/cli/outdated.rb +34 -29
  31. data/lib/bundler/cli/platform.rb +8 -6
  32. data/lib/bundler/cli/plugin.rb +9 -15
  33. data/lib/bundler/cli/pristine.rb +38 -30
  34. data/lib/bundler/cli/remove.rb +1 -2
  35. data/lib/bundler/cli/show.rb +5 -5
  36. data/lib/bundler/cli/update.rb +12 -7
  37. data/lib/bundler/cli/viz.rb +1 -1
  38. data/lib/bundler/cli.rb +265 -313
  39. data/lib/bundler/compact_index_client/cache.rb +53 -67
  40. data/lib/bundler/compact_index_client/cache_file.rb +148 -0
  41. data/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  42. data/lib/bundler/compact_index_client/parser.rb +84 -0
  43. data/lib/bundler/compact_index_client/updater.rb +73 -77
  44. data/lib/bundler/compact_index_client.rb +59 -87
  45. data/lib/bundler/constants.rb +9 -2
  46. data/lib/bundler/current_ruby.rb +12 -16
  47. data/lib/bundler/definition.rb +604 -347
  48. data/lib/bundler/dependency.rb +33 -71
  49. data/lib/bundler/digest.rb +71 -0
  50. data/lib/bundler/dsl.rb +136 -102
  51. data/lib/bundler/endpoint_specification.rb +42 -16
  52. data/lib/bundler/env.rb +5 -7
  53. data/lib/bundler/environment_preserver.rb +8 -22
  54. data/lib/bundler/errors.rb +113 -13
  55. data/lib/bundler/feature_flag.rb +1 -2
  56. data/lib/bundler/fetcher/base.rb +11 -11
  57. data/lib/bundler/fetcher/compact_index.rb +32 -52
  58. data/lib/bundler/fetcher/dependency.rb +3 -7
  59. data/lib/bundler/fetcher/downloader.rb +17 -16
  60. data/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  61. data/lib/bundler/fetcher/index.rb +2 -29
  62. data/lib/bundler/fetcher.rb +98 -83
  63. data/lib/bundler/force_platform.rb +16 -0
  64. data/lib/bundler/friendly_errors.rb +29 -40
  65. data/lib/bundler/gem_helper.rb +12 -24
  66. data/lib/bundler/gem_helpers.rb +47 -7
  67. data/lib/bundler/gem_version_promoter.rb +68 -109
  68. data/lib/bundler/graph.rb +9 -9
  69. data/lib/bundler/index.rb +71 -79
  70. data/lib/bundler/injector.rb +25 -13
  71. data/lib/bundler/inline.rb +41 -28
  72. data/lib/bundler/installer/gem_installer.rb +22 -13
  73. data/lib/bundler/installer/parallel_installer.rb +19 -66
  74. data/lib/bundler/installer/standalone.rb +58 -17
  75. data/lib/bundler/installer.rb +31 -93
  76. data/lib/bundler/lazy_specification.rb +151 -72
  77. data/lib/bundler/lockfile_generator.rb +13 -4
  78. data/lib/bundler/lockfile_parser.rb +146 -71
  79. data/lib/bundler/man/bundle-add.1 +54 -44
  80. data/lib/bundler/man/bundle-add.1.ronn +62 -21
  81. data/lib/bundler/man/bundle-binstubs.1 +10 -19
  82. data/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
  83. data/lib/bundler/man/bundle-cache.1 +38 -25
  84. data/lib/bundler/man/bundle-cache.1.ronn +40 -4
  85. data/lib/bundler/man/bundle-check.1 +7 -14
  86. data/lib/bundler/man/bundle-check.1.ronn +7 -2
  87. data/lib/bundler/man/bundle-clean.1 +4 -11
  88. data/lib/bundler/man/bundle-clean.1.ronn +1 -1
  89. data/lib/bundler/man/bundle-config.1 +48 -227
  90. data/lib/bundler/man/bundle-config.1.ronn +41 -34
  91. data/lib/bundler/man/bundle-console.1 +33 -0
  92. data/lib/bundler/man/bundle-console.1.ronn +39 -0
  93. data/lib/bundler/man/bundle-doctor.1 +5 -19
  94. data/lib/bundler/man/bundle-doctor.1.ronn +1 -1
  95. data/lib/bundler/man/bundle-env.1 +9 -0
  96. data/lib/bundler/man/bundle-env.1.ronn +10 -0
  97. data/lib/bundler/man/bundle-exec.1 +20 -78
  98. data/lib/bundler/man/bundle-exec.1.ronn +12 -10
  99. data/lib/bundler/man/bundle-fund.1 +22 -0
  100. data/lib/bundler/man/bundle-fund.1.ronn +25 -0
  101. data/lib/bundler/man/bundle-gem.1 +57 -72
  102. data/lib/bundler/man/bundle-gem.1.ronn +57 -9
  103. data/lib/bundler/man/bundle-help.1 +9 -0
  104. data/lib/bundler/man/bundle-help.1.ronn +12 -0
  105. data/lib/bundler/man/bundle-info.1 +8 -11
  106. data/lib/bundler/man/bundle-info.1.ronn +9 -5
  107. data/lib/bundler/man/bundle-init.1 +7 -12
  108. data/lib/bundler/man/bundle-init.1.ronn +4 -1
  109. data/lib/bundler/man/bundle-inject.1 +17 -19
  110. data/lib/bundler/man/bundle-inject.1.ronn +12 -2
  111. data/lib/bundler/man/bundle-install.1 +43 -163
  112. data/lib/bundler/man/bundle-install.1.ronn +33 -51
  113. data/lib/bundler/man/bundle-issue.1 +45 -0
  114. data/lib/bundler/man/bundle-issue.1.ronn +37 -0
  115. data/lib/bundler/man/bundle-licenses.1 +9 -0
  116. data/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  117. data/lib/bundler/man/bundle-list.1 +4 -19
  118. data/lib/bundler/man/bundle-list.1.ronn +4 -1
  119. data/lib/bundler/man/bundle-lock.1 +25 -34
  120. data/lib/bundler/man/bundle-lock.1.ronn +25 -4
  121. data/lib/bundler/man/bundle-open.1 +18 -18
  122. data/lib/bundler/man/bundle-open.1.ronn +10 -1
  123. data/lib/bundler/man/bundle-outdated.1 +23 -75
  124. data/lib/bundler/man/bundle-outdated.1.ronn +21 -22
  125. data/lib/bundler/man/bundle-platform.1 +16 -28
  126. data/lib/bundler/man/bundle-platform.1.ronn +14 -7
  127. data/lib/bundler/man/bundle-plugin.1 +58 -0
  128. data/lib/bundler/man/bundle-plugin.1.ronn +63 -0
  129. data/lib/bundler/man/bundle-pristine.1 +5 -16
  130. data/lib/bundler/man/bundle-pristine.1.ronn +1 -1
  131. data/lib/bundler/man/bundle-remove.1 +4 -14
  132. data/lib/bundler/man/bundle-remove.1.ronn +1 -1
  133. data/lib/bundler/man/bundle-show.1 +7 -11
  134. data/lib/bundler/man/bundle-show.1.ronn +4 -0
  135. data/lib/bundler/man/bundle-update.1 +31 -144
  136. data/lib/bundler/man/bundle-update.1.ronn +16 -7
  137. data/lib/bundler/man/bundle-version.1 +22 -0
  138. data/lib/bundler/man/bundle-version.1.ronn +24 -0
  139. data/lib/bundler/man/bundle-viz.1 +9 -18
  140. data/lib/bundler/man/bundle-viz.1.ronn +9 -3
  141. data/lib/bundler/man/bundle.1 +17 -51
  142. data/lib/bundler/man/bundle.1.ronn +12 -7
  143. data/lib/bundler/man/gemfile.5 +132 -346
  144. data/lib/bundler/man/gemfile.5.ronn +127 -86
  145. data/lib/bundler/man/index.txt +8 -0
  146. data/lib/bundler/match_metadata.rb +17 -0
  147. data/lib/bundler/match_platform.rb +1 -2
  148. data/lib/bundler/match_remote_metadata.rb +29 -0
  149. data/lib/bundler/materialization.rb +59 -0
  150. data/lib/bundler/mirror.rb +8 -10
  151. data/lib/bundler/plugin/api/source.rb +11 -14
  152. data/lib/bundler/plugin/events.rb +24 -0
  153. data/lib/bundler/plugin/index.rb +13 -5
  154. data/lib/bundler/plugin/installer/git.rb +0 -4
  155. data/lib/bundler/plugin/installer/path.rb +18 -0
  156. data/lib/bundler/plugin/installer/rubygems.rb +0 -8
  157. data/lib/bundler/plugin/installer.rb +43 -20
  158. data/lib/bundler/plugin/source_list.rb +4 -4
  159. data/lib/bundler/plugin.rb +35 -7
  160. data/lib/bundler/process_lock.rb +10 -14
  161. data/lib/bundler/remote_specification.rb +17 -6
  162. data/lib/bundler/resolver/base.rb +117 -0
  163. data/lib/bundler/resolver/candidate.rb +82 -0
  164. data/lib/bundler/resolver/incompatibility.rb +15 -0
  165. data/lib/bundler/resolver/package.rb +90 -0
  166. data/lib/bundler/resolver/root.rb +25 -0
  167. data/lib/bundler/resolver/spec_group.rb +54 -66
  168. data/lib/bundler/resolver.rb +440 -306
  169. data/lib/bundler/retry.rb +2 -2
  170. data/lib/bundler/ruby_dsl.rb +42 -7
  171. data/lib/bundler/ruby_version.rb +22 -22
  172. data/lib/bundler/rubygems_ext.rb +323 -84
  173. data/lib/bundler/rubygems_gem_installer.rb +93 -65
  174. data/lib/bundler/rubygems_integration.rb +89 -237
  175. data/lib/bundler/runtime.rb +30 -20
  176. data/lib/bundler/safe_marshal.rb +31 -0
  177. data/lib/bundler/self_manager.rb +205 -0
  178. data/lib/bundler/settings.rb +145 -58
  179. data/lib/bundler/setup.rb +13 -1
  180. data/lib/bundler/shared_helpers.rb +94 -51
  181. data/lib/bundler/source/git/git_proxy.rb +283 -82
  182. data/lib/bundler/source/git.rb +187 -78
  183. data/lib/bundler/source/metadata.rb +16 -16
  184. data/lib/bundler/source/path/installer.rb +1 -22
  185. data/lib/bundler/source/path.rb +17 -27
  186. data/lib/bundler/source/rubygems/remote.rb +1 -1
  187. data/lib/bundler/source/rubygems.rb +165 -245
  188. data/lib/bundler/source/rubygems_aggregate.rb +1 -1
  189. data/lib/bundler/source.rb +7 -6
  190. data/lib/bundler/source_list.rb +41 -33
  191. data/lib/bundler/source_map.rb +15 -2
  192. data/lib/bundler/spec_set.rb +193 -58
  193. data/lib/bundler/stub_specification.rb +39 -7
  194. data/lib/bundler/templates/Executable +3 -5
  195. data/lib/bundler/templates/Executable.bundler +7 -12
  196. data/lib/bundler/templates/Executable.standalone +4 -4
  197. data/lib/bundler/templates/Gemfile +0 -2
  198. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
  199. data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  200. data/lib/bundler/templates/newgem/Gemfile.tt +5 -2
  201. data/lib/bundler/templates/newgem/README.md.tt +12 -12
  202. data/lib/bundler/templates/newgem/Rakefile.tt +28 -4
  203. data/lib/bundler/templates/newgem/bin/console.tt +0 -4
  204. data/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  205. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  206. data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  207. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  208. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  209. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  210. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +20 -10
  211. data/lib/bundler/templates/newgem/gitignore.tt +3 -0
  212. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  213. data/lib/bundler/templates/newgem/newgem.gemspec.tt +26 -18
  214. data/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
  215. data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  216. data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  217. data/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
  218. data/lib/bundler/ui/rg_proxy.rb +1 -1
  219. data/lib/bundler/ui/shell.rb +61 -16
  220. data/lib/bundler/ui/silent.rb +33 -6
  221. data/lib/bundler/uri_credentials_filter.rb +3 -3
  222. data/lib/bundler/uri_normalizer.rb +23 -0
  223. data/lib/bundler/vendor/.document +1 -0
  224. data/lib/bundler/vendor/connection_pool/.document +1 -0
  225. data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  226. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
  227. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  228. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  229. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +92 -78
  230. data/lib/bundler/vendor/fileutils/.document +1 -0
  231. data/lib/bundler/vendor/fileutils/COPYING +56 -0
  232. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1350 -418
  233. data/lib/bundler/vendor/net-http-persistent/.document +1 -0
  234. data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  235. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
  236. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
  237. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  238. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +102 -64
  239. data/lib/bundler/vendor/pub_grub/.document +1 -0
  240. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  241. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  242. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  243. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  244. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  245. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  246. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  247. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  248. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  249. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
  250. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  251. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  252. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  253. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  254. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  255. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  256. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  257. data/lib/bundler/vendor/securerandom/.document +1 -0
  258. data/lib/bundler/vendor/securerandom/COPYING +56 -0
  259. data/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  260. data/lib/bundler/vendor/thor/.document +1 -0
  261. data/lib/bundler/vendor/thor/LICENSE.md +20 -0
  262. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
  263. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  264. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
  265. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +15 -19
  266. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +16 -6
  267. data/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -17
  268. data/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
  269. data/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
  270. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +10 -0
  271. data/lib/bundler/vendor/thor/lib/thor/error.rb +16 -20
  272. data/lib/bundler/vendor/thor/lib/thor/group.rb +12 -1
  273. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
  274. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
  275. data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +17 -1
  276. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
  277. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +28 -9
  278. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +65 -8
  279. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
  280. data/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
  281. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +56 -162
  282. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -46
  283. data/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  284. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -46
  285. data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +118 -0
  286. data/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  287. data/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  288. data/lib/bundler/vendor/thor/lib/thor/shell.rb +2 -2
  289. data/lib/bundler/vendor/thor/lib/thor/util.rb +9 -8
  290. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  291. data/lib/bundler/vendor/thor/lib/thor.rb +166 -8
  292. data/lib/bundler/vendor/tsort/.document +1 -0
  293. data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  294. data/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
  295. data/lib/bundler/vendor/uri/.document +1 -0
  296. data/lib/bundler/vendor/uri/COPYING +56 -0
  297. data/lib/bundler/vendor/uri/lib/uri/common.rb +351 -219
  298. data/lib/bundler/vendor/uri/lib/uri/file.rb +10 -4
  299. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +3 -3
  300. data/lib/bundler/vendor/uri/lib/uri/generic.rb +49 -39
  301. data/lib/bundler/vendor/uri/lib/uri/http.rb +40 -3
  302. data/lib/bundler/vendor/uri/lib/uri/https.rb +2 -2
  303. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +2 -2
  304. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  305. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -3
  306. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +26 -26
  307. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +131 -50
  308. data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  309. data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  310. data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  311. data/lib/bundler/vendor/uri/lib/uri.rb +12 -12
  312. data/lib/bundler/vendored_net_http.rb +23 -0
  313. data/lib/bundler/vendored_persistent.rb +0 -36
  314. data/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  315. data/lib/bundler/vendored_securerandom.rb +12 -0
  316. data/lib/bundler/vendored_timeout.rb +12 -0
  317. data/lib/bundler/{vendored_tmpdir.rb → vendored_tsort.rb} +1 -1
  318. data/lib/bundler/vendored_uri.rb +18 -1
  319. data/lib/bundler/version.rb +5 -1
  320. data/lib/bundler/vlad.rb +1 -1
  321. data/lib/bundler/worker.rb +7 -9
  322. data/lib/bundler/yaml_serializer.rb +22 -13
  323. data/lib/bundler.rb +176 -151
  324. metadata +98 -41
  325. data/lib/bundler/dep_proxy.rb +0 -55
  326. data/lib/bundler/gemdeps.rb +0 -29
  327. data/lib/bundler/psyched_yaml.rb +0 -22
  328. data/lib/bundler/templates/gems.rb +0 -8
  329. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  330. data/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  331. data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
  332. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  333. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  334. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  335. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  336. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  337. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  338. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  339. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  340. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  341. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  342. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  343. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  344. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  345. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  346. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  347. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  348. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  349. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  350. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  351. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  352. data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  353. 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, local: options[:local])) || (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
164
+
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
+ )
160
183
 
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
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
218
-
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)
205
+ installed_spec = installer.install
206
+
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))
@@ -247,12 +222,13 @@ module Bundler
247
222
  raise InstallError, e.message
248
223
  end
249
224
 
250
- def cached_built_in_gem(spec)
251
- cached_path = cached_path(spec)
252
- if cached_path.nil?
225
+ def cached_built_in_gem(spec, local: false)
226
+ cached_path = cached_gem(spec)
227
+ if cached_path.nil? && !local
253
228
  remote_spec = remote_specs.search(spec).first
254
229
  if remote_spec
255
230
  cached_path = fetch_gem(remote_spec)
231
+ spec.remote = remote_spec.remote
256
232
  else
257
233
  Bundler.ui.warn "#{spec.full_name} is built in to Ruby, and can't be cached because your Gemfile doesn't have any sources that contain it."
258
234
  end
@@ -265,12 +241,8 @@ module Bundler
265
241
  @remotes.unshift(uri) unless @remotes.include?(uri)
266
242
  end
267
243
 
268
- def equivalent_remotes?(other_remotes)
269
- other_remotes.map(&method(:remove_auth)) == @remotes.map(&method(:remove_auth))
270
- end
271
-
272
244
  def spec_names
273
- if @allow_remote && dependency_api_available?
245
+ if dependency_api_available?
274
246
  remote_specs.spec_names
275
247
  else
276
248
  []
@@ -278,22 +250,25 @@ module Bundler
278
250
  end
279
251
 
280
252
  def unmet_deps
281
- if @allow_remote && dependency_api_available?
253
+ if dependency_api_available?
282
254
  remote_specs.unmet_dependency_names
283
255
  else
284
256
  []
285
257
  end
286
258
  end
287
259
 
288
- def fetchers
289
- @fetchers ||= remotes.map do |uri|
260
+ def remote_fetchers
261
+ @remote_fetchers ||= remotes.to_h do |uri|
290
262
  remote = Source::Rubygems::Remote.new(uri)
291
- Bundler::Fetcher.new(remote)
292
- end
263
+ [remote, Bundler::Fetcher.new(remote)]
264
+ end.freeze
265
+ end
266
+
267
+ def fetchers
268
+ @fetchers ||= remote_fetchers.values.freeze
293
269
  end
294
270
 
295
271
  def double_check_for(unmet_dependency_names)
296
- return unless @allow_remote
297
272
  return unless dependency_api_available?
298
273
 
299
274
  unmet_dependency_names = unmet_dependency_names.call
@@ -308,7 +283,9 @@ module Bundler
308
283
 
309
284
  Bundler.ui.debug "Double checking for #{unmet_dependency_names || "all specs (due to the size of the request)"} in #{self}"
310
285
 
311
- fetch_names(api_fetchers, unmet_dependency_names, specs, false)
286
+ fetch_names(api_fetchers, unmet_dependency_names, remote_specs)
287
+
288
+ specs.use remote_specs
312
289
  end
313
290
 
314
291
  def dependency_names_to_double_check
@@ -327,7 +304,7 @@ module Bundler
327
304
  end
328
305
 
329
306
  def dependency_api_available?
330
- api_fetchers.any?
307
+ @allow_remote && api_fetchers.any?
331
308
  end
332
309
 
333
310
  protected
@@ -337,7 +314,7 @@ module Bundler
337
314
  end
338
315
 
339
316
  def credless_remotes
340
- remotes.map(&method(:suppress_configured_credentials))
317
+ remotes.map(&method(:remove_auth))
341
318
  end
342
319
 
343
320
  def remotes_for_spec(spec)
@@ -347,42 +324,27 @@ module Bundler
347
324
  end
348
325
  end
349
326
 
350
- def loaded_from(spec)
351
- "#{rubygems_dir}/specifications/#{spec.full_name}.gemspec"
352
- end
353
-
354
327
  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"
358
- end
359
- cached_gem
360
- end
328
+ global_cache_path = download_cache_path(spec)
329
+ caches << global_cache_path if global_cache_path
361
330
 
362
- def cached_path(spec)
363
- possibilities = @caches.map {|p| "#{p}/#{spec.file_name}" }
331
+ possibilities = caches.map {|p| package_path(p, spec) }
364
332
  possibilities.find {|p| File.exist?(p) }
365
333
  end
366
334
 
335
+ def package_path(cache_path, spec)
336
+ "#{cache_path}/#{spec.file_name}"
337
+ end
338
+
367
339
  def normalize_uri(uri)
368
- uri = uri.to_s
369
- uri = "#{uri}/" unless uri =~ %r{/$}
340
+ uri = URINormalizer.normalize_suffix(uri.to_s)
370
341
  require_relative "../vendored_uri"
371
- uri = Bundler::URI(uri)
342
+ uri = Gem::URI(uri)
372
343
  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?)
344
+ "source 'https://rubygems.org'" if !uri.absolute? || (uri.is_a?(Gem::URI::HTTP) && uri.host.nil?)
374
345
  uri
375
346
  end
376
347
 
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
348
  def remove_auth(remote)
387
349
  if remote.user || remote.password
388
350
  remote.dup.tap {|uri| uri.user = uri.password = nil }.to_s
@@ -393,12 +355,18 @@ module Bundler
393
355
 
394
356
  def installed_specs
395
357
  @installed_specs ||= Index.build do |idx|
396
- Bundler.rubygems.all_specs.reverse_each do |spec|
358
+ Bundler.rubygems.installed_specs.reverse_each do |spec|
359
+ spec.source = self
360
+ next if spec.ignored?
361
+ idx << spec
362
+ end
363
+ end
364
+ end
365
+
366
+ def default_specs
367
+ @default_specs ||= Index.build do |idx|
368
+ Bundler.rubygems.default_specs.each do |spec|
397
369
  spec.source = self
398
- if Bundler.rubygems.spec_missing_extensions?(spec, false)
399
- Bundler.ui.debug "Source #{self} is ignoring #{spec} because it is missing extensions"
400
- next
401
- end
402
370
  idx << spec
403
371
  end
404
372
  end
@@ -406,10 +374,9 @@ module Bundler
406
374
 
407
375
  def cached_specs
408
376
  @cached_specs ||= begin
409
- idx = @allow_local ? installed_specs.dup : Index.new
377
+ idx = Index.new
410
378
 
411
379
  Dir["#{cache_path}/*.gem"].each do |gemfile|
412
- next if gemfile =~ /^bundler\-[\d\.]+?\.gem/
413
380
  s ||= Bundler.rubygems.spec_from_gem(gemfile)
414
381
  s.source = self
415
382
  idx << s
@@ -420,83 +387,67 @@ module Bundler
420
387
  end
421
388
 
422
389
  def api_fetchers
423
- fetchers.select {|f| f.use_api && f.fetchers.first.api_fetcher? }
390
+ fetchers.select(&:api_fetcher?)
424
391
  end
425
392
 
426
393
  def remote_specs
427
394
  @remote_specs ||= Index.build do |idx|
428
395
  index_fetchers = fetchers - api_fetchers
429
396
 
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)
397
+ if index_fetchers.empty?
398
+ fetch_names(api_fetchers, dependency_names, idx)
399
+ else
400
+ fetch_names(fetchers, nil, idx)
401
+ end
441
402
  end
442
403
  end
443
404
 
444
- def fetch_names(fetchers, dependency_names, index, override_dupes)
405
+ def fetch_names(fetchers, dependency_names, index)
445
406
  fetchers.each do |f|
446
407
  if dependency_names
447
408
  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
409
+ index.use f.specs_with_retry(dependency_names, self)
449
410
  Bundler.ui.info "" unless Bundler.ui.debug? # new line now that the dots are over
450
411
  else
451
412
  Bundler.ui.info "Fetching source index from #{URICredentialsFilter.credential_filtered_uri(f.uri)}"
452
- index.use f.specs_with_retry(nil, self), override_dupes
413
+ index.use f.specs_with_retry(nil, self)
453
414
  end
454
415
  end
455
416
  end
456
417
 
457
- def fetch_gem(spec)
458
- return false unless spec.remote
418
+ def fetch_gem_if_possible(spec, previous_spec = nil)
419
+ if spec.remote
420
+ fetch_gem(spec, previous_spec)
421
+ else
422
+ cached_gem(spec)
423
+ end
424
+ end
459
425
 
426
+ def fetch_gem(spec, previous_spec = nil)
460
427
  spec.fetch_platform
461
428
 
462
- download_path = requires_sudo? ? Bundler.tmp(spec.full_name) : rubygems_dir
463
- gem_path = "#{rubygems_dir}/cache/#{spec.full_name}.gem"
429
+ cache_path = download_cache_path(spec) || default_cache_path_for(rubygems_dir)
430
+ gem_path = package_path(cache_path, spec)
431
+ return gem_path if File.exist?(gem_path)
464
432
 
465
- SharedHelpers.filesystem_access("#{download_path}/cache") do |p|
433
+ SharedHelpers.filesystem_access(cache_path) do |p|
466
434
  FileUtils.mkdir_p(p)
467
435
  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
436
+ download_gem(spec, cache_path, previous_spec)
476
437
 
477
438
  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
439
  end
489
440
 
490
441
  def installed?(spec)
491
- installed_specs[spec].any?
442
+ installed_specs[spec].any? && !spec.deleted_gem?
492
443
  end
493
444
 
494
- def requires_sudo?
495
- Bundler.requires_sudo?
445
+ def rubygems_dir
446
+ Bundler.bundle_path
496
447
  end
497
448
 
498
- def rubygems_dir
499
- Bundler.rubygems.gem_dir
449
+ def default_cache_path_for(dir)
450
+ "#{dir}/cache"
500
451
  end
501
452
 
502
453
  def cache_path
@@ -505,58 +456,27 @@ module Bundler
505
456
 
506
457
  private
507
458
 
459
+ def lockfile_remotes
460
+ @lockfile_remotes || credless_remotes
461
+ end
462
+
508
463
  # Checks if the requested spec exists in the global cache. If it does,
509
464
  # we copy it to the download path, and if it does not, we download it.
510
465
  #
511
466
  # @param [Specification] spec
512
467
  # the spec we want to download or retrieve from the cache.
513
468
  #
514
- # @param [String] download_path
469
+ # @param [String] download_cache_path
515
470
  # the local directory the .gem will end up in.
516
471
  #
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.
472
+ # @param [Specification] previous_spec
473
+ # the spec previously locked
545
474
  #
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.
551
- #
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
475
+ def download_gem(spec, download_cache_path, previous_spec = nil)
476
+ uri = spec.remote.uri
477
+ Bundler.ui.confirm("Fetching #{version_message(spec, previous_spec)}")
478
+ gem_remote_fetcher = remote_fetchers.fetch(spec.remote).gem_remote_fetcher
479
+ Bundler.rubygems.download_gem(spec, uri, download_cache_path, gem_remote_fetcher)
560
480
  end
561
481
 
562
482
  # Returns the global cache path of the calling Rubygems::Source object.
@@ -575,7 +495,7 @@ module Bundler
575
495
  return unless remote = spec.remote
576
496
  return unless cache_slug = remote.cache_slug
577
497
 
578
- Bundler.user_cache.join("gems", cache_slug, spec.file_name)
498
+ Bundler.user_cache.join("gems", cache_slug)
579
499
  end
580
500
 
581
501
  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