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
@@ -10,7 +10,7 @@ module Bundler
10
10
  end
11
11
 
12
12
  def setup(*groups)
13
- @definition.ensure_equivalent_gemfile_and_lockfile if Bundler.frozen_bundle?
13
+ @definition.ensure_equivalent_gemfile_and_lockfile
14
14
 
15
15
  # Has to happen first
16
16
  clean_load_path
@@ -28,11 +28,11 @@ module Bundler
28
28
  spec.load_paths.reject {|path| $LOAD_PATH.include?(path) }
29
29
  end.reverse.flatten
30
30
 
31
- Bundler.rubygems.add_to_load_path(load_paths)
31
+ Gem.add_to_load_path(*load_paths)
32
32
 
33
33
  setup_manpath
34
34
 
35
- lock(:preserve_unknown_sections => true)
35
+ lock(preserve_unknown_sections: true)
36
36
 
37
37
  self
38
38
  end
@@ -94,8 +94,8 @@ module Bundler
94
94
  definition_method :requires
95
95
 
96
96
  def lock(opts = {})
97
- return if @definition.nothing_changed? && !@definition.unlocking?
98
- @definition.lock(Bundler.default_lockfile, opts[:preserve_unknown_sections])
97
+ return if @definition.no_resolve_needed?
98
+ @definition.lock(opts[:preserve_unknown_sections])
99
99
  end
100
100
 
101
101
  alias_method :gems, :specs
@@ -125,7 +125,6 @@ module Bundler
125
125
  specs_to_cache.each do |spec|
126
126
  next if spec.name == "bundler"
127
127
  next if spec.source.is_a?(Source::Gemspec)
128
- spec.source.send(:fetch_gem, spec) if Bundler.settings[:cache_all_platforms] && spec.source.respond_to?(:fetch_gem, true)
129
128
  spec.source.cache(spec, custom_path) if spec.source.respond_to?(:cache)
130
129
  end
131
130
 
@@ -265,7 +264,7 @@ module Bundler
265
264
 
266
265
  return if manuals.empty?
267
266
  Bundler::SharedHelpers.set_env "MANPATH", manuals.concat(
268
- ENV["MANPATH"].to_s.split(File::PATH_SEPARATOR)
267
+ ENV["MANPATH"] ? ENV["MANPATH"].to_s.split(File::PATH_SEPARATOR) : [""]
269
268
  ).uniq.join(File::PATH_SEPARATOR)
270
269
  end
271
270
 
@@ -291,7 +290,7 @@ module Bundler
291
290
  return unless activated_spec = Bundler.rubygems.loaded_specs(spec.name)
292
291
  return if activated_spec.version == spec.version
293
292
 
294
- suggestion = if Bundler.rubygems.spec_default_gem?(activated_spec)
293
+ suggestion = if activated_spec.default_gem?
295
294
  "Since #{spec.name} is a default gem, you can either remove your dependency on it" \
296
295
  " or try updating to a newer version of bundler that supports #{spec.name} as a default gem."
297
296
  else
@@ -301,11 +300,7 @@ module Bundler
301
300
  e = Gem::LoadError.new "You have already activated #{activated_spec.name} #{activated_spec.version}, " \
302
301
  "but your Gemfile requires #{spec.name} #{spec.version}. #{suggestion}"
303
302
  e.name = spec.name
304
- if e.respond_to?(:requirement=)
305
- e.requirement = Gem::Requirement.new(spec.version.to_s)
306
- else
307
- e.version_requirement = Gem::Requirement.new(spec.version.to_s)
308
- end
303
+ e.requirement = Gem::Requirement.new(spec.version.to_s)
309
304
  raise e
310
305
  end
