rubygems-update 3.5.3 → 3.7.1

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 (437) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1410 -686
  3. data/CODE_OF_CONDUCT.md +79 -28
  4. data/CONTRIBUTING.md +4 -226
  5. data/Manifest.txt +107 -83
  6. data/README.md +16 -11
  7. data/SECURITY.md +7 -0
  8. data/bundler/CHANGELOG.md +1525 -931
  9. data/bundler/README.md +9 -9
  10. data/bundler/bundler.gemspec +2 -2
  11. data/bundler/lib/bundler/build_metadata.rb +10 -11
  12. data/bundler/lib/bundler/checksum.rb +22 -12
  13. data/bundler/lib/bundler/cli/add.rb +3 -1
  14. data/bundler/lib/bundler/cli/binstubs.rb +1 -1
  15. data/bundler/lib/bundler/cli/check.rb +3 -3
  16. data/bundler/lib/bundler/cli/common.rb +1 -1
  17. data/bundler/lib/bundler/cli/config.rb +2 -2
  18. data/bundler/lib/bundler/cli/console.rb +8 -10
  19. data/bundler/lib/bundler/cli/doctor/diagnose.rb +167 -0
  20. data/bundler/lib/bundler/cli/doctor/ssl.rb +249 -0
  21. data/bundler/lib/bundler/cli/doctor.rb +27 -151
  22. data/bundler/lib/bundler/cli/exec.rb +1 -0
  23. data/bundler/lib/bundler/cli/fund.rb +1 -1
  24. data/bundler/lib/bundler/cli/gem.rb +74 -46
  25. data/bundler/lib/bundler/cli/info.rb +6 -6
  26. data/bundler/lib/bundler/cli/inject.rb +3 -3
  27. data/bundler/lib/bundler/cli/install.rb +19 -10
  28. data/bundler/lib/bundler/cli/issue.rb +3 -3
  29. data/bundler/lib/bundler/cli/lock.rb +32 -11
  30. data/bundler/lib/bundler/cli/outdated.rb +23 -23
  31. data/bundler/lib/bundler/cli/plugin.rb +3 -2
  32. data/bundler/lib/bundler/cli/pristine.rb +1 -1
  33. data/bundler/lib/bundler/cli/show.rb +3 -3
  34. data/bundler/lib/bundler/cli/update.rb +3 -3
  35. data/bundler/lib/bundler/cli.rb +75 -145
  36. data/bundler/lib/bundler/compact_index_client/cache.rb +48 -73
  37. data/bundler/lib/bundler/compact_index_client/cache_file.rb +0 -5
  38. data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
  39. data/bundler/lib/bundler/compact_index_client/updater.rb +6 -16
  40. data/bundler/lib/bundler/compact_index_client.rb +52 -85
  41. data/bundler/lib/bundler/constants.rb +8 -1
  42. data/bundler/lib/bundler/current_ruby.rb +48 -34
  43. data/bundler/lib/bundler/definition.rb +501 -328
  44. data/bundler/lib/bundler/dependency.rb +93 -47
  45. data/bundler/lib/bundler/dsl.rb +147 -103
  46. data/bundler/lib/bundler/endpoint_specification.rb +30 -3
  47. data/bundler/lib/bundler/env.rb +1 -1
  48. data/bundler/lib/bundler/environment_preserver.rb +5 -23
  49. data/bundler/lib/bundler/errors.rb +53 -5
  50. data/bundler/lib/bundler/feature_flag.rb +18 -18
  51. data/bundler/lib/bundler/fetcher/compact_index.rb +16 -25
  52. data/bundler/lib/bundler/fetcher/dependency.rb +2 -1
  53. data/bundler/lib/bundler/fetcher/downloader.rb +34 -8
  54. data/bundler/lib/bundler/fetcher.rb +63 -26
  55. data/bundler/lib/bundler/force_platform.rb +0 -2
  56. data/bundler/lib/bundler/friendly_errors.rb +3 -2
  57. data/bundler/lib/bundler/gem_helper.rb +1 -1
  58. data/bundler/lib/bundler/gem_version_promoter.rb +42 -40
  59. data/bundler/lib/bundler/index.rb +7 -2
  60. data/bundler/lib/bundler/injector.rb +14 -16
  61. data/bundler/lib/bundler/inline.rb +42 -17
  62. data/bundler/lib/bundler/installer/gem_installer.rb +4 -3
  63. data/bundler/lib/bundler/installer/parallel_installer.rb +3 -2
  64. data/bundler/lib/bundler/installer/standalone.rb +2 -5
  65. data/bundler/lib/bundler/installer.rb +22 -45
  66. data/bundler/lib/bundler/lazy_specification.rb +121 -48
  67. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  68. data/bundler/lib/bundler/lockfile_parser.rb +36 -9
  69. data/bundler/lib/bundler/man/bundle-add.1 +44 -27
  70. data/bundler/lib/bundler/man/bundle-add.1.ronn +52 -23
  71. data/bundler/lib/bundler/man/bundle-binstubs.1 +9 -6
  72. data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
  73. data/bundler/lib/bundler/man/bundle-cache.1 +32 -4
  74. data/bundler/lib/bundler/man/bundle-cache.1.ronn +31 -2
  75. data/bundler/lib/bundler/man/bundle-check.1 +7 -5
  76. data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
  77. data/bundler/lib/bundler/man/bundle-clean.1 +3 -3
  78. data/bundler/lib/bundler/man/bundle-config.1 +180 -138
  79. data/bundler/lib/bundler/man/bundle-config.1.ronn +96 -99
  80. data/bundler/lib/bundler/man/bundle-console.1 +4 -6
  81. data/bundler/lib/bundler/man/bundle-console.1.ronn +2 -7
  82. data/bundler/lib/bundler/man/bundle-doctor.1 +46 -7
  83. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +49 -5
  84. data/bundler/lib/bundler/man/bundle-env.1 +9 -0
  85. data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
  86. data/bundler/lib/bundler/man/bundle-exec.1 +9 -6
  87. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -3
  88. data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
  89. data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
  90. data/bundler/lib/bundler/man/bundle-gem.1 +69 -28
  91. data/bundler/lib/bundler/man/bundle-gem.1.ronn +42 -6
  92. data/bundler/lib/bundler/man/bundle-help.1 +3 -3
  93. data/bundler/lib/bundler/man/bundle-info.1 +7 -4
  94. data/bundler/lib/bundler/man/bundle-info.1.ronn +6 -2
  95. data/bundler/lib/bundler/man/bundle-init.1 +5 -5
  96. data/bundler/lib/bundler/man/bundle-init.1.ronn +3 -2
  97. data/bundler/lib/bundler/man/bundle-inject.1 +13 -5
  98. data/bundler/lib/bundler/man/bundle-inject.1.ronn +10 -2
  99. data/bundler/lib/bundler/man/bundle-install.1 +20 -17
  100. data/bundler/lib/bundler/man/bundle-install.1.ronn +26 -23
  101. data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
  102. data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
  103. data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
  104. data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  105. data/bundler/lib/bundler/man/bundle-list.1 +3 -3
  106. data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
  107. data/bundler/lib/bundler/man/bundle-lock.1 +23 -8
  108. data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
  109. data/bundler/lib/bundler/man/bundle-open.1 +4 -4
  110. data/bundler/lib/bundler/man/bundle-open.1.ronn +2 -1
  111. data/bundler/lib/bundler/man/bundle-outdated.1 +10 -7
  112. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +8 -4
  113. data/bundler/lib/bundler/man/bundle-platform.1 +3 -3
  114. data/bundler/lib/bundler/man/bundle-plugin.1 +9 -6
  115. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +7 -3
  116. data/bundler/lib/bundler/man/bundle-pristine.1 +3 -3
  117. data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
  118. data/bundler/lib/bundler/man/bundle-remove.1 +3 -3
  119. data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
  120. data/bundler/lib/bundler/man/bundle-show.1 +7 -4
  121. data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
  122. data/bundler/lib/bundler/man/bundle-update.1 +17 -11
  123. data/bundler/lib/bundler/man/bundle-update.1.ronn +17 -9
  124. data/bundler/lib/bundler/man/bundle-version.1 +3 -3
  125. data/bundler/lib/bundler/man/bundle-viz.1 +6 -6
  126. data/bundler/lib/bundler/man/bundle-viz.1.ronn +7 -3
  127. data/bundler/lib/bundler/man/bundle.1 +3 -3
  128. data/bundler/lib/bundler/man/gemfile.5 +7 -5
  129. data/bundler/lib/bundler/man/gemfile.5.ronn +8 -2
  130. data/bundler/lib/bundler/man/index.txt +4 -0
  131. data/bundler/lib/bundler/match_metadata.rb +13 -0
  132. data/bundler/lib/bundler/match_platform.rb +31 -12
  133. data/bundler/lib/bundler/materialization.rb +59 -0
  134. data/bundler/lib/bundler/mirror.rb +3 -3
  135. data/bundler/lib/bundler/plugin/api/source.rb +5 -4
  136. data/bundler/lib/bundler/plugin/events.rb +24 -0
  137. data/bundler/lib/bundler/plugin/index.rb +5 -1
  138. data/bundler/lib/bundler/plugin/installer/path.rb +26 -0
  139. data/bundler/lib/bundler/plugin/installer.rb +37 -17
  140. data/bundler/lib/bundler/plugin/source_list.rb +4 -4
  141. data/bundler/lib/bundler/plugin.rb +21 -2
  142. data/bundler/lib/bundler/process_lock.rb +10 -14
  143. data/bundler/lib/bundler/remote_specification.rb +6 -1
  144. data/bundler/lib/bundler/resolver/base.rb +14 -3
  145. data/bundler/lib/bundler/resolver/candidate.rb +18 -27
  146. data/bundler/lib/bundler/resolver/package.rb +20 -3
  147. data/bundler/lib/bundler/resolver/spec_group.rb +22 -27
  148. data/bundler/lib/bundler/resolver/strategy.rb +40 -0
  149. data/bundler/lib/bundler/resolver.rb +114 -52
  150. data/bundler/lib/bundler/retry.rb +1 -1
  151. data/bundler/lib/bundler/ruby_dsl.rb +12 -3
  152. data/bundler/lib/bundler/ruby_version.rb +7 -1
  153. data/bundler/lib/bundler/rubygems_ext.rb +303 -150
  154. data/bundler/lib/bundler/rubygems_gem_installer.rb +40 -5
  155. data/bundler/lib/bundler/rubygems_integration.rb +40 -73
  156. data/bundler/lib/bundler/runtime.rb +48 -35
  157. data/bundler/lib/bundler/self_manager.rb +36 -26
  158. data/bundler/lib/bundler/settings/validator.rb +0 -23
  159. data/bundler/lib/bundler/settings.rb +36 -27
  160. data/bundler/lib/bundler/setup.rb +6 -0
  161. data/bundler/lib/bundler/shared_helpers.rb +45 -25
  162. data/bundler/lib/bundler/source/gemspec.rb +1 -4
  163. data/bundler/lib/bundler/source/git/git_proxy.rb +26 -9
  164. data/bundler/lib/bundler/source/git.rb +113 -41
  165. data/bundler/lib/bundler/source/metadata.rb +4 -3
  166. data/bundler/lib/bundler/source/path.rb +14 -18
  167. data/bundler/lib/bundler/source/rubygems/remote.rb +12 -4
  168. data/bundler/lib/bundler/source/rubygems.rb +54 -48
  169. data/bundler/lib/bundler/source.rb +2 -0
  170. data/bundler/lib/bundler/source_list.rb +54 -12
  171. data/bundler/lib/bundler/source_map.rb +1 -1
  172. data/bundler/lib/bundler/spec_set.rb +227 -103
  173. data/bundler/lib/bundler/stub_specification.rb +29 -2
  174. data/bundler/lib/bundler/templates/Executable +0 -11
  175. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
  176. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +1 -3
  177. data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -3
  178. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +17 -15
  179. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +14 -12
  180. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
  181. data/bundler/lib/bundler/ui/shell.rb +26 -4
  182. data/bundler/lib/bundler/ui/silent.rb +12 -1
  183. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
  184. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +53 -3
  185. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  186. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +11 -0
  187. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +15 -13
  188. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  189. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +2 -1
  190. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +134 -57
  191. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +4 -24
  192. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +1 -0
  193. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
  194. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +20 -8
  195. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +17 -29
  196. data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
  197. data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  198. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +3 -5
  199. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +11 -0
  200. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +1 -4
  201. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +2 -2
  202. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +2 -1
  203. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +9 -9
  204. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
  205. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +5 -21
  206. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  207. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  208. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +11 -0
  209. data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
  210. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +43 -16
  211. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +3 -3
  212. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +1 -1
  213. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +28 -37
  214. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +2 -2
  215. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -9
  216. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +26 -3
  217. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  218. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +9 -9
  219. data/bundler/lib/bundler/vendored_net_http.rb +20 -5
  220. data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
  221. data/bundler/lib/bundler/vendored_timeout.rb +7 -3
  222. data/bundler/lib/bundler/vendored_uri.rb +18 -1
  223. data/bundler/lib/bundler/version.rb +10 -2
  224. data/bundler/lib/bundler/worker.rb +1 -1
  225. data/bundler/lib/bundler/yaml_serializer.rb +12 -7
  226. data/bundler/lib/bundler.rb +101 -61
  227. data/{bundler → doc/bundler}/UPGRADING.md +132 -127
  228. data/doc/rubygems/CONTRIBUTING.md +227 -0
  229. data/{POLICIES.md → doc/rubygems/POLICIES.md} +86 -17
  230. data/exe/update_rubygems +1 -1
  231. data/lib/rubygems/basic_specification.rb +50 -10
  232. data/lib/rubygems/bundler_version_finder.rb +1 -1
  233. data/lib/rubygems/command.rb +1 -4
  234. data/lib/rubygems/command_manager.rb +5 -6
  235. data/lib/rubygems/commands/build_command.rb +2 -11
  236. data/lib/rubygems/commands/cleanup_command.rb +3 -13
  237. data/lib/rubygems/commands/contents_command.rb +17 -10
  238. data/lib/rubygems/commands/environment_command.rb +5 -0
  239. data/lib/rubygems/commands/exec_command.rb +18 -11
  240. data/lib/rubygems/commands/fetch_command.rb +14 -0
  241. data/lib/rubygems/commands/help_command.rb +2 -2
  242. data/lib/rubygems/commands/install_command.rb +0 -4
  243. data/lib/rubygems/commands/pristine_command.rb +29 -19
  244. data/lib/rubygems/commands/push_command.rb +31 -6
  245. data/lib/rubygems/commands/rdoc_command.rb +3 -10
  246. data/lib/rubygems/commands/rebuild_command.rb +262 -0
  247. data/lib/rubygems/commands/setup_command.rb +13 -18
  248. data/lib/rubygems/commands/sources_command.rb +2 -2
  249. data/lib/rubygems/commands/uninstall_command.rb +9 -4
  250. data/lib/rubygems/commands/unpack_command.rb +0 -6
  251. data/lib/rubygems/commands/update_command.rb +13 -22
  252. data/lib/rubygems/config_file.rb +45 -16
  253. data/lib/rubygems/core_ext/kernel_require.rb +15 -3
  254. data/lib/rubygems/core_ext/kernel_warn.rb +2 -6
  255. data/lib/rubygems/defaults.rb +7 -7
  256. data/lib/rubygems/dependency.rb +12 -16
  257. data/lib/rubygems/dependency_list.rb +1 -1
  258. data/lib/rubygems/deprecate.rb +79 -77
  259. data/lib/rubygems/errors.rb +2 -1
  260. data/lib/rubygems/exceptions.rb +2 -9
  261. data/lib/rubygems/ext/builder.rb +21 -8
  262. data/lib/rubygems/ext/cargo_builder.rb +16 -26
  263. data/lib/rubygems/ext/cmake_builder.rb +7 -2
  264. data/lib/rubygems/ext/configure_builder.rb +7 -2
  265. data/lib/rubygems/ext/ext_conf_builder.rb +9 -5
  266. data/lib/rubygems/ext/rake_builder.rb +7 -4
  267. data/lib/rubygems/gem_runner.rb +9 -0
  268. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +11 -4
  269. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -1
  270. data/lib/rubygems/gemcutter_utilities.rb +52 -26
  271. data/lib/rubygems/gemspec_helpers.rb +19 -0
  272. data/lib/rubygems/install_update_options.rb +5 -0
  273. data/lib/rubygems/installer.rb +76 -90
  274. data/lib/rubygems/local_remote_options.rb +8 -8
  275. data/lib/rubygems/package/tar_header.rb +31 -4
  276. data/lib/rubygems/package/tar_reader/entry.rb +1 -5
  277. data/lib/rubygems/package/tar_writer.rb +5 -4
  278. data/lib/rubygems/package.rb +13 -8
  279. data/lib/rubygems/platform.rb +148 -43
  280. data/lib/rubygems/psych_tree.rb +4 -0
  281. data/lib/rubygems/query_utils.rb +2 -2
  282. data/lib/rubygems/rdoc.rb +16 -3
  283. data/lib/rubygems/remote_fetcher.rb +6 -7
  284. data/lib/rubygems/request.rb +5 -5
  285. data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
  286. data/lib/rubygems/request_set.rb +4 -7
  287. data/lib/rubygems/requirement.rb +16 -12
  288. data/lib/rubygems/resolver/activation_request.rb +1 -1
  289. data/lib/rubygems/resolver/api_set/gem_parser.rb +2 -5
  290. data/lib/rubygems/resolver/api_set.rb +13 -8
  291. data/lib/rubygems/resolver/best_set.rb +1 -29
  292. data/lib/rubygems/resolver/composed_set.rb +3 -3
  293. data/lib/rubygems/resolver/git_set.rb +0 -1
  294. data/lib/rubygems/resolver/index_set.rb +2 -2
  295. data/lib/rubygems/resolver/source_set.rb +1 -1
  296. data/lib/rubygems/resolver/spec_specification.rb +7 -0
  297. data/lib/rubygems/resolver.rb +8 -8
  298. data/lib/rubygems/s3_uri_signer.rb +8 -6
  299. data/lib/rubygems/safe_marshal/reader.rb +31 -14
  300. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +29 -16
  301. data/lib/rubygems/safe_yaml.rb +10 -1
  302. data/lib/rubygems/security.rb +1 -1
  303. data/lib/rubygems/source/git.rb +22 -17
  304. data/lib/rubygems/source/installed.rb +3 -1
  305. data/lib/rubygems/source/local.rb +8 -4
  306. data/lib/rubygems/source/specific_file.rb +5 -3
  307. data/lib/rubygems/source.rb +37 -29
  308. data/lib/rubygems/source_list.rb +1 -1
  309. data/lib/rubygems/spec_fetcher.rb +47 -15
  310. data/lib/rubygems/specification.rb +110 -183
  311. data/lib/rubygems/specification_policy.rb +33 -13
  312. data/lib/rubygems/specification_record.rb +212 -0
  313. data/lib/rubygems/stub_specification.rb +32 -10
  314. data/lib/rubygems/target_rbconfig.rb +50 -0
  315. data/lib/rubygems/uninstaller.rb +42 -22
  316. data/lib/rubygems/uri.rb +6 -6
  317. data/lib/rubygems/uri_formatter.rb +2 -1
  318. data/lib/rubygems/util/licenses.rb +118 -1
  319. data/lib/rubygems/util.rb +1 -1
  320. data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  321. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
  322. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
  323. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  324. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  325. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  326. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  327. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
  328. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  329. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
  330. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
  331. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph.rb +2 -2
  332. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/errors.rb +1 -1
  333. data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
  334. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
  335. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/ui.rb +1 -1
  336. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolution.rb +4 -4
  337. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolver.rb +1 -1
  338. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/state.rb +1 -1
  339. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo.rb +2 -2
  340. data/lib/rubygems/vendor/net-http/COPYING +56 -0
  341. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/generic_request.rb +9 -9
  342. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/header.rb +3 -3
  343. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/request.rb +3 -3
  344. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/requests.rb +35 -30
  345. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/response.rb +2 -2
  346. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/responses.rb +6 -6
  347. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/status.rb +1 -1
  348. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http.rb +149 -70
  349. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/https.rb +1 -1
  350. data/lib/rubygems/vendor/optparse/COPYING +56 -0
  351. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
  352. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
  353. data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
  354. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
  355. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +158 -62
  356. data/lib/rubygems/vendor/resolv/COPYING +56 -0
  357. data/lib/rubygems/{resolv → vendor/resolv}/lib/resolv.rb +165 -69
  358. data/lib/rubygems/vendor/securerandom/COPYING +56 -0
  359. data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
  360. data/lib/rubygems/vendor/timeout/COPYING +56 -0
  361. data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +10 -11
  362. data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
  363. data/lib/rubygems/vendor/uri/COPYING +56 -0
  364. data/lib/rubygems/vendor/uri/lib/uri/common.rb +880 -0
  365. data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
  366. data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
  367. data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1579 -0
  368. data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
  369. data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
  370. data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
  371. data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
  372. data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
  373. data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  374. data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
  375. data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
  376. data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
  377. data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
  378. data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
  379. data/lib/rubygems/vendored_molinillo.rb +3 -0
  380. data/lib/rubygems/vendored_net_http.rb +5 -0
  381. data/lib/rubygems/vendored_optparse.rb +3 -0
  382. data/lib/rubygems/vendored_securerandom.rb +3 -0
  383. data/lib/rubygems/vendored_timeout.rb +5 -0
  384. data/lib/rubygems/vendored_tsort.rb +3 -0
  385. data/lib/rubygems/version.rb +26 -9
  386. data/lib/rubygems/yaml_serializer.rb +12 -7
  387. data/lib/rubygems.rb +160 -53
  388. data/rubygems-update.gemspec +11 -6
  389. data/setup.rb +1 -1
  390. metadata +124 -96
  391. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +0 -32
  392. data/bundler/lib/bundler/gem_helpers.rb +0 -127
  393. data/bundler/lib/bundler/templates/Executable.bundler +0 -109
  394. data/bundler/lib/bundler/vendor/fileutils/.document +0 -1
  395. data/bundler/lib/bundler/vendor/net-http-persistent/.document +0 -1
  396. data/bundler/lib/bundler/vendor/pub_grub/.document +0 -1
  397. data/bundler/lib/bundler/vendor/thor/.document +0 -1
  398. data/bundler/lib/bundler/vendor/tsort/.document +0 -1
  399. data/bundler/lib/bundler/vendor/uri/.document +0 -1
  400. data/lib/rubygems/net/http.rb +0 -3
  401. data/lib/rubygems/net-http/.document +0 -1
  402. data/lib/rubygems/net-http/LICENSE.txt +0 -22
  403. data/lib/rubygems/net-http/lib/net/http/backward.rb +0 -40
  404. data/lib/rubygems/net-protocol/.document +0 -1
  405. data/lib/rubygems/net-protocol/LICENSE.txt +0 -22
  406. data/lib/rubygems/optparse/.document +0 -1
  407. data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
  408. data/lib/rubygems/optparse.rb +0 -3
  409. data/lib/rubygems/resolv/.document +0 -1
  410. data/lib/rubygems/resolv/LICENSE.txt +0 -22
  411. data/lib/rubygems/resolver/molinillo/.document +0 -1
  412. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  413. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  414. data/lib/rubygems/resolver/molinillo.rb +0 -3
  415. data/lib/rubygems/shellwords.rb +0 -3
  416. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +0 -21
  417. data/lib/rubygems/timeout/.document +0 -1
  418. data/lib/rubygems/timeout/LICENSE.txt +0 -22
  419. data/lib/rubygems/timeout.rb +0 -3
  420. data/lib/rubygems/tsort/.document +0 -1
  421. data/lib/rubygems/tsort/LICENSE.txt +0 -22
  422. data/lib/rubygems/tsort.rb +0 -3
  423. /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
  424. /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
  425. /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
  426. /data/lib/rubygems/ssl_certs/rubygems.org/{GlobalSignRootCA_R3.pem → GlobalSign.pem} +0 -0
  427. /data/{bundler/lib/bundler/vendor/connection_pool → lib/rubygems/vendor}/.document +0 -0
  428. /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +0 -0
  429. /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/exceptions.rb +0 -0
  430. /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/proxy_delta.rb +0 -0
  431. /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
  432. /data/lib/rubygems/{net-protocol → vendor/net-protocol}/lib/net/protocol.rb +0 -0
  433. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
  434. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
  435. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
  436. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
  437. /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
@@ -11,6 +11,7 @@ require_relative "deprecate"
11
11
  require_relative "basic_specification"
12
12
  require_relative "stub_specification"
13
13
  require_relative "platform"
14
+ require_relative "specification_record"
14
15
  require_relative "util/list"
15
16
 
16
17
  require "rbconfig"
@@ -174,27 +175,17 @@ class Gem::Specification < Gem::BasicSpecification
174
175
  end
175
176
 
176
177
  @@attributes = @@default_value.keys.sort_by(&:to_s)
177
- @@array_attributes = @@default_value.reject {|_k,v| v != [] }.keys
178
+ @@array_attributes = @@default_value.select {|_k,v| v.is_a?(Array) }.keys
178
179
  @@nil_attributes, @@non_nil_attributes = @@default_value.keys.partition do |k|
179
180
  @@default_value[k].nil?
180
181
  end
181
182
 
182
- def self.clear_specs # :nodoc:
183
- @@all = nil
184
- @@stubs = nil
185
- @@stubs_by_name = {}
186
- @@spec_with_requirable_file = {}
187
- @@active_stub_with_requirable_file = {}
188
- end
189
- private_class_method :clear_specs
190
-
191
- clear_specs
192
-
193
183
  # Sentinel object to represent "not found" stubs
194
184
  NOT_FOUND = Struct.new(:to_spec, :this).new # :nodoc:
185
+ deprecate_constant :NOT_FOUND
195
186
 
196
187
  # Tracking removed method calls to warn users during build time.
197
- REMOVED_METHODS = [:rubyforge_project=].freeze # :nodoc:
188
+ REMOVED_METHODS = [:rubyforge_project=, :mark_version].freeze # :nodoc:
198
189
  def removed_method_calls
199
190
  @removed_method_calls ||= []
200
191
  end
@@ -301,7 +292,7 @@ class Gem::Specification < Gem::BasicSpecification
301
292
  #
302
293
  # Usage:
303
294
  #
304
- # spec.description = <<-EOF
295
+ # spec.description = <<~EOF
305
296
  # Rake is a Make-like program implemented in Ruby. Tasks and
306
297
  # dependencies are specified in standard Ruby syntax.
307
298
  # EOF
@@ -341,7 +332,7 @@ class Gem::Specification < Gem::BasicSpecification
341
332
  # https://opensource.org/licenses/ approved.
342
333
  #
343
334
  # The most commonly used OSI-approved licenses are MIT and Apache-2.0.
344
- # GitHub also provides a license picker at http://choosealicense.com/.
335
+ # GitHub also provides a license picker at https://choosealicense.com/.
345
336
  #
346
337
  # You can also use a custom license file along with your gemspec and specify
347
338
  # a LicenseRef-<idstring>, where idstring is the name of the file containing
@@ -400,7 +391,7 @@ class Gem::Specification < Gem::BasicSpecification
400
391
  # "homepage_uri" => "https://bestgemever.example.io",
401
392
  # "mailing_list_uri" => "https://groups.example.com/bestgemever",
402
393
  # "source_code_uri" => "https://example.com/user/bestgemever",
403
- # "wiki_uri" => "https://example.com/user/bestgemever/wiki"
394
+ # "wiki_uri" => "https://example.com/user/bestgemever/wiki",
404
395
  # "funding_uri" => "https://example.com/donate"
405
396
  # }
406
397
  #
@@ -473,10 +464,7 @@ class Gem::Specification < Gem::BasicSpecification
473
464
  # spec.platform = Gem::Platform.local
474
465
 
475
466
  def platform=(platform)
476
- if @original_platform.nil? ||
477
- @original_platform == Gem::Platform::RUBY
478
- @original_platform = platform
479
- end
467
+ @original_platform = platform
480
468
 
481
469
  case platform
482
470
  when Gem::Platform::CURRENT then
@@ -555,9 +543,9 @@ class Gem::Specification < Gem::BasicSpecification
555
543
  #
556
544
  # Usage:
557
545
  #
558
- # spec.add_runtime_dependency 'example', '~> 1.1', '>= 1.1.4'
546
+ # spec.add_dependency 'example', '~> 1.1', '>= 1.1.4'
559
547
 
560
- def add_runtime_dependency(gem, *requirements)
548
+ def add_dependency(gem, *requirements)
561
549
  if requirements.uniq.size != requirements.size
562
550
  warn "WARNING: duplicated #{gem} dependency #{requirements}"
563
551
  end
@@ -770,7 +758,7 @@ class Gem::Specification < Gem::BasicSpecification
770
758
  attr_accessor :specification_version
771
759
 
772
760
  def self._all # :nodoc:
773
- @@all ||= Gem.loaded_specs.values | stubs.map(&:to_spec)
761
+ specification_record.all
774
762
  end
775
763
 
776
764
  def self.clear_load_cache # :nodoc:
@@ -780,6 +768,11 @@ class Gem::Specification < Gem::BasicSpecification
780
768
  end
781
769
  private_class_method :clear_load_cache
782
770
 
771
+ def self.gem_path # :nodoc:
772
+ Gem.path
773
+ end
774
+ private_class_method :gem_path
775
+
783
776
  def self.each_gemspec(dirs) # :nodoc:
784
777
  dirs.each do |dir|
785
778
  Gem::Util.glob_files_in_dir("*.gemspec", dir).each do |path|
@@ -788,26 +781,9 @@ class Gem::Specification < Gem::BasicSpecification
788
781
  end
789
782
  end
790
783
 
791
- def self.gemspec_stubs_in(dir, pattern)
784
+ def self.gemspec_stubs_in(dir, pattern) # :nodoc:
792
785
  Gem::Util.glob_files_in_dir(pattern, dir).map {|path| yield path }.select(&:valid?)
793
786
  end
794
- private_class_method :gemspec_stubs_in
795
-
796
- def self.installed_stubs(dirs, pattern)
797
- map_stubs(dirs, pattern) do |path, base_dir, gems_dir|
798
- Gem::StubSpecification.gemspec_stub(path, base_dir, gems_dir)
799
- end
800
- end
801
- private_class_method :installed_stubs
802
-
803
- def self.map_stubs(dirs, pattern) # :nodoc:
804
- dirs.flat_map do |dir|
805
- base_dir = File.dirname dir
806
- gems_dir = File.join base_dir, "gems"
807
- gemspec_stubs_in(dir, pattern) {|path| yield path, base_dir, gems_dir }
808
- end
809
- end
810
- private_class_method :map_stubs
811
787
 
812
788
  def self.each_spec(dirs) # :nodoc:
813
789
  each_gemspec(dirs) do |path|
@@ -820,13 +796,7 @@ class Gem::Specification < Gem::BasicSpecification
820
796
  # Returns a Gem::StubSpecification for every installed gem
821
797
 
822
798
  def self.stubs
823
- @@stubs ||= begin
824
- pattern = "*.gemspec"
825
- stubs = stubs_for_pattern(pattern, false)
826
-
827
- @@stubs_by_name = stubs.select {|s| Gem::Platform.match_spec? s }.group_by(&:name)
828
- stubs
829
- end
799
+ specification_record.stubs
830
800
  end
831
801
 
832
802
  ##
@@ -845,13 +815,7 @@ class Gem::Specification < Gem::BasicSpecification
845
815
  # only returns stubs that match Gem.platforms
846
816
 
847
817
  def self.stubs_for(name)
848
- if @@stubs
849
- @@stubs_by_name[name] || []
850
- else
851
- @@stubs_by_name[name] ||= stubs_for_pattern("#{name}-*.gemspec").select do |s|
852
- s.name == name
853
- end
854
- end
818
+ specification_record.stubs_for(name)
855
819
  end
856
820
 
857
821
  ##
@@ -859,12 +823,7 @@ class Gem::Specification < Gem::BasicSpecification
859
823
  # optionally filtering out specs not matching the current platform
860
824
  #
861
825
  def self.stubs_for_pattern(pattern, match_platform = true) # :nodoc:
862
- installed_stubs = installed_stubs(Gem::Specification.dirs, pattern)
863
- installed_stubs.select! {|s| Gem::Platform.match_spec? s } if match_platform
864
- stubs = installed_stubs + default_stubs(pattern)
865
- stubs = stubs.uniq(&:full_name)
866
- _resort!(stubs)
867
- stubs
826
+ specification_record.stubs_for_pattern(pattern, match_platform)
868
827
  end
869
828
 
870
829
  def self._resort!(specs) # :nodoc:
@@ -873,7 +832,11 @@ class Gem::Specification < Gem::BasicSpecification
873
832
  next names if names.nonzero?
874
833
  versions = b.version <=> a.version
875
834
  next versions if versions.nonzero?
876
- Gem::Platform.sort_priority(b.platform)
835
+ platforms = Gem::Platform.sort_priority(b.platform) <=> Gem::Platform.sort_priority(a.platform)
836
+ next platforms if platforms.nonzero?
837
+ default_gem = a.default_gem_priority <=> b.default_gem_priority
838
+ next default_gem if default_gem.nonzero?
839
+ a.base_dir_priority(gem_path) <=> b.base_dir_priority(gem_path)
877
840
  end
878
841
  end
879
842
 
@@ -893,23 +856,14 @@ class Gem::Specification < Gem::BasicSpecification
893
856
  # properly sorted.
894
857
 
895
858
  def self.add_spec(spec)
896
- return if _all.include? spec
897
-
898
- _all << spec
899
- stubs << spec
900
- (@@stubs_by_name[spec.name] ||= []) << spec
901
-
902
- _resort!(@@stubs_by_name[spec.name])
903
- _resort!(stubs)
859
+ specification_record.add_spec(spec)
904
860
  end
905
861
 
906
862
  ##
907
863
  # Removes +spec+ from the known specs.
908
864
 
909
865
  def self.remove_spec(spec)
910
- _all.delete spec.to_spec
911
- stubs.delete spec
912
- (@@stubs_by_name[spec.name] || []).delete spec
866
+ specification_record.remove_spec(spec)
913
867
  end
914
868
 
915
869
  ##
@@ -917,33 +871,23 @@ class Gem::Specification < Gem::BasicSpecification
917
871
  # You probably want to use one of the Enumerable methods instead.
918
872
 
919
873
  def self.all
920
- warn "NOTE: Specification.all called from #{caller.first}" unless
874
+ warn "NOTE: Specification.all called from #{caller(1, 1).first}" unless
921
875
  Gem::Deprecate.skip
922
876
  _all
923
877
  end
924
878
 
925
879
  ##
926
- # Sets the known specs to +specs+. Not guaranteed to work for you in
927
- # the future. Use at your own risk. Caveat emptor. Doomy doom doom.
928
- # Etc etc.
929
- #
930
- #--
931
- # Makes +specs+ the known specs
932
- # Listen, time is a river
933
- # Winter comes, code breaks
934
- #
935
- # -- wilsonb
880
+ # Sets the known specs to +specs+.
936
881
 
937
882
  def self.all=(specs)
938
- @@stubs_by_name = specs.group_by(&:name)
939
- @@all = @@stubs = specs
883
+ specification_record.all = specs
940
884
  end
941
885
 
942
886
  ##
943
887
  # Return full names of all specs in sorted order.
944
888
 
945
889
  def self.all_names
946
- _all.map(&:full_name)
890
+ specification_record.all_names
947
891
  end
948
892
 
949
893
  ##
@@ -968,9 +912,7 @@ class Gem::Specification < Gem::BasicSpecification
968
912
  # Return the directories that Specification uses to find specs.
969
913
 
970
914
  def self.dirs
971
- @@dirs ||= Gem.path.collect do |dir|
972
- File.join dir, "specifications"
973
- end
915
+ @@dirs ||= Gem::SpecificationRecord.dirs_from(gem_path)
974
916
  end
975
917
 
976
918
  ##
@@ -980,7 +922,7 @@ class Gem::Specification < Gem::BasicSpecification
980
922
  def self.dirs=(dirs)
981
923
  reset
982
924
 
983
- @@dirs = Array(dirs).map {|dir| File.join dir, "specifications" }
925
+ @@dirs = Gem::SpecificationRecord.dirs_from(Array(dirs))
984
926
  end
985
927
 
986
928
  extend Enumerable
@@ -989,23 +931,15 @@ class Gem::Specification < Gem::BasicSpecification
989
931
  # Enumerate every known spec. See ::dirs= and ::add_spec to set the list of
990
932
  # specs.
991
933
 
992
- def self.each
993
- return enum_for(:each) unless block_given?
994
-
995
- _all.each do |x|
996
- yield x
997
- end
934
+ def self.each(&block)
935
+ specification_record.each(&block)
998
936
  end
999
937
 
1000
938
  ##
1001
939
  # Returns every spec that matches +name+ and optional +requirements+.
1002
940
 
1003
941
  def self.find_all_by_name(name, *requirements)
1004
- requirements = Gem::Requirement.default if requirements.empty?
1005
-
1006
- # TODO: maybe try: find_all { |s| spec === dep }
1007
-
1008
- Gem::Dependency.new(name, *requirements).matching_specs
942
+ specification_record.find_all_by_name(name, *requirements)
1009
943
  end
1010
944
 
1011
945
  ##
@@ -1022,8 +956,6 @@ class Gem::Specification < Gem::BasicSpecification
1022
956
  def self.find_by_name(name, *requirements)
1023
957
  requirements = Gem::Requirement.default if requirements.empty?
1024
958
 
1025
- # TODO: maybe try: find { |s| spec === dep }
1026
-
1027
959
  Gem::Dependency.new(name, *requirements).to_spec
1028
960
  end
1029
961
 
@@ -1037,12 +969,7 @@ class Gem::Specification < Gem::BasicSpecification
1037
969
  # Return the best specification that contains the file matching +path+.
1038
970
 
1039
971
  def self.find_by_path(path)
1040
- path = path.dup.freeze
1041
- spec = @@spec_with_requirable_file[path] ||= stubs.find do |s|
1042
- s.contains_requirable_file? path
1043
- end || NOT_FOUND
1044
-
1045
- spec.to_spec
972
+ specification_record.find_by_path(path)
1046
973
  end
1047
974
 
1048
975
  ##
@@ -1050,19 +977,15 @@ class Gem::Specification < Gem::BasicSpecification
1050
977
  # amongst the specs that are not activated.
1051
978
 
1052
979
  def self.find_inactive_by_path(path)
1053
- stub = stubs.find do |s|
1054
- next if s.activated?
1055
- s.contains_requirable_file? path
1056
- end
1057
- stub&.to_spec
980
+ specification_record.find_inactive_by_path(path)
1058
981
  end
1059
982
 
1060
- def self.find_active_stub_by_path(path)
1061
- stub = @@active_stub_with_requirable_file[path] ||= stubs.find do |s|
1062
- s.activated? && s.contains_requirable_file?(path)
1063
- end || NOT_FOUND
983
+ ##
984
+ # Return the best specification that contains the file matching +path+, among
985
+ # those already activated.
1064
986
 
1065
- stub.this
987
+ def self.find_active_stub_by_path(path)
988
+ specification_record.find_active_stub_by_path(path)
1066
989
  end
1067
990
 
1068
991
  ##
@@ -1079,7 +1002,7 @@ class Gem::Specification < Gem::BasicSpecification
1079
1002
  def self.find_in_unresolved_tree(path)
1080
1003
  unresolved_specs.each do |spec|
1081
1004
  spec.traverse do |_from_spec, _dep, to_spec, trail|
1082
- if to_spec.has_conflicts? || to_spec.conficts_when_loaded_with?(trail)
1005
+ if to_spec.has_conflicts? || to_spec.conflicts_when_loaded_with?(trail)
1083
1006
  :next
1084
1007
  else
1085
1008
  return trail.reverse if to_spec.contains_requirable_file? path
@@ -1091,7 +1014,7 @@ class Gem::Specification < Gem::BasicSpecification
1091
1014
  end
1092
1015
 
1093
1016
  def self.unresolved_specs
1094
- unresolved_deps.values.map(&:to_specs).flatten
1017
+ unresolved_deps.values.flat_map(&:to_specs)
1095
1018
  end
1096
1019
  private_class_method :unresolved_specs
1097
1020
 
@@ -1129,14 +1052,14 @@ class Gem::Specification < Gem::BasicSpecification
1129
1052
  # +prerelease+ is true.
1130
1053
 
1131
1054
  def self.latest_specs(prerelease = false)
1132
- _latest_specs Gem::Specification.stubs, prerelease
1055
+ specification_record.latest_specs(prerelease)
1133
1056
  end
1134
1057
 
1135
1058
  ##
1136
1059
  # Return the latest installed spec for gem +name+.
1137
1060
 
1138
1061
  def self.latest_spec_for(name)
1139
- latest_specs(true).find {|installed_spec| installed_spec.name == name }
1062
+ specification_record.latest_spec_for(name)
1140
1063
  end
1141
1064
 
1142
1065
  def self._latest_specs(specs, prerelease = false) # :nodoc:
@@ -1150,7 +1073,7 @@ class Gem::Specification < Gem::BasicSpecification
1150
1073
  result[spec.name] = spec
1151
1074
  end
1152
1075
 
1153
- result.map(&:last).flatten.sort_by(&:name)
1076
+ result.flat_map(&:last).sort_by(&:name)
1154
1077
  end
1155
1078
 
1156
1079
  ##
@@ -1274,27 +1197,43 @@ class Gem::Specification < Gem::BasicSpecification
1274
1197
  def self.reset
1275
1198
  @@dirs = nil
1276
1199
  Gem.pre_reset_hooks.each(&:call)
1277
- clear_specs
1200
+ @specification_record = nil
1278
1201
  clear_load_cache
1279
- unresolved = unresolved_deps
1280
- unless unresolved.empty?
1281
- warn "WARN: Unresolved or ambiguous specs during Gem::Specification.reset:"
1282
- unresolved.values.each do |dep|
1283
- warn " #{dep}"
1284
-
1285
- versions = find_all_by_name(dep.name)
1286
- unless versions.empty?
1287
- warn " Available/installed versions of this gem:"
1288
- versions.each {|s| warn " - #{s.version}" }
1202
+
1203
+ unless unresolved_deps.empty?
1204
+ unresolved = unresolved_deps.filter_map do |name, dep|
1205
+ matching_versions = find_all_by_name(name)
1206
+ next if dep.latest_version? && matching_versions.any?(&:default_gem?)
1207
+
1208
+ [dep, matching_versions.uniq(&:full_name)]
1209
+ end.to_h
1210
+
1211
+ unless unresolved.empty?
1212
+ warn "WARN: Unresolved or ambiguous specs during Gem::Specification.reset:"
1213
+ unresolved.each do |dep, versions|
1214
+ warn " #{dep}"
1215
+
1216
+ unless versions.empty?
1217
+ warn " Available/installed versions of this gem:"
1218
+ versions.each {|s| warn " - #{s.version}" }
1219
+ end
1289
1220
  end
1221
+ warn "WARN: Clearing out unresolved specs. Try 'gem cleanup <gem>'"
1222
+ warn "Please report a bug if this causes problems."
1290
1223
  end
1291
- warn "WARN: Clearing out unresolved specs. Try 'gem cleanup <gem>'"
1292
- warn "Please report a bug if this causes problems."
1293
- unresolved.clear
1224
+
1225
+ unresolved_deps.clear
1294
1226
  end
1295
1227
  Gem.post_reset_hooks.each(&:call)
1296
1228
  end
1297
1229
 
1230
+ ##
1231
+ # Keeps track of all currently known specifications
1232
+
1233
+ def self.specification_record
1234
+ @specification_record ||= Gem::SpecificationRecord.new(dirs)
1235
+ end
1236
+
1298
1237
  # DOC: This method needs documented or nodoc'd
1299
1238
  def self.unresolved_deps
1300
1239
  @unresolved_deps ||= Hash.new {|h, n| h[n] = Gem::Dependency.new n }
@@ -1375,7 +1314,7 @@ class Gem::Specification < Gem::BasicSpecification
1375
1314
  spec.instance_variable_set :@summary, array[5]
1376
1315
  spec.instance_variable_set :@required_ruby_version, array[6]
1377
1316
  spec.instance_variable_set :@required_rubygems_version, array[7]
1378
- spec.instance_variable_set :@original_platform, array[8]
1317
+ spec.platform = array[8]
1379
1318
  spec.instance_variable_set :@dependencies, array[9]
1380
1319
  # offset due to rubyforge_project removal
1381
1320
  spec.instance_variable_set :@email, array[11]
@@ -1383,9 +1322,7 @@ class Gem::Specification < Gem::BasicSpecification
1383
1322
  spec.instance_variable_set :@description, array[13]
1384
1323
  spec.instance_variable_set :@homepage, array[14]
1385
1324
  spec.instance_variable_set :@has_rdoc, array[15]
1386
- spec.instance_variable_set :@new_platform, array[16]
1387
- spec.instance_variable_set :@platform, array[16].to_s
1388
- spec.instance_variable_set :@license, array[17]
1325
+ spec.instance_variable_set :@licenses, array[17]
1389
1326
  spec.instance_variable_set :@metadata, array[18]
1390
1327
  spec.instance_variable_set :@loaded, false
1391
1328
  spec.instance_variable_set :@activated, false
@@ -1478,13 +1415,11 @@ class Gem::Specification < Gem::BasicSpecification
1478
1415
  raise e
1479
1416
  end
1480
1417
 
1481
- begin
1482
- specs = spec_dep.to_specs
1483
- rescue Gem::MissingSpecError => e
1484
- raise Gem::MissingSpecError.new(e.name, e.requirement, "at: #{spec_file}")
1485
- end
1418
+ specs = spec_dep.matching_specs(true).uniq(&:full_name)
1486
1419
 
1487
- if specs.size == 1
1420
+ if specs.size == 0
1421
+ raise Gem::MissingSpecError.new(spec_dep.name, spec_dep.requirement, "at: #{spec_file}")
1422
+ elsif specs.size == 1
1488
1423
  specs.first.activate
1489
1424
  else
1490
1425
  name = spec_dep.name
@@ -1571,7 +1506,7 @@ class Gem::Specification < Gem::BasicSpecification
1571
1506
 
1572
1507
  private :add_dependency_with_type
1573
1508
 
1574
- alias_method :add_dependency, :add_runtime_dependency
1509
+ alias_method :add_runtime_dependency, :add_dependency
1575
1510
 
1576
1511
  ##
1577
1512
  # Adds this spec's require paths to LOAD_PATH, in the proper location.
@@ -1714,7 +1649,7 @@ class Gem::Specification < Gem::BasicSpecification
1714
1649
  ##
1715
1650
  # return true if there will be conflict when spec if loaded together with the list of specs.
1716
1651
 
1717
- def conficts_when_loaded_with?(list_of_specs) # :nodoc:
1652
+ def conflicts_when_loaded_with?(list_of_specs) # :nodoc:
1718
1653
  result = list_of_specs.any? do |spec|
1719
1654
  spec.runtime_dependencies.any? {|dep| (dep.name == name) && !satisfies_requirement?(dep) }
1720
1655
  end
@@ -1842,7 +1777,7 @@ class Gem::Specification < Gem::BasicSpecification
1842
1777
  # Returns all specs that matches this spec's runtime dependencies.
1843
1778
 
1844
1779
  def dependent_specs
1845
- runtime_dependencies.map(&:to_specs).flatten
1780
+ runtime_dependencies.flat_map(&:to_specs)
1846
1781
  end
1847
1782
 
1848
1783
  ##
@@ -1878,23 +1813,15 @@ class Gem::Specification < Gem::BasicSpecification
1878
1813
  end
1879
1814
 
1880
1815
  def encode_with(coder) # :nodoc:
1881
- mark_version
1882
-
1883
1816
  coder.add "name", @name
1884
1817
  coder.add "version", @version
1885
- platform = case @original_platform
1886
- when nil, "" then
1887
- "ruby"
1888
- when String then
1889
- @original_platform
1890
- else
1891
- @original_platform.to_s
1892
- end
1893
- coder.add "platform", platform
1818
+ coder.add "platform", platform.to_s
1819
+ coder.add "original_platform", original_platform.to_s if platform.to_s != original_platform.to_s
1894
1820
 
1895
1821
  attributes = @@attributes.map(&:to_s) - %w[name version platform]
1896
1822
  attributes.each do |name|
1897
- coder.add name, instance_variable_get("@#{name}")
1823
+ value = instance_variable_get("@#{name}")
1824
+ coder.add name, value unless value.nil?
1898
1825
  end
1899
1826
  end
1900
1827
 
@@ -1981,7 +1908,8 @@ class Gem::Specification < Gem::BasicSpecification
1981
1908
  end
1982
1909
 
1983
1910
  ##
1984
- # Work around bundler removing my methods
1911
+ # Work around old bundler versions removing my methods
1912
+ # Can be removed once RubyGems can no longer install Bundler 2.5
1985
1913
 
1986
1914
  def gem_dir # :nodoc:
1987
1915
  super
@@ -2079,7 +2007,8 @@ class Gem::Specification < Gem::BasicSpecification
2079
2007
  end
2080
2008
 
2081
2009
  ##
2082
- # Duplicates array_attributes from +other_spec+ so state isn't shared.
2010
+ # Duplicates Array and Gem::Requirement attributes from +other_spec+ so state isn't shared.
2011
+ #
2083
2012
 
2084
2013
  def initialize_copy(other_spec)
2085
2014
  self.class.array_attributes.each do |name|
@@ -2101,6 +2030,9 @@ class Gem::Specification < Gem::BasicSpecification
2101
2030
  raise e
2102
2031
  end
2103
2032
  end
2033
+
2034
+ @required_ruby_version = other_spec.required_ruby_version.dup
2035
+ @required_rubygems_version = other_spec.required_rubygems_version.dup
2104
2036
  end
2105
2037
 
2106
2038
  def base_dir
@@ -2169,13 +2101,6 @@ class Gem::Specification < Gem::BasicSpecification
2169
2101
  @spec_file = nil
2170
2102
  end
2171
2103
 
2172
- ##
2173
- # Sets the rubygems_version to the current RubyGems version.
2174
-
2175
- def mark_version
2176
- @rubygems_version = Gem::VERSION
2177
- end
2178
-
2179
2104
  ##
2180
2105
  # Track removed method calls to warn about during build time.
2181
2106
  # Warn about unknown attributes while loading a spec.
@@ -2219,11 +2144,11 @@ class Gem::Specification < Gem::BasicSpecification
2219
2144
  @files.concat(@extra_rdoc_files)
2220
2145
  end
2221
2146
 
2222
- @files = @files.uniq if @files
2223
- @extensions = @extensions.uniq if @extensions
2224
- @test_files = @test_files.uniq if @test_files
2225
- @executables = @executables.uniq if @executables
2226
- @extra_rdoc_files = @extra_rdoc_files.uniq if @extra_rdoc_files
2147
+ @files = @files.uniq.sort if @files
2148
+ @extensions = @extensions.uniq.sort if @extensions
2149
+ @test_files = @test_files.uniq.sort if @test_files
2150
+ @executables = @executables.uniq.sort if @executables
2151
+ @extra_rdoc_files = @extra_rdoc_files.uniq.sort if @extra_rdoc_files
2227
2152
  end
2228
2153
 
2229
2154
  ##
@@ -2493,7 +2418,6 @@ class Gem::Specification < Gem::BasicSpecification
2493
2418
  # still have their default values are omitted.
2494
2419
 
2495
2420
  def to_ruby
2496
- mark_version
2497
2421
  result = []
2498
2422
  result << "# -*- encoding: utf-8 -*-"
2499
2423
  result << "#{Gem::StubSpecification::PREFIX}#{name} #{version} #{platform} #{raw_require_paths.join("\0")}"
@@ -2543,7 +2467,7 @@ class Gem::Specification < Gem::BasicSpecification
2543
2467
 
2544
2468
  if @installed_by_version
2545
2469
  result << nil
2546
- result << " s.installed_by_version = #{ruby_code Gem::VERSION} if s.respond_to? :installed_by_version"
2470
+ result << " s.installed_by_version = #{ruby_code Gem::VERSION}"
2547
2471
  end
2548
2472
 
2549
2473
  unless dependencies.empty?
@@ -2658,6 +2582,10 @@ class Gem::Specification < Gem::BasicSpecification
2658
2582
  @test_files.delete_if {|x| File.directory?(x) && !File.symlink?(x) }
2659
2583
  end
2660
2584
 
2585
+ def validate_for_resolution
2586
+ Gem::SpecificationPolicy.new(self).validate_for_resolution
2587
+ end
2588
+
2661
2589
  def validate_metadata
2662
2590
  Gem::SpecificationPolicy.new(self).validate_metadata
2663
2591
  end
@@ -2693,13 +2621,12 @@ class Gem::Specification < Gem::BasicSpecification
2693
2621
  when "date"
2694
2622
  # Force Date to go through the extra coerce logic in date=
2695
2623
  self.date = val
2624
+ when "platform"
2625
+ self.platform = val
2696
2626
  else
2697
2627
  instance_variable_set "@#{ivar}", val
2698
2628
  end
2699
2629
  end
2700
-
2701
- @original_platform = @platform # for backwards compatibility
2702
- self.platform = Gem::Platform.new @platform
2703
2630
  end
2704
2631
 
2705
2632
  ##