rubygems-update 3.5.5 → 3.6.9

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 (413) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +606 -1
  3. data/CODE_OF_CONDUCT.md +79 -28
  4. data/Manifest.txt +114 -73
  5. data/README.md +16 -11
  6. data/bundler/CHANGELOG.md +506 -6
  7. data/bundler/README.md +2 -2
  8. data/bundler/bundler.gemspec +2 -2
  9. data/bundler/lib/bundler/build_metadata.rb +2 -2
  10. data/bundler/lib/bundler/checksum.rb +22 -12
  11. data/bundler/lib/bundler/cli/add.rb +3 -1
  12. data/bundler/lib/bundler/cli/binstubs.rb +1 -1
  13. data/bundler/lib/bundler/cli/check.rb +3 -3
  14. data/bundler/lib/bundler/cli/console.rb +8 -10
  15. data/bundler/lib/bundler/cli/doctor/diagnose.rb +167 -0
  16. data/bundler/lib/bundler/cli/doctor/ssl.rb +249 -0
  17. data/bundler/lib/bundler/cli/doctor.rb +27 -151
  18. data/bundler/lib/bundler/cli/exec.rb +1 -0
  19. data/bundler/lib/bundler/cli/fund.rb +1 -1
  20. data/bundler/lib/bundler/cli/gem.rb +13 -17
  21. data/bundler/lib/bundler/cli/info.rb +6 -6
  22. data/bundler/lib/bundler/cli/inject.rb +3 -3
  23. data/bundler/lib/bundler/cli/install.rb +14 -5
  24. data/bundler/lib/bundler/cli/issue.rb +3 -3
  25. data/bundler/lib/bundler/cli/lock.rb +32 -11
  26. data/bundler/lib/bundler/cli/outdated.rb +22 -22
  27. data/bundler/lib/bundler/cli/plugin.rb +3 -2
  28. data/bundler/lib/bundler/cli/pristine.rb +1 -1
  29. data/bundler/lib/bundler/cli/show.rb +3 -3
  30. data/bundler/lib/bundler/cli.rb +51 -107
  31. data/bundler/lib/bundler/compact_index_client/cache.rb +48 -73
  32. data/bundler/lib/bundler/compact_index_client/cache_file.rb +0 -5
  33. data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
  34. data/bundler/lib/bundler/compact_index_client/updater.rb +2 -12
  35. data/bundler/lib/bundler/compact_index_client.rb +51 -80
  36. data/bundler/lib/bundler/constants.rb +8 -1
  37. data/bundler/lib/bundler/current_ruby.rb +23 -33
  38. data/bundler/lib/bundler/definition.rb +485 -313
  39. data/bundler/lib/bundler/dependency.rb +92 -46
  40. data/bundler/lib/bundler/dsl.rb +135 -101
  41. data/bundler/lib/bundler/endpoint_specification.rb +30 -3
  42. data/bundler/lib/bundler/env.rb +1 -1
  43. data/bundler/lib/bundler/environment_preserver.rb +5 -23
  44. data/bundler/lib/bundler/errors.rb +53 -5
  45. data/bundler/lib/bundler/feature_flag.rb +3 -6
  46. data/bundler/lib/bundler/fetcher/compact_index.rb +16 -25
  47. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  48. data/bundler/lib/bundler/fetcher.rb +14 -7
  49. data/bundler/lib/bundler/force_platform.rb +0 -2
  50. data/bundler/lib/bundler/friendly_errors.rb +1 -1
  51. data/bundler/lib/bundler/gem_helper.rb +1 -1
  52. data/bundler/lib/bundler/gem_helpers.rb +36 -19
  53. data/bundler/lib/bundler/gem_version_promoter.rb +42 -40
  54. data/bundler/lib/bundler/injector.rb +14 -16
  55. data/bundler/lib/bundler/inline.rb +42 -17
  56. data/bundler/lib/bundler/installer/gem_installer.rb +4 -3
  57. data/bundler/lib/bundler/installer/parallel_installer.rb +3 -2
  58. data/bundler/lib/bundler/installer/standalone.rb +2 -5
  59. data/bundler/lib/bundler/installer.rb +17 -41
  60. data/bundler/lib/bundler/lazy_specification.rb +117 -46
  61. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  62. data/bundler/lib/bundler/lockfile_parser.rb +18 -7
  63. data/bundler/lib/bundler/man/bundle-add.1 +44 -27
  64. data/bundler/lib/bundler/man/bundle-add.1.ronn +52 -23
  65. data/bundler/lib/bundler/man/bundle-binstubs.1 +9 -6
  66. data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
  67. data/bundler/lib/bundler/man/bundle-cache.1 +32 -4
  68. data/bundler/lib/bundler/man/bundle-cache.1.ronn +31 -2
  69. data/bundler/lib/bundler/man/bundle-check.1 +7 -5
  70. data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
  71. data/bundler/lib/bundler/man/bundle-clean.1 +3 -3
  72. data/bundler/lib/bundler/man/bundle-config.1 +11 -15
  73. data/bundler/lib/bundler/man/bundle-config.1.ronn +12 -15
  74. data/bundler/lib/bundler/man/bundle-console.1 +4 -6
  75. data/bundler/lib/bundler/man/bundle-console.1.ronn +2 -7
  76. data/bundler/lib/bundler/man/bundle-doctor.1 +4 -4
  77. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +1 -1
  78. data/bundler/lib/bundler/man/bundle-env.1 +9 -0
  79. data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
  80. data/bundler/lib/bundler/man/bundle-exec.1 +9 -6
  81. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -3
  82. data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
  83. data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
  84. data/bundler/lib/bundler/man/bundle-gem.1 +25 -7
  85. data/bundler/lib/bundler/man/bundle-gem.1.ronn +38 -6
  86. data/bundler/lib/bundler/man/bundle-help.1 +3 -3
  87. data/bundler/lib/bundler/man/bundle-info.1 +7 -4
  88. data/bundler/lib/bundler/man/bundle-info.1.ronn +6 -2
  89. data/bundler/lib/bundler/man/bundle-init.1 +5 -5
  90. data/bundler/lib/bundler/man/bundle-init.1.ronn +3 -2
  91. data/bundler/lib/bundler/man/bundle-inject.1 +12 -4
  92. data/bundler/lib/bundler/man/bundle-inject.1.ronn +9 -1
  93. data/bundler/lib/bundler/man/bundle-install.1 +19 -16
  94. data/bundler/lib/bundler/man/bundle-install.1.ronn +24 -20
  95. data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
  96. data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
  97. data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
  98. data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  99. data/bundler/lib/bundler/man/bundle-list.1 +3 -3
  100. data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
  101. data/bundler/lib/bundler/man/bundle-lock.1 +23 -8
  102. data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
  103. data/bundler/lib/bundler/man/bundle-open.1 +4 -4
  104. data/bundler/lib/bundler/man/bundle-open.1.ronn +2 -1
  105. data/bundler/lib/bundler/man/bundle-outdated.1 +10 -7
  106. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +8 -4
  107. data/bundler/lib/bundler/man/bundle-platform.1 +3 -3
  108. data/bundler/lib/bundler/man/bundle-plugin.1 +9 -6
  109. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +7 -3
  110. data/bundler/lib/bundler/man/bundle-pristine.1 +3 -3
  111. data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
  112. data/bundler/lib/bundler/man/bundle-remove.1 +3 -3
  113. data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
  114. data/bundler/lib/bundler/man/bundle-show.1 +7 -4
  115. data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
  116. data/bundler/lib/bundler/man/bundle-update.1 +15 -9
  117. data/bundler/lib/bundler/man/bundle-update.1.ronn +14 -6
  118. data/bundler/lib/bundler/man/bundle-version.1 +3 -3
  119. data/bundler/lib/bundler/man/bundle-viz.1 +6 -6
  120. data/bundler/lib/bundler/man/bundle-viz.1.ronn +7 -3
  121. data/bundler/lib/bundler/man/bundle.1 +3 -3
  122. data/bundler/lib/bundler/man/gemfile.5 +7 -5
  123. data/bundler/lib/bundler/man/gemfile.5.ronn +8 -2
  124. data/bundler/lib/bundler/man/index.txt +4 -0
  125. data/bundler/lib/bundler/match_metadata.rb +13 -0
  126. data/bundler/lib/bundler/materialization.rb +59 -0
  127. data/bundler/lib/bundler/mirror.rb +3 -3
  128. data/bundler/lib/bundler/plugin/api/source.rb +5 -4
  129. data/bundler/lib/bundler/plugin/events.rb +24 -0
  130. data/bundler/lib/bundler/plugin/index.rb +5 -1
  131. data/bundler/lib/bundler/plugin/installer/path.rb +26 -0
  132. data/bundler/lib/bundler/plugin/installer.rb +37 -17
  133. data/bundler/lib/bundler/plugin/source_list.rb +4 -4
  134. data/bundler/lib/bundler/plugin.rb +21 -2
  135. data/bundler/lib/bundler/process_lock.rb +10 -14
  136. data/bundler/lib/bundler/remote_specification.rb +6 -1
  137. data/bundler/lib/bundler/resolver/base.rb +14 -3
  138. data/bundler/lib/bundler/resolver/candidate.rb +18 -27
  139. data/bundler/lib/bundler/resolver/package.rb +20 -3
  140. data/bundler/lib/bundler/resolver/spec_group.rb +22 -27
  141. data/bundler/lib/bundler/resolver/strategy.rb +40 -0
  142. data/bundler/lib/bundler/resolver.rb +114 -50
  143. data/bundler/lib/bundler/retry.rb +1 -1
  144. data/bundler/lib/bundler/ruby_dsl.rb +12 -3
  145. data/bundler/lib/bundler/ruby_version.rb +7 -1
  146. data/bundler/lib/bundler/rubygems_ext.rb +282 -125
  147. data/bundler/lib/bundler/rubygems_gem_installer.rb +40 -5
  148. data/bundler/lib/bundler/rubygems_integration.rb +29 -67
  149. data/bundler/lib/bundler/runtime.rb +48 -35
  150. data/bundler/lib/bundler/self_manager.rb +27 -7
  151. data/bundler/lib/bundler/settings.rb +32 -21
  152. data/bundler/lib/bundler/setup.rb +6 -0
  153. data/bundler/lib/bundler/shared_helpers.rb +39 -21
  154. data/bundler/lib/bundler/source/gemspec.rb +1 -4
  155. data/bundler/lib/bundler/source/git/git_proxy.rb +23 -6
  156. data/bundler/lib/bundler/source/git.rb +113 -41
  157. data/bundler/lib/bundler/source/metadata.rb +4 -3
  158. data/bundler/lib/bundler/source/path.rb +7 -18
  159. data/bundler/lib/bundler/source/rubygems/remote.rb +12 -4
  160. data/bundler/lib/bundler/source/rubygems.rb +54 -48
  161. data/bundler/lib/bundler/source.rb +2 -0
  162. data/bundler/lib/bundler/source_list.rb +53 -7
  163. data/bundler/lib/bundler/spec_set.rb +187 -88
  164. data/bundler/lib/bundler/stub_specification.rb +29 -2
  165. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
  166. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +1 -3
  167. data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -3
  168. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +15 -15
  169. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -7
  170. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
  171. data/bundler/lib/bundler/ui/shell.rb +24 -2
  172. data/bundler/lib/bundler/ui/silent.rb +12 -1
  173. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
  174. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +53 -3
  175. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  176. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +11 -0
  177. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +15 -13
  178. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +68 -30
  179. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +4 -24
  180. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +1 -0
  181. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
  182. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +20 -8
  183. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +17 -29
  184. data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
  185. data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  186. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +3 -5
  187. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +11 -0
  188. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +1 -4
  189. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +2 -2
  190. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +2 -1
  191. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +9 -9
  192. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
  193. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +5 -21
  194. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  195. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  196. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +11 -0
  197. data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
  198. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +43 -16
  199. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +3 -3
  200. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +1 -1
  201. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +28 -37
  202. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +2 -2
  203. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -9
  204. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +26 -3
  205. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  206. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +9 -9
  207. data/bundler/lib/bundler/vendored_net_http.rb +20 -5
  208. data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
  209. data/bundler/lib/bundler/vendored_timeout.rb +7 -3
  210. data/bundler/lib/bundler/vendored_uri.rb +18 -1
  211. data/bundler/lib/bundler/version.rb +1 -1
  212. data/bundler/lib/bundler/yaml_serializer.rb +12 -7
  213. data/bundler/lib/bundler.rb +89 -51
  214. data/{CONTRIBUTING.md → doc/rubygems/CONTRIBUTING.md} +10 -14
  215. data/{POLICIES.md → doc/rubygems/POLICIES.md} +81 -12
  216. data/exe/update_rubygems +1 -1
  217. data/lib/rubygems/basic_specification.rb +43 -10
  218. data/lib/rubygems/bundler_version_finder.rb +1 -1
  219. data/lib/rubygems/command.rb +1 -4
  220. data/lib/rubygems/command_manager.rb +5 -6
  221. data/lib/rubygems/commands/build_command.rb +2 -11
  222. data/lib/rubygems/commands/cleanup_command.rb +3 -13
  223. data/lib/rubygems/commands/contents_command.rb +17 -10
  224. data/lib/rubygems/commands/environment_command.rb +5 -0
  225. data/lib/rubygems/commands/exec_command.rb +18 -11
  226. data/lib/rubygems/commands/fetch_command.rb +14 -0
  227. data/lib/rubygems/commands/help_command.rb +2 -2
  228. data/lib/rubygems/commands/install_command.rb +0 -4
  229. data/lib/rubygems/commands/pristine_command.rb +30 -17
  230. data/lib/rubygems/commands/push_command.rb +31 -6
  231. data/lib/rubygems/commands/rdoc_command.rb +3 -10
  232. data/lib/rubygems/commands/rebuild_command.rb +262 -0
  233. data/lib/rubygems/commands/setup_command.rb +11 -16
  234. data/lib/rubygems/commands/sources_command.rb +2 -2
  235. data/lib/rubygems/commands/uninstall_command.rb +9 -4
  236. data/lib/rubygems/commands/unpack_command.rb +0 -6
  237. data/lib/rubygems/commands/update_command.rb +10 -17
  238. data/lib/rubygems/config_file.rb +45 -16
  239. data/lib/rubygems/core_ext/kernel_warn.rb +2 -6
  240. data/lib/rubygems/defaults.rb +6 -6
  241. data/lib/rubygems/dependency.rb +12 -16
  242. data/lib/rubygems/dependency_list.rb +1 -1
  243. data/lib/rubygems/deprecate.rb +79 -77
  244. data/lib/rubygems/errors.rb +2 -1
  245. data/lib/rubygems/exceptions.rb +2 -9
  246. data/lib/rubygems/ext/builder.rb +21 -8
  247. data/lib/rubygems/ext/cargo_builder.rb +12 -26
  248. data/lib/rubygems/ext/cmake_builder.rb +7 -2
  249. data/lib/rubygems/ext/configure_builder.rb +7 -2
  250. data/lib/rubygems/ext/ext_conf_builder.rb +9 -5
  251. data/lib/rubygems/ext/rake_builder.rb +7 -4
  252. data/lib/rubygems/gem_runner.rb +9 -0
  253. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +1 -1
  254. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -1
  255. data/lib/rubygems/gemcutter_utilities.rb +52 -26
  256. data/lib/rubygems/gemspec_helpers.rb +19 -0
  257. data/lib/rubygems/install_update_options.rb +5 -0
  258. data/lib/rubygems/installer.rb +31 -40
  259. data/lib/rubygems/local_remote_options.rb +8 -8
  260. data/lib/rubygems/package/tar_header.rb +31 -4
  261. data/lib/rubygems/package/tar_reader/entry.rb +1 -5
  262. data/lib/rubygems/package/tar_writer.rb +5 -4
  263. data/lib/rubygems/package.rb +13 -8
  264. data/lib/rubygems/platform.rb +7 -5
  265. data/lib/rubygems/psych_tree.rb +4 -0
  266. data/lib/rubygems/query_utils.rb +2 -2
  267. data/lib/rubygems/rdoc.rb +16 -3
  268. data/lib/rubygems/remote_fetcher.rb +3 -4
  269. data/lib/rubygems/request.rb +5 -5
  270. data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
  271. data/lib/rubygems/request_set.rb +1 -1
  272. data/lib/rubygems/requirement.rb +16 -12
  273. data/lib/rubygems/resolver/activation_request.rb +1 -1
  274. data/lib/rubygems/resolver/api_set/gem_parser.rb +2 -5
  275. data/lib/rubygems/resolver/api_set.rb +13 -8
  276. data/lib/rubygems/resolver/best_set.rb +0 -28
  277. data/lib/rubygems/resolver/composed_set.rb +3 -3
  278. data/lib/rubygems/resolver/git_set.rb +0 -1
  279. data/lib/rubygems/resolver/index_set.rb +2 -2
  280. data/lib/rubygems/resolver/spec_specification.rb +7 -0
  281. data/lib/rubygems/resolver.rb +7 -7
  282. data/lib/rubygems/s3_uri_signer.rb +3 -3
  283. data/lib/rubygems/safe_marshal/reader.rb +31 -14
  284. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +29 -16
  285. data/lib/rubygems/safe_yaml.rb +10 -1
  286. data/lib/rubygems/security.rb +1 -1
  287. data/lib/rubygems/source/git.rb +22 -17
  288. data/lib/rubygems/source/installed.rb +3 -1
  289. data/lib/rubygems/source/local.rb +8 -4
  290. data/lib/rubygems/source/specific_file.rb +5 -3
  291. data/lib/rubygems/source.rb +10 -8
  292. data/lib/rubygems/source_list.rb +1 -1
  293. data/lib/rubygems/spec_fetcher.rb +47 -15
  294. data/lib/rubygems/specification.rb +107 -180
  295. data/lib/rubygems/specification_policy.rb +33 -13
  296. data/lib/rubygems/specification_record.rb +212 -0
  297. data/lib/rubygems/stub_specification.rb +32 -10
  298. data/lib/rubygems/target_rbconfig.rb +50 -0
  299. data/lib/rubygems/uninstaller.rb +42 -22
  300. data/lib/rubygems/uri.rb +6 -6
  301. data/lib/rubygems/util/licenses.rb +97 -1
  302. data/lib/rubygems/util.rb +1 -1
  303. data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  304. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
  305. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
  306. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  307. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  308. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  309. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  310. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
  311. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  312. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
  313. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
  314. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph.rb +2 -2
  315. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/errors.rb +1 -1
  316. data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
  317. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
  318. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/ui.rb +1 -1
  319. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolution.rb +4 -4
  320. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolver.rb +1 -1
  321. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/state.rb +1 -1
  322. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo.rb +2 -2
  323. data/lib/rubygems/vendor/net-http/COPYING +56 -0
  324. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/generic_request.rb +9 -9
  325. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/header.rb +3 -3
  326. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/request.rb +3 -3
  327. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/requests.rb +35 -30
  328. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/response.rb +2 -2
  329. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/responses.rb +6 -6
  330. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/status.rb +1 -1
  331. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http.rb +135 -51
  332. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/https.rb +1 -1
  333. data/lib/rubygems/vendor/optparse/COPYING +56 -0
  334. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
  335. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
  336. data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
  337. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
  338. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +158 -62
  339. data/lib/rubygems/vendor/resolv/COPYING +56 -0
  340. data/lib/rubygems/{resolv → vendor/resolv}/lib/resolv.rb +117 -49
  341. data/lib/rubygems/vendor/securerandom/COPYING +56 -0
  342. data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
  343. data/lib/rubygems/vendor/timeout/.document +1 -0
  344. data/lib/rubygems/vendor/timeout/COPYING +56 -0
  345. data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +10 -11
  346. data/lib/rubygems/vendor/tsort/.document +1 -0
  347. data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
  348. data/lib/rubygems/vendor/uri/.document +1 -0
  349. data/lib/rubygems/vendor/uri/COPYING +56 -0
  350. data/lib/rubygems/vendor/uri/lib/uri/common.rb +880 -0
  351. data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
  352. data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
  353. data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1579 -0
  354. data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
  355. data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
  356. data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
  357. data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
  358. data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
  359. data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  360. data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
  361. data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
  362. data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
  363. data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
  364. data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
  365. data/lib/rubygems/vendored_molinillo.rb +3 -0
  366. data/lib/rubygems/vendored_net_http.rb +5 -0
  367. data/lib/rubygems/vendored_optparse.rb +3 -0
  368. data/lib/rubygems/vendored_securerandom.rb +3 -0
  369. data/lib/rubygems/vendored_timeout.rb +5 -0
  370. data/lib/rubygems/vendored_tsort.rb +3 -0
  371. data/lib/rubygems/version.rb +26 -9
  372. data/lib/rubygems/yaml_serializer.rb +12 -7
  373. data/lib/rubygems.rb +82 -47
  374. data/rubygems-update.gemspec +11 -6
  375. data/setup.rb +1 -1
  376. metadata +131 -86
  377. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +0 -32
  378. data/lib/rubygems/net/http.rb +0 -3
  379. data/lib/rubygems/net-http/LICENSE.txt +0 -22
  380. data/lib/rubygems/net-http/lib/net/http/backward.rb +0 -40
  381. data/lib/rubygems/net-protocol/LICENSE.txt +0 -22
  382. data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
  383. data/lib/rubygems/optparse.rb +0 -3
  384. data/lib/rubygems/resolv/LICENSE.txt +0 -22
  385. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  386. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  387. data/lib/rubygems/resolver/molinillo.rb +0 -3
  388. data/lib/rubygems/shellwords.rb +0 -3
  389. data/lib/rubygems/timeout/LICENSE.txt +0 -22
  390. data/lib/rubygems/timeout.rb +0 -3
  391. data/lib/rubygems/tsort/LICENSE.txt +0 -22
  392. data/lib/rubygems/tsort.rb +0 -3
  393. /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
  394. /data/{lib/rubygems/net-http → bundler/lib/bundler/vendor/securerandom}/.document +0 -0
  395. /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
  396. /data/{bundler → doc/bundler}/UPGRADING.md +0 -0
  397. /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
  398. /data/lib/rubygems/{net-protocol → vendor/molinillo}/.document +0 -0
  399. /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +0 -0
  400. /data/lib/rubygems/{optparse → vendor/net-http}/.document +0 -0
  401. /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/exceptions.rb +0 -0
  402. /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/proxy_delta.rb +0 -0
  403. /data/lib/rubygems/{resolv → vendor/net-protocol}/.document +0 -0
  404. /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
  405. /data/lib/rubygems/{net-protocol → vendor/net-protocol}/lib/net/protocol.rb +0 -0
  406. /data/lib/rubygems/{resolver/molinillo → vendor/optparse}/.document +0 -0
  407. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
  408. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
  409. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
  410. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
  411. /data/lib/rubygems/{timeout → vendor/resolv}/.document +0 -0
  412. /data/lib/rubygems/{tsort → vendor/securerandom}/.document +0 -0
  413. /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
@@ -2,50 +2,92 @@
2
2
 
3
3
  require "rubygems/dependency"
4
4
  require_relative "shared_helpers"
5
- require_relative "rubygems_ext"
6
5
 
7
6
  module Bundler
8
7
  class Dependency < Gem::Dependency
9
- attr_reader :autorequire
10
- attr_reader :groups, :platforms, :gemfile, :path, :git, :github, :branch, :ref
11
-
12
- ALL_RUBY_VERSIONS = (18..27).to_a.concat((30..34).to_a).freeze
13
- PLATFORM_MAP = {
14
- ruby: [Gem::Platform::RUBY, ALL_RUBY_VERSIONS],
15
- mri: [Gem::Platform::RUBY, ALL_RUBY_VERSIONS],
16
- rbx: [Gem::Platform::RUBY],
17
- truffleruby: [Gem::Platform::RUBY],
18
- jruby: [Gem::Platform::JAVA, [18, 19]],
19
- windows: [Gem::Platform::WINDOWS, ALL_RUBY_VERSIONS],
20
- # deprecated
21
- mswin: [Gem::Platform::MSWIN, ALL_RUBY_VERSIONS],
22
- mswin64: [Gem::Platform::MSWIN64, ALL_RUBY_VERSIONS - [18]],
23
- mingw: [Gem::Platform::MINGW, ALL_RUBY_VERSIONS],
24
- x64_mingw: [Gem::Platform::X64_MINGW, ALL_RUBY_VERSIONS - [18, 19]],
25
- }.each_with_object({}) do |(platform, spec), hash|
26
- hash[platform] = spec[0]
27
- spec[1]&.each {|version| hash[:"#{platform}_#{version}"] = spec[0] }
28
- end.freeze
29
-
30
8
  def initialize(name, version, options = {}, &blk)
31
9
  type = options["type"] || :runtime
32
10
  super(name, version, type)
33
11
 
34
- @autorequire = nil
35
- @groups = Array(options["group"] || :default).map(&:to_sym)
36
- @source = options["source"]
37
- @path = options["path"]
38
- @git = options["git"]
39
- @github = options["github"]
40
- @branch = options["branch"]
41
- @ref = options["ref"]
42
- @platforms = Array(options["platforms"])
43
- @env = options["env"]
44
- @should_include = options.fetch("should_include", true)
45
- @gemfile = options["gemfile"]
46
- @force_ruby_platform = options["force_ruby_platform"] if options.key?("force_ruby_platform")
12
+ @options = options
13
+ end
14
+
15
+ def groups
16
+ @groups ||= Array(@options["group"] || :default).map(&:to_sym)
17
+ end
18
+
19
+ def source
20
+ return @source if defined?(@source)
21
+
22
+ @source = @options["source"]
23
+ end
24
+
25
+ def path
26
+ return @path if defined?(@path)
27
+
28
+ @path = @options["path"]
29
+ end
30
+
31
+ def git
32
+ return @git if defined?(@git)
47
33
 
48
- @autorequire = Array(options["require"] || []) if options.key?("require")
34
+ @git = @options["git"]
35
+ end
36
+
37
+ def github
38
+ return @github if defined?(@github)
39
+
40
+ @github = @options["github"]
41
+ end
42
+
43
+ def branch
44
+ return @branch if defined?(@branch)
45
+
46
+ @branch = @options["branch"]
47
+ end
48
+
49
+ def ref
50
+ return @ref if defined?(@ref)
51
+
52
+ @ref = @options["ref"]
53
+ end
54
+
55
+ def glob
56
+ return @glob if defined?(@glob)
57
+
58
+ @glob = @options["glob"]
59
+ end
60
+
61
+ def platforms
62
+ @platforms ||= Array(@options["platforms"])
63
+ end
64
+
65
+ def env
66
+ return @env if defined?(@env)
67
+
68
+ @env = @options["env"]
69
+ end
70
+
71
+ def should_include
72
+ @should_include ||= @options.fetch("should_include", true)
73
+ end
74
+
75
+ def gemfile
76
+ return @gemfile if defined?(@gemfile)
77
+
78
+ @gemfile = @options["gemfile"]
79
+ end
80
+
81
+ def force_ruby_platform
82
+ return @force_ruby_platform if defined?(@force_ruby_platform)
83
+
84
+ @force_ruby_platform = @options["force_ruby_platform"]
85
+ end
86
+
87
+ def autorequire
88
+ return @autorequire if defined?(@autorequire)
89
+
90
+ @autorequire = Array(@options["require"] || []) if @options.key?("require")
49
91
  end
50
92
 
51
93
  RUBY_PLATFORM_ARRAY = [Gem::Platform::RUBY].freeze
@@ -55,37 +97,41 @@ module Bundler
55
97
  # passed in the `valid_platforms` parameter
56
98
  def gem_platforms(valid_platforms)
57
99
  return RUBY_PLATFORM_ARRAY if force_ruby_platform
58
- return valid_platforms if @platforms.empty?
100
+ return valid_platforms if platforms.empty?
59
101
 
60
102
  valid_platforms.select {|p| expanded_platforms.include?(GemHelpers.generic(p)) }
61
103
  end
62
104
 
63
105
  def expanded_platforms
64
- @expanded_platforms ||= @platforms.map {|pl| PLATFORM_MAP[pl] }.compact.flatten.uniq
106
+ @expanded_platforms ||= platforms.filter_map {|pl| CurrentRuby::PLATFORM_MAP[pl] }.flatten.uniq
65
107
  end
66
108
 
67
109
  def should_include?
68
- @should_include && current_env? && current_platform?
110
+ should_include && current_env? && current_platform?
69
111
  end
70
112
 
71
113
  def gemspec_dev_dep?
72
- type == :development
114
+ @gemspec_dev_dep ||= @options.fetch("gemspec_dev_dep", false)
115
+ end
116
+
117
+ def gemfile_dep?
118
+ !gemspec_dev_dep?
73
119
  end
74
120
 
75
121
  def current_env?
76
- return true unless @env
77
- if @env.is_a?(Hash)
78
- @env.all? do |key, val|
122
+ return true unless env
123
+ if env.is_a?(Hash)
124
+ env.all? do |key, val|
79
125
  ENV[key.to_s] && (val.is_a?(String) ? ENV[key.to_s] == val : ENV[key.to_s] =~ val)
80
126
  end
81
127
  else
82
- ENV[@env.to_s]
128
+ ENV[env.to_s]
83
129
  end
84
130
  end
85
131
 
86
132
  def current_platform?
87
- return true if @platforms.empty?
88
- @platforms.any? do |p|
133
+ return true if platforms.empty?
134
+ platforms.any? do |p|
89
135
  Bundler.current_ruby.send("#{p}?")
90
136
  end
91
137
  end
@@ -13,12 +13,13 @@ module Bundler
13
13
  builder.to_definition(lockfile, unlock)
14
14
  end
15
15
 
16
- VALID_PLATFORMS = Bundler::Dependency::PLATFORM_MAP.keys.freeze
16
+ VALID_PLATFORMS = Bundler::CurrentRuby::PLATFORM_MAP.keys.freeze
17
17
 
18
18
  VALID_KEYS = %w[group groups git path glob name branch ref tag require submodules
19
- platform platforms type source install_if gemfile force_ruby_platform].freeze
19
+ platform platforms source install_if force_ruby_platform].freeze
20
20
 
21
21
  GITHUB_PULL_REQUEST_URL = %r{\Ahttps://github\.com/([A-Za-z0-9_\-\.]+/[A-Za-z0-9_\-\.]+)/pull/(\d+)\z}
22
+ GITLAB_MERGE_REQUEST_URL = %r{\Ahttps://gitlab\.com/([A-Za-z0-9_\-\./]+)/-/merge_requests/(\d+)\z}
22
23
 
23
24
  attr_reader :gemspecs, :gemfile
24
25
  attr_accessor :dependencies
@@ -41,20 +42,20 @@ module Bundler
41
42
  end
42
43
 
43
44
  def eval_gemfile(gemfile, contents = nil)
44
- expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile&.parent)
45
- original_gemfile = @gemfile
46
- @gemfile = expanded_gemfile_path
47
- @gemfiles << expanded_gemfile_path
48
- contents ||= Bundler.read_file(@gemfile.to_s)
49
- instance_eval(contents, gemfile.to_s, 1)
50
- rescue Exception => e # rubocop:disable Lint/RescueException
51
- message = "There was an error " \
52
- "#{e.is_a?(GemfileEvalError) ? "evaluating" : "parsing"} " \
53
- "`#{File.basename gemfile.to_s}`: #{e.message}"
54
-
55
- raise DSLError.new(message, gemfile, e.backtrace, contents)
56
- ensure
57
- @gemfile = original_gemfile
45
+ with_gemfile(gemfile) do |current_gemfile|
46
+ contents ||= Bundler.read_file(current_gemfile)
47
+ instance_eval(contents, current_gemfile, 1)
48
+ rescue GemfileEvalError => e
49
+ message = "There was an error evaluating `#{File.basename current_gemfile}`: #{e.message}"
50
+ raise DSLError.new(message, current_gemfile, e.backtrace, contents)
51
+ rescue GemfileError, InvalidArgumentError, InvalidOption, DeprecatedError, ScriptError => e
52
+ message = "There was an error parsing `#{File.basename current_gemfile}`: #{e.message}"
53
+ raise DSLError.new(message, current_gemfile, e.backtrace, contents)
54
+ rescue StandardError => e
55
+ raise unless e.backtrace_locations.first.path == current_gemfile
56
+ message = "There was an error parsing `#{File.basename current_gemfile}`: #{e.message}"
57
+ raise DSLError.new(message, current_gemfile, e.backtrace, contents)
58
+ end
58
59
  end
59
60
 
60
61
  def gemspec(opts = nil)
@@ -65,7 +66,7 @@ module Bundler
65
66
  development_group = opts[:development_group] || :development
66
67
  expanded_path = gemfile_root.join(path)
67
68
 
68
- gemspecs = Gem::Util.glob_files_in_dir("{,*}.gemspec", expanded_path).map {|g| Bundler.load_gemspec(g) }.compact
69
+ gemspecs = Gem::Util.glob_files_in_dir("{,*}.gemspec", expanded_path).filter_map {|g| Bundler.load_gemspec(g) }
69
70
  gemspecs.reject! {|s| s.name != name } if name
70
71
  specs_by_name_and_version = gemspecs.group_by {|s| [s.name, s.version] }
71
72
 
@@ -76,12 +77,12 @@ module Bundler
76
77
 
77
78
  @gemspecs << spec
78
79
 
79
- gem spec.name, name: spec.name, path: path, glob: glob
80
+ path path, "glob" => glob, "name" => spec.name, "gemspec" => spec do
81
+ add_dependency spec.name
82
+ end
80
83
 
81
- group(development_group) do
82
- spec.development_dependencies.each do |dep|
83
- gem dep.name, *(dep.requirement.as_list + [type: :development])
84
- end
84
+ spec.development_dependencies.each do |dep|
85
+ add_dependency dep.name, dep.requirement.as_list, "gemspec_dev_dep" => true, "group" => development_group
85
86
  end
86
87
  when 0
87
88
  raise InvalidOption, "There are no gemspecs at #{expanded_path}"
@@ -93,63 +94,11 @@ module Bundler
93
94
 
94
95
  def gem(name, *args)
95
96
  options = args.last.is_a?(Hash) ? args.pop.dup : {}
96
- options["gemfile"] = @gemfile
97
97
  version = args || [">= 0"]
98
98
 
99
99
  normalize_options(name, version, options)
100
100
 
101
- dep = Dependency.new(name, version, options)
102
-
103
- # if there's already a dependency with this name we try to prefer one
104
- if current = @dependencies.find {|d| d.name == dep.name }
105
- if current.requirement != dep.requirement
106
- current_requirement_open = current.requirements_list.include?(">= 0")
107
-
108
- gemspec_dep = [dep, current].find(&:gemspec_dev_dep?)
109
- if gemspec_dep
110
- gemfile_dep = [dep, current].find(&:runtime?)
111
-
112
- unless current_requirement_open
113
- Bundler.ui.warn "A gemspec development dependency (#{gemspec_dep.name}, #{gemspec_dep.requirement}) is being overridden by a Gemfile dependency (#{gemfile_dep.name}, #{gemfile_dep.requirement}).\n" \
114
- "This behaviour may change in the future. Please remove either of them, or make sure they both have the same requirement\n"
115
- end
116
- else
117
- update_prompt = ""
118
-
119
- if File.basename(@gemfile) == Injector::INJECTED_GEMS
120
- if dep.requirements_list.include?(">= 0") && !current_requirement_open
121
- update_prompt = ". Gem already added"
122
- else
123
- update_prompt = ". If you want to update the gem version, run `bundle update #{current.name}`"
124
-
125
- update_prompt += ". You may also need to change the version requirement specified in the Gemfile if it's too restrictive." unless current_requirement_open
126
- end
127
- end
128
-
129
- raise GemfileError, "You cannot specify the same gem twice with different version requirements.\n" \
130
- "You specified: #{current.name} (#{current.requirement}) and #{dep.name} (#{dep.requirement})" \
131
- "#{update_prompt}"
132
- end
133
- end
134
-
135
- # Always prefer the dependency from the Gemfile
136
- if current.gemspec_dev_dep?
137
- @dependencies.delete(current)
138
- elsif dep.gemspec_dev_dep?
139
- return
140
- elsif current.source != dep.source
141
- raise GemfileError, "You cannot specify the same gem twice coming from different sources.\n" \
142
- "You specified that #{dep.name} (#{dep.requirement}) should come from " \
143
- "#{current.source || "an unspecified source"} and #{dep.source}\n"
144
- else
145
- Bundler.ui.warn "Your Gemfile lists the gem #{current.name} (#{current.requirement}) more than once.\n" \
146
- "You should probably keep only one of them.\n" \
147
- "Remove any duplicate entries and specify the gem only once.\n" \
148
- "While it's not a problem now, it could cause errors if you change the version of one of them later."
149
- end
150
- end
151
-
152
- @dependencies << dep
101
+ add_dependency(name, version, options)
153
102
  end
154
103
 
155
104
  def source(source, *args, &blk)
@@ -192,8 +141,7 @@ module Bundler
192
141
  def path(path, options = {}, &blk)
193
142
  source_options = normalize_hash(options).merge(
194
143
  "path" => Pathname.new(path),
195
- "root_path" => gemfile_root,
196
- "gemspec" => gemspecs.find {|g| g.name == options["name"] }
144
+ "root_path" => gemfile_root
197
145
  )
198
146
 
199
147
  source_options["global"] = true unless block_given?
@@ -218,7 +166,7 @@ module Bundler
218
166
  end
219
167
 
220
168
  def github(repo, options = {})
221
- raise ArgumentError, "GitHub sources require a block" unless block_given?
169
+ raise InvalidArgumentError, "GitHub sources require a block" unless block_given?
222
170
  github_uri = @git_sources["github"].call(repo)
223
171
  git_options = normalize_hash(options).merge("uri" => github_uri)
224
172
  git_source = @sources.add_git_source(git_options)
@@ -284,6 +232,91 @@ module Bundler
284
232
 
285
233
  private
286
234
 
235
+ def add_dependency(name, version = nil, options = {})
236
+ options["gemfile"] = @gemfile
237
+ options["source"] ||= @source
238
+ options["env"] ||= @env
239
+
240
+ dep = Dependency.new(name, version, options)
241
+
242
+ # if there's already a dependency with this name we try to prefer one
243
+ if current = @dependencies.find {|d| d.name == dep.name }
244
+ if current.requirement != dep.requirement
245
+ current_requirement_open = current.requirements_list.include?(">= 0")
246
+
247
+ gemspec_dep = [dep, current].find(&:gemspec_dev_dep?)
248
+ if gemspec_dep
249
+ gemfile_dep = [dep, current].find(&:gemfile_dep?)
250
+
251
+ if gemfile_dep && !current_requirement_open
252
+ Bundler.ui.warn "A gemspec development dependency (#{gemspec_dep.name}, #{gemspec_dep.requirement}) is being overridden by a Gemfile dependency (#{gemfile_dep.name}, #{gemfile_dep.requirement}).\n" \
253
+ "This behaviour may change in the future. Please remove either of them, or make sure they both have the same requirement\n"
254
+ elsif gemfile_dep.nil?
255
+ require_relative "vendor/pub_grub/lib/pub_grub/version_range"
256
+ require_relative "vendor/pub_grub/lib/pub_grub/version_constraint"
257
+ require_relative "vendor/pub_grub/lib/pub_grub/version_union"
258
+ require_relative "vendor/pub_grub/lib/pub_grub/rubygems"
259
+
260
+ current_gemspec_range = PubGrub::RubyGems.requirement_to_range(current.requirement)
261
+ next_gemspec_range = PubGrub::RubyGems.requirement_to_range(dep.requirement)
262
+
263
+ if current_gemspec_range.intersects?(next_gemspec_range)
264
+ dep = Dependency.new(name, current.requirement.as_list + dep.requirement.as_list, options)
265
+ else
266
+ raise GemfileError, "Two gemspec development dependencies have conflicting requirements on the same gem: #{dep} and #{current}"
267
+ end
268
+ end
269
+ else
270
+ update_prompt = ""
271
+
272
+ if File.basename(@gemfile) == Injector::INJECTED_GEMS
273
+ if dep.requirements_list.include?(">= 0") && !current_requirement_open
274
+ update_prompt = ". Gem already added"
275
+ else
276
+ update_prompt = ". If you want to update the gem version, run `bundle update #{current.name}`"
277
+
278
+ update_prompt += ". You may also need to change the version requirement specified in the Gemfile if it's too restrictive." unless current_requirement_open
279
+ end
280
+ end
281
+
282
+ raise GemfileError, "You cannot specify the same gem twice with different version requirements.\n" \
283
+ "You specified: #{current.name} (#{current.requirement}) and #{dep.name} (#{dep.requirement})" \
284
+ "#{update_prompt}"
285
+ end
286
+ end
287
+
288
+ unless current.gemspec_dev_dep? && dep.gemspec_dev_dep?
289
+ # Always prefer the dependency from the Gemfile
290
+ if current.gemspec_dev_dep?
291
+ @dependencies.delete(current)
292
+ elsif dep.gemspec_dev_dep?
293
+ return
294
+ elsif current.source != dep.source
295
+ raise GemfileError, "You cannot specify the same gem twice coming from different sources.\n" \
296
+ "You specified that #{dep.name} (#{dep.requirement}) should come from " \
297
+ "#{current.source || "an unspecified source"} and #{dep.source}\n"
298
+ else
299
+ Bundler.ui.warn "Your Gemfile lists the gem #{current.name} (#{current.requirement}) more than once.\n" \
300
+ "You should probably keep only one of them.\n" \
301
+ "Remove any duplicate entries and specify the gem only once.\n" \
302
+ "While it's not a problem now, it could cause errors if you change the version of one of them later."
303
+ end
304
+ end
305
+ end
306
+
307
+ @dependencies << dep
308
+ end
309
+
310
+ def with_gemfile(gemfile)
311
+ expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile&.parent)
312
+ original_gemfile = @gemfile
313
+ @gemfile = expanded_gemfile_path
314
+ @gemfiles << expanded_gemfile_path
315
+ yield @gemfile.to_s
316
+ ensure
317
+ @gemfile = original_gemfile
318
+ end
319
+
287
320
  def add_git_sources
288
321
  git_source(:github) do |repo_name|
289
322
  if repo_name =~ GITHUB_PULL_REQUEST_URL
@@ -308,6 +341,20 @@ module Bundler
308
341
  repo_name ||= user_name
309
342
  "https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
310
343
  end
344
+
345
+ git_source(:gitlab) do |repo_name|
346
+ if repo_name =~ GITLAB_MERGE_REQUEST_URL
347
+ {
348
+ "git" => "https://gitlab.com/#{$1}.git",
349
+ "branch" => nil,
350
+ "ref" => "refs/merge-requests/#{$2}/head",
351
+ "tag" => nil,
352
+ }
353
+ else
354
+ repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
355
+ "https://gitlab.com/#{repo_name}.git"
356
+ end
357
+ end
311
358
  end
312
359
 
313
360
  def with_source(source)
@@ -392,8 +439,6 @@ module Bundler
392
439
  opts["source"] = source
393
440
  end
394
441
 
395
- opts["source"] ||= @source
396
- opts["env"] ||= @env
397
442
  opts["platforms"] = platforms.dup
398
443
  opts["group"] = groups
399
444
  opts["should_include"] = install_if
@@ -462,18 +507,7 @@ module Bundler
462
507
  end
463
508
 
464
509
  def check_rubygems_source_safety
465
- if @sources.implicit_global_source?
466
- implicit_global_source_warning
467
- elsif @sources.aggregate_global_source?
468
- multiple_global_source_warning
469
- end
470
- end
471
-
472
- def implicit_global_source_warning
473
- Bundler::SharedHelpers.major_deprecation 2, "This Gemfile does not include an explicit global source. " \
474
- "Not using an explicit global source may result in a different lockfile being generated depending on " \
475
- "the gems you have installed locally before bundler is run. " \
476
- "Instead, define a global source in your Gemfile like this: source \"https://rubygems.org\"."
510
+ multiple_global_source_warning if @sources.aggregate_global_source?
477
511
  end
478
512
 
479
513
  def multiple_global_source_warning
@@ -562,23 +596,23 @@ module Bundler
562
596
 
563
597
  return m unless backtrace && dsl_path && contents
564
598
 
565
- trace_line = backtrace.find {|l| l.include?(dsl_path.to_s) } || trace_line
599
+ trace_line = backtrace.find {|l| l.include?(dsl_path) } || trace_line
566
600
  return m unless trace_line
567
- line_numer = trace_line.split(":")[1].to_i - 1
568
- return m unless line_numer
601
+ line_number = trace_line.split(":")[1].to_i - 1
602
+ return m unless line_number
569
603
 
570
604
  lines = contents.lines.to_a
571
605
  indent = " # "
572
606
  indicator = indent.tr("#", ">")
573
- first_line = line_numer.zero?
574
- last_line = (line_numer == (lines.count - 1))
607
+ first_line = line_number.zero?
608
+ last_line = (line_number == (lines.count - 1))
575
609
 
576
610
  m << "\n"
577
611
  m << "#{indent}from #{trace_line.gsub(/:in.*$/, "")}\n"
578
612
  m << "#{indent}-------------------------------------------\n"
579
- m << "#{indent}#{lines[line_numer - 1]}" unless first_line
580
- m << "#{indicator}#{lines[line_numer]}"
581
- m << "#{indent}#{lines[line_numer + 1]}" unless last_line
613
+ m << "#{indent}#{lines[line_number - 1]}" unless first_line
614
+ m << "#{indicator}#{lines[line_number]}"
615
+ m << "#{indent}#{lines[line_number + 1]}" unless last_line
582
616
  m << "\n" unless m.end_with?("\n")
583
617
  m << "#{indent}-------------------------------------------\n"
584
618
  end
@@ -588,7 +622,7 @@ module Bundler
588
622
 
589
623
  def parse_line_number_from_description
590
624
  description = self.description
591
- if dsl_path && description =~ /((#{Regexp.quote File.expand_path(dsl_path)}|#{Regexp.quote dsl_path.to_s}):\d+)/
625
+ if dsl_path && description =~ /((#{Regexp.quote File.expand_path(dsl_path)}|#{Regexp.quote dsl_path}):\d+)/
592
626
  trace_line = Regexp.last_match[1]
593
627
  description = description.sub(/\n.*\n(\.\.\.)? *\^~+$/, "").sub(/#{Regexp.quote trace_line}:\s*/, "").sub("\n", " - ")
594
628
  end
@@ -6,7 +6,8 @@ module Bundler
6
6
  include MatchRemoteMetadata
7
7
 
8
8
  attr_reader :name, :version, :platform, :checksum
9
- attr_accessor :source, :remote, :dependencies
9
+ attr_writer :dependencies
10
+ attr_accessor :remote, :locked_platform
10
11
 
11
12
  def initialize(name, version, platform, spec_fetcher, dependencies, metadata = nil)
12
13
  super()
@@ -14,18 +15,29 @@ module Bundler
14
15
  @version = Gem::Version.create version
15
16
  @platform = Gem::Platform.new(platform)
16
17
  @spec_fetcher = spec_fetcher
17
- @dependencies = dependencies.map {|dep, reqs| build_dependency(dep, reqs) }
18
+ @dependencies = nil
19
+ @unbuilt_dependencies = dependencies
18
20
 
19
21
  @loaded_from = nil
20
22
  @remote_specification = nil
23
+ @locked_platform = nil
21
24
 
22
25
  parse_metadata(metadata)
23
26
  end
24
27
 
28
+ def insecurely_materialized?
29
+ @locked_platform.to_s != @platform.to_s
30
+ end
31
+
25
32
  def fetch_platform
26
33
  @platform
27
34
  end
28
35
 
36
+ def dependencies
37
+ @dependencies ||= @unbuilt_dependencies.map! {|dep, reqs| build_dependency(dep, reqs) }
38
+ end
39
+ alias_method :runtime_dependencies, :dependencies
40
+
29
41
  # needed for standalone, load required_paths from local gemspec
30
42
  # after the gem is installed
31
43
  def require_paths
@@ -92,6 +104,17 @@ module Bundler
92
104
  end
93
105
  end
94
106
 
107
+ # needed for `bundle fund`
108
+ def metadata
109
+ if @remote_specification
110
+ @remote_specification.metadata
111
+ elsif _local_specification
112
+ _local_specification.metadata
113
+ else
114
+ super
115
+ end
116
+ end
117
+
95
118
  def _local_specification
96
119
  return unless @loaded_from && File.exist?(local_specification_path)
97
120
  eval(File.read(local_specification_path), nil, local_specification_path).tap do |spec|
@@ -104,6 +127,10 @@ module Bundler
104
127
  @remote_specification = spec
105
128
  end
106
129
 
130
+ def inspect
131
+ "#<#{self.class} @name=\"#{name}\" (#{full_name.delete_prefix("#{name}-")})>"
132
+ end
133
+
107
134
  private
108
135
 
109
136
  def _remote_specification
@@ -141,7 +168,7 @@ module Bundler
141
168
  end
142
169
 
143
170
  def build_dependency(name, requirements)
144
- Gem::Dependency.new(name, requirements)
171
+ Dependency.new(name, requirements)
145
172
  end
146
173
  end
147
174
  end
@@ -120,7 +120,7 @@ module Bundler
120
120
  specs = Bundler.rubygems.find_name(name)
121
121
  out << [" #{name}", "(#{specs.map(&:version).join(",")})"] unless specs.empty?
122
122
  end
123
- if (exe = caller.last.split(":").first)&.match? %r{(exe|bin)/bundler?\z}
123
+ if (exe = caller_locations.last.absolute_path)&.match? %r{(exe|bin)/bundler?\z}
124
124
  shebang = File.read(exe).lines.first
125
125
  shebang.sub!(/^#!\s*/, "")
126
126
  unless shebang.start_with?(Gem.ruby, "/usr/bin/env ruby")
@@ -19,14 +19,7 @@ module Bundler
19
19
  BUNDLER_PREFIX = "BUNDLER_ORIG_"
20
20
 
21
21
  def self.from_env
22
- new(env_to_hash(ENV), BUNDLER_KEYS)
23
- end
24
-
25
- def self.env_to_hash(env)
26
- to_hash = env.to_hash
27
- return to_hash unless Gem.win_platform?
28
-
29
- to_hash.each_with_object({}) {|(k,v), a| a[k.upcase] = v }
22
+ new(ENV.to_hash, BUNDLER_KEYS)
30
23
  end
31
24
 
32
25
  # @param env [Hash]
@@ -39,18 +32,7 @@ module Bundler
39
32
 
40
33
  # Replaces `ENV` with the bundler environment variables backed up
41
34
  def replace_with_backup
42
- unless Gem.win_platform?
43
- ENV.replace(backup)
44
- return
45
- end
46
-
47
- # Fallback logic for Windows below to workaround
48
- # https://bugs.ruby-lang.org/issues/16798. Can be dropped once all
49
- # supported rubies include the fix for that.
50
-
51
- ENV.clear
52
-
53
- backup.each {|k, v| ENV[k] = v }
35
+ ENV.replace(backup)
54
36
  end
55
37
 
56
38
  # @return [Hash]
@@ -58,9 +40,9 @@ module Bundler
58
40
  env = @original.clone
59
41
  @keys.each do |key|
60
42
  value = env[key]
61
- if !value.nil? && !value.empty?
43
+ if !value.nil?
62
44
  env[@prefix + key] ||= value
63
- elsif value.nil?
45
+ else
64
46
  env[@prefix + key] ||= INTENTIONALLY_NIL
65
47
  end
66
48
  end
@@ -72,7 +54,7 @@ module Bundler
72
54
  env = @original.clone
73
55
  @keys.each do |key|
74
56
  value_original = env[@prefix + key]
75
- next if value_original.nil? || value_original.empty?
57
+ next if value_original.nil?
76
58
  if value_original == INTENTIONALLY_NIL
77
59
  env.delete(key)
78
60
  else