311
306
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ module SafeMarshal
5
+ ALLOWED_CLASSES = [
6
+ Array,
7
+ FalseClass,
8
+ Gem::Specification,
9
+ Gem::Version,
10
+ Hash,
11
+ String,
12
+ Symbol,
13
+ Time,
14
+ TrueClass,
15
+ ].freeze
16
+
17
+ ERROR = "Unexpected class %s present in marshaled data. Only %s are allowed."
18
+
19
+ PROC = proc do |object|
20
+ object.tap do
21
+ unless ALLOWED_CLASSES.include?(object.class)
22
+ raise TypeError, format(ERROR, object.class, ALLOWED_CLASSES.join(", "))
23
+ end
24
+ end
25
+ end
26
+
27
+ def self.proc
28
+ PROC
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,206 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ #
5
+ # This class handles installing and switching to the version of bundler needed
6
+ # by an application.
7
+ #
8
+ class SelfManager
9
+ def restart_with_locked_bundler_if_needed
10
+ return unless needs_switching? && installed?
11
+
12
+ restart_with(restart_version)
13
+ end
14
+
15
+ def install_locked_bundler_and_restart_with_it_if_needed
16
+ return unless needs_switching?
17
+
18
+ if restart_version == lockfile_version
19
+ Bundler.ui.info \
20
+ "Bundler #{current_version} is running, but your lockfile was generated with #{lockfile_version}. " \
21
+ "Installing Bundler #{lockfile_version} and restarting using that version."
22
+ else
23
+ Bundler.ui.info \
24
+ "Bundler #{current_version} is running, but your configuration was #{restart_version}. " \
25
+ "Installing Bundler #{restart_version} and restarting using that version."
26
+ end
27
+
28
+ install_and_restart_with(restart_version)
29
+ end
30
+
31
+ def update_bundler_and_restart_with_it_if_needed(target)
32
+ return unless autoswitching_applies?
33
+
34
+ spec = resolve_update_version_from(target)
35
+ return unless spec
36
+
37
+ version = spec.version
38
+
39
+ Bundler.ui.info "Updating bundler to #{version}."
40
+
41
+ install(spec)
42
+
43
+ restart_with(version)
44
+ end
45
+
46
+ private
47
+
48
+ def install_and_restart_with(version)
49
+ requirement = Gem::Requirement.new(version)
50
+ spec = find_latest_matching_spec(requirement)
51
+
52
+ if spec.nil?
53
+ Bundler.ui.warn "Your lockfile is locked to a version of bundler (#{lockfile_version}) that doesn't exist at https://rubygems.org/. Going on using #{current_version}"
54
+ return
55
+ end
56
+
57
+ install(spec)
58
+ rescue StandardError => e
59
+ Bundler.ui.trace e
60
+ Bundler.ui.warn "There was an error installing the locked bundler version (#{lockfile_version}), rerun with the `--verbose` flag for more details. Going on using bundler #{current_version}."
61
+ else
62
+ restart_with(version)
63
+ end
64
+
65
+ def install(spec)
66
+ spec.source.install(spec)
67
+ end
68
+
69
+ def restart_with(version)
70
+ configured_gem_home = ENV["GEM_HOME"]
71
+ configured_gem_path = ENV["GEM_PATH"]
72
+
73
+ # Bundler specs need some stuff to be required before Bundler starts
74
+ # running, for example, for faking the compact index API. However, these
75
+ # flags are lost when we reexec to a different version of Bundler. In the
76
+ # future, we may be able to properly reconstruct the original Ruby
77
+ # invocation (see https://bugs.ruby-lang.org/issues/6648), but for now
78
+ # there's no way to do it, so we need to be explicit about how to re-exec.
79
+ # This may be a feature end users request at some point, but maybe by that
80
+ # time, we have builtin tools to do. So for now, we use an undocumented
81
+ # ENV variable only for our specs.
82
+ bundler_spec_original_cmd = ENV["BUNDLER_SPEC_ORIGINAL_CMD"]
83
+ if bundler_spec_original_cmd
84
+ require "shellwords"
85
+ cmd = [*Shellwords.shellsplit(bundler_spec_original_cmd), *ARGV]
86
+ else
87
+ cmd = [$PROGRAM_NAME, *ARGV]
88
+ cmd.unshift(Gem.ruby) unless File.executable?($PROGRAM_NAME)
89
+ end
90
+
91
+ Bundler.with_original_env do
92
+ Kernel.exec(
93
+ { "GEM_HOME" => configured_gem_home, "GEM_PATH" => configured_gem_path, "BUNDLER_VERSION" => version.to_s },
94
+ *cmd
95
+ )
96
+ end
97
+ end
98
+
99
+ def needs_switching?
100
+ autoswitching_applies? &&
101
+ released?(lockfile_version) &&
102
+ !running?(lockfile_version) &&
103
+ !updating? &&
104
+ Bundler.settings[:version] != "system"
105
+ end
106
+
107
+ def autoswitching_applies?
108
+ ENV["BUNDLER_VERSION"].nil? &&
109
+ Bundler.rubygems.supports_bundler_trampolining? &&
110
+ ruby_can_restart_with_same_arguments? &&
111
+ SharedHelpers.in_bundle? &&
112
+ lockfile_version
113
+ end
114
+
115
+ def resolve_update_version_from(target)
116
+ requirement = Gem::Requirement.new(target)
117
+ update_candidate = find_latest_matching_spec(requirement)
118
+
119
+ if update_candidate.nil?
120
+ raise InvalidOption, "The `bundle update --bundler` target version (#{target}) does not exist"
121
+ end
122
+
123
+ resolved_version = update_candidate.version
124
+ needs_update = requirement.specific? ? !running?(resolved_version) : running_older_than?(resolved_version)
125
+
126
+ return unless needs_update
127
+
128
+ update_candidate
129
+ end
130
+
131
+ def local_specs
132
+ @local_specs ||= Bundler::Source::Rubygems.new("allow_local" => true).specs.select {|spec| spec.name == "bundler" }
133
+ end
134
+
135
+ def remote_specs
136
+ @remote_specs ||= begin
137
+ source = Bundler::Source::Rubygems.new("remotes" => "https://rubygems.org")
138
+ source.remote!
139
+ source.add_dependency_names("bundler")
140
+ source.specs.select(&:matches_current_metadata?)
141
+ end
142
+ end
143
+
144
+ def find_latest_matching_spec(requirement)
145
+ local_result = find_latest_matching_spec_from_collection(local_specs, requirement)
146
+ return local_result if local_result && requirement.specific?
147
+
148
+ remote_result = find_latest_matching_spec_from_collection(remote_specs, requirement)
149
+ return remote_result if local_result.nil?
150
+
151
+ [local_result, remote_result].max
152
+ end
153
+
154
+ def find_latest_matching_spec_from_collection(specs, requirement)
155
+ specs.sort.reverse_each.find {|spec| requirement.satisfied_by?(spec.version) }
156
+ end
157
+
158
+ def running?(version)
159
+ version == current_version
160
+ end
161
+
162
+ def running_older_than?(version)
163
+ current_version < version
164
+ end
165
+
166
+ def released?(version)
167
+ !version.to_s.end_with?(".dev")
168
+ end
169
+
170
+ def ruby_can_restart_with_same_arguments?
171
+ $PROGRAM_NAME != "-e"
172
+ end
173
+
174
+ def updating?
175
+ "update".start_with?(ARGV.first || " ") && ARGV[1..-1].any? {|a| a.start_with?("--bundler") }
176
+ end
177
+
178
+ def installed?
179
+ Bundler.configure
180
+
181
+ Bundler.rubygems.find_bundler(restart_version.to_s)
182
+ end
183
+
184
+ def current_version
185
+ @current_version ||= Gem::Version.new(Bundler::VERSION)
186
+ end
187
+
188
+ def lockfile_version
189
+ return @lockfile_version if defined?(@lockfile_version)
190
+
191
+ parsed_version = Bundler::LockfileParser.bundled_with
192
+ @lockfile_version = parsed_version ? Gem::Version.new(parsed_version) : nil
193
+ rescue ArgumentError
194
+ @lockfile_version = nil
195
+ end
196
+
197
+ def restart_version
198
+ return @restart_version if defined?(@restart_version)
199
+ # BUNDLE_VERSION=x.y.z
200
+ @restart_version = Gem::Version.new(Bundler.settings[:version])
201
+ rescue ArgumentError
202
+ # BUNDLE_VERSION=lockfile
203
+ @restart_version = lockfile_version
204
+ end
205
+ end
206
+ end
@@ -7,7 +7,6 @@ module Bundler
7
7
  autoload :Validator, File.expand_path("settings/validator", __dir__)
