bundler 1.17.3 → 2.6.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (426) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3354 -1258
  3. data/LICENSE.md +18 -19
  4. data/README.md +10 -15
  5. data/bundler.gemspec +15 -33
  6. data/exe/bundle +8 -10
  7. data/exe/bundler +1 -1
  8. data/lib/bundler/.document +1 -0
  9. data/lib/bundler/build_metadata.rb +5 -13
  10. data/lib/bundler/capistrano.rb +5 -5
  11. data/lib/bundler/checksum.rb +254 -0
  12. data/lib/bundler/ci_detector.rb +75 -0
  13. data/lib/bundler/cli/add.rb +29 -15
  14. data/lib/bundler/cli/binstubs.rb +13 -5
  15. data/lib/bundler/cli/cache.rb +24 -17
  16. data/lib/bundler/cli/check.rb +7 -5
  17. data/lib/bundler/cli/clean.rb +1 -1
  18. data/lib/bundler/cli/common.rb +50 -14
  19. data/lib/bundler/cli/config.rb +171 -86
  20. data/lib/bundler/cli/console.rb +3 -6
  21. data/lib/bundler/cli/doctor.rb +29 -12
  22. data/lib/bundler/cli/exec.rb +9 -25
  23. data/lib/bundler/cli/fund.rb +36 -0
  24. data/lib/bundler/cli/gem.rb +268 -53
  25. data/lib/bundler/cli/info.rb +51 -18
  26. data/lib/bundler/cli/init.rb +7 -3
  27. data/lib/bundler/cli/inject.rb +2 -2
  28. data/lib/bundler/cli/install.rb +55 -73
  29. data/lib/bundler/cli/issue.rb +9 -8
  30. data/lib/bundler/cli/list.rb +19 -11
  31. data/lib/bundler/cli/lock.rb +56 -26
  32. data/lib/bundler/cli/open.rb +10 -7
  33. data/lib/bundler/cli/outdated.rb +159 -128
  34. data/lib/bundler/cli/platform.rb +8 -6
  35. data/lib/bundler/cli/plugin.rb +23 -12
  36. data/lib/bundler/cli/pristine.rb +39 -26
  37. data/lib/bundler/cli/remove.rb +1 -2
  38. data/lib/bundler/cli/show.rb +7 -7
  39. data/lib/bundler/cli/update.rb +51 -19
  40. data/lib/bundler/cli/viz.rb +1 -1
  41. data/lib/bundler/cli.rb +399 -390
  42. data/lib/bundler/compact_index_client/cache.rb +55 -77
  43. data/lib/bundler/compact_index_client/cache_file.rb +148 -0
  44. data/lib/bundler/compact_index_client/gem_parser.rb +32 -0
  45. data/lib/bundler/compact_index_client/parser.rb +84 -0
  46. data/lib/bundler/compact_index_client/updater.rb +72 -84
  47. data/lib/bundler/compact_index_client.rb +61 -73
  48. data/lib/bundler/constants.rb +9 -2
  49. data/lib/bundler/current_ruby.rb +20 -21
  50. data/lib/bundler/definition.rb +663 -505
  51. data/lib/bundler/dependency.rb +38 -71
  52. data/lib/bundler/deployment.rb +1 -1
  53. data/lib/bundler/digest.rb +71 -0
  54. data/lib/bundler/dsl.rb +171 -152
  55. data/lib/bundler/endpoint_specification.rb +43 -17
  56. data/lib/bundler/env.rb +11 -18
  57. data/lib/bundler/environment_preserver.rb +17 -8
  58. data/lib/bundler/errors.rb +115 -14
  59. data/lib/bundler/feature_flag.rb +15 -39
  60. data/lib/bundler/fetcher/base.rb +12 -12
  61. data/lib/bundler/fetcher/compact_index.rb +41 -47
  62. data/lib/bundler/fetcher/dependency.rb +4 -8
  63. data/lib/bundler/fetcher/downloader.rb +27 -20
  64. data/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  65. data/lib/bundler/fetcher/index.rb +6 -33
  66. data/lib/bundler/fetcher.rb +109 -90
  67. data/lib/bundler/force_platform.rb +16 -0
  68. data/lib/bundler/friendly_errors.rb +50 -55
  69. data/lib/bundler/gem_helper.rb +81 -46
  70. data/lib/bundler/gem_helpers.rb +78 -29
  71. data/lib/bundler/gem_tasks.rb +1 -1
  72. data/lib/bundler/gem_version_promoter.rb +68 -109
  73. data/lib/bundler/graph.rb +11 -11
  74. data/lib/bundler/index.rb +74 -82
  75. data/lib/bundler/injector.rb +58 -26
  76. data/lib/bundler/inline.rb +59 -35
  77. data/lib/bundler/installer/gem_installer.rb +29 -29
  78. data/lib/bundler/installer/parallel_installer.rb +38 -68
  79. data/lib/bundler/installer/standalone.rb +76 -16
  80. data/lib/bundler/installer.rb +60 -135
  81. data/lib/bundler/lazy_specification.rb +161 -63
  82. data/lib/bundler/lockfile_generator.rb +14 -5
  83. data/lib/bundler/lockfile_parser.rb +150 -109
  84. data/lib/bundler/man/bundle-add.1 +76 -0
  85. data/lib/bundler/man/bundle-add.1.ronn +87 -0
  86. data/{man → lib/bundler/man}/bundle-binstubs.1 +15 -22
  87. data/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +8 -7
  88. data/lib/bundler/man/bundle-cache.1 +68 -0
  89. data/lib/bundler/man/bundle-cache.1.ronn +108 -0
  90. data/{man → lib/bundler/man}/bundle-check.1 +7 -14
  91. data/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +7 -2
  92. data/{man → lib/bundler/man}/bundle-clean.1 +4 -11
  93. data/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +1 -1
  94. data/{man → lib/bundler/man}/bundle-config.1 +80 -260
  95. data/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +104 -98
  96. data/lib/bundler/man/bundle-console.1 +33 -0
  97. data/lib/bundler/man/bundle-console.1.ronn +39 -0
  98. data/{man → lib/bundler/man}/bundle-doctor.1 +5 -19
  99. data/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +1 -1
  100. data/lib/bundler/man/bundle-env.1 +9 -0
  101. data/lib/bundler/man/bundle-env.1.ronn +10 -0
  102. data/{man → lib/bundler/man}/bundle-exec.1 +20 -78
  103. data/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +12 -10
  104. data/lib/bundler/man/bundle-fund.1 +22 -0
  105. data/lib/bundler/man/bundle-fund.1.ronn +25 -0
  106. data/lib/bundler/man/bundle-gem.1 +87 -0
  107. data/lib/bundler/man/bundle-gem.1.ronn +149 -0
  108. data/lib/bundler/man/bundle-help.1 +9 -0
  109. data/lib/bundler/man/bundle-help.1.ronn +12 -0
  110. data/lib/bundler/man/bundle-info.1 +17 -0
  111. data/lib/bundler/man/bundle-info.1.ronn +21 -0
  112. data/{man → lib/bundler/man}/bundle-init.1 +8 -13
  113. data/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +5 -2
  114. data/lib/bundler/man/bundle-inject.1 +31 -0
  115. data/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +12 -2
  116. data/{man → lib/bundler/man}/bundle-install.1 +65 -155
  117. data/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +66 -57
  118. data/lib/bundler/man/bundle-issue.1 +45 -0
  119. data/lib/bundler/man/bundle-issue.1.ronn +37 -0
  120. data/lib/bundler/man/bundle-licenses.1 +9 -0
  121. data/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  122. data/{man → lib/bundler/man}/bundle-list.1 +9 -24
  123. data/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +10 -7
  124. data/{man → lib/bundler/man}/bundle-lock.1 +25 -34
  125. data/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +25 -4
  126. data/lib/bundler/man/bundle-open.1 +32 -0
  127. data/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +10 -1
  128. data/{man → lib/bundler/man}/bundle-outdated.1 +23 -75
  129. data/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +21 -22
  130. data/lib/bundler/man/bundle-platform.1 +49 -0
  131. data/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
  132. data/lib/bundler/man/bundle-plugin.1 +58 -0
  133. data/lib/bundler/man/bundle-plugin.1.ronn +63 -0
  134. data/{man → lib/bundler/man}/bundle-pristine.1 +5 -16
  135. data/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +1 -1
  136. data/{man → lib/bundler/man}/bundle-remove.1 +4 -14
  137. data/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +1 -1
  138. data/{man → lib/bundler/man}/bundle-show.1 +7 -11
  139. data/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +4 -0
  140. data/{man → lib/bundler/man}/bundle-update.1 +35 -148
  141. data/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +21 -12
  142. data/lib/bundler/man/bundle-version.1 +22 -0
  143. data/lib/bundler/man/bundle-version.1.ronn +24 -0
  144. data/{man → lib/bundler/man}/bundle-viz.1 +9 -18
  145. data/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +9 -3
  146. data/{man → lib/bundler/man}/bundle.1 +19 -53
  147. data/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +14 -9
  148. data/{man → lib/bundler/man}/gemfile.5 +139 -356
  149. data/{man → lib/bundler/man}/gemfile.5.ronn +134 -97
  150. data/{man → lib/bundler/man}/index.txt +9 -1
  151. data/lib/bundler/match_metadata.rb +17 -0
  152. data/lib/bundler/match_platform.rb +2 -3
  153. data/lib/bundler/match_remote_metadata.rb +29 -0
  154. data/lib/bundler/materialization.rb +59 -0
  155. data/lib/bundler/mirror.rb +10 -12
  156. data/lib/bundler/plugin/api/source.rb +34 -18
  157. data/lib/bundler/plugin/api.rb +1 -1
  158. data/lib/bundler/plugin/dsl.rb +1 -1
  159. data/lib/bundler/plugin/events.rb +24 -0
  160. data/lib/bundler/plugin/index.rb +44 -9
  161. data/lib/bundler/plugin/installer/git.rb +0 -4
  162. data/lib/bundler/plugin/installer/path.rb +18 -0
  163. data/lib/bundler/plugin/installer/rubygems.rb +1 -9
  164. data/lib/bundler/plugin/installer.rb +63 -27
  165. data/lib/bundler/plugin/source_list.rb +5 -1
  166. data/lib/bundler/plugin.rb +131 -45
  167. data/lib/bundler/process_lock.rb +10 -14
  168. data/lib/bundler/remote_specification.rb +22 -10
  169. data/lib/bundler/resolver/base.rb +118 -0
  170. data/lib/bundler/resolver/candidate.rb +82 -0
  171. data/lib/bundler/resolver/incompatibility.rb +15 -0
  172. data/lib/bundler/resolver/package.rb +90 -0
  173. data/lib/bundler/resolver/root.rb +25 -0
  174. data/lib/bundler/resolver/spec_group.rb +60 -68
  175. data/lib/bundler/resolver.rb +454 -303
  176. data/lib/bundler/retry.rb +6 -6
  177. data/lib/bundler/ruby_dsl.rb +51 -7
  178. data/lib/bundler/ruby_version.rb +23 -38
  179. data/lib/bundler/rubygems_ext.rb +357 -98
  180. data/lib/bundler/rubygems_gem_installer.rb +131 -65
  181. data/lib/bundler/rubygems_integration.rb +149 -591
  182. data/lib/bundler/runtime.rb +51 -51
  183. data/lib/bundler/safe_marshal.rb +31 -0
  184. data/lib/bundler/self_manager.rb +206 -0
  185. data/lib/bundler/settings.rb +271 -135
  186. data/lib/bundler/setup.rb +23 -12
  187. data/lib/bundler/shared_helpers.rb +127 -117
  188. data/lib/bundler/similarity_detector.rb +3 -3
  189. data/lib/bundler/source/git/git_proxy.rb +326 -127
  190. data/lib/bundler/source/git.rb +207 -88
  191. data/lib/bundler/source/metadata.rb +19 -18
  192. data/lib/bundler/source/path/installer.rb +11 -32
  193. data/lib/bundler/source/path.rb +39 -38
  194. data/lib/bundler/source/rubygems/remote.rb +3 -4
  195. data/lib/bundler/source/rubygems.rb +223 -255
  196. data/lib/bundler/source/rubygems_aggregate.rb +68 -0
  197. data/lib/bundler/source.rb +33 -11
  198. data/lib/bundler/source_list.rb +131 -66
  199. data/lib/bundler/source_map.rb +71 -0
  200. data/lib/bundler/spec_set.rb +239 -94
  201. data/lib/bundler/stub_specification.rb +77 -39
  202. data/lib/bundler/templates/Executable +3 -5
  203. data/lib/bundler/templates/Executable.bundler +23 -19
  204. data/lib/bundler/templates/Executable.standalone +4 -4
  205. data/lib/bundler/templates/Gemfile +0 -2
  206. data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  207. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +104 -46
  208. data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  209. data/lib/bundler/templates/newgem/Gemfile.tt +19 -2
  210. data/lib/bundler/templates/newgem/README.md.tt +18 -16
  211. data/lib/bundler/templates/newgem/Rakefile.tt +44 -6
  212. data/lib/bundler/templates/newgem/bin/console.tt +1 -4
  213. data/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
  214. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  215. data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  216. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  217. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  218. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  219. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  220. data/lib/bundler/templates/newgem/gitignore.tt +3 -0
  221. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  222. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  223. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  224. data/lib/bundler/templates/newgem/newgem.gemspec.tt +37 -40
  225. data/lib/bundler/templates/newgem/rubocop.yml.tt +8 -0
  226. data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  227. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  228. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  229. data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  230. data/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  231. data/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
  232. data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  233. data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  234. data/lib/bundler/ui/rg_proxy.rb +2 -2
  235. data/lib/bundler/ui/shell.rb +64 -23
  236. data/lib/bundler/ui/silent.rb +33 -6
  237. data/lib/bundler/ui.rb +3 -3
  238. data/lib/bundler/uri_credentials_filter.rb +11 -5
  239. data/lib/bundler/uri_normalizer.rb +23 -0
  240. data/lib/bundler/vendor/.document +1 -0
  241. data/lib/bundler/vendor/connection_pool/.document +1 -0
  242. data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  243. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  244. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  245. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  246. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +175 -0
  247. data/lib/bundler/vendor/fileutils/.document +1 -0
  248. data/lib/bundler/vendor/fileutils/COPYING +56 -0
  249. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1490 -432
  250. data/lib/bundler/vendor/net-http-persistent/.document +1 -0
  251. data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  252. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
  253. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
  254. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  255. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +362 -484
  256. data/lib/bundler/vendor/pub_grub/.document +1 -0
  257. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  258. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  259. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  260. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  261. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  262. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  263. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  264. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  265. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  266. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
  267. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  268. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  269. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  270. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  271. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  272. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  273. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  274. data/lib/bundler/vendor/securerandom/.document +1 -0
  275. data/lib/bundler/vendor/securerandom/COPYING +56 -0
  276. data/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  277. data/lib/bundler/vendor/thor/.document +1 -0
  278. data/lib/bundler/vendor/thor/LICENSE.md +20 -0
  279. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +4 -3
  280. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
  281. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +8 -18
  282. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
  283. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +27 -20
  284. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +34 -13
  285. data/lib/bundler/vendor/thor/lib/thor/actions.rb +47 -28
  286. data/lib/bundler/vendor/thor/lib/thor/base.rb +200 -54
  287. data/lib/bundler/vendor/thor/lib/thor/command.rb +34 -18
  288. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +10 -0
  289. data/lib/bundler/vendor/thor/lib/thor/error.rb +74 -0
  290. data/lib/bundler/vendor/thor/lib/thor/group.rb +15 -4
  291. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +2 -1
  292. data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  293. data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  294. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  295. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  296. data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +17 -1
  297. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +35 -15
  298. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +45 -13
  299. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +86 -13
  300. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  301. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +3 -2
  302. data/lib/bundler/vendor/thor/lib/thor/runner.rb +51 -40
  303. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +99 -148
  304. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +6 -43
  305. data/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  306. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +4 -49
  307. data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +118 -0
  308. data/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  309. data/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  310. data/lib/bundler/vendor/thor/lib/thor/shell.rb +6 -6
  311. data/lib/bundler/vendor/thor/lib/thor/util.rb +26 -9
  312. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  313. data/lib/bundler/vendor/thor/lib/thor.rb +182 -17
  314. data/lib/bundler/vendor/tsort/.document +1 -0
  315. data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  316. data/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
  317. data/lib/bundler/vendor/uri/.document +1 -0
  318. data/lib/bundler/vendor/uri/COPYING +56 -0
  319. data/lib/bundler/vendor/uri/lib/uri/common.rb +876 -0
  320. data/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  321. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  322. data/lib/bundler/vendor/uri/lib/uri/generic.rb +1578 -0
  323. data/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  324. data/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  325. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  326. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  327. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  328. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  329. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
  330. data/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  331. data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  332. data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  333. data/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  334. data/lib/bundler/vendored_fileutils.rb +1 -6
  335. data/lib/bundler/vendored_net_http.rb +23 -0
  336. data/lib/bundler/vendored_persistent.rb +1 -42
  337. data/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  338. data/lib/bundler/vendored_securerandom.rb +12 -0
  339. data/lib/bundler/vendored_thor.rb +2 -2
  340. data/lib/bundler/vendored_timeout.rb +12 -0
  341. data/lib/bundler/vendored_tsort.rb +4 -0
  342. data/lib/bundler/vendored_uri.rb +21 -0
  343. data/lib/bundler/version.rb +5 -20
  344. data/lib/bundler/vlad.rb +3 -3
  345. data/lib/bundler/worker.rb +26 -15
  346. data/lib/bundler/yaml_serializer.rb +21 -13
  347. data/lib/bundler.rb +364 -230
  348. metadata +186 -218
  349. data/exe/bundle_ruby +0 -60
  350. data/lib/bundler/cli/package.rb +0 -49
  351. data/lib/bundler/compatibility_guard.rb +0 -14
  352. data/lib/bundler/dep_proxy.rb +0 -48
  353. data/lib/bundler/gem_remote_fetcher.rb +0 -43
  354. data/lib/bundler/gemdeps.rb +0 -29
  355. data/lib/bundler/psyched_yaml.rb +0 -37
  356. data/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  357. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  358. data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  359. data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  360. data/lib/bundler/templates/gems.rb +0 -8
  361. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -3
  362. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  363. data/lib/bundler/templates/newgem/travis.yml.tt +0 -7
  364. data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  365. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  366. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -81
  367. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  368. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  369. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  370. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  371. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  372. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  373. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  374. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  375. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -136
  376. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -223
  377. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  378. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  379. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -101
  380. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  381. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -837
  382. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  383. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  384. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -12
  385. data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  386. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  387. data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  388. data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  389. data/lib/bundler/version_ranges.rb +0 -76
  390. data/man/bundle-add.1 +0 -58
  391. data/man/bundle-add.1.txt +0 -52
  392. data/man/bundle-add.ronn +0 -40
  393. data/man/bundle-binstubs.1.txt +0 -48
  394. data/man/bundle-check.1.txt +0 -33
  395. data/man/bundle-clean.1.txt +0 -26
  396. data/man/bundle-config.1.txt +0 -529
  397. data/man/bundle-doctor.1.txt +0 -44
  398. data/man/bundle-exec.1.txt +0 -178
  399. data/man/bundle-gem.1 +0 -80
  400. data/man/bundle-gem.1.txt +0 -91
  401. data/man/bundle-gem.ronn +0 -78
  402. data/man/bundle-info.1 +0 -20
  403. data/man/bundle-info.1.txt +0 -21
  404. data/man/bundle-info.ronn +0 -17
  405. data/man/bundle-init.1.txt +0 -34
  406. data/man/bundle-inject.1 +0 -33
  407. data/man/bundle-inject.1.txt +0 -32
  408. data/man/bundle-install.1.txt +0 -396
  409. data/man/bundle-list.1.txt +0 -43
  410. data/man/bundle-lock.1.txt +0 -93
  411. data/man/bundle-open.1 +0 -32
  412. data/man/bundle-open.1.txt +0 -29
  413. data/man/bundle-outdated.1.txt +0 -131
  414. data/man/bundle-package.1 +0 -55
  415. data/man/bundle-package.1.txt +0 -79
  416. data/man/bundle-package.ronn +0 -72
  417. data/man/bundle-platform.1 +0 -61
  418. data/man/bundle-platform.1.txt +0 -57
  419. data/man/bundle-pristine.1.txt +0 -44
  420. data/man/bundle-remove.1.txt +0 -34
  421. data/man/bundle-show.1.txt +0 -27
  422. data/man/bundle-update.1.txt +0 -391
  423. data/man/bundle-viz.1.txt +0 -39
  424. data/man/bundle.1.txt +0 -116
  425. data/man/gemfile.5.txt +0 -653
  426. /data/lib/bundler/{ssl_certs → man}/.document +0 -0
@@ -1,47 +1,37 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "monitor"
4
- require "rubygems"
5
- require "rubygems/config_file"
3
+ require "rubygems" unless defined?(Gem)
6
4
 
7
5
  module Bundler
8
6
  class RubygemsIntegration
9
- if defined?(Gem::Ext::Builder::CHDIR_MONITOR)
10
- EXT_LOCK = Gem::Ext::Builder::CHDIR_MONITOR
11
- else
12
- EXT_LOCK = Monitor.new
13
- end
7
+ require "monitor"
14
8
 
15
- def self.version
16
- @version ||= Gem::Version.new(Gem::VERSION)
17
- end
18
-
19
- def self.provides?(req_str)
20
- Gem::Requirement.new(req_str).satisfied_by?(version)
21
- end
9
+ EXT_LOCK = Monitor.new
22
10
 
23
11
  def initialize
24
12
  @replaced_methods = {}
25
13
  end
26
14
 
27
15
  def version
28
- self.class.version
16
+ @version ||= Gem.rubygems_version
29
17
  end
30
18
 
31
19
  def provides?(req_str)
32
- self.class.provides?(req_str)
20
+ Gem::Requirement.new(req_str).satisfied_by?(version)
33
21
  end
34
22
 
35
23
  def build_args
24
+ require "rubygems/command"
36
25
  Gem::Command.build_args
37
26
  end
38
27
 
39
28
  def build_args=(args)
29
+ require "rubygems/command"
40
30
  Gem::Command.build_args = args
41
31
  end
42
32
 
43
- def load_path_insert_index
44
- Gem.load_path_insert_index
33
+ def set_target_rbconfig(path)
34
+ Gem.set_target_rbconfig(path)
45
35
  end
46
36
 
47
37
  def loaded_specs(name)
@@ -58,7 +48,7 @@ module Bundler
58
48
  end
59
49
 
60
50
  def validate(spec)
61
- Bundler.ui.silence { spec.validate(false) }
51
+ Bundler.ui.silence { spec.validate_for_resolution }
62
52
  rescue Gem::InvalidSpecificationException => e
63
53
  error_message = "The gemspec at #{spec.loaded_from} is not valid. Please fix this gemspec.\n" \
64
54
  "The validation error was '#{e.message}'\n"
@@ -67,37 +57,6 @@ module Bundler
67
57
  nil
68
58
  end
69
59
 
70
- def set_installed_by_version(spec, installed_by_version = Gem::VERSION)
71
- return unless spec.respond_to?(:installed_by_version=)
72
- spec.installed_by_version = Gem::Version.create(installed_by_version)
73
- end
74
-
75
- def spec_missing_extensions?(spec, default = true)
76
- return spec.missing_extensions? if spec.respond_to?(:missing_extensions?)
77
-
78
- return false if spec_default_gem?(spec)
79
- return false if spec.extensions.empty?
80
-
81
- default
82
- end
83
-
84
- def spec_default_gem?(spec)
85
- spec.respond_to?(:default_gem?) && spec.default_gem?
86
- end
87
-
88
- def spec_matches_for_glob(spec, glob)
89
- return spec.matches_for_glob(glob) if spec.respond_to?(:matches_for_glob)
90
-
91
- spec.load_paths.map do |lp|
92
- Dir["#{lp}/#{glob}#{suffix_pattern}"]
93
- end.flatten(1)
94
- end
95
-
96
- def spec_extension_dir(spec)
97
- return unless spec.respond_to?(:extension_dir)
98
- spec.extension_dir
99
- end
100
-
101
60
  def stub_set_spec(stub, spec)
102
61
  stub.instance_variable_set(:@spec, spec)
103
62
  end
@@ -106,23 +65,6 @@ module Bundler
106
65
  obj.to_s
107
66
  end
108
67
 
109
- def platforms
110
- return [Gem::Platform::RUBY] if Bundler.settings[:force_ruby_platform]
111
- Gem.platforms
112
- end
113
-
114
- def configuration
115
- require "bundler/psyched_yaml"
116
- Gem.configuration
117
- rescue Gem::SystemExitException, LoadError => e
118
- Bundler.ui.error "#{e.class}: #{e.message}"
119
- Bundler.ui.trace e
120
- raise
121
- rescue YamlLibrarySyntaxError => e
122
- raise YamlSyntaxError.new(e, "Your RubyGems configuration, which is " \
123
- "usually located in ~/.gemrc, contains invalid YAML syntax.")
124
- end
125
-
126
68
  def ruby_engine
127
69
  Gem.ruby_engine
128
70
  end
@@ -132,24 +74,7 @@ module Bundler
132
74
  end
133
75
 
134
76
  def inflate(obj)
135
- if defined?(Gem::Util)
136
- Gem::Util.inflate(obj)
137
- else
138
- Gem.inflate(obj)
139
- end
140
- end
141
-
142
- def sources=(val)
143
- # Gem.configuration creates a new Gem::ConfigFile, which by default will read ~/.gemrc
144
- # If that file exists, its settings (including sources) will overwrite the values we
145
- # are about to set here. In order to avoid that, we force memoizing the config file now.
146
- configuration
147
-
148
- Gem.sources = val
149
- end
150
-
151
- def sources
152
- Gem.sources
77
+ Gem::Util.inflate(obj)
153
78
  end
154
79
 
155
80
  def gem_dir
@@ -187,7 +112,7 @@ module Bundler
187
112
  def spec_cache_dirs
188
113
  @spec_cache_dirs ||= begin
189
114
  dirs = gem_path.map {|dir| File.join(dir, "specifications") }
190
- dirs << Gem.spec_cache_dir if Gem.respond_to?(:spec_cache_dir) # Not in RubyGems 2.0.3 or earlier
115
+ dirs << Gem.spec_cache_dir
191
116
  dirs.uniq.select {|dir| File.directory? dir }
192
117
  end
193
118
  end
@@ -196,14 +121,6 @@ module Bundler
196
121
  Gem::MARSHAL_SPEC_DIR
197
122
  end
198
123
 
199
- def config_map
200
- Gem::ConfigMap
201
- end
202
-
203
- def repository_subdirectories
204
- %w[cache doc gems specifications]
205
- end
206
-
207
124
  def clear_paths
208
125
  Gem.clear_paths
209
126
  end
@@ -212,34 +129,9 @@ module Bundler
212
129
  Gem.bin_path(gem, bin, ver)
213
130
  end
214
131
 
215
- def path_separator
216
- File::PATH_SEPARATOR
217
- end
218
-
219
- def preserve_paths
220
- # this is a no-op outside of RubyGems 1.8
221
- yield
222
- end
223
-
224
132
  def loaded_gem_paths
225
- # RubyGems 2.2+ can put binary extension into dedicated folders,
226
- # therefore use RubyGems facilities to obtain their load paths.
227
- if Gem::Specification.method_defined? :full_require_paths
228
- loaded_gem_paths = Gem.loaded_specs.map {|_, s| s.full_require_paths }
229
- loaded_gem_paths.flatten
230
- else
231
- $LOAD_PATH.select do |p|
232
- Bundler.rubygems.gem_path.any? {|gp| p =~ /^#{Regexp.escape(gp)}/ }
233
- end
234
- end
235
- end
236
-
237
- def load_plugins
238
- Gem.load_plugins if Gem.respond_to?(:load_plugins)
239
- end
240
-
241
- def load_plugin_files(files)
242
- Gem.load_plugin_files(files) if Gem.respond_to?(:load_plugin_files)
133
+ loaded_gem_paths = Gem.loaded_specs.map {|_, s| s.full_require_paths }
134
+ loaded_gem_paths.flatten
243
135
  end
244
136
 
245
137
  def ui=(obj)
@@ -250,92 +142,15 @@ module Bundler
250
142
  EXT_LOCK
251
143
  end
252
144
 
253
- def fetch_specs(all, pre, &blk)
254
- require "rubygems/spec_fetcher"
255
- specs = Gem::SpecFetcher.new.list(all, pre)
256
- specs.each { yield } if block_given?
257
- specs
258
- end
259
-
260
- def fetch_prerelease_specs
261
- fetch_specs(false, true)
262
- rescue Gem::RemoteFetcher::FetchError
263
- {} # if we can't download them, there aren't any
264
- end
265
-
266
- # TODO: This is for older versions of RubyGems... should we support the
267
- # X-Gemfile-Source header on these old versions?
268
- # Maybe the newer implementation will work on older RubyGems?
269
- # It seems difficult to keep this implementation and still send the header.
270
- def fetch_all_remote_specs(remote)
271
- old_sources = Bundler.rubygems.sources
272
- Bundler.rubygems.sources = [remote.uri.to_s]
273
- # Fetch all specs, minus prerelease specs
274
- spec_list = fetch_specs(true, false)
275
- # Then fetch the prerelease specs
276
- fetch_prerelease_specs.each {|k, v| spec_list[k].concat(v) }
277
-
278
- spec_list.values.first
279
- ensure
280
- Bundler.rubygems.sources = old_sources
281
- end
282
-
283
- def with_build_args(args)
284
- ext_lock.synchronize do
285
- old_args = build_args
286
- begin
287
- self.build_args = args
288
- yield
289
- ensure
290
- self.build_args = old_args
291
- end
292
- end
293
- end
294
-
295
- def install_with_build_args(args)
296
- with_build_args(args) { yield }
297
- end
298
-
299
- def gem_from_path(path, policy = nil)
300
- require "rubygems/format"
301
- Gem::Format.from_file_by_path(path, policy)
302
- end
303
-
304
- def spec_from_gem(path, policy = nil)
305
- require "rubygems/security"
306
- require "bundler/psyched_yaml"
307
- gem_from_path(path, security_policies[policy]).spec
308
- rescue Gem::Package::FormatError
309
- raise GemspecError, "Could not read gem at #{path}. It may be corrupted."
310
- rescue Exception, Gem::Exception, Gem::Security::Exception => e
311
- if e.is_a?(Gem::Security::Exception) ||
312
- e.message =~ /unknown trust policy|unsigned gem/i ||
313
- e.message =~ /couldn't verify (meta)?data signature/i
314
- raise SecurityError,
315
- "The gem #{File.basename(path, ".gem")} can't be installed because " \
316
- "the security policy didn't allow it, with the message: #{e.message}"
317
- else
318
- raise e
319
- end
320
- end
321
-
322
- def build(spec, skip_validation = false)
323
- require "rubygems/builder"
324
- Gem::Builder.new(spec).build
145
+ def spec_from_gem(path)
146
+ require "rubygems/package"
147
+ Gem::Package.new(path).spec
325
148
  end
326
149
 
327
150
  def build_gem(gem_dir, spec)
328
151
  build(spec)
329
152
  end
330
153
 
331
- def download_gem(spec, uri, path)
332
- uri = Bundler.settings.mirror_for(uri)
333
- fetcher = Gem::RemoteFetcher.new(configuration[:http_proxy])
334
- Bundler::Retry.new("download gem from #{uri}").attempts do
335
- fetcher.download(spec, uri, path)
336
- end
337
- end
338
-
339
154
  def security_policy_keys
340
155
  %w[High Medium Low AlmostNo No].map {|level| "#{level}Security" }
341
156
  end
@@ -351,32 +166,23 @@ module Bundler
351
166
 
352
167
  def reverse_rubygems_kernel_mixin
353
168
  # Disable rubygems' gem activation system
354
- kernel = (class << ::Kernel; self; end)
355
- [kernel, ::Kernel].each do |k|
356
- if k.private_method_defined?(:gem_original_require)
357
- redefine_method(k, :require, k.instance_method(:gem_original_require))
169
+ if Gem.respond_to?(:discover_gems_on_require=)
170
+ Gem.discover_gems_on_require = false
171
+ else
172
+ [::Kernel.singleton_class, ::Kernel].each do |k|
173
+ if k.private_method_defined?(:gem_original_require)
174
+ redefine_method(k, :require, k.instance_method(:gem_original_require))
175
+ end
358
176
  end
359
177
  end
360
178
  end
361
179
 
362
- def binstubs_call_gem?
363
- true
364
- end
365
-
366
- def stubs_provide_full_functionality?
367
- false
368
- end
369
-
370
180
  def replace_gem(specs, specs_by_name)
371
- reverse_rubygems_kernel_mixin
372
-
373
181
  executables = nil
374
182
 
375
- kernel = (class << ::Kernel; self; end)
376
- [kernel, ::Kernel].each do |kernel_class|
183
+ [::Kernel.singleton_class, ::Kernel].each do |kernel_class|
377
184
  redefine_method(kernel_class, :gem) do |dep, *reqs|
378
- executables ||= specs.map(&:executables).flatten if ::Bundler.rubygems.binstubs_call_gem?
379
- if executables && executables.include?(File.basename(caller.first.split(":").first))
185
+ if executables&.include?(File.basename(caller_locations(1, 1).first.path))
380
186
  break
381
187
  end
382
188
 
@@ -391,8 +197,13 @@ module Bundler
391
197
  end
392
198
 
393
199
  message = if spec.nil?
200
+ target_file = begin
201
+ Bundler.default_gemfile.basename
202
+ rescue GemfileNotFound
203
+ "inline Gemfile"
204
+ end
394
205
  "#{dep.name} is not part of the bundle." \
395
- " Add it to your #{Bundler.default_gemfile.basename}."
206
+ " Add it to your #{target_file}."
396
207
  else
397
208
  "can't activate #{dep}, already activated #{spec.full_name}. " \
398
209
  "Make sure all dependencies are added to Gemfile."
@@ -400,185 +211,100 @@ module Bundler
400
211
 
401
212
  e = Gem::LoadError.new(message)
402
213
  e.name = dep.name
403
- if e.respond_to?(:requirement=)
404
- e.requirement = dep.requirement
405
- elsif e.respond_to?(:version_requirement=)
406
- e.version_requirement = dep.requirement
407
- end
214
+ e.requirement = dep.requirement
408
215
  raise e
409
216
  end
410
217
 
411
- # backwards compatibility shim, see https://github.com/bundler/bundler/issues/5102
218
+ # backwards compatibility shim, see https://github.com/rubygems/bundler/issues/5102
412
219
  kernel_class.send(:public, :gem) if Bundler.feature_flag.setup_makes_kernel_gem_public?
413
220
  end
414
221
  end
415
222
 
416
- def stub_source_index(specs)
417
- Gem::SourceIndex.send(:alias_method, :old_initialize, :initialize)
418
- redefine_method(Gem::SourceIndex, :initialize) do |*args|
419
- @gems = {}
420
- # You're looking at this thinking: Oh! This is how I make those
421
- # rubygems deprecations go away!
422
- #
423
- # You'd be correct BUT using of this method in production code
424
- # must be approved by the rubygems team itself!
425
- #
426
- # This is your warning. If you use this and don't have approval
427
- # we can't protect you.
428
- #
429
- Deprecate.skip_during do
430
- self.spec_dirs = *args
431
- add_specs(*specs)
432
- end
433
- end
434
- end
435
-
436
- # Used to make bin stubs that are not created by bundler work
437
- # under bundler. The new Gem.bin_path only considers gems in
438
- # +specs+
439
- def replace_bin_path(specs, specs_by_name)
223
+ # Used to give better error messages when activating specs outside of the current bundle
224
+ def replace_bin_path(specs_by_name)
440
225
  gem_class = (class << Gem; self; end)
441
226
 
442
227
  redefine_method(gem_class, :find_spec_for_exe) do |gem_name, *args|
443
228
  exec_name = args.first
229
+ raise ArgumentError, "you must supply exec_name" unless exec_name
444
230
 
445
231
  spec_with_name = specs_by_name[gem_name]
446
- spec = if exec_name
447
- if spec_with_name && spec_with_name.executables.include?(exec_name)
448
- spec_with_name
449
- else
450
- specs.find {|s| s.executables.include?(exec_name) }
451
- end
452
- else
453
- spec_with_name
454
- end
232
+ matching_specs_by_exec_name = specs_by_name.values.select {|s| s.executables.include?(exec_name) }
233
+ spec = matching_specs_by_exec_name.delete(spec_with_name)
455
234
 
456
- unless spec
235
+ unless spec || !matching_specs_by_exec_name.empty?
457
236
  message = "can't find executable #{exec_name} for gem #{gem_name}"
458
- if !exec_name || spec_with_name.nil?
237
+ if spec_with_name.nil?
459
238
  message += ". #{gem_name} is not currently included in the bundle, " \
460
239
  "perhaps you meant to add it to your #{Bundler.default_gemfile.basename}?"
461
240
  end
462
241
  raise Gem::Exception, message
463
242
  end
464
243
 
465
- raise Gem::Exception, "no default executable for #{spec.full_name}" unless exec_name ||= spec.default_executable
466
-
467
- unless spec.name == gem_name
468
- Bundler::SharedHelpers.major_deprecation 2,
244
+ unless spec
245
+ spec = matching_specs_by_exec_name.shift
246
+ warn \
469
247
  "Bundler is using a binstub that was created for a different gem (#{spec.name}).\n" \
470
248
  "You should run `bundle binstub #{gem_name}` " \
471
249
  "to work around a system/bundle conflict."
472
250
  end
473
- spec
474
- end
475
-
476
- redefine_method(gem_class, :activate_bin_path) do |name, *args|
477
- exec_name = args.first
478
- return ENV["BUNDLE_BIN_PATH"] if exec_name == "bundle"
479
-
480
- # Copy of Rubygems activate_bin_path impl
481
- requirement = args.last
482
- spec = find_spec_for_exe name, exec_name, [requirement]
483
251
 
484
- gem_bin = File.join(spec.full_gem_path, spec.bindir, exec_name)
485
- gem_from_path_bin = File.join(File.dirname(spec.loaded_from), spec.bindir, exec_name)
486
- File.exist?(gem_bin) ? gem_bin : gem_from_path_bin
487
- end
488
-
489
- redefine_method(gem_class, :bin_path) do |name, *args|
490
- exec_name = args.first
491
- return ENV["BUNDLE_BIN_PATH"] if exec_name == "bundle"
492
-
493
- spec = find_spec_for_exe(name, *args)
494
- exec_name ||= spec.default_executable
252
+ unless matching_specs_by_exec_name.empty?
253
+ conflicting_names = matching_specs_by_exec_name.map(&:name).join(", ")
254
+ warn \
255
+ "The `#{exec_name}` executable in the `#{spec.name}` gem is being loaded, but it's also present in other gems (#{conflicting_names}).\n" \
256
+ "If you meant to run the executable for another gem, make sure you use a project specific binstub (`bundle binstub <gem_name>`).\n" \
257
+ "If you plan to use multiple conflicting executables, generate binstubs for them and disambiguate their names."
258
+ end
495
259
 
496
- gem_bin = File.join(spec.full_gem_path, spec.bindir, exec_name)
497
- gem_from_path_bin = File.join(File.dirname(spec.loaded_from), spec.bindir, exec_name)
498
- File.exist?(gem_bin) ? gem_bin : gem_from_path_bin
260
+ spec
499
261
  end
500
262
  end
501
263
 
502
- # Because Bundler has a static view of what specs are available,
503
- # we don't #refresh, so stub it out.
504
- def replace_refresh
505
- gem_class = (class << Gem; self; end)
506
- redefine_method(gem_class, :refresh) {}
507
- end
508
-
509
264
  # Replace or hook into RubyGems to provide a bundlerized view
510
265
  # of the world.
511
266
  def replace_entrypoints(specs)
512
- specs_by_name = specs.reduce({}) do |h, s|
513
- h[s.name] = s
514
- h
515
- end
267
+ specs_by_name = add_default_gems_to(specs)
516
268
 
269
+ reverse_rubygems_kernel_mixin
270
+ begin
271
+ # bundled_gems only provide with Ruby 3.3 or later
272
+ require "bundled_gems"
273
+ rescue LoadError
274
+ else
275
+ Gem::BUNDLED_GEMS.replace_require(specs) if Gem::BUNDLED_GEMS.respond_to?(:replace_require)
276
+ end
517
277
  replace_gem(specs, specs_by_name)
518
- stub_rubygems(specs)
519
- replace_bin_path(specs, specs_by_name)
520
- replace_refresh
278
+ stub_rubygems(specs_by_name.values)
279
+ replace_bin_path(specs_by_name)
521
280
 
522
281
  Gem.clear_paths
523
282
  end
524
283
 
525
- # This backports the correct segment generation code from RubyGems 1.4+
526
- # by monkeypatching it into the method in RubyGems 1.3.6 and 1.3.7.
527
- def backport_segment_generation
528
- redefine_method(Gem::Version, :segments) do
529
- @segments ||= @version.scan(/[0-9]+|[a-z]+/i).map do |s|
530
- /^\d+$/ =~ s ? s.to_i : s
531
- end
532
- end
533
- end
534
-
535
- # This backport fixes the marshaling of @segments.
536
- def backport_yaml_initialize
537
- redefine_method(Gem::Version, :yaml_initialize) do |_, map|
538
- @version = map["version"]
539
- @segments = nil
540
- @hash = nil
541
- end
542
- end
543
-
544
- # This backports base_dir which replaces installation path
545
- # RubyGems 1.8+
546
- def backport_base_dir
547
- redefine_method(Gem::Specification, :base_dir) do
548
- return Gem.dir unless loaded_from
549
- File.dirname File.dirname loaded_from
284
+ # Add default gems not already present in specs, and return them as a hash.
285
+ def add_default_gems_to(specs)
286
+ specs_by_name = specs.reduce({}) do |h, s|
287
+ h[s.name] = s
288
+ h
550
289
  end
551
- end
552
290
 
553
- def backport_cache_file
554
- redefine_method(Gem::Specification, :cache_dir) do
555
- @cache_dir ||= File.join base_dir, "cache"
556
- end
291
+ Bundler.rubygems.default_stubs.each do |stub|
292
+ default_spec = stub.to_spec
293
+ default_spec_name = default_spec.name
294
+ next if specs_by_name.key?(default_spec_name)
557
295
 
558
- redefine_method(Gem::Specification, :cache_file) do
559
- @cache_file ||= File.join cache_dir, "#{full_name}.gem"
296
+ specs << default_spec
297
+ specs_by_name[default_spec_name] = default_spec
560
298
  end
561
- end
562
299
 
563
- def backport_spec_file
564
- redefine_method(Gem::Specification, :spec_dir) do
565
- @spec_dir ||= File.join base_dir, "specifications"
566
- end
567
-
568
- redefine_method(Gem::Specification, :spec_file) do
569
- @spec_file ||= File.join spec_dir, "#{full_name}.gemspec"
570
- end
300
+ specs_by_name
571
301
  end
572
302
 
573
303
  def undo_replacements
574
304
  @replaced_methods.each do |(sym, klass), method|
575
305
  redefine_method(klass, sym, method)
576
306
  end
577
- if Binding.public_method_defined?(:source_location)
578
- post_reset_hooks.reject! {|proc| proc.binding.source_location[0] == __FILE__ }
579
- else
580
- post_reset_hooks.reject! {|proc| proc.binding.eval("__FILE__") == __FILE__ }
581
- end
307
+ post_reset_hooks.reject! {|proc| proc.binding.source_location[0] == __FILE__ }
582
308
  @replaced_methods.clear
583
309
  end
584
310
 
@@ -613,286 +339,118 @@ module Bundler
613
339
  end
614
340
  end
615
341
 
616
- # RubyGems 1.4 through 1.6
617
- class Legacy < RubygemsIntegration
618
- def initialize
619
- super
620
- backport_base_dir
621
- backport_cache_file
622
- backport_spec_file
623
- backport_yaml_initialize
624
- end
342
+ def stub_rubygems(specs)
343
+ Gem::Specification.all = specs
625
344
 
626
- def stub_rubygems(specs)
627
- # RubyGems versions lower than 1.7 use SourceIndex#from_gems_in
628
- source_index_class = (class << Gem::SourceIndex; self; end)
629
- redefine_method(source_index_class, :from_gems_in) do |*args|
630
- Gem::SourceIndex.new.tap do |source_index|
631
- source_index.spec_dirs = *args
632
- source_index.add_specs(*specs)
633
- end
634
- end
635
- end
636
-
637
- def all_specs
638
- Gem.source_index.gems.values
639
- end
640
-
641
- def find_name(name)
642
- Gem.source_index.find_name(name)
643
- end
644
-
645
- def validate(spec)
646
- # These versions of RubyGems always validate in "packaging" mode,
647
- # which is too strict for the kinds of checks we care about. As a
648
- # result, validation is disabled on versions of RubyGems below 1.7.
345
+ Gem.post_reset do
346
+ Gem::Specification.all = specs
649
347
  end
650
348
 
651
- def post_reset_hooks
349
+ redefine_method((class << Gem; self; end), :finish_resolve) do |*|
652
350
  []
653
351
  end
654
-
655
- def reset
656
- end
657
352
  end
658
353
 
659
- # RubyGems versions 1.3.6 and 1.3.7
660
- class Ancient < Legacy
661
- def initialize
662
- super
663
- backport_segment_generation
664
- end
354
+ def plain_specs
355
+ Gem::Specification._all
665
356
  end
666
357
 
667
- # RubyGems 1.7
668
- class Transitional < Legacy
669
- def stub_rubygems(specs)
670
- stub_source_index(specs)
671
- end
672
-
673
- def validate(spec)
674
- # Missing summary is downgraded to a warning in later versions,
675
- # so we set it to an empty string to prevent an exception here.
676
- spec.summary ||= ""
677
- RubygemsIntegration.instance_method(:validate).bind(self).call(spec)
678
- end
358
+ def plain_specs=(specs)
359
+ Gem::Specification.all = specs
679
360
  end
680
361
 
681
- # RubyGems 1.8.5-1.8.19
682
- class Modern < RubygemsIntegration
683
- def stub_rubygems(specs)
684
- Gem::Specification.all = specs
685
-
686
- Gem.post_reset do
687
- Gem::Specification.all = specs
688
- end
689
-
690
- stub_source_index(specs)
691
- end
692
-
693
- def all_specs
694
- Gem::Specification.to_a
695
- end
696
-
697
- def find_name(name)
698
- Gem::Specification.find_all_by_name name
699
- end
362
+ def fetch_specs(remote, name, fetcher)
363
+ require "rubygems/remote_fetcher"
364
+ path = remote.uri.to_s + "#{name}.#{Gem.marshal_version}.gz"
365
+ string = fetcher.fetch_path(path)
366
+ specs = Bundler.safe_load_marshal(string)
367
+ raise MarshalError, "Specs #{name} from #{remote} is expected to be an Array but was unexpected class #{specs.class}" unless specs.is_a?(Array)
368
+ specs
369
+ rescue Gem::RemoteFetcher::FetchError
370
+ # it's okay for prerelease to fail
371
+ raise unless name == "prerelease_specs"
700
372
  end
701
373
 
702
- # RubyGems 1.8.0 to 1.8.4
703
- class AlmostModern < Modern
704
- # RubyGems [>= 1.8.0, < 1.8.5] has a bug that changes Gem.dir whenever
705
- # you call Gem::Installer#install with an :install_dir set. We have to
706
- # change it back for our sudo mode to work.
707
- def preserve_paths
708
- old_dir = gem_dir
709
- old_path = gem_path
710
- yield
711
- Gem.use_paths(old_dir, old_path)
712
- end
713
- end
374
+ def fetch_all_remote_specs(remote, gem_remote_fetcher)
375
+ specs = fetch_specs(remote, "specs", gem_remote_fetcher)
376
+ pres = fetch_specs(remote, "prerelease_specs", gem_remote_fetcher) || []
714
377
 
715
- # RubyGems 1.8.20+
716
- class MoreModern < Modern
717
- # RubyGems 1.8.20 and adds the skip_validation parameter, so that's
718
- # when we start passing it through.
719
- def build(spec, skip_validation = false)
720
- require "rubygems/builder"
721
- Gem::Builder.new(spec).build(skip_validation)
722
- end
378
+ specs.concat(pres)
723
379
  end
724
380
 
725
- # RubyGems 2.0
726
- class Future < RubygemsIntegration
727
- def stub_rubygems(specs)
728
- Gem::Specification.all = specs
729
-
730
- Gem.post_reset do
731
- Gem::Specification.all = specs
732
- end
733
-
734
- redefine_method((class << Gem; self; end), :finish_resolve) do |*|
735
- []
736
- end
737
- end
738
-
739
- def all_specs
740
- Gem::Specification.to_a
741
- end
381
+ def download_gem(spec, uri, cache_dir, fetcher)
382
+ require "rubygems/remote_fetcher"
383
+ uri = Bundler.settings.mirror_for(uri)
384
+ redacted_uri = Gem::Uri.redact(uri)
742
385
 
743
- def find_name(name)
744
- Gem::Specification.find_all_by_name name
745
- end
386
+ Bundler::Retry.new("download gem from #{redacted_uri}").attempts do
387
+ gem_file_name = spec.file_name
388
+ local_gem_path = File.join cache_dir, gem_file_name
389
+ return if File.exist? local_gem_path
746
390
 
747
- def fetch_specs(source, remote, name)
748
- path = source + "#{name}.#{Gem.marshal_version}.gz"
749
- fetcher = gem_remote_fetcher
750
- fetcher.headers = { "X-Gemfile-Source" => remote.original_uri.to_s } if remote.original_uri
751
- string = fetcher.fetch_path(path)
752
- Bundler.load_marshal(string)
753
- rescue Gem::RemoteFetcher::FetchError => e
754
- # it's okay for prerelease to fail
755
- raise e unless name == "prerelease_specs"
756
- end
757
-
758
- def fetch_all_remote_specs(remote)
759
- source = remote.uri.is_a?(URI) ? remote.uri : URI.parse(source.to_s)
391
+ begin
392
+ remote_gem_path = uri + "gems/#{gem_file_name}"
760
393
 
761
- specs = fetch_specs(source, remote, "specs")
762
- pres = fetch_specs(source, remote, "prerelease_specs") || []
394
+ SharedHelpers.filesystem_access(local_gem_path) do
395
+ fetcher.cache_update_path remote_gem_path, local_gem_path
396
+ end
397
+ rescue Gem::RemoteFetcher::FetchError
398
+ raise if spec.original_platform == spec.platform
763
399
 
764
- specs.concat(pres)
765
- end
400
+ original_gem_file_name = "#{spec.original_name}.gem"
401
+ raise if gem_file_name == original_gem_file_name
766
402
 
767
- def download_gem(spec, uri, path)
768
- uri = Bundler.settings.mirror_for(uri)
769
- fetcher = gem_remote_fetcher
770
- fetcher.headers = { "X-Gemfile-Source" => spec.remote.original_uri.to_s } if spec.remote.original_uri
771
- Bundler::Retry.new("download gem from #{uri}").attempts do
772
- fetcher.download(spec, uri, path)
403
+ gem_file_name = original_gem_file_name
404
+ retry
773
405
  end
774
406
  end
407
+ rescue Gem::RemoteFetcher::FetchError => e
408
+ raise Bundler::HTTPError, "Could not download gem from #{redacted_uri} due to underlying error <#{e.message}>"
409
+ end
775
410
 
776
- def gem_remote_fetcher
777
- require "resolv"
778
- proxy = configuration[:http_proxy]
779
- dns = Resolv::DNS.new
780
- Bundler::GemRemoteFetcher.new(proxy, dns)
781
- end
782
-
783
- def gem_from_path(path, policy = nil)
784
- require "rubygems/package"
785
- p = Gem::Package.new(path)
786
- p.security_policy = policy if policy
787
- p
788
- end
789
-
790
- def build(spec, skip_validation = false)
791
- require "rubygems/package"
792
- Gem::Package.build(spec, skip_validation)
793
- end
794
-
795
- def repository_subdirectories
796
- Gem::REPOSITORY_SUBDIRECTORIES
797
- end
798
-
799
- def install_with_build_args(args)
800
- yield
801
- end
411
+ def build(spec, skip_validation = false)
412
+ require "rubygems/package"
413
+ Gem::Package.build(spec, skip_validation)
414
+ end
802
415
 
803
- def path_separator
804
- Gem.path_separator
805
- end
416
+ def path_separator
417
+ Gem.path_separator
806
418
  end
807
419
 
808
- # RubyGems 2.1.0
809
- class MoreFuture < Future
810
- def initialize
811
- super
812
- backport_ext_builder_monitor
813
- end
420
+ def all_specs
421
+ SharedHelpers.major_deprecation 2, "Bundler.rubygems.all_specs has been removed in favor of Bundler.rubygems.installed_specs"
814
422
 
815
- def all_specs
816
- require "bundler/remote_specification"
817
- Gem::Specification.stubs.map do |stub|
818
- StubSpecification.from_stub(stub)
819
- end
423
+ Gem::Specification.stubs.map do |stub|
424
+ StubSpecification.from_stub(stub)
820
425
  end
426
+ end
821
427
 
822
- def backport_ext_builder_monitor
823
- # So we can avoid requiring "rubygems/ext" in its entirety
824
- Gem.module_eval <<-RB, __FILE__, __LINE__ + 1
825
- module Ext
826
- end
827
- RB
828
-
829
- require "rubygems/ext/builder"
830
-
831
- Gem::Ext::Builder.class_eval do
832
- unless const_defined?(:CHDIR_MONITOR)
833
- const_set(:CHDIR_MONITOR, EXT_LOCK)
834
- end
835
-
836
- remove_const(:CHDIR_MUTEX) if const_defined?(:CHDIR_MUTEX)
837
- const_set(:CHDIR_MUTEX, const_get(:CHDIR_MONITOR))
838
- end
428
+ def installed_specs
429
+ Gem::Specification.stubs.reject(&:default_gem?).map do |stub|
430
+ StubSpecification.from_stub(stub)
839
431
  end
432
+ end
840
433
 
841
- if Gem::Specification.respond_to?(:stubs_for)
842
- def find_name(name)
843
- Gem::Specification.stubs_for(name).map(&:to_spec)
844
- end
845
- else
846
- def find_name(name)
847
- Gem::Specification.stubs.find_all do |spec|
848
- spec.name == name
849
- end.map(&:to_spec)
850
- end
434
+ def default_specs
435
+ Gem::Specification.default_stubs.map do |stub|
436
+ StubSpecification.from_stub(stub)
851
437
  end
438
+ end
852
439
 
853
- def use_gemdeps(gemfile)
854
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path(gemfile)
855
- require "bundler/gemdeps"
856
- runtime = Bundler.setup
857
- Bundler.ui = nil
858
- activated_spec_names = runtime.requested_specs.map(&:to_spec).sort_by(&:name)
859
- [Gemdeps.new(runtime), activated_spec_names]
860
- end
440
+ def find_bundler(version)
441
+ find_name("bundler").find {|s| s.version.to_s == version }
442
+ end
861
443
 
862
- if provides?(">= 2.5.2")
863
- # RubyGems-generated binstubs call Kernel#gem
864
- def binstubs_call_gem?
865
- false
866
- end
444
+ def find_name(name)
445
+ Gem::Specification.stubs_for(name).map(&:to_spec)
446
+ end
867
447
 
868
- # only 2.5.2+ has all of the stub methods we want to use, and since this
869
- # is a performance optimization _only_,
870
- # we'll restrict ourselves to the most
871
- # recent RG versions instead of all versions that have stubs
872
- def stubs_provide_full_functionality?
873
- true
874
- end
875
- end
448
+ def default_stubs
449
+ Gem::Specification.default_stubs("*.gemspec")
876
450
  end
877
451
  end
878
452
 
879
453
  def self.rubygems
880
- @rubygems ||= if RubygemsIntegration.provides?(">= 2.1.0")
881
- RubygemsIntegration::MoreFuture.new
882
- elsif RubygemsIntegration.provides?(">= 1.99.99")
883
- RubygemsIntegration::Future.new
884
- elsif RubygemsIntegration.provides?(">= 1.8.20")
885
- RubygemsIntegration::MoreModern.new
886
- elsif RubygemsIntegration.provides?(">= 1.8.5")
887
- RubygemsIntegration::Modern.new
888
- elsif RubygemsIntegration.provides?(">= 1.8.0")
889
- RubygemsIntegration::AlmostModern.new
890
- elsif RubygemsIntegration.provides?(">= 1.7.0")
891
- RubygemsIntegration::Transitional.new
892
- elsif RubygemsIntegration.provides?(">= 1.4.0")
893
- RubygemsIntegration::Legacy.new
894
- else # RubyGems 1.3.6 and 1.3.7
895
- RubygemsIntegration::Ancient.new
896
- end
454
+ @rubygems ||= RubygemsIntegration.new
897
455
  end
898
456
  end