rubygems-update 3.3.18 → 3.4.19

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 (615) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1429 -1064
  3. data/CONTRIBUTING.md +31 -8
  4. data/Manifest.txt +61 -36
  5. data/POLICIES.md +55 -20
  6. data/README.md +19 -6
  7. data/bundler/CHANGELOG.md +457 -1
  8. data/bundler/README.md +3 -6
  9. data/bundler/UPGRADING.md +11 -4
  10. data/bundler/bundler.gemspec +8 -10
  11. data/bundler/exe/bundle +5 -16
  12. data/bundler/lib/bundler/build_metadata.rb +2 -2
  13. data/bundler/lib/bundler/cli/add.rb +1 -1
  14. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  15. data/bundler/lib/bundler/cli/check.rb +1 -1
  16. data/bundler/lib/bundler/cli/common.rb +2 -0
  17. data/bundler/lib/bundler/cli/console.rb +2 -2
  18. data/bundler/lib/bundler/cli/doctor.rb +4 -6
  19. data/bundler/lib/bundler/cli/gem.rb +62 -40
  20. data/bundler/lib/bundler/cli/info.rb +1 -1
  21. data/bundler/lib/bundler/cli/init.rb +6 -2
  22. data/bundler/lib/bundler/cli/install.rb +8 -6
  23. data/bundler/lib/bundler/cli/lock.rb +8 -5
  24. data/bundler/lib/bundler/cli/open.rb +6 -4
  25. data/bundler/lib/bundler/cli/outdated.rb +14 -7
  26. data/bundler/lib/bundler/cli/platform.rb +7 -5
  27. data/bundler/lib/bundler/cli/viz.rb +1 -1
  28. data/bundler/lib/bundler/cli.rb +53 -7
  29. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
  30. data/bundler/lib/bundler/compact_index_client/updater.rb +40 -39
  31. data/bundler/lib/bundler/constants.rb +1 -1
  32. data/bundler/lib/bundler/current_ruby.rb +16 -5
  33. data/bundler/lib/bundler/definition.rb +262 -133
  34. data/bundler/lib/bundler/dependency.rb +20 -86
  35. data/bundler/lib/bundler/digest.rb +1 -1
  36. data/bundler/lib/bundler/dsl.rb +6 -7
  37. data/bundler/lib/bundler/endpoint_specification.rb +2 -13
  38. data/bundler/lib/bundler/env.rb +2 -2
  39. data/bundler/lib/bundler/environment_preserver.rb +3 -2
  40. data/bundler/lib/bundler/errors.rb +1 -11
  41. data/bundler/lib/bundler/feature_flag.rb +0 -2
  42. data/bundler/lib/bundler/fetcher/compact_index.rb +11 -13
  43. data/bundler/lib/bundler/fetcher/dependency.rb +2 -6
  44. data/bundler/lib/bundler/fetcher/downloader.rb +4 -5
  45. data/bundler/lib/bundler/fetcher/index.rb +1 -2
  46. data/bundler/lib/bundler/fetcher.rb +21 -15
  47. data/bundler/lib/bundler/force_platform.rb +18 -0
  48. data/bundler/lib/bundler/friendly_errors.rb +1 -4
  49. data/bundler/lib/bundler/gem_helper.rb +3 -4
  50. data/bundler/lib/bundler/gem_helpers.rb +7 -2
  51. data/bundler/lib/bundler/gem_version_promoter.rb +53 -98
  52. data/bundler/lib/bundler/graph.rb +3 -3
  53. data/bundler/lib/bundler/index.rb +13 -47
  54. data/bundler/lib/bundler/injector.rb +5 -4
  55. data/bundler/lib/bundler/inline.rb +9 -11
  56. data/bundler/lib/bundler/installer/parallel_installer.rb +4 -34
  57. data/bundler/lib/bundler/installer/standalone.rb +13 -9
  58. data/bundler/lib/bundler/installer.rb +17 -29
  59. data/bundler/lib/bundler/lazy_specification.rb +54 -53
  60. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  61. data/bundler/lib/bundler/lockfile_parser.rb +17 -16
  62. data/bundler/lib/bundler/man/bundle-add.1 +6 -2
  63. data/bundler/lib/bundler/man/bundle-add.1.ronn +4 -1
  64. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  65. data/bundler/lib/bundler/man/bundle-cache.1 +9 -3
  66. data/bundler/lib/bundler/man/bundle-cache.1.ronn +9 -2
  67. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  68. data/bundler/lib/bundler/man/bundle-clean.1 +2 -2
  69. data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
  70. data/bundler/lib/bundler/man/bundle-config.1 +26 -10
  71. data/bundler/lib/bundler/man/bundle-config.1.ronn +17 -10
  72. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  73. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  74. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  75. data/bundler/lib/bundler/man/bundle-exec.1 +6 -6
  76. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -6
  77. data/bundler/lib/bundler/man/bundle-gem.1 +27 -37
  78. data/bundler/lib/bundler/man/bundle-gem.1.ronn +5 -5
  79. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  80. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  81. data/bundler/lib/bundler/man/bundle-info.1 +3 -3
  82. data/bundler/lib/bundler/man/bundle-info.1.ronn +3 -3
  83. data/bundler/lib/bundler/man/bundle-init.1 +5 -1
  84. data/bundler/lib/bundler/man/bundle-init.1.ronn +2 -0
  85. data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
  86. data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
  87. data/bundler/lib/bundler/man/bundle-install.1 +5 -30
  88. data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -29
  89. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  90. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  91. data/bundler/lib/bundler/man/bundle-open.1 +22 -2
  92. data/bundler/lib/bundler/man/bundle-open.1.ronn +9 -1
  93. data/bundler/lib/bundler/man/bundle-outdated.1 +13 -9
  94. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +12 -9
  95. data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
  96. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  97. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  98. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  99. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  100. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  101. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  102. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  103. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  104. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  105. data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
  106. data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
  107. data/bundler/lib/bundler/man/bundle.1 +15 -10
  108. data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
  109. data/bundler/lib/bundler/man/gemfile.5 +55 -55
  110. data/bundler/lib/bundler/man/gemfile.5.ronn +57 -53
  111. data/bundler/lib/bundler/man/index.txt +4 -0
  112. data/bundler/lib/bundler/match_metadata.rb +13 -0
  113. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  114. data/bundler/lib/bundler/mirror.rb +5 -7
  115. data/bundler/lib/bundler/plugin/index.rb +5 -5
  116. data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
  117. data/bundler/lib/bundler/plugin/installer.rb +5 -2
  118. data/bundler/lib/bundler/plugin.rb +3 -1
  119. data/bundler/lib/bundler/remote_specification.rb +7 -12
  120. data/bundler/lib/bundler/resolver/base.rb +107 -0
  121. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  122. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  123. data/bundler/lib/bundler/resolver/package.rb +72 -0
  124. data/bundler/lib/bundler/resolver/root.rb +25 -0
  125. data/bundler/lib/bundler/resolver/spec_group.rb +42 -71
  126. data/bundler/lib/bundler/resolver.rb +335 -328
  127. data/bundler/lib/bundler/ruby_dsl.rb +7 -1
  128. data/bundler/lib/bundler/ruby_version.rb +8 -8
  129. data/bundler/lib/bundler/rubygems_ext.rb +100 -9
  130. data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -14
  131. data/bundler/lib/bundler/rubygems_integration.rb +11 -15
  132. data/bundler/lib/bundler/runtime.rb +2 -6
  133. data/bundler/lib/bundler/safe_marshal.rb +31 -0
  134. data/bundler/lib/bundler/settings.rb +5 -11
  135. data/bundler/lib/bundler/setup.rb +4 -1
  136. data/bundler/lib/bundler/shared_helpers.rb +3 -3
  137. data/bundler/lib/bundler/source/git/git_proxy.rb +237 -74
  138. data/bundler/lib/bundler/source/git.rb +55 -30
  139. data/bundler/lib/bundler/source/metadata.rb +1 -2
  140. data/bundler/lib/bundler/source/path/installer.rb +1 -22
  141. data/bundler/lib/bundler/source/path.rb +6 -6
  142. data/bundler/lib/bundler/source/rubygems.rb +26 -81
  143. data/bundler/lib/bundler/source.rb +1 -1
  144. data/bundler/lib/bundler/source_list.rb +8 -2
  145. data/bundler/lib/bundler/spec_set.rb +60 -37
  146. data/bundler/lib/bundler/templates/Executable +1 -1
  147. data/bundler/lib/bundler/templates/Executable.bundler +5 -10
  148. data/bundler/lib/bundler/templates/Executable.standalone +2 -0
  149. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  150. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +3 -0
  151. data/bundler/lib/bundler/templates/newgem/README.md.tt +6 -4
  152. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -1
  153. data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
  154. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  155. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  156. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  157. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  158. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  159. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  160. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
  161. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  162. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  163. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +9 -2
  164. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  165. data/bundler/lib/bundler/ui/shell.rb +35 -12
  166. data/bundler/lib/bundler/ui/silent.rb +21 -5
  167. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  168. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  169. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  170. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
  171. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1351 -409
  172. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  173. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  174. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  175. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  176. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  177. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  178. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  179. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  180. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  181. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  182. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  183. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  184. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  185. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  186. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  187. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  188. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  189. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  190. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  191. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
  192. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
  193. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  194. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
  195. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
  196. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
  197. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
  198. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  199. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  200. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
  201. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +15 -9
  202. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +11 -6
  203. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  204. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
  205. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
  206. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +3 -2
  207. data/bundler/lib/bundler/vendored_persistent.rb +1 -33
  208. data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
  209. data/bundler/lib/bundler/version.rb +5 -1
  210. data/bundler/lib/bundler/worker.rb +5 -7
  211. data/bundler/lib/bundler.rb +25 -77
  212. data/{bin → exe}/gem +4 -5
  213. data/{bin → exe}/update_rubygems +12 -10
  214. data/lib/rubygems/available_set.rb +4 -3
  215. data/lib/rubygems/basic_specification.rb +5 -4
  216. data/lib/rubygems/bundler_version_finder.rb +2 -2
  217. data/lib/rubygems/command.rb +41 -32
  218. data/lib/rubygems/command_manager.rb +30 -15
  219. data/lib/rubygems/commands/build_command.rb +12 -8
  220. data/lib/rubygems/commands/cert_command.rb +34 -33
  221. data/lib/rubygems/commands/check_command.rb +21 -20
  222. data/lib/rubygems/commands/cleanup_command.rb +18 -17
  223. data/lib/rubygems/commands/contents_command.rb +14 -13
  224. data/lib/rubygems/commands/dependency_command.rb +17 -16
  225. data/lib/rubygems/commands/environment_command.rb +6 -5
  226. data/lib/rubygems/commands/exec_command.rb +249 -0
  227. data/lib/rubygems/commands/fetch_command.rb +10 -9
  228. data/lib/rubygems/commands/generate_index_command.rb +18 -17
  229. data/lib/rubygems/commands/help_command.rb +7 -6
  230. data/lib/rubygems/commands/info_command.rb +3 -3
  231. data/lib/rubygems/commands/install_command.rb +28 -23
  232. data/lib/rubygems/commands/list_command.rb +4 -3
  233. data/lib/rubygems/commands/lock_command.rb +5 -4
  234. data/lib/rubygems/commands/mirror_command.rb +4 -3
  235. data/lib/rubygems/commands/open_command.rb +10 -9
  236. data/lib/rubygems/commands/outdated_command.rb +6 -5
  237. data/lib/rubygems/commands/owner_command.rb +17 -14
  238. data/lib/rubygems/commands/pristine_command.rb +46 -36
  239. data/lib/rubygems/commands/push_command.rb +9 -8
  240. data/lib/rubygems/commands/query_command.rb +9 -8
  241. data/lib/rubygems/commands/rdoc_command.rb +21 -19
  242. data/lib/rubygems/commands/search_command.rb +4 -3
  243. data/lib/rubygems/commands/server_command.rb +4 -3
  244. data/lib/rubygems/commands/setup_command.rb +97 -106
  245. data/lib/rubygems/commands/signin_command.rb +10 -9
  246. data/lib/rubygems/commands/signout_command.rb +8 -7
  247. data/lib/rubygems/commands/sources_command.rb +22 -21
  248. data/lib/rubygems/commands/specification_command.rb +14 -13
  249. data/lib/rubygems/commands/stale_command.rb +3 -2
  250. data/lib/rubygems/commands/uninstall_command.rb +44 -40
  251. data/lib/rubygems/commands/unpack_command.rb +14 -13
  252. data/lib/rubygems/commands/update_command.rb +42 -63
  253. data/lib/rubygems/commands/which_command.rb +8 -7
  254. data/lib/rubygems/commands/yank_command.rb +12 -11
  255. data/lib/rubygems/config_file.rb +55 -21
  256. data/lib/rubygems/core_ext/kernel_gem.rb +1 -6
  257. data/lib/rubygems/core_ext/kernel_require.rb +109 -115
  258. data/lib/rubygems/core_ext/kernel_warn.rb +33 -37
  259. data/lib/rubygems/core_ext/tcpsocket_init.rb +3 -1
  260. data/lib/rubygems/defaults.rb +33 -18
  261. data/lib/rubygems/dependency.rb +15 -11
  262. data/lib/rubygems/dependency_installer.rb +38 -37
  263. data/lib/rubygems/dependency_list.rb +7 -6
  264. data/lib/rubygems/deprecate.rb +3 -2
  265. data/lib/rubygems/doctor.rb +19 -18
  266. data/lib/rubygems/errors.rb +3 -2
  267. data/lib/rubygems/exceptions.rb +16 -8
  268. data/lib/rubygems/ext/build_error.rb +2 -1
  269. data/lib/rubygems/ext/builder.rb +37 -21
  270. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
  271. data/lib/rubygems/ext/cargo_builder.rb +150 -111
  272. data/lib/rubygems/ext/cmake_builder.rb +2 -2
  273. data/lib/rubygems/ext/configure_builder.rb +2 -1
  274. data/lib/rubygems/ext/ext_conf_builder.rb +11 -9
  275. data/lib/rubygems/ext/rake_builder.rb +7 -5
  276. data/lib/rubygems/ext.rb +8 -7
  277. data/lib/rubygems/gem_runner.rb +6 -5
  278. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  279. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  280. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
  281. data/lib/rubygems/gemcutter_utilities.rb +90 -34
  282. data/lib/rubygems/indexer.rb +29 -28
  283. data/lib/rubygems/install_default_message.rb +3 -2
  284. data/lib/rubygems/install_message.rb +3 -2
  285. data/lib/rubygems/install_update_options.rb +56 -55
  286. data/lib/rubygems/installer.rb +54 -46
  287. data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
  288. data/lib/rubygems/local_remote_options.rb +19 -20
  289. data/lib/rubygems/mock_gem_ui.rb +3 -2
  290. data/lib/rubygems/name_tuple.rb +5 -4
  291. data/lib/rubygems/optparse/lib/optparse.rb +20 -15
  292. data/lib/rubygems/optparse.rb +1 -1
  293. data/lib/rubygems/package/digest_io.rb +1 -0
  294. data/lib/rubygems/package/file_source.rb +3 -2
  295. data/lib/rubygems/package/io_source.rb +1 -0
  296. data/lib/rubygems/package/old.rb +9 -8
  297. data/lib/rubygems/package/source.rb +1 -0
  298. data/lib/rubygems/package/tar_header.rb +63 -62
  299. data/lib/rubygems/package/tar_reader/entry.rb +91 -9
  300. data/lib/rubygems/package/tar_reader.rb +2 -29
  301. data/lib/rubygems/package/tar_writer.rb +8 -7
  302. data/lib/rubygems/package.rb +64 -48
  303. data/lib/rubygems/package_task.rb +5 -4
  304. data/lib/rubygems/path_support.rb +1 -0
  305. data/lib/rubygems/platform.rb +79 -53
  306. data/lib/rubygems/psych_tree.rb +2 -1
  307. data/lib/rubygems/query_utils.rb +35 -35
  308. data/lib/rubygems/rdoc.rb +3 -2
  309. data/lib/rubygems/remote_fetcher.rb +23 -22
  310. data/lib/rubygems/request/connection_pools.rb +4 -4
  311. data/lib/rubygems/request/http_pool.rb +2 -1
  312. data/lib/rubygems/request/https_pool.rb +1 -0
  313. data/lib/rubygems/request.rb +23 -22
  314. data/lib/rubygems/request_set/gem_dependency_api.rb +123 -123
  315. data/lib/rubygems/request_set/lockfile/parser.rb +28 -27
  316. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -3
  317. data/lib/rubygems/request_set/lockfile.rb +6 -5
  318. data/lib/rubygems/request_set.rb +20 -19
  319. data/lib/rubygems/requirement.rb +15 -14
  320. data/lib/rubygems/resolver/activation_request.rb +4 -3
  321. data/lib/rubygems/resolver/api_set.rb +5 -4
  322. data/lib/rubygems/resolver/api_specification.rb +7 -6
  323. data/lib/rubygems/resolver/best_set.rb +6 -5
  324. data/lib/rubygems/resolver/composed_set.rb +1 -0
  325. data/lib/rubygems/resolver/conflict.rb +11 -10
  326. data/lib/rubygems/resolver/current_set.rb +1 -0
  327. data/lib/rubygems/resolver/dependency_request.rb +3 -2
  328. data/lib/rubygems/resolver/git_set.rb +3 -2
  329. data/lib/rubygems/resolver/git_specification.rb +7 -6
  330. data/lib/rubygems/resolver/index_set.rb +4 -3
  331. data/lib/rubygems/resolver/index_specification.rb +7 -5
  332. data/lib/rubygems/resolver/installed_specification.rb +5 -4
  333. data/lib/rubygems/resolver/installer_set.rb +15 -17
  334. data/lib/rubygems/resolver/local_specification.rb +3 -2
  335. data/lib/rubygems/resolver/lock_set.rb +5 -4
  336. data/lib/rubygems/resolver/lock_specification.rb +5 -4
  337. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +1 -1
  338. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +32 -26
  339. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  340. data/lib/rubygems/resolver/molinillo.rb +2 -1
  341. data/lib/rubygems/resolver/requirement_list.rb +1 -0
  342. data/lib/rubygems/resolver/set.rb +1 -0
  343. data/lib/rubygems/resolver/source_set.rb +2 -0
  344. data/lib/rubygems/resolver/spec_specification.rb +1 -0
  345. data/lib/rubygems/resolver/specification.rb +2 -1
  346. data/lib/rubygems/resolver/stats.rb +2 -1
  347. data/lib/rubygems/resolver/vendor_set.rb +2 -1
  348. data/lib/rubygems/resolver/vendor_specification.rb +4 -3
  349. data/lib/rubygems/resolver.rb +41 -40
  350. data/lib/rubygems/s3_uri_signer.rb +10 -8
  351. data/lib/rubygems/safe_yaml.rb +4 -2
  352. data/lib/rubygems/security/policies.rb +48 -47
  353. data/lib/rubygems/security/policy.rb +19 -18
  354. data/lib/rubygems/security/signer.rb +6 -5
  355. data/lib/rubygems/security/trust_dir.rb +5 -4
  356. data/lib/rubygems/security.rb +30 -42
  357. data/lib/rubygems/security_option.rb +6 -5
  358. data/lib/rubygems/shellwords.rb +3 -0
  359. data/lib/rubygems/source/git.rb +22 -22
  360. data/lib/rubygems/source/installed.rb +2 -1
  361. data/lib/rubygems/source/local.rb +3 -2
  362. data/lib/rubygems/source/lock.rb +1 -0
  363. data/lib/rubygems/source/specific_file.rb +2 -1
  364. data/lib/rubygems/source/vendor.rb +1 -0
  365. data/lib/rubygems/source.rb +16 -16
  366. data/lib/rubygems/spec_fetcher.rb +10 -9
  367. data/lib/rubygems/specification.rb +121 -114
  368. data/lib/rubygems/specification_policy.rb +36 -15
  369. data/lib/rubygems/stub_specification.rb +11 -9
  370. data/lib/rubygems/text.rb +2 -2
  371. data/lib/rubygems/tsort/lib/tsort.rb +308 -310
  372. data/lib/rubygems/tsort.rb +1 -1
  373. data/lib/rubygems/uninstaller.rb +19 -18
  374. data/lib/rubygems/update_suggestion.rb +69 -0
  375. data/lib/rubygems/uri.rb +4 -4
  376. data/lib/rubygems/uri_formatter.rb +1 -1
  377. data/lib/rubygems/user_interaction.rb +37 -21
  378. data/lib/rubygems/util/licenses.rb +4 -3
  379. data/lib/rubygems/util/list.rb +1 -0
  380. data/lib/rubygems/util.rb +12 -15
  381. data/lib/rubygems/validator.rb +7 -6
  382. data/lib/rubygems/version.rb +17 -11
  383. data/lib/rubygems/version_option.rb +4 -3
  384. data/lib/rubygems.rb +89 -68
  385. data/rubygems-update.gemspec +10 -8
  386. data/setup.rb +10 -9
  387. data/test/rubygems/alternate_cert.pem +14 -14
  388. data/test/rubygems/alternate_cert_32.pem +15 -15
  389. data/test/rubygems/alternate_key.pem +25 -25
  390. data/test/rubygems/bad_rake.rb +1 -0
  391. data/test/rubygems/bundler_test_gem.rb +421 -0
  392. data/test/rubygems/child_cert.pem +15 -16
  393. data/test/rubygems/child_cert_32.pem +15 -16
  394. data/test/rubygems/child_key.pem +25 -25
  395. data/test/rubygems/encrypted_private_key.pem +26 -26
  396. data/test/rubygems/expired_cert.pem +15 -15
  397. data/test/rubygems/fake_certlib/openssl.rb +1 -0
  398. data/test/rubygems/future_cert.pem +15 -15
  399. data/test/rubygems/future_cert_32.pem +15 -15
  400. data/test/rubygems/good_rake.rb +1 -0
  401. data/test/rubygems/grandchild_cert.pem +15 -16
  402. data/test/rubygems/grandchild_cert_32.pem +15 -16
  403. data/test/rubygems/grandchild_key.pem +25 -25
  404. data/test/rubygems/helper.rb +172 -151
  405. data/test/rubygems/installer_test_case.rb +14 -13
  406. data/test/rubygems/invalid_issuer_cert.pem +16 -16
  407. data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
  408. data/test/rubygems/invalid_key.pem +25 -25
  409. data/test/rubygems/invalid_signer_cert.pem +15 -15
  410. data/test/rubygems/invalid_signer_cert_32.pem +15 -15
  411. data/test/rubygems/invalidchild_cert.pem +15 -16
  412. data/test/rubygems/invalidchild_cert_32.pem +15 -16
  413. data/test/rubygems/invalidchild_key.pem +25 -25
  414. data/test/rubygems/multifactor_auth_utilities.rb +111 -0
  415. data/test/rubygems/package/tar_test_case.rb +53 -17
  416. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  417. data/test/rubygems/plugin/exception/rubygems_plugin.rb +2 -1
  418. data/test/rubygems/plugin/load/rubygems_plugin.rb +1 -0
  419. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +2 -1
  420. data/test/rubygems/private_key.pem +25 -25
  421. data/test/rubygems/public_cert.pem +16 -16
  422. data/test/rubygems/public_cert_32.pem +15 -15
  423. data/test/rubygems/public_key.pem +7 -7
  424. data/test/rubygems/rubygems/commands/crash_command.rb +1 -0
  425. data/test/rubygems/rubygems_plugin.rb +3 -2
  426. data/test/rubygems/simple_gem.rb +2 -1
  427. data/test/rubygems/specifications/bar-0.0.2.gemspec +2 -0
  428. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +6 -4
  429. data/test/rubygems/test_bundled_ca.rb +13 -12
  430. data/test/rubygems/test_config.rb +5 -4
  431. data/test/rubygems/test_deprecate.rb +5 -4
  432. data/test/rubygems/test_exit.rb +9 -3
  433. data/test/rubygems/test_gem.rb +339 -677
  434. data/test/rubygems/test_gem_available_set.rb +22 -21
  435. data/test/rubygems/test_gem_bundler_version_finder.rb +6 -4
  436. data/test/rubygems/test_gem_command.rb +45 -44
  437. data/test/rubygems/test_gem_command_manager.rb +96 -30
  438. data/test/rubygems/test_gem_commands_build_command.rb +74 -63
  439. data/test/rubygems/test_gem_commands_cert_command.rb +98 -99
  440. data/test/rubygems/test_gem_commands_check_command.rb +5 -4
  441. data/test/rubygems/test_gem_commands_cleanup_command.rb +41 -40
  442. data/test/rubygems/test_gem_commands_contents_command.rb +28 -27
  443. data/test/rubygems/test_gem_commands_dependency_command.rb +37 -36
  444. data/test/rubygems/test_gem_commands_environment_command.rb +17 -16
  445. data/test/rubygems/test_gem_commands_exec_command.rb +853 -0
  446. data/test/rubygems/test_gem_commands_fetch_command.rb +38 -37
  447. data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -7
  448. data/test/rubygems/test_gem_commands_help_command.rb +14 -13
  449. data/test/rubygems/test_gem_commands_info_command.rb +29 -2
  450. data/test/rubygems/test_gem_commands_install_command.rb +152 -132
  451. data/test/rubygems/test_gem_commands_list_command.rb +5 -4
  452. data/test/rubygems/test_gem_commands_lock_command.rb +11 -10
  453. data/test/rubygems/test_gem_commands_mirror.rb +3 -2
  454. data/test/rubygems/test_gem_commands_open_command.rb +5 -4
  455. data/test/rubygems/test_gem_commands_outdated_command.rb +10 -9
  456. data/test/rubygems/test_gem_commands_owner_command.rb +227 -50
  457. data/test/rubygems/test_gem_commands_pristine_command.rb +142 -93
  458. data/test/rubygems/test_gem_commands_push_command.rb +189 -64
  459. data/test/rubygems/test_gem_commands_query_command.rb +74 -73
  460. data/test/rubygems/test_gem_commands_search_command.rb +3 -2
  461. data/test/rubygems/test_gem_commands_server_command.rb +3 -2
  462. data/test/rubygems/test_gem_commands_setup_command.rb +123 -96
  463. data/test/rubygems/test_gem_commands_signin_command.rb +71 -31
  464. data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
  465. data/test/rubygems/test_gem_commands_sources_command.rb +29 -29
  466. data/test/rubygems/test_gem_commands_specification_command.rb +33 -32
  467. data/test/rubygems/test_gem_commands_stale_command.rb +5 -4
  468. data/test/rubygems/test_gem_commands_uninstall_command.rb +99 -81
  469. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -31
  470. data/test/rubygems/test_gem_commands_update_command.rb +96 -95
  471. data/test/rubygems/test_gem_commands_which_command.rb +7 -6
  472. data/test/rubygems/test_gem_commands_yank_command.rb +162 -43
  473. data/test/rubygems/test_gem_config_file.rb +94 -81
  474. data/test/rubygems/test_gem_dependency.rb +76 -73
  475. data/test/rubygems/test_gem_dependency_installer.rb +200 -165
  476. data/test/rubygems/test_gem_dependency_list.rb +48 -47
  477. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -4
  478. data/test/rubygems/test_gem_doctor.rb +27 -26
  479. data/test/rubygems/test_gem_ext_builder.rb +60 -61
  480. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +4 -4
  481. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.lock → ext/custom_name_lib/Cargo.lock} +23 -33
  482. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.toml → ext/custom_name_lib/Cargo.toml} +1 -1
  483. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{src → ext/custom_name_lib/src}/lib.rs +1 -1
  484. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +3 -0
  485. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +37 -33
  486. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  487. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +2 -0
  488. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +12 -0
  489. data/test/rubygems/test_gem_ext_cargo_builder.rb +48 -59
  490. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +20 -19
  491. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +21 -36
  492. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -15
  493. data/test/rubygems/test_gem_ext_configure_builder.rb +14 -13
  494. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
  495. data/test/rubygems/test_gem_ext_rake_builder.rb +16 -15
  496. data/test/rubygems/test_gem_gem_runner.rb +15 -9
  497. data/test/rubygems/test_gem_gemcutter_utilities.rb +170 -84
  498. data/test/rubygems/test_gem_impossible_dependencies_error.rb +5 -4
  499. data/test/rubygems/test_gem_indexer.rb +87 -67
  500. data/test/rubygems/test_gem_install_update_options.rb +17 -16
  501. data/test/rubygems/test_gem_installer.rb +422 -304
  502. data/test/rubygems/test_gem_local_remote_options.rb +11 -10
  503. data/test/rubygems/test_gem_name_tuple.rb +5 -4
  504. data/test/rubygems/test_gem_package.rb +243 -231
  505. data/test/rubygems/test_gem_package_old.rb +14 -13
  506. data/test/rubygems/test_gem_package_tar_header.rb +48 -47
  507. data/test/rubygems/test_gem_package_tar_reader.rb +56 -8
  508. data/test/rubygems/test_gem_package_tar_reader_entry.rb +162 -16
  509. data/test/rubygems/test_gem_package_tar_writer.rb +77 -76
  510. data/test/rubygems/test_gem_package_task.rb +19 -18
  511. data/test/rubygems/test_gem_path_support.rb +15 -14
  512. data/test/rubygems/test_gem_platform.rb +333 -227
  513. data/test/rubygems/test_gem_rdoc.rb +15 -14
  514. data/test/rubygems/test_gem_remote_fetcher.rb +155 -154
  515. data/test/rubygems/test_gem_request.rb +64 -58
  516. data/test/rubygems/test_gem_request_connection_pools.rb +30 -29
  517. data/test/rubygems/test_gem_request_set.rb +101 -100
  518. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +210 -211
  519. data/test/rubygems/test_gem_request_set_lockfile.rb +87 -86
  520. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +58 -57
  521. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +63 -62
  522. data/test/rubygems/test_gem_requirement.rb +48 -41
  523. data/test/rubygems/test_gem_resolver.rb +167 -99
  524. data/test/rubygems/test_gem_resolver_activation_request.rb +7 -6
  525. data/test/rubygems/test_gem_resolver_api_set.rb +34 -33
  526. data/test/rubygems/test_gem_resolver_api_specification.rb +48 -47
  527. data/test/rubygems/test_gem_resolver_best_set.rb +23 -22
  528. data/test/rubygems/test_gem_resolver_composed_set.rb +2 -1
  529. data/test/rubygems/test_gem_resolver_conflict.rb +13 -12
  530. data/test/rubygems/test_gem_resolver_dependency_request.rb +16 -15
  531. data/test/rubygems/test_gem_resolver_git_set.rb +22 -21
  532. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -21
  533. data/test/rubygems/test_gem_resolver_index_set.rb +13 -12
  534. data/test/rubygems/test_gem_resolver_index_specification.rb +17 -16
  535. data/test/rubygems/test_gem_resolver_installed_specification.rb +6 -5
  536. data/test/rubygems/test_gem_resolver_installer_set.rb +79 -34
  537. data/test/rubygems/test_gem_resolver_local_specification.rb +8 -7
  538. data/test/rubygems/test_gem_resolver_lock_set.rb +13 -12
  539. data/test/rubygems/test_gem_resolver_lock_specification.rb +18 -17
  540. data/test/rubygems/test_gem_resolver_requirement_list.rb +2 -1
  541. data/test/rubygems/test_gem_resolver_specification.rb +9 -8
  542. data/test/rubygems/test_gem_resolver_vendor_set.rb +7 -6
  543. data/test/rubygems/test_gem_resolver_vendor_specification.rb +11 -10
  544. data/test/rubygems/test_gem_security.rb +69 -68
  545. data/test/rubygems/test_gem_security_policy.rb +72 -72
  546. data/test/rubygems/test_gem_security_signer.rb +35 -34
  547. data/test/rubygems/test_gem_security_trust_dir.rb +7 -6
  548. data/test/rubygems/test_gem_silent_ui.rb +39 -32
  549. data/test/rubygems/test_gem_source.rb +45 -44
  550. data/test/rubygems/test_gem_source_fetch_problem.rb +10 -9
  551. data/test/rubygems/test_gem_source_git.rb +69 -62
  552. data/test/rubygems/test_gem_source_installed.rb +17 -16
  553. data/test/rubygems/test_gem_source_list.rb +6 -5
  554. data/test/rubygems/test_gem_source_local.rb +15 -14
  555. data/test/rubygems/test_gem_source_lock.rb +32 -31
  556. data/test/rubygems/test_gem_source_specific_file.rb +18 -17
  557. data/test/rubygems/test_gem_source_subpath_problem.rb +8 -7
  558. data/test/rubygems/test_gem_source_vendor.rb +14 -13
  559. data/test/rubygems/test_gem_spec_fetcher.rb +73 -72
  560. data/test/rubygems/test_gem_specification.rb +533 -469
  561. data/test/rubygems/test_gem_stream_ui.rb +53 -22
  562. data/test/rubygems/test_gem_stub_specification.rb +33 -32
  563. data/test/rubygems/test_gem_text.rb +2 -1
  564. data/test/rubygems/test_gem_uninstaller.rb +118 -117
  565. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +4 -3
  566. data/test/rubygems/test_gem_update_suggestion.rb +209 -0
  567. data/test/rubygems/test_gem_uri.rb +6 -4
  568. data/test/rubygems/test_gem_uri_formatter.rb +15 -14
  569. data/test/rubygems/test_gem_util.rb +24 -23
  570. data/test/rubygems/test_gem_validator.rb +8 -8
  571. data/test/rubygems/test_gem_version.rb +24 -16
  572. data/test/rubygems/test_gem_version_option.rb +16 -15
  573. data/test/rubygems/test_kernel.rb +43 -48
  574. data/test/rubygems/test_project_sanity.rb +32 -3
  575. data/test/rubygems/test_remote_fetch_error.rb +8 -7
  576. data/test/rubygems/test_require.rb +118 -103
  577. data/test/rubygems/test_rubygems.rb +10 -8
  578. data/test/rubygems/test_webauthn_listener.rb +143 -0
  579. data/test/rubygems/test_webauthn_listener_response.rb +93 -0
  580. data/test/rubygems/test_webauthn_poller.rb +124 -0
  581. data/test/rubygems/utilities.rb +98 -34
  582. data/test/rubygems/wrong_key_cert.pem +15 -15
  583. data/test/rubygems/wrong_key_cert_32.pem +15 -15
  584. data/test/test_changelog_generator.rb +1 -1
  585. metadata +99 -46
  586. data/bundler/lib/bundler/dep_proxy.rb +0 -55
  587. data/bundler/lib/bundler/templates/gems.rb +0 -5
  588. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  589. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  590. data/bundler/lib/bundler/vendor/molinillo/LICENSE +0 -9
  591. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  592. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  593. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  594. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  595. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  596. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  597. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  598. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  599. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  600. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  601. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  602. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  603. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
  604. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  605. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  606. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  607. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  608. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  609. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  610. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  611. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  612. data/bundler/lib/bundler/vendored_molinillo.rb +0 -4
  613. data/bundler/lib/bundler/version_ranges.rb +0 -122
  614. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
  615. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Gem
3
- DEFAULT_HOST = "https://rubygems.org".freeze
4
+ DEFAULT_HOST = "https://rubygems.org"
4
5
 
5
6
  @post_install_hooks ||= []
6
7
  @done_installing_hooks ||= []
@@ -20,10 +21,10 @@ module Gem
20
21
  # specified in the environment
21
22
 
22
23
  def self.default_spec_cache_dir
23
- default_spec_cache_dir = File.join Gem.user_home, '.gem', 'specs'
24
+ default_spec_cache_dir = File.join Gem.user_home, ".gem", "specs"
24
25
 
25
26
  unless File.exist?(default_spec_cache_dir)
26
- default_spec_cache_dir = File.join Gem.data_home, 'gem', 'specs'
27
+ default_spec_cache_dir = File.join Gem.data_home, "gem", "specs"
27
28
  end
28
29
 
29
30
  default_spec_cache_dir
@@ -34,7 +35,7 @@ module Gem
34
35
  # specified in the environment
35
36
 
36
37
  def self.default_dir
37
- @default_dir ||= File.join(RbConfig::CONFIG['rubylibprefix'], 'gems', RbConfig::CONFIG['ruby_version'])
38
+ @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version"])
38
39
  end
39
40
 
40
41
  ##
@@ -81,7 +82,7 @@ module Gem
81
82
  Dir.home.dup
82
83
  rescue
83
84
  if Gem.win_platform?
84
- File.expand_path File.join(ENV['HOMEDRIVE'] || ENV['SystemDrive'], '/')
85
+ File.expand_path File.join(ENV["HOMEDRIVE"] || ENV["SystemDrive"], "/")
85
86
  else
86
87
  File.expand_path "/"
87
88
  end
@@ -103,7 +104,7 @@ module Gem
103
104
  gem_dir = File.join(Gem.user_home, ".gem")
104
105
  gem_dir = File.join(Gem.data_home, "gem") unless File.exist?(gem_dir)
105
106
  parts = [gem_dir, ruby_engine]
106
- parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty?
107
+ parts << RbConfig::CONFIG["ruby_version"] unless RbConfig::CONFIG["ruby_version"].empty?
107
108
  File.join parts
108
109
  end
109
110
 
@@ -111,14 +112,14 @@ module Gem
111
112
  # The path to standard location of the user's configuration directory.
112
113
 
113
114
  def self.config_home
114
- @config_home ||= (ENV["XDG_CONFIG_HOME"] || File.join(Gem.user_home, '.config'))
115
+ @config_home ||= (ENV["XDG_CONFIG_HOME"] || File.join(Gem.user_home, ".config"))
115
116
  end
116
117
 
117
118
  ##
118
119
  # Finds the user's config file
119
120
 
120
121
  def self.find_config_file
121
- gemrc = File.join Gem.user_home, '.gemrc'
122
+ gemrc = File.join Gem.user_home, ".gemrc"
122
123
  if File.exist? gemrc
123
124
  gemrc
124
125
  else
@@ -133,18 +134,32 @@ module Gem
133
134
  @config_file ||= find_config_file.tap(&Gem::UNTAINT)
134
135
  end
135
136
 
137
+ ##
138
+ # The path to standard location of the user's state file.
139
+
140
+ def self.state_file
141
+ @state_file ||= File.join(Gem.state_home, "gem", "last_update_check").tap(&Gem::UNTAINT)
142
+ end
143
+
136
144
  ##
137
145
  # The path to standard location of the user's cache directory.
138
146
 
139
147
  def self.cache_home
140
- @cache_home ||= (ENV["XDG_CACHE_HOME"] || File.join(Gem.user_home, '.cache'))
148
+ @cache_home ||= (ENV["XDG_CACHE_HOME"] || File.join(Gem.user_home, ".cache"))
141
149
  end
142
150
 
143
151
  ##
144
152
  # The path to standard location of the user's data directory.
145
153
 
146
154
  def self.data_home
147
- @data_home ||= (ENV["XDG_DATA_HOME"] || File.join(Gem.user_home, '.local', 'share'))
155
+ @data_home ||= (ENV["XDG_DATA_HOME"] || File.join(Gem.user_home, ".local", "share"))
156
+ end
157
+
158
+ ##
159
+ # The path to standard location of the user's state directory.
160
+
161
+ def self.state_home
162
+ @state_home ||= (ENV["XDG_STATE_HOME"] || File.join(Gem.user_home, ".local", "state"))
148
163
  end
149
164
 
150
165
  ##
@@ -161,7 +176,7 @@ module Gem
161
176
  path = []
162
177
  path << user_dir if user_home && File.exist?(user_home)
163
178
  path << default_dir
164
- path << vendor_dir if vendor_dir and File.directory? vendor_dir
179
+ path << vendor_dir if vendor_dir && File.directory?(vendor_dir)
165
180
  path
166
181
  end
167
182
 
@@ -169,9 +184,9 @@ module Gem
169
184
  # Deduce Ruby's --program-prefix and --program-suffix from its install name
170
185
 
171
186
  def self.default_exec_format
172
- exec_format = RbConfig::CONFIG['ruby_install_name'].sub('ruby', '%s') rescue '%s'
187
+ exec_format = RbConfig::CONFIG["ruby_install_name"].sub("ruby", "%s") rescue "%s"
173
188
 
174
- unless exec_format =~ /%s/
189
+ unless exec_format.include?("%s")
175
190
  raise Gem::Exception,
176
191
  "[BUG] invalid exec_format #{exec_format.inspect}, no %s"
177
192
  end
@@ -183,7 +198,7 @@ module Gem
183
198
  # The default directory for binaries
184
199
 
185
200
  def self.default_bindir
186
- RbConfig::CONFIG['bindir']
201
+ RbConfig::CONFIG["bindir"]
187
202
  end
188
203
 
189
204
  def self.ruby_engine
@@ -227,14 +242,14 @@ module Gem
227
242
  # Directory where vendor gems are installed.
228
243
 
229
244
  def self.vendor_dir # :nodoc:
230
- if vendor_dir = ENV['GEM_VENDOR']
245
+ if vendor_dir = ENV["GEM_VENDOR"]
231
246
  return vendor_dir.dup
232
247
  end
233
248
 
234
- return nil unless RbConfig::CONFIG.key? 'vendordir'
249
+ return nil unless RbConfig::CONFIG.key? "vendordir"
235
250
 
236
- File.join RbConfig::CONFIG['vendordir'], 'gems',
237
- RbConfig::CONFIG['ruby_version']
251
+ File.join RbConfig::CONFIG["vendordir"], "gems",
252
+ RbConfig::CONFIG["ruby_version"]
238
253
  end
239
254
 
240
255
  ##
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  ##
3
4
  # The Dependency class holds a Gem name and a Gem::Requirement.
4
5
 
@@ -97,14 +98,14 @@ class Gem::Dependency
97
98
  end
98
99
 
99
100
  def pretty_print(q) # :nodoc:
100
- q.group 1, 'Gem::Dependency.new(', ')' do
101
+ q.group 1, "Gem::Dependency.new(", ")" do
101
102
  q.pp name
102
- q.text ','
103
+ q.text ","
103
104
  q.breakable
104
105
 
105
106
  q.pp requirement
106
107
 
107
- q.text ','
108
+ q.text ","
108
109
  q.breakable
109
110
 
110
111
  q.pp type
@@ -115,7 +116,7 @@ class Gem::Dependency
115
116
  # What does this dependency require?
116
117
 
117
118
  def requirement
118
- return @requirement if defined?(@requirement) and @requirement
119
+ return @requirement if defined?(@requirement) && @requirement
119
120
 
120
121
  # @version_requirements and @version_requirement are legacy ivar
121
122
  # names, and supported here because older gems need to keep
@@ -197,7 +198,7 @@ class Gem::Dependency
197
198
  reqs = other.requirement.requirements
198
199
 
199
200
  return false unless reqs.length == 1
200
- return false unless reqs.first.first == '='
201
+ return false unless reqs.first.first == "="
201
202
 
202
203
  version = reqs.first.last
203
204
 
@@ -230,10 +231,10 @@ class Gem::Dependency
230
231
 
231
232
  version = Gem::Version.new version
232
233
 
233
- return true if requirement.none? and not version.prerelease?
234
- return false if version.prerelease? and
235
- not allow_prerelease and
236
- not prerelease?
234
+ return true if requirement.none? && !version.prerelease?
235
+ return false if version.prerelease? &&
236
+ !allow_prerelease &&
237
+ !prerelease?
237
238
 
238
239
  requirement.satisfied_by? version
239
240
  end
@@ -277,7 +278,10 @@ class Gem::Dependency
277
278
  requirement.satisfied_by?(spec.version) && env_req.satisfied_by?(spec.version)
278
279
  end.map(&:to_spec)
279
280
 
280
- Gem::BundlerVersionFinder.prioritize!(matches) if prioritizes_bundler?
281
+ if prioritizes_bundler?
282
+ require_relative "bundler_version_finder"
283
+ Gem::BundlerVersionFinder.prioritize!(matches)
284
+ end
281
285
 
282
286
  if platform_only
283
287
  matches.reject! do |spec|
@@ -296,7 +300,7 @@ class Gem::Dependency
296
300
  end
297
301
 
298
302
  def prioritizes_bundler?
299
- name == "bundler".freeze && !specific?
303
+ name == "bundler" && !specific?
300
304
  end
301
305
 
302
306
  def to_specs
@@ -1,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
- require_relative '../rubygems'
3
- require_relative 'dependency_list'
4
- require_relative 'package'
5
- require_relative 'installer'
6
- require_relative 'spec_fetcher'
7
- require_relative 'user_interaction'
8
- require_relative 'available_set'
9
- require_relative 'deprecate'
2
+
3
+ require_relative "../rubygems"
4
+ require_relative "dependency_list"
5
+ require_relative "package"
6
+ require_relative "installer"
7
+ require_relative "spec_fetcher"
8
+ require_relative "user_interaction"
9
+ require_relative "available_set"
10
+ require_relative "deprecate"
10
11
 
11
12
  ##
12
13
  # Installs a gem along with all its dependencies from local and remote gems.
@@ -16,16 +17,16 @@ class Gem::DependencyInstaller
16
17
  extend Gem::Deprecate
17
18
 
18
19
  DEFAULT_OPTIONS = { # :nodoc:
19
- :env_shebang => false,
20
- :document => %w[ri],
21
- :domain => :both, # HACK dup
22
- :force => false,
23
- :format_executable => false, # HACK dup
20
+ :env_shebang => false,
21
+ :document => %w[ri],
22
+ :domain => :both, # HACK dup
23
+ :force => false,
24
+ :format_executable => false, # HACK dup
24
25
  :ignore_dependencies => false,
25
- :prerelease => false,
26
- :security_policy => nil, # HACK NoSecurity requires OpenSSL. AlmostNo? Low?
27
- :wrappers => true,
28
- :build_args => nil,
26
+ :prerelease => false,
27
+ :security_policy => nil, # HACK NoSecurity requires OpenSSL. AlmostNo? Low?
28
+ :wrappers => true,
29
+ :build_args => nil,
29
30
  :build_docs_in_background => false,
30
31
  :install_as_default => false,
31
32
  }.freeze
@@ -109,7 +110,7 @@ class Gem::DependencyInstaller
109
110
  # gems should be considered.
110
111
 
111
112
  def consider_local?
112
- @domain == :both or @domain == :local
113
+ @domain == :both || @domain == :local
113
114
  end
114
115
 
115
116
  ##
@@ -117,7 +118,7 @@ class Gem::DependencyInstaller
117
118
  # gems should be considered.
118
119
 
119
120
  def consider_remote?
120
- @domain == :both or @domain == :remote
121
+ @domain == :both || @domain == :remote
121
122
  end
122
123
 
123
124
  ##
@@ -197,7 +198,7 @@ class Gem::DependencyInstaller
197
198
 
198
199
  def in_background(what) # :nodoc:
199
200
  fork_happened = false
200
- if @build_docs_in_background and Process.respond_to?(:fork)
201
+ if @build_docs_in_background && Process.respond_to?(:fork)
201
202
  begin
202
203
  Process.fork do
203
204
  yield
@@ -230,22 +231,22 @@ class Gem::DependencyInstaller
230
231
  @installed_gems = []
231
232
 
232
233
  options = {
233
- :bin_dir => @bin_dir,
234
- :build_args => @build_args,
235
- :document => @document,
236
- :env_shebang => @env_shebang,
237
- :force => @force,
238
- :format_executable => @format_executable,
234
+ :bin_dir => @bin_dir,
235
+ :build_args => @build_args,
236
+ :document => @document,
237
+ :env_shebang => @env_shebang,
238
+ :force => @force,
239
+ :format_executable => @format_executable,
239
240
  :ignore_dependencies => @ignore_dependencies,
240
- :prerelease => @prerelease,
241
- :security_policy => @security_policy,
242
- :user_install => @user_install,
243
- :wrappers => @wrappers,
244
- :build_root => @build_root,
245
- :install_as_default => @install_as_default,
246
- :dir_mode => @dir_mode,
247
- :data_mode => @data_mode,
248
- :prog_mode => @prog_mode,
241
+ :prerelease => @prerelease,
242
+ :security_policy => @security_policy,
243
+ :user_install => @user_install,
244
+ :wrappers => @wrappers,
245
+ :build_root => @build_root,
246
+ :install_as_default => @install_as_default,
247
+ :dir_mode => @dir_mode,
248
+ :data_mode => @data_mode,
249
+ :prog_mode => @prog_mode,
249
250
  }
250
251
  options[:install_dir] = @install_dir if @only_install_dir
251
252
 
@@ -268,7 +269,7 @@ class Gem::DependencyInstaller
268
269
  end
269
270
 
270
271
  def install_development_deps # :nodoc:
271
- if @development and @dev_shallow
272
+ if @development && @dev_shallow
272
273
  :shallow
273
274
  elsif @development
274
275
  :all
@@ -289,7 +290,7 @@ class Gem::DependencyInstaller
289
290
  installer_set.force = @force
290
291
 
291
292
  if consider_local?
292
- if dep_or_name =~ /\.gem$/ and File.file? dep_or_name
293
+ if dep_or_name =~ /\.gem$/ && File.file?(dep_or_name)
293
294
  src = Gem::Source::SpecificFile.new dep_or_name
294
295
  installer_set.add_local dep_or_name, src.spec, src
295
296
  version = src.spec.version if version == Gem::Requirement.default
@@ -1,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  #--
3
4
  # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
4
5
  # All rights reserved.
5
6
  # See LICENSE.txt for permissions.
6
7
  #++
7
8
 
8
- require_relative 'tsort'
9
- require_relative 'deprecate'
9
+ require_relative "tsort"
10
+ require_relative "deprecate"
10
11
 
11
12
  ##
12
13
  # Gem::DependencyList is used for installing and uninstalling gems in the
@@ -119,11 +120,11 @@ class Gem::DependencyList
119
120
  each do |spec|
120
121
  spec.runtime_dependencies.each do |dep|
121
122
  inst = Gem::Specification.any? do |installed_spec|
122
- dep.name == installed_spec.name and
123
- dep.requirement.satisfied_by? installed_spec.version
123
+ dep.name == installed_spec.name &&
124
+ dep.requirement.satisfied_by?(installed_spec.version)
124
125
  end
125
126
 
126
- unless inst or @specs.find {|s| s.satisfies_requirement? dep }
127
+ unless inst || @specs.find {|s| s.satisfies_requirement? dep }
127
128
  unsatisfied[spec.name] << dep
128
129
  return unsatisfied if quick
129
130
  end
@@ -175,7 +176,7 @@ class Gem::DependencyList
175
176
  def remove_specs_unsatisfied_by(dependencies)
176
177
  specs.reject! do |spec|
177
178
  dep = dependencies[spec.name]
178
- dep and not dep.requirement.satisfied_by? spec.version
179
+ dep && !dep.requirement.satisfied_by?(spec.version)
179
180
  end
180
181
  end
181
182
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  ##
3
4
  # Provides 3 methods for declaring when something is going away.
4
5
  #
@@ -143,7 +144,7 @@ module Gem::Deprecate
143
144
  end
144
145
 
145
146
  # Deprecation method to deprecate Rubygems commands
146
- def rubygems_deprecate_command
147
+ def rubygems_deprecate_command(version = Gem::Deprecate.next_rubygems_major_version)
147
148
  class_eval do
148
149
  define_method "deprecated?" do
149
150
  true
@@ -151,7 +152,7 @@ module Gem::Deprecate
151
152
 
152
153
  define_method "deprecation_warning" do
153
154
  msg = [ "#{self.command} command is deprecated",
154
- ". It will be removed in Rubygems #{Gem::Deprecate.next_rubygems_major_version}.\n",
155
+ ". It will be removed in Rubygems #{version}.\n",
155
156
  ]
156
157
 
157
158
  alert_warning "#{msg.join}" unless Gem::Deprecate.skip
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
- require_relative '../rubygems'
3
- require_relative 'user_interaction'
2
+
3
+ require_relative "../rubygems"
4
+ require_relative "user_interaction"
4
5
 
5
6
  ##
6
7
  # Cleans up after a partially-failed uninstall or for an invalid
@@ -19,18 +20,18 @@ class Gem::Doctor
19
20
  # subdirectory.
20
21
 
21
22
  REPOSITORY_EXTENSION_MAP = [ # :nodoc:
22
- ['specifications', '.gemspec'],
23
- ['build_info', '.info'],
24
- ['cache', '.gem'],
25
- ['doc', ''],
26
- ['extensions', ''],
27
- ['gems', ''],
28
- ['plugins', ''],
23
+ ["specifications", ".gemspec"],
24
+ ["build_info", ".info"],
25
+ ["cache", ".gem"],
26
+ ["doc", ""],
27
+ ["extensions", ""],
28
+ ["gems", ""],
29
+ ["plugins", ""],
29
30
  ].freeze
30
31
 
31
32
  missing =
32
33
  Gem::REPOSITORY_SUBDIRECTORIES.sort -
33
- REPOSITORY_EXTENSION_MAP.map {|(k,_)| k }.sort
34
+ REPOSITORY_EXTENSION_MAP.map {|(k,_)| k }.sort
34
35
 
35
36
  raise "Update REPOSITORY_EXTENSION_MAP, missing: #{missing.join ', '}" unless
36
37
  missing.empty?
@@ -59,7 +60,7 @@ class Gem::Doctor
59
60
  # Are we doctoring a gem repository?
60
61
 
61
62
  def gem_repository?
62
- not installed_specs.empty?
63
+ !installed_specs.empty?
63
64
  end
64
65
 
65
66
  ##
@@ -74,8 +75,8 @@ class Gem::Doctor
74
75
  Gem.use_paths @gem_repository.to_s
75
76
 
76
77
  unless gem_repository?
77
- say 'This directory does not appear to be a RubyGems repository, ' +
78
- 'skipping'
78
+ say "This directory does not appear to be a RubyGems repository, " +
79
+ "skipping"
79
80
  say
80
81
  return
81
82
  end
@@ -111,16 +112,16 @@ class Gem::Doctor
111
112
  basename = File.basename(child, extension)
112
113
  next if installed_specs.include? basename
113
114
  next if /^rubygems-\d/ =~ basename
114
- next if 'specifications' == sub_directory and 'default' == basename
115
- next if 'plugins' == sub_directory and Gem.plugin_suffix_regexp =~ basename
115
+ next if "specifications" == sub_directory && "default" == basename
116
+ next if "plugins" == sub_directory && Gem.plugin_suffix_regexp =~ (basename)
116
117
 
117
- type = File.directory?(child) ? 'directory' : 'file'
118
+ type = File.directory?(child) ? "directory" : "file"
118
119
 
119
120
  action = if @dry_run
120
- 'Extra'
121
+ "Extra"
121
122
  else
122
123
  FileUtils.rm_r(child)
123
- 'Removed'
124
+ "Removed"
124
125
  end
125
126
 
126
127
  say "#{action} #{type} #{sub_directory}/#{File.basename(child)}"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  #--
3
4
  # This file contains all the various exceptions and other errors that are used
4
5
  # inside of RubyGems.
@@ -136,8 +137,8 @@ module Gem
136
137
  "Found %s (%s), but was for platform%s %s" %
137
138
  [@name,
138
139
  @version,
139
- @platforms.size == 1 ? '' : 's',
140
- @platforms.join(' ,')]
140
+ @platforms.size == 1 ? "" : "s",
141
+ @platforms.join(" ,")]
141
142
  end
142
143
  end
143
144
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'deprecate'
4
- require_relative 'unknown_command_spell_checker'
3
+ require_relative "deprecate"
4
+ require_relative "unknown_command_spell_checker"
5
5
 
6
6
  ##
7
7
  # Base exception class for RubyGems. All exception raised by RubyGems are a
@@ -27,7 +27,7 @@ class Gem::UnknownCommandError < Gem::Exception
27
27
  if DidYouMean.respond_to?(:correct_error)
28
28
  DidYouMean.correct_error(Gem::UnknownCommandError, Gem::UnknownCommandSpellChecker)
29
29
  else
30
- DidYouMean::SPELL_CHECKERS['Gem::UnknownCommandError'] =
30
+ DidYouMean::SPELL_CHECKERS["Gem::UnknownCommandError"] =
31
31
  Gem::UnknownCommandSpellChecker
32
32
 
33
33
  prepend DidYouMean::Correctable
@@ -154,7 +154,7 @@ class Gem::ImpossibleDependenciesError < Gem::Exception
154
154
 
155
155
  def build_message # :nodoc:
156
156
  requester = @request.requester
157
- requester = requester ? requester.spec.full_name : 'The user'
157
+ requester = requester ? requester.spec.full_name : "The user"
158
158
  dependency = @request.dependency
159
159
 
160
160
  message = "#{requester} requires #{dependency} but it conflicted:\n".dup
@@ -213,6 +213,16 @@ class Gem::RubyVersionMismatch < Gem::Exception; end
213
213
 
214
214
  class Gem::VerificationError < Gem::Exception; end
215
215
 
216
+ ##
217
+ # Raised by Gem::WebauthnListener when an error occurs during security
218
+ # device verification.
219
+
220
+ class Gem::WebauthnVerificationError < Gem::Exception
221
+ def initialize(message)
222
+ super "Security device verification failed: #{message}"
223
+ end
224
+ end
225
+
216
226
  ##
217
227
  # Raised to indicate that a system exit should occur with the specified
218
228
  # exit_code
@@ -221,14 +231,12 @@ class Gem::SystemExitException < SystemExit
221
231
  ##
222
232
  # The exit code for the process
223
233
 
224
- attr_accessor :exit_code
234
+ alias exit_code status
225
235
 
226
236
  ##
227
237
  # Creates a new SystemExitException with the given +exit_code+
228
238
 
229
239
  def initialize(exit_code)
230
- @exit_code = exit_code
231
-
232
240
  super exit_code, "Exiting RubyGems with exit_code #{exit_code}"
233
241
  end
234
242
  end
@@ -254,7 +262,7 @@ class Gem::UnsatisfiableDependencyError < Gem::DependencyError
254
262
  # Gem::Resolver::DependencyRequest +dep+
255
263
 
256
264
  def initialize(dep, platform_mismatch=nil)
257
- if platform_mismatch and !platform_mismatch.empty?
265
+ if platform_mismatch && !platform_mismatch.empty?
258
266
  plats = platform_mismatch.map {|x| x.platform.to_s }.sort.uniq
259
267
  super "Unable to resolve dependency: No match for '#{dep}' on this platform. Found: #{plats.join(', ')}"
260
268
  else
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  ##
3
4
  # Raised when there is an error while building extensions.
4
5
 
5
- require_relative '../exceptions'
6
+ require_relative "../exceptions"
6
7
 
7
8
  class Gem::Ext::BuildError < Gem::InstallError
8
9
  end