8
8
 
9
9
  BOOL_KEYS = %w[
10
- allow_deployment_source_credential_changes
11
10
  allow_offline_install
12
11
  auto_clean_without_path
13
12
  auto_install
@@ -43,9 +42,21 @@ module Bundler
43
42
  setup_makes_kernel_gem_public
44
43
  silence_deprecations
45
44
  silence_root_warning
46
- suppress_install_using_messages
47
45
  update_requires_all_flag
48
- use_gem_version_promoter_for_major_updates
46
+ ].freeze
47
+
48
+ REMEMBERED_KEYS = %w[
49
+ bin
50
+ cache_all
51
+ clean
52
+ deployment
53
+ frozen
54
+ no_prune
55
+ path
56
+ shebang
57
+ path.system
58
+ without
59
+ with
49
60
  ].freeze
50
61
 
51
62
  NUMBER_KEYS = %w[
@@ -57,6 +68,7 @@ module Bundler
57
68
  ].freeze
58
69
 
59
70
  ARRAY_KEYS = %w[
71
+ only
60
72
  with
61
73
  without
62
74
  ].freeze
@@ -75,6 +87,7 @@ module Bundler
75
87
  shebang
76
88
  system_bindir
77
89
  trust-policy
90
+ version
78
91
  ].freeze
79
92
 
80
93
  DEFAULT_CONFIG = {
@@ -84,25 +97,39 @@ module Bundler
84
97
  "BUNDLE_REDIRECT" => 5,
85
98
  "BUNDLE_RETRY" => 3,
86
99
  "BUNDLE_TIMEOUT" => 10,
100
+ "BUNDLE_VERSION" => "lockfile",
87
101
  }.freeze
88
102
 
89
103
  def initialize(root = nil)
90
104
  @root = root
91
105
  @local_config = load_config(local_config_file)
92
- @env_config = ENV.to_h.select {|key, _value| key =~ /\ABUNDLE_.+/ }
106
+ @local_root = root || Pathname.new(".bundle").expand_path
107
+
108
+ @env_config = ENV.to_h
109
+ @env_config.select! {|key, _value| key.start_with?("BUNDLE_") }
110
+ @env_config.delete("BUNDLE_")
111
+
93
112
  @global_config = load_config(global_config_file)
94
113
  @temporary = {}
114
+
115
+ @key_cache = {}
95
116
  end
96
117
 
97
118
  def [](name)
98
119
  key = key_for(name)
99
- value = configs.values.map {|config| config[key] }.compact.first
120
+
121
+ value = nil
122
+ configs.each do |_, config|
123
+ value = config[key]
124
+ next if value.nil?
125
+ break
126
+ end
100
127
 
101
128
  converted_value(value, name)
102
129
  end
103
130
 
104
131
  def set_command_option(key, value)
105
- if Bundler.feature_flag.forget_cli_options?
132
+ if !is_remembered(key) || Bundler.feature_flag.forget_cli_options?
106
133
  temporary(key => value)
107
134
  value
108
135
  else
@@ -116,7 +143,7 @@ module Bundler
116
143
  end
117
144
 
118
145
  def set_local(key, value)
119
- local_config_file || raise(GemfileNotFound, "Could not locate Gemfile")
146
+ local_config_file = @local_root.join("config")
120
147
 
121
148
  set_key(key, value, @local_config, local_config_file)
122
149
  end
@@ -139,17 +166,22 @@ module Bundler
139
166
  end
140
167
 
141
168
  def all
142
- keys = @temporary.keys | @global_config.keys | @local_config.keys | @env_config.keys
169
+ keys = @temporary.keys.union(@global_config.keys, @local_config.keys, @env_config.keys)
143
170
 
144
- keys.map do |key|
145
- key.sub(/^BUNDLE_/, "").gsub(/___/, "-").gsub(/__/, ".").downcase
146
- end.sort
171
+ keys.map! do |key|
172
+ key = key.delete_prefix("BUNDLE_")
173
+ key.gsub!("___", "-")
174
+ key.gsub!("__", ".")
175
+ key.downcase!
176
+ key
177
+ end.sort!
178
+ keys
147
179
  end
148
180
 
149
181
  def local_overrides
150
182
  repos = {}
151
183
  all.each do |k|
152
- repos[$'] = self[k] if k =~ /^local\./
184
+ repos[k.delete_prefix("local.")] = self[k] if k.start_with?("local.")
153
185
  end
154
186
  repos
155
187
  end
@@ -157,7 +189,7 @@ module Bundler
157
189
  def mirror_for(uri)
158
190
  if uri.is_a?(String)
159
191
  require_relative "vendored_uri"
160
- uri = Bundler::URI(uri)
192
+ uri = Gem::URI(uri)
161
193
  end
162
194
 
163
195
  gem_mirrors.for(uri.to_s).uri
@@ -226,7 +258,9 @@ module Bundler
226
258
  return Path.new(path, system_path)
227
259
  end
228
260
 
229
- Path.new(nil, false)
261
+ path = "vendor/bundle" if self[:deployment]
262
+
263
+ Path.new(path, false)
230
264
  end
231
265
 
232
266
  Path = Struct.new(:explicit_path, :system_path) do
@@ -276,12 +310,6 @@ module Bundler
276
310
  end
277
311
  end
278
312
 
279
- def allow_sudo?
280
- key = key_for(:path)
281
- path_configured = @temporary.key?(key) || @local_config.key?(key)
282
- !path_configured
283
- end
284
-
285
313
  def ignore_config?
286
314
  ENV["BUNDLE_IGNORE_CONFIG"]
287
315
  end
@@ -300,18 +328,18 @@ module Bundler
300
328
  end
301
329
 
302
330
  def key_for(key)
303
- self.class.key_for(key)
331
+ @key_cache[key] ||= self.class.key_for(key)
304
332
  end
305
333
 
306
334
  private
307
335
 
308
336
  def configs
309
- {
310
- :temporary => @temporary,
311
- :local => @local_config,
312
- :env => @env_config,
313
- :global => @global_config,
314
- :default => DEFAULT_CONFIG,
337
+ @configs ||= {
338
+ temporary: @temporary,
339
+ local: @local_config,
340
+ env: @env_config,
341
+ global: @global_config,
342
+ default: DEFAULT_CONFIG,
315
343
  }
316
344
  end
317
345
 
@@ -332,16 +360,20 @@ module Bundler
332
360
  end
333
361
 
334
362
  def is_bool(name)
335
- BOOL_KEYS.include?(name.to_s) || BOOL_KEYS.include?(parent_setting_for(name.to_s))
363
+ name = self.class.key_to_s(name)
364
+ BOOL_KEYS.include?(name) || BOOL_KEYS.include?(parent_setting_for(name))
336
365
  end
337
366
 
338
367
  def is_string(name)
339
- STRING_KEYS.include?(name.to_s) || name.to_s.start_with?("local.") || name.to_s.start_with?("mirror.") || name.to_s.start_with?("build.")
368
+ name = self.class.key_to_s(name)
369
+ STRING_KEYS.include?(name) || name.start_with?("local.") || name.start_with?("mirror.") || name.start_with?("build.")
340
370
  end
341
371
 
342
372
  def to_bool(value)
343
373
  case value
344
- when nil, /\A(false|f|no|n|0|)\z/i, false
374
+ when String
375
+ value.match?(/\A(false|f|no|n|0|)\z/i) ? false : true
376
+ when nil, false
345
377
  false
346
378
  else
347
379
  true
@@ -349,11 +381,15 @@ module Bundler
349
381
  end
350
382
 
351
383
  def is_num(key)
352
- NUMBER_KEYS.include?(key.to_s)
384
+ NUMBER_KEYS.include?(self.class.key_to_s(key))
353
385
  end
354
386
 
355
387
  def is_array(key)
356
- ARRAY_KEYS.include?(key.to_s)
388
+ ARRAY_KEYS.include?(self.class.key_to_s(key))
389
+ end
390
+
391
+ def is_remembered(key)
392
+ REMEMBERED_KEYS.include?(self.class.key_to_s(key))
357
393
  end
358
394
 
359
395
  def is_credential(key)
@@ -366,7 +402,7 @@ module Bundler
366
402
 
367
403
  def to_array(value)
368
404
  return [] unless value
369
- value.split(":").map(&:to_sym)
405
+ value.tr(" ", ":").split(":").map(&:to_sym)
370
406
  end
371
407
 
372
408
  def array_to_s(array)
@@ -376,7 +412,7 @@ module Bundler
376
412
  end
377
413
 
378
414
  def set_key(raw_key, value, hash, file)
379
- raw_key = raw_key.to_s
415
+ raw_key = self.class.key_to_s(raw_key)
380
416
  value = array_to_s(value) if is_array(raw_key)
381
417
 
382
418
  key = key_for(raw_key)
@@ -391,12 +427,13 @@ module Bundler
391
427
  return unless file
392
428
  SharedHelpers.filesystem_access(file) do |p|
393
429
  FileUtils.mkdir_p(p.dirname)
394
- require_relative "yaml_serializer"
395
- p.open("w") {|f| f.write(YAMLSerializer.dump(hash)) }
430
+ p.open("w") {|f| f.write(serializer_class.dump(hash)) }
396
431
  end
397
432
  end
398
433
 
399
434
  def converted_value(value, key)
435
+ key = self.class.key_to_s(key)
436
+
400
437
  if is_array(key)
401
438
  to_array(value)
402
439
  elsif value.nil?
@@ -454,41 +491,57 @@ module Bundler
454
491
  SharedHelpers.filesystem_access(config_file, :read) do |file|
455
492
  valid_file = file.exist? && !file.size.zero?
456
493
  return {} unless valid_file
457
- require_relative "yaml_serializer"
458
- YAMLSerializer.load(file.read).inject({}) do |config, (k, v)|
459
- new_k = k
460
-
461
- if k.include?("-")
462
- Bundler.ui.warn "Your #{file} config includes `#{k}`, which contains the dash character (`-`).\n" \
463
- "This is deprecated, because configuration through `ENV` should be possible, but `ENV` keys cannot include dashes.\n" \
464
- "Please edit #{file} and replace any dashes in configuration keys with a triple underscore (`___`)."
465
-
466
- new_k = k.gsub("-", "___")
494
+ serializer_class.load(file.read).inject({}) do |config, (k, v)|
495
+ k = k.dup
496
+ k << "/" if /https?:/i.match?(k) && !k.end_with?("/", "__#{FALLBACK_TIMEOUT_URI_OPTION.upcase}")
497
+ k.gsub!(".", "__")
498
+
499
+ unless k.start_with?("#")
500
+ if k.include?("-")
501
+ Bundler.ui.warn "Your #{file} config includes `#{k}`, which contains the dash character (`-`).\n" \
502
+ "This is deprecated, because configuration through `ENV` should be possible, but `ENV` keys cannot include dashes.\n" \
503
+ "Please edit #{file} and replace any dashes in configuration keys with a triple underscore (`___`)."
504
+
505
+ # string hash keys are frozen
506
+ k = k.gsub("-", "___")
507
+ end
508
+
509
+ config[k] = v
467
510
  end
468
511
 
469
- config[new_k] = v
470
512
  config
471
513
  end
472
514
  end
473
515
  end
474
516
 
475
- PER_URI_OPTIONS = %w[
476
- fallback_timeout
477
- ].freeze
517
+ def serializer_class
518
+ require "rubygems/yaml_serializer"
519
+ Gem::YAMLSerializer
520
+ rescue LoadError
521
+ # TODO: Remove this when RubyGems 3.4 is EOL
522
+ require_relative "yaml_serializer"
523
+ YAMLSerializer
524
+ end
525
+
526
+ FALLBACK_TIMEOUT_URI_OPTION = "fallback_timeout"
478
527
 
479
528
  NORMALIZE_URI_OPTIONS_PATTERN =
480
529
  /
481
530
  \A
482
531
  (\w+\.)? # optional prefix key
483
532
  (https?.*?) # URI
484
- (\.#{Regexp.union(PER_URI_OPTIONS)})? # optional suffix key
533
+ (\.#{FALLBACK_TIMEOUT_URI_OPTION})? # optional suffix key
485
534
  \z
486
- /ix.freeze
535
+ /ix
487
536
 
488
537
  def self.key_for(key)
489
- key = normalize_uri(key).to_s if key.is_a?(String) && /https?:/ =~ key
490
- key = key.to_s.gsub(".", "__").gsub("-", "___").upcase
491
- "BUNDLE_#{key}"
538
+ key = key_to_s(key)
539
+ key = normalize_uri(key) if key.start_with?("http", "mirror.http")
540
+ key = key.gsub(".", "__")
541
+ key.gsub!("-", "___")
542
+ key.upcase!
543
+
544
+ key.gsub(/\A([ #]*)/, '\1BUNDLE_')
492
545
  end
493
546
 
494
547
  # TODO: duplicates Rubygems#normalize_uri
@@ -500,13 +553,42 @@ module Bundler
500
553
  uri = $2
501
554
  suffix = $3
502
555
  end
503
- uri = "#{uri}/" unless uri.end_with?("/")
556
+ uri = URINormalizer.normalize_suffix(uri)
504
557
  require_relative "vendored_uri"
505
- uri = Bundler::URI(uri)
558
+ uri = Gem::URI(uri)
506
559
  unless uri.absolute?
507
560
  raise ArgumentError, format("Gem sources must be absolute. You provided '%s'.", uri)
508
561
  end
509
562
  "#{prefix}#{uri}#{suffix}"
510
563
  end
564
+
565
+ # This is a hot method, so avoid respond_to? checks on every invocation
566
+ if :read.respond_to?(:name)
567
+ def self.key_to_s(key)
568
+ case key
569
+ when String
570
+ key
571
+ when Symbol
572
+ key.name
573
+ when Gem::URI::HTTP
574
+ key.to_s
575
+ else
576
+ raise ArgumentError, "Invalid key: #{key.inspect}"
577
+ end
578
+ end
579
+ else
580
+ def self.key_to_s(key)
581
+ case key
582
+ when String
583
+ key
584
+ when Symbol
585
+ key.to_s
586
+ when Gem::URI::HTTP
587
+ key.to_s
588
+ else
589
+ raise ArgumentError, "Invalid key: #{key.inspect}"
590
+ end
591
+ end
592
+ end
511
593
  end
512
594
  end