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,13 +1,14 @@
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 'command'
9
- require_relative 'user_interaction'
10
- require_relative 'text'
9
+ require_relative "command"
10
+ require_relative "user_interaction"
11
+ require_relative "text"
11
12
 
12
13
  ##
13
14
  # The command manager registers and installs all the individual sub-commands
@@ -43,6 +44,7 @@ class Gem::CommandManager
43
44
  :contents,
44
45
  :dependency,
45
46
  :environment,
47
+ :exec,
46
48
  :fetch,
47
49
  :generate_index,
48
50
  :help,
@@ -73,16 +75,16 @@ class Gem::CommandManager
73
75
  ].freeze
74
76
 
75
77
  ALIAS_COMMANDS = {
76
- 'i' => 'install',
77
- 'login' => 'signin',
78
- 'logout' => 'signout',
78
+ "i" => "install",
79
+ "login" => "signin",
80
+ "logout" => "signout",
79
81
  }.freeze
80
82
 
81
83
  ##
82
84
  # Return the authoritative instance of the command manager.
83
85
 
84
86
  def self.instance
85
- @command_manager ||= new
87
+ @instance ||= new
86
88
  end
87
89
 
88
90
  ##
@@ -97,14 +99,14 @@ class Gem::CommandManager
97
99
  # Reset the authoritative instance of the command manager.
98
100
 
99
101
  def self.reset
100
- @command_manager = nil
102
+ @instance = nil
101
103
  end
102
104
 
103
105
  ##
104
106
  # Register all the subcommands supported by the gem command.
105
107
 
106
108
  def initialize
107
- require 'timeout'
109
+ require "timeout"
108
110
  @commands = {}
109
111
 
110
112
  BUILTIN_COMMANDS.each do |name|
@@ -169,20 +171,26 @@ class Gem::CommandManager
169
171
  end
170
172
 
171
173
  case args.first
172
- when '-h', '--help' then
174
+ when "-h", "--help" then
173
175
  say Gem::Command::HELP
174
176
  terminate_interaction 0
175
- when '-v', '--version' then
177
+ when "-v", "--version" then
176
178
  say Gem::VERSION
177
179
  terminate_interaction 0
180
+ when "-C" then
181
+ args.shift
182
+ start_point = args.shift
183
+ if Dir.exist?(start_point)
184
+ Dir.chdir(start_point) { invoke_command(args, build_args) }
185
+ else
186
+ alert_error clean_text("#{start_point} isn't a directory.")
187
+ terminate_interaction 1
188
+ end
178
189
  when /^-/ then
179
190
  alert_error clean_text("Invalid option: #{args.first}. See 'gem --help'.")
180
191
  terminate_interaction 1
181
192
  else
182
- cmd_name = args.shift.downcase
183
- cmd = find_command cmd_name
184
- cmd.deprecation_warning if cmd.deprecated?
185
- cmd.invoke_with_build_args args, build_args
193
+ invoke_command(args, build_args)
186
194
  end
187
195
  end
188
196
 
@@ -237,4 +245,11 @@ class Gem::CommandManager
237
245
  ui.backtrace e
238
246
  end
239
247
  end
248
+
249
+ def invoke_command(args, build_args)
250
+ cmd_name = args.shift.downcase
251
+ cmd = find_command cmd_name
252
+ cmd.deprecation_warning if cmd.deprecated?
253
+ cmd.invoke_with_build_args args, build_args
254
+ end
240
255
  end
@@ -1,31 +1,35 @@
1
1
  # frozen_string_literal: true
2
- require_relative '../command'
3
- require_relative '../package'
4
- require_relative '../version_option'
2
+
3
+ require_relative "../command"
4
+ require_relative "../package"
5
+ require_relative "../version_option"
5
6
 
6
7
  class Gem::Commands::BuildCommand < Gem::Command
7
8
  include Gem::VersionOption
8
9
 
9
10
  def initialize
10
- super 'build', 'Build a gem from a gemspec'
11
+ super "build", "Build a gem from a gemspec"
11
12
 
12
13
  add_platform_option
13
14
 
14
- add_option '--force', 'skip validation of the spec' do |value, options|
15
+ add_option "--force", "skip validation of the spec" do |value, options|
15
16
  options[:force] = true
16
17
  end
17
18
 
18
- add_option '--strict', 'consider warnings as errors when validating the spec' do |value, options|
19
+ add_option "--strict", "consider warnings as errors when validating the spec" do |value, options|
19
20
  options[:strict] = true
20
21
  end
21
22
 
22
- add_option '-o', '--output FILE', 'output gem with the given filename' do |value, options|
23
+ add_option "-o", "--output FILE", "output gem with the given filename" do |value, options|
23
24
  options[:output] = value
24
25
  end
25
26
 
26
- add_option '-C PATH', 'Run as if gem build was started in <PATH> instead of the current working directory.' do |value, options|
27
+ add_option "-C PATH", "Run as if gem build was started in <PATH> instead of the current working directory." do |value, options|
27
28
  options[:build_path] = value
28
29
  end
30
+ deprecate_option "-C",
31
+ version: "4.0",
32
+ extra_msg: "-C is a global flag now. Use `gem -C PATH build GEMSPEC_FILE [options]` instead"
29
33
  end
30
34
 
31
35
  def arguments # :nodoc:
@@ -1,69 +1,70 @@
1
1
  # frozen_string_literal: true
2
- require_relative '../command'
3
- require_relative '../security'
2
+
3
+ require_relative "../command"
4
+ require_relative "../security"
4
5
 
5
6
  class Gem::Commands::CertCommand < Gem::Command
6
7
  def initialize
7
- super 'cert', 'Manage RubyGems certificates and signing settings',
8
+ super "cert", "Manage RubyGems certificates and signing settings",
8
9
  :add => [], :remove => [], :list => [], :build => [], :sign => []
9
10
 
10
- add_option('-a', '--add CERT',
11
- 'Add a trusted certificate.') do |cert_file, options|
11
+ add_option("-a", "--add CERT",
12
+ "Add a trusted certificate.") do |cert_file, options|
12
13
  options[:add] << open_cert(cert_file)
13
14
  end
14
15
 
15
- add_option('-l', '--list [FILTER]',
16
- 'List trusted certificates where the',
17
- 'subject contains FILTER') do |filter, options|
18
- filter ||= ''
16
+ add_option("-l", "--list [FILTER]",
17
+ "List trusted certificates where the",
18
+ "subject contains FILTER") do |filter, options|
19
+ filter ||= ""
19
20
 
20
21
  options[:list] << filter
21
22
  end
22
23
 
23
- add_option('-r', '--remove FILTER',
24
- 'Remove trusted certificates where the',
25
- 'subject contains FILTER') do |filter, options|
24
+ add_option("-r", "--remove FILTER",
25
+ "Remove trusted certificates where the",
26
+ "subject contains FILTER") do |filter, options|
26
27
  options[:remove] << filter
27
28
  end
28
29
 
29
- add_option('-b', '--build EMAIL_ADDR',
30
- 'Build private key and self-signed',
31
- 'certificate for EMAIL_ADDR') do |email_address, options|
30
+ add_option("-b", "--build EMAIL_ADDR",
31
+ "Build private key and self-signed",
32
+ "certificate for EMAIL_ADDR") do |email_address, options|
32
33
  options[:build] << email_address
33
34
  end
34
35
 
35
- add_option('-C', '--certificate CERT',
36
- 'Signing certificate for --sign') do |cert_file, options|
36
+ add_option("-C", "--certificate CERT",
37
+ "Signing certificate for --sign") do |cert_file, options|
37
38
  options[:issuer_cert] = open_cert(cert_file)
38
39
  options[:issuer_cert_file] = cert_file
39
40
  end
40
41
 
41
- add_option('-K', '--private-key KEY',
42
- 'Key for --sign or --build') do |key_file, options|
42
+ add_option("-K", "--private-key KEY",
43
+ "Key for --sign or --build") do |key_file, options|
43
44
  options[:key] = open_private_key(key_file)
44
45
  end
45
46
 
46
- add_option('-A', '--key-algorithm ALGORITHM',
47
- 'Select which key algorithm to use for --build') do |algorithm, options|
47
+ add_option("-A", "--key-algorithm ALGORITHM",
48
+ "Select which key algorithm to use for --build") do |algorithm, options|
48
49
  options[:key_algorithm] = algorithm
49
50
  end
50
51
 
51
- add_option('-s', '--sign CERT',
52
- 'Signs CERT with the key from -K',
53
- 'and the certificate from -C') do |cert_file, options|
52
+ add_option("-s", "--sign CERT",
53
+ "Signs CERT with the key from -K",
54
+ "and the certificate from -C") do |cert_file, options|
54
55
  raise Gem::OptionParser::InvalidArgument, "#{cert_file}: does not exist" unless
55
56
  File.file? cert_file
56
57
 
57
58
  options[:sign] << cert_file
58
59
  end
59
60
 
60
- add_option('-d', '--days NUMBER_OF_DAYS',
61
- 'Days before the certificate expires') do |days, options|
61
+ add_option("-d", "--days NUMBER_OF_DAYS",
62
+ "Days before the certificate expires") do |days, options|
62
63
  options[:expiration_length_days] = days.to_i
63
64
  end
64
65
 
65
- add_option('-R', '--re-sign',
66
- 'Re-signs the certificate from -C with the key from -K') do |resign, options|
66
+ add_option("-R", "--re-sign",
67
+ "Re-signs the certificate from -C with the key from -K") do |resign, options|
67
68
  options[:resign] = resign
68
69
  end
69
70
  end
@@ -93,7 +94,7 @@ class Gem::Commands::CertCommand < Gem::Command
93
94
 
94
95
  def open_private_key(key_file)
95
96
  check_openssl
96
- passphrase = ENV['GEM_PRIVATE_KEY_PASSPHRASE']
97
+ passphrase = ENV["GEM_PRIVATE_KEY_PASSPHRASE"]
97
98
  key = OpenSSL::PKey.read File.read(key_file), passphrase
98
99
  raise Gem::OptionParser::InvalidArgument,
99
100
  "#{key_file}: private key not found" unless key.private?
@@ -152,7 +153,7 @@ class Gem::Commands::CertCommand < Gem::Command
152
153
 
153
154
  def build_cert(email, key) # :nodoc:
154
155
  expiration_length_days = options[:expiration_length_days] ||
155
- Gem.configuration.cert_expiration_length_days
156
+ Gem.configuration.cert_expiration_length_days
156
157
 
157
158
  cert = Gem::Security.create_cert_email(
158
159
  email,
@@ -166,10 +167,10 @@ class Gem::Commands::CertCommand < Gem::Command
166
167
  def build_key # :nodoc:
167
168
  return options[:key] if options[:key]
168
169
 
169
- passphrase = ask_for_password 'Passphrase for your Private Key:'
170
+ passphrase = ask_for_password "Passphrase for your Private Key:"
170
171
  say "\n"
171
172
 
172
- passphrase_confirmation = ask_for_password 'Please repeat the passphrase for your Private Key:'
173
+ passphrase_confirmation = ask_for_password "Please repeat the passphrase for your Private Key:"
173
174
  say "\n"
174
175
 
175
176
  raise Gem::CommandLineError,
@@ -260,7 +261,7 @@ For further reading on signing gems see `ri Gem::Security`.
260
261
  def load_default_key
261
262
  key_file = File.join Gem.default_key_path
262
263
  key = File.read key_file
263
- passphrase = ENV['GEM_PRIVATE_KEY_PASSPHRASE']
264
+ passphrase = ENV["GEM_PRIVATE_KEY_PASSPHRASE"]
264
265
  options[:key] = OpenSSL::PKey.read key, passphrase
265
266
 
266
267
  rescue Errno::ENOENT
@@ -1,44 +1,45 @@
1
1
  # frozen_string_literal: true
2
- require_relative '../command'
3
- require_relative '../version_option'
4
- require_relative '../validator'
5
- require_relative '../doctor'
2
+
3
+ require_relative "../command"
4
+ require_relative "../version_option"
5
+ require_relative "../validator"
6
+ require_relative "../doctor"
6
7
 
7
8
  class Gem::Commands::CheckCommand < Gem::Command
8
9
  include Gem::VersionOption
9
10
 
10
11
  def initialize
11
- super 'check', 'Check a gem repository for added or missing files',
12
+ super "check", "Check a gem repository for added or missing files",
12
13
  :alien => true, :doctor => false, :dry_run => false, :gems => true
13
14
 
14
- add_option('-a', '--[no-]alien',
15
+ add_option("-a", "--[no-]alien",
15
16
  'Report "unmanaged" or rogue files in the',
16
- 'gem repository') do |value, options|
17
+ "gem repository") do |value, options|
17
18
  options[:alien] = value
18
19
  end
19
20
 
20
- add_option('--[no-]doctor',
21
- 'Clean up uninstalled gems and broken',
22
- 'specifications') do |value, options|
21
+ add_option("--[no-]doctor",
22
+ "Clean up uninstalled gems and broken",
23
+ "specifications") do |value, options|
23
24
  options[:doctor] = value
24
25
  end
25
26
 
26
- add_option('--[no-]dry-run',
27
- 'Do not remove files, only report what',
28
- 'would be removed') do |value, options|
27
+ add_option("--[no-]dry-run",
28
+ "Do not remove files, only report what",
29
+ "would be removed") do |value, options|
29
30
  options[:dry_run] = value
30
31
  end
31
32
 
32
- add_option('--[no-]gems',
33
- 'Check installed gems for problems') do |value, options|
33
+ add_option("--[no-]gems",
34
+ "Check installed gems for problems") do |value, options|
34
35
  options[:gems] = value
35
36
  end
36
37
 
37
- add_version_option 'check'
38
+ add_version_option "check"
38
39
  end
39
40
 
40
41
  def check_gems
41
- say 'Checking gems...'
42
+ say "Checking gems..."
42
43
  say
43
44
  gems = get_all_gem_names rescue []
44
45
 
@@ -57,7 +58,7 @@ class Gem::Commands::CheckCommand < Gem::Command
57
58
  end
58
59
 
59
60
  def doctor
60
- say 'Checking for files from uninstalled gems...'
61
+ say "Checking for files from uninstalled gems..."
61
62
  say
62
63
 
63
64
  Gem.path.each do |gem_repo|
@@ -72,11 +73,11 @@ class Gem::Commands::CheckCommand < Gem::Command
72
73
  end
73
74
 
74
75
  def arguments # :nodoc:
75
- 'GEMNAME name of gem to check'
76
+ "GEMNAME name of gem to check"
76
77
  end
77
78
 
78
79
  def defaults_str # :nodoc:
79
- '--gems --alien'
80
+ "--gems --alien"
80
81
  end
81
82
 
82
83
  def description # :nodoc:
@@ -1,35 +1,36 @@
1
1
  # frozen_string_literal: true
2
- require_relative '../command'
3
- require_relative '../dependency_list'
4
- require_relative '../uninstaller'
2
+
3
+ require_relative "../command"
4
+ require_relative "../dependency_list"
5
+ require_relative "../uninstaller"
5
6
 
6
7
  class Gem::Commands::CleanupCommand < Gem::Command
7
8
  def initialize
8
- super 'cleanup',
9
- 'Clean up old versions of installed gems',
9
+ super "cleanup",
10
+ "Clean up old versions of installed gems",
10
11
  :force => false, :install_dir => Gem.dir,
11
12
  :check_dev => true
12
13
 
13
- add_option('-n', '-d', '--dry-run',
14
- 'Do not uninstall gems') do |value, options|
14
+ add_option("-n", "-d", "--dry-run",
15
+ "Do not uninstall gems") do |value, options|
15
16
  options[:dryrun] = true
16
17
  end
17
18
 
18
- add_option(:Deprecated, '--dryrun',
19
- 'Do not uninstall gems') do |value, options|
19
+ add_option(:Deprecated, "--dryrun",
20
+ "Do not uninstall gems") do |value, options|
20
21
  options[:dryrun] = true
21
22
  end
22
- deprecate_option('--dryrun', extra_msg: 'Use --dry-run instead')
23
+ deprecate_option("--dryrun", extra_msg: "Use --dry-run instead")
23
24
 
24
- add_option('-D', '--[no-]check-development',
25
- 'Check development dependencies while uninstalling',
26
- '(default: true)') do |value, options|
25
+ add_option("-D", "--[no-]check-development",
26
+ "Check development dependencies while uninstalling",
27
+ "(default: true)") do |value, options|
27
28
  options[:check_dev] = value
28
29
  end
29
30
 
30
- add_option('--[no-]user-install',
31
- 'Cleanup in user\'s home directory instead',
32
- 'of GEM_HOME.') do |value, options|
31
+ add_option("--[no-]user-install",
32
+ "Cleanup in user's home directory instead",
33
+ "of GEM_HOME.") do |value, options|
33
34
  options[:user_install] = value
34
35
  end
35
36
 
@@ -149,7 +150,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
149
150
  @primary_gems = {}
150
151
 
151
152
  Gem::Specification.each do |spec|
152
- if @primary_gems[spec.name].nil? or
153
+ if @primary_gems[spec.name].nil? ||
153
154
  @primary_gems[spec.name].version < spec.version
154
155
  @primary_gems[spec.name] = spec
155
156
  end
@@ -1,39 +1,40 @@
1
1
  # frozen_string_literal: true
2
- require_relative '../command'
3
- require_relative '../version_option'
2
+
3
+ require_relative "../command"
4
+ require_relative "../version_option"
4
5
 
5
6
  class Gem::Commands::ContentsCommand < Gem::Command
6
7
  include Gem::VersionOption
7
8
 
8
9
  def initialize
9
- super 'contents', 'Display the contents of the installed gems',
10
+ super "contents", "Display the contents of the installed gems",
10
11
  :specdirs => [], :lib_only => false, :prefix => true,
11
12
  :show_install_dir => false
12
13
 
13
14
  add_version_option
14
15
 
15
- add_option('--all',
16
+ add_option("--all",
16
17
  "Contents for all gems") do |all, options|
17
18
  options[:all] = all
18
19
  end
19
20
 
20
- add_option('-s', '--spec-dir a,b,c', Array,
21
+ add_option("-s", "--spec-dir a,b,c", Array,
21
22
  "Search for gems under specific paths") do |spec_dirs, options|
22
23
  options[:specdirs] = spec_dirs
23
24
  end
24
25
 
25
- add_option('-l', '--[no-]lib-only',
26
+ add_option("-l", "--[no-]lib-only",
26
27
  "Only return files in the Gem's lib_dirs") do |lib_only, options|
27
28
  options[:lib_only] = lib_only
28
29
  end
29
30
 
30
- add_option('--[no-]prefix',
31
+ add_option("--[no-]prefix",
31
32
  "Don't include installed path prefix") do |prefix, options|
32
33
  options[:prefix] = prefix
33
34
  end
34
35
 
35
- add_option('--[no-]show-install-dir',
36
- 'Show only the gem install dir') do |show, options|
36
+ add_option("--[no-]show-install-dir",
37
+ "Show only the gem install dir") do |show, options|
37
38
  options[:show_install_dir] = show
38
39
  end
39
40
 
@@ -77,7 +78,7 @@ prefix or only the files that are requireable.
77
78
  gem_contents name
78
79
  end
79
80
 
80
- terminate_interaction 1 unless found or names.length > 1
81
+ terminate_interaction 1 unless found || names.length > 1
81
82
  end
82
83
  end
83
84
 
@@ -105,11 +106,11 @@ prefix or only the files that are requireable.
105
106
  case file
106
107
  when /\A#{spec.bindir}\//
107
108
  # $' is POSTMATCH
108
- [RbConfig::CONFIG['bindir'], $']
109
+ [RbConfig::CONFIG["bindir"], $']
109
110
  when /\.so\z/
110
- [RbConfig::CONFIG['archdir'], file]
111
+ [RbConfig::CONFIG["archdir"], file]
111
112
  else
112
- [RbConfig::CONFIG['rubylibdir'], file]
113
+ [RbConfig::CONFIG["rubylibdir"], file]
113
114
  end
114
115
  end
115
116
  end
@@ -1,28 +1,29 @@
1
1
  # frozen_string_literal: true
2
- require_relative '../command'
3
- require_relative '../local_remote_options'
4
- require_relative '../version_option'
2
+
3
+ require_relative "../command"
4
+ require_relative "../local_remote_options"
5
+ require_relative "../version_option"
5
6
 
6
7
  class Gem::Commands::DependencyCommand < Gem::Command
7
8
  include Gem::LocalRemoteOptions
8
9
  include Gem::VersionOption
9
10
 
10
11
  def initialize
11
- super 'dependency',
12
- 'Show the dependencies of an installed gem',
12
+ super "dependency",
13
+ "Show the dependencies of an installed gem",
13
14
  :version => Gem::Requirement.default, :domain => :local
14
15
 
15
16
  add_version_option
16
17
  add_platform_option
17
18
  add_prerelease_option
18
19
 
19
- add_option('-R', '--[no-]reverse-dependencies',
20
- 'Include reverse dependencies in the output') do
20
+ add_option("-R", "--[no-]reverse-dependencies",
21
+ "Include reverse dependencies in the output") do
21
22
  |value, options|
22
23
  options[:reverse_dependencies] = value
23
24
  end
24
25
 
25
- add_option('-p', '--pipe',
26
+ add_option("-p", "--pipe",
26
27
  "Pipe Format (name --version ver)") do |value, options|
27
28
  options[:pipe_format] = value
28
29
  end
@@ -77,7 +78,7 @@ use with other commands.
77
78
  name_matches = name_pattern ? name_pattern =~ spec.name : true
78
79
  version_matches = requirement.satisfied_by?(spec.version)
79
80
 
80
- name_matches and version_matches
81
+ name_matches && version_matches
81
82
  }.map(&:to_spec)
82
83
  end
83
84
 
@@ -133,8 +134,8 @@ use with other commands.
133
134
  end
134
135
 
135
136
  def ensure_local_only_reverse_dependencies # :nodoc:
136
- if options[:reverse_dependencies] and remote? and not local?
137
- alert_error 'Only reverse dependencies for local gems are supported.'
137
+ if options[:reverse_dependencies] && remote? && !local?
138
+ alert_error "Only reverse dependencies for local gems are supported."
138
139
  terminate_interaction 1
139
140
  end
140
141
  end
@@ -142,7 +143,7 @@ use with other commands.
142
143
  def ensure_specs(specs) # :nodoc:
143
144
  return unless specs.empty?
144
145
 
145
- patterns = options[:args].join ','
146
+ patterns = options[:args].join ","
146
147
  say "No gems found matching #{patterns} (#{options[:version]})" if
147
148
  Gem.configuration.verbose
148
149
 
@@ -151,10 +152,10 @@ use with other commands.
151
152
 
152
153
  def print_dependencies(spec, level = 0) # :nodoc:
153
154
  response = String.new
154
- response << ' ' * level + "Gem #{spec.full_name}\n"
155
+ response << " " * level + "Gem #{spec.full_name}\n"
155
156
  unless spec.dependencies.empty?
156
157
  spec.dependencies.sort_by {|dep| dep.name }.each do |dep|
157
- response << ' ' * level + " #{dep}\n"
158
+ response << " " * level + " #{dep}\n"
158
159
  end
159
160
  end
160
161
  response
@@ -182,7 +183,7 @@ use with other commands.
182
183
  sp.dependencies.each do |dep|
183
184
  dep = Gem::Dependency.new(*dep) unless Gem::Dependency === dep
184
185
 
185
- if spec.name == dep.name and
186
+ if spec.name == dep.name &&
186
187
  dep.requirement.satisfied_by?(spec.version)
187
188
  result << [sp.full_name, dep]
188
189
  end
@@ -197,7 +198,7 @@ use with other commands.
197
198
  def name_pattern(args)
198
199
  return if args.empty?
199
200
 
200
- if args.length == 1 and args.first =~ /\A(.*)(i)?\z/m
201
+ if args.length == 1 && args.first =~ /\A(.*)(i)?\z/m
201
202
  flags = $2 ? Regexp::IGNORECASE : nil
202
203
  Regexp.new $1, flags
203
204
  else
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
- require_relative '../command'
2
+
3
+ require_relative "../command"
3
4
 
4
5
  class Gem::Commands::EnvironmentCommand < Gem::Command
5
6
  def initialize
6
- super 'environment', 'Display information about the RubyGems environment'
7
+ super "environment", "Display information about the RubyGems environment"
7
8
  end
8
9
 
9
10
  def arguments # :nodoc:
@@ -16,7 +17,7 @@ class Gem::Commands::EnvironmentCommand < Gem::Command
16
17
  platform display the supported gem platforms
17
18
  <omitted> display everything
18
19
  EOF
19
- return args.gsub(/^\s+/, '')
20
+ return args.gsub(/^\s+/, "")
20
21
  end
21
22
 
22
23
  def description # :nodoc:
@@ -141,7 +142,7 @@ lib/rubygems/defaults/operating_system.rb
141
142
 
142
143
  out << " - GEM CONFIGURATION:\n"
143
144
  Gem.configuration.each do |name, value|
144
- value = value.gsub(/./, '*') if name == 'gemcutter_key'
145
+ value = value.gsub(/./, "*") if name == "gemcutter_key"
145
146
  out << " - #{name.inspect} => #{value.inspect}\n"
146
147
  end
147
148
 
@@ -152,7 +153,7 @@ lib/rubygems/defaults/operating_system.rb
152
153
 
153
154
  out << " - SHELL PATH:\n"
154
155
 
155
- shell_path = ENV['PATH'].split(File::PATH_SEPARATOR)
156
+ shell_path = ENV["PATH"].split(File::PATH_SEPARATOR)
156
157
  add_path out, shell_path
157
158
 
158
159
  out