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,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'helper'
3
- require 'rubygems/available_set'
4
- require 'rubygems/security'
2
+
3
+ require_relative "helper"
4
+ require "rubygems/available_set"
5
+ require "rubygems/security"
5
6
 
6
7
  class TestGemAvailableSet < Gem::TestCase
7
8
  def setup
@@ -11,7 +12,7 @@ class TestGemAvailableSet < Gem::TestCase
11
12
  end
12
13
 
13
14
  def test_add_and_empty
14
- a1, _ = util_gem 'a', '1'
15
+ a1, _ = util_gem "a", "1"
15
16
 
16
17
  set = Gem::AvailableSet.new
17
18
  assert set.empty?
@@ -24,8 +25,8 @@ class TestGemAvailableSet < Gem::TestCase
24
25
  end
25
26
 
26
27
  def test_find_all
27
- a1, a1_gem = util_gem 'a', 1
28
- a1a, a1a_gem = util_gem 'a', '1.a'
28
+ a1, a1_gem = util_gem "a", 1
29
+ a1a, a1a_gem = util_gem "a", "1.a"
29
30
 
30
31
  a1_source = Gem::Source::SpecificFile.new a1_gem
31
32
  a1a_source = Gem::Source::SpecificFile.new a1a_gem
@@ -34,26 +35,26 @@ class TestGemAvailableSet < Gem::TestCase
34
35
  set.add a1, a1_source
35
36
  set.add a1a, a1a_source
36
37
 
37
- dep = Gem::Resolver::DependencyRequest.new dep('a'), nil
38
+ dep = Gem::Resolver::DependencyRequest.new dep("a"), nil
38
39
 
39
40
  assert_equal %w[a-1], set.find_all(dep).map {|spec| spec.full_name }
40
41
 
41
- dep = Gem::Resolver::DependencyRequest.new dep('a', '>= 0.a'), nil
42
+ dep = Gem::Resolver::DependencyRequest.new dep("a", ">= 0.a"), nil
42
43
 
43
44
  assert_equal %w[a-1 a-1.a],
44
45
  set.find_all(dep).map {|spec| spec.full_name }.sort
45
46
  end
46
47
 
47
48
  def test_match_platform
48
- a1, _ = util_gem 'a', '1' do |g|
49
+ a1, _ = util_gem "a", "1" do |g|
49
50
  g.platform = "something-weird-yep"
50
51
  end
51
52
 
52
- a1c, _ = util_gem 'a', '2' do |g|
53
+ a1c, _ = util_gem "a", "2" do |g|
53
54
  g.platform = Gem::Platform.local
54
55
  end
55
56
 
56
- a2, _ = util_gem 'a', '2'
57
+ a2, _ = util_gem "a", "2"
57
58
 
58
59
  set = Gem::AvailableSet.new
59
60
  set.add a1, @source
@@ -66,8 +67,8 @@ class TestGemAvailableSet < Gem::TestCase
66
67
  end
67
68
 
68
69
  def test_best
69
- a1, _ = util_gem 'a', '1'
70
- a2, _ = util_gem 'a', '2'
70
+ a1, _ = util_gem "a", "1"
71
+ a2, _ = util_gem "a", "2"
71
72
 
72
73
  set = Gem::AvailableSet.new
73
74
  set.add a1, @source
@@ -79,7 +80,7 @@ class TestGemAvailableSet < Gem::TestCase
79
80
  end
80
81
 
81
82
  def test_remove_installed_bang
82
- a1, _ = util_spec 'a', '1'
83
+ a1, _ = util_spec "a", "1"
83
84
  install_specs a1
84
85
 
85
86
  a1.activate
@@ -95,8 +96,8 @@ class TestGemAvailableSet < Gem::TestCase
95
96
  end
96
97
 
97
98
  def test_sorted_normal_versions
98
- a1, _ = util_gem 'a', '1'
99
- a2, _ = util_gem 'a', '2'
99
+ a1, _ = util_gem "a", "1"
100
+ a2, _ = util_gem "a", "2"
100
101
 
101
102
  set = Gem::AvailableSet.new
102
103
  set.add a1, @source
@@ -109,11 +110,11 @@ class TestGemAvailableSet < Gem::TestCase
109
110
  end
110
111
 
111
112
  def test_sorted_respect_pre
112
- a1a, _ = util_gem 'a', '1.a'
113
- a1, _ = util_gem 'a', '1'
114
- a2a, _ = util_gem 'a', '2.a'
115
- a2, _ = util_gem 'a', '2'
116
- a3a, _ = util_gem 'a', '3.a'
113
+ a1a, _ = util_gem "a", "1.a"
114
+ a1, _ = util_gem "a", "1"
115
+ a2a, _ = util_gem "a", "2.a"
116
+ a2, _ = util_gem "a", "2"
117
+ a3a, _ = util_gem "a", "3.a"
117
118
 
118
119
  set = Gem::AvailableSet.new
119
120
  set.add a1, @source
@@ -1,12 +1,14 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'helper'
2
+
3
+ require_relative "helper"
4
+ require "rubygems/bundler_version_finder"
3
5
 
4
6
  class TestGemBundlerVersionFinder < Gem::TestCase
5
7
  def setup
6
- super
7
-
8
8
  @argv = ARGV.dup
9
9
  @dollar_0 = $0
10
+ super
11
+
10
12
  without_any_upwards_gemfiles
11
13
  end
12
14
 
@@ -78,7 +80,7 @@ class TestGemBundlerVersionFinder < Gem::TestCase
78
80
 
79
81
  def test_deleted_directory
80
82
  pend "Cannot perform this test on windows" if win_platform?
81
- pend "Cannot perform this test on Solaris" if /solaris/ =~ RUBY_PLATFORM
83
+ pend "Cannot perform this test on Solaris" if RUBY_PLATFORM.include?("solaris")
82
84
  require "tmpdir"
83
85
 
84
86
  orig_dir = Dir.pwd
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'helper'
3
- require 'rubygems/command'
2
+
3
+ require_relative "helper"
4
+ require "rubygems/command"
4
5
 
5
6
  class Gem::Command
6
7
  public :parser
@@ -15,13 +16,13 @@ class TestGemCommand < Gem::TestCase
15
16
  @common_options = Gem::Command.common_options.dup
16
17
  Gem::Command.common_options.clear
17
18
  Gem::Command.common_options << [
18
- ['-x', '--exe', 'Execute'], lambda do |*a|
19
+ ["-x", "--exe", "Execute"], lambda do |*a|
19
20
  @xopt = true
20
21
  end
21
22
  ]
22
23
 
23
- @cmd_name = 'doit'
24
- @cmd = Gem::Command.new @cmd_name, 'summary'
24
+ @cmd_name = "doit"
25
+ @cmd = Gem::Command.new @cmd_name, "summary"
25
26
  end
26
27
 
27
28
  def teardown
@@ -31,7 +32,7 @@ class TestGemCommand < Gem::TestCase
31
32
 
32
33
  def test_self_add_specific_extra_args
33
34
  added_args = %w[--all]
34
- @cmd.add_option('--all') {|v,o| }
35
+ @cmd.add_option("--all") {|v,o| }
35
36
 
36
37
  Gem::Command.add_specific_extra_args @cmd_name, added_args
37
38
 
@@ -86,7 +87,7 @@ class TestGemCommand < Gem::TestCase
86
87
  end
87
88
 
88
89
  def test_defaults
89
- @cmd.add_option('-h', '--help [COMMAND]', 'Get help on COMMAND') do |value, options|
90
+ @cmd.add_option("-h", "--help [COMMAND]", "Get help on COMMAND") do |value, options|
90
91
  options[:help] = value
91
92
  end
92
93
 
@@ -119,7 +120,7 @@ class TestGemCommand < Gem::TestCase
119
120
  @cmd.when_invoked { true }
120
121
 
121
122
  ex = assert_raise Gem::OptionParser::InvalidOption do
122
- @cmd.invoke('-zzz')
123
+ @cmd.invoke("-zzz")
123
124
  end
124
125
 
125
126
  assert_match(/invalid option:/, ex.message)
@@ -151,12 +152,12 @@ class TestGemCommand < Gem::TestCase
151
152
  done = false
152
153
 
153
154
  use_ui @ui do
154
- @cmd.add_option('-h', '--help [COMMAND]', 'Get help on COMMAND') do |value, options|
155
+ @cmd.add_option("-h", "--help [COMMAND]", "Get help on COMMAND") do |value, options|
155
156
  options[:help] = true
156
157
  done = true
157
158
  end
158
159
 
159
- @cmd.invoke('--help')
160
+ @cmd.invoke("--help")
160
161
 
161
162
  assert done
162
163
  end
@@ -174,7 +175,7 @@ class TestGemCommand < Gem::TestCase
174
175
  end
175
176
 
176
177
  def test_invoke_with_options
177
- @cmd.add_option('-h', '--help [COMMAND]', 'Get help on COMMAND') do |value, options|
178
+ @cmd.add_option("-h", "--help [COMMAND]", "Get help on COMMAND") do |value, options|
178
179
  options[:help] = true
179
180
  end
180
181
 
@@ -183,7 +184,7 @@ class TestGemCommand < Gem::TestCase
183
184
  end
184
185
 
185
186
  use_ui @ui do
186
- @cmd.invoke '-h'
187
+ @cmd.invoke "-h"
187
188
  end
188
189
 
189
190
  assert_match %r{Usage: gem doit}, @ui.output
@@ -191,40 +192,40 @@ class TestGemCommand < Gem::TestCase
191
192
 
192
193
  def test_add_option
193
194
  assert_nothing_raised RuntimeError do
194
- @cmd.add_option('--force', 'skip validation of the spec') {|v,o| }
195
+ @cmd.add_option("--force", "skip validation of the spec") {|v,o| }
195
196
  end
196
197
  end
197
198
 
198
199
  def test_add_option_with_empty
199
200
  assert_raise RuntimeError, "Do not pass an empty string in opts" do
200
- @cmd.add_option('', 'skip validation of the spec') {|v,o| }
201
+ @cmd.add_option("", "skip validation of the spec") {|v,o| }
201
202
  end
202
203
  end
203
204
 
204
205
  def test_option_recognition
205
- @cmd.add_option('-h', '--help [COMMAND]', 'Get help on COMMAND') do |value, options|
206
+ @cmd.add_option("-h", "--help [COMMAND]", "Get help on COMMAND") do |value, options|
206
207
  options[:help] = true
207
208
  end
208
- @cmd.add_option('-f', '--file FILE', 'File option') do |value, options|
209
+ @cmd.add_option("-f", "--file FILE", "File option") do |value, options|
209
210
  options[:help] = true
210
211
  end
211
- @cmd.add_option('--silent', 'Silence RubyGems output') do |value, options|
212
+ @cmd.add_option("--silent", "Silence RubyGems output") do |value, options|
212
213
  options[:silent] = true
213
214
  end
214
- assert @cmd.handles?(['-x'])
215
- assert @cmd.handles?(['-h'])
216
- assert @cmd.handles?(['-h', 'command'])
217
- assert @cmd.handles?(['--help', 'command'])
218
- assert @cmd.handles?(['-f', 'filename'])
219
- assert @cmd.handles?(['--file=filename'])
220
- assert @cmd.handles?(['--silent'])
221
- refute @cmd.handles?(['-z'])
222
- refute @cmd.handles?(['-f'])
223
- refute @cmd.handles?(['--toothpaste'])
224
-
225
- args = ['-h', 'command']
215
+ assert @cmd.handles?(["-x"])
216
+ assert @cmd.handles?(["-h"])
217
+ assert @cmd.handles?(["-h", "command"])
218
+ assert @cmd.handles?(["--help", "command"])
219
+ assert @cmd.handles?(["-f", "filename"])
220
+ assert @cmd.handles?(["--file=filename"])
221
+ assert @cmd.handles?(["--silent"])
222
+ refute @cmd.handles?(["-z"])
223
+ refute @cmd.handles?(["-f"])
224
+ refute @cmd.handles?(["--toothpaste"])
225
+
226
+ args = ["-h", "command"]
226
227
  @cmd.handles?(args)
227
- assert_equal ['-h', 'command'], args
228
+ assert_equal ["-h", "command"], args
228
229
  end
229
230
 
230
231
  def test_deprecate_option
@@ -234,13 +235,13 @@ WARNING: The \"--test\" option has been deprecated and will be removed in Rubyg
234
235
 
235
236
  testCommand = Class.new(Gem::Command) do
236
237
  def initialize
237
- super('test', 'Gem::Command instance for testing')
238
+ super("test", "Gem::Command instance for testing")
238
239
 
239
- add_option('-t', '--test', 'Test command') do |value, options|
240
+ add_option("-t", "--test", "Test command") do |value, options|
240
241
  options[:test] = true
241
242
  end
242
243
 
243
- deprecate_option('--test', version: '3.1')
244
+ deprecate_option("--test", version: "3.1")
244
245
  end
245
246
 
246
247
  def execute
@@ -263,13 +264,13 @@ WARNING: The \"--test\" option has been deprecated and will be removed in futur
263
264
 
264
265
  testCommand = Class.new(Gem::Command) do
265
266
  def initialize
266
- super('test', 'Gem::Command instance for testing')
267
+ super("test", "Gem::Command instance for testing")
267
268
 
268
- add_option('-t', '--test', 'Test command') do |value, options|
269
+ add_option("-t", "--test", "Test command") do |value, options|
269
270
  options[:test] = true
270
271
  end
271
272
 
272
- deprecate_option('--test')
273
+ deprecate_option("--test")
273
274
  end
274
275
 
275
276
  def execute
@@ -292,13 +293,13 @@ WARNING: The \"--test\" option has been deprecated and will be removed in Rubyg
292
293
 
293
294
  testCommand = Class.new(Gem::Command) do
294
295
  def initialize
295
- super('test', 'Gem::Command instance for testing')
296
+ super("test", "Gem::Command instance for testing")
296
297
 
297
- add_option('-t', '--test', 'Test command') do |value, options|
298
+ add_option("-t", "--test", "Test command") do |value, options|
298
299
  options[:test] = true
299
300
  end
300
301
 
301
- deprecate_option('--test', version: '3.1', extra_msg: 'Whether you set `--test` mode or not, this dummy app always runs in test mode.')
302
+ deprecate_option("--test", version: "3.1", extra_msg: "Whether you set `--test` mode or not, this dummy app always runs in test mode.")
302
303
  end
303
304
 
304
305
  def execute
@@ -321,13 +322,13 @@ WARNING: The \"--test\" option has been deprecated and will be removed in futur
321
322
 
322
323
  testCommand = Class.new(Gem::Command) do
323
324
  def initialize
324
- super('test', 'Gem::Command instance for testing')
325
+ super("test", "Gem::Command instance for testing")
325
326
 
326
- add_option('-t', '--test', 'Test command') do |value, options|
327
+ add_option("-t", "--test", "Test command") do |value, options|
327
328
  options[:test] = true
328
329
  end
329
330
 
330
- deprecate_option('--test', extra_msg: 'Whether you set `--test` mode or not, this dummy app always runs in test mode.')
331
+ deprecate_option("--test", extra_msg: "Whether you set `--test` mode or not, this dummy app always runs in test mode.")
331
332
  end
332
333
 
333
334
  def execute
@@ -364,11 +365,11 @@ ERROR: Could not find a valid gem 'nonexistent_with_hint' (>= 0) in any reposit
364
365
 
365
366
  def test_show_lookup_failure_suggestions_none
366
367
  spec_fetcher do |fetcher|
367
- fetcher.spec 'correct', 2
368
+ fetcher.spec "correct", 2
368
369
  end
369
370
 
370
371
  use_ui @ui do
371
- @cmd.show_lookup_failure 'other', Gem::Requirement.default, [], :remote
372
+ @cmd.show_lookup_failure "other", Gem::Requirement.default, [], :remote
372
373
  end
373
374
 
374
375
  expected = <<-EXPECTED
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'helper'
3
- require 'rubygems/command_manager'
2
+
3
+ require_relative "helper"
4
+ require "rubygems/command_manager"
4
5
 
5
6
  class TestGemCommandManager < Gem::TestCase
6
- PROJECT_DIR = File.expand_path('../..', __dir__).tap(&Gem::UNTAINT)
7
+ PROJECT_DIR = File.expand_path("../..", __dir__).tap(&Gem::UNTAINT)
7
8
 
8
9
  def setup
9
10
  super
@@ -12,38 +13,38 @@ class TestGemCommandManager < Gem::TestCase
12
13
  end
13
14
 
14
15
  def test_find_command
15
- command = @command_manager.find_command 'install'
16
+ command = @command_manager.find_command "install"
16
17
 
17
18
  assert_kind_of Gem::Commands::InstallCommand, command
18
19
 
19
- command = @command_manager.find_command 'ins'
20
+ command = @command_manager.find_command "ins"
20
21
 
21
22
  assert_kind_of Gem::Commands::InstallCommand, command
22
23
  end
23
24
 
24
25
  def test_find_command_ambiguous
25
26
  e = assert_raise Gem::CommandLineError do
26
- @command_manager.find_command 'u'
27
+ @command_manager.find_command "u"
27
28
  end
28
29
 
29
- assert_equal 'Ambiguous command u matches [uninstall, unpack, update]',
30
+ assert_equal "Ambiguous command u matches [uninstall, unpack, update]",
30
31
  e.message
31
32
  end
32
33
 
33
34
  def test_find_alias_command
34
- command = @command_manager.find_command 'i'
35
+ command = @command_manager.find_command "i"
35
36
 
36
37
  assert_kind_of Gem::Commands::InstallCommand, command
37
38
  end
38
39
 
39
40
  def test_find_login_alias_command
40
- command = @command_manager.find_command 'login'
41
+ command = @command_manager.find_command "login"
41
42
 
42
43
  assert_kind_of Gem::Commands::SigninCommand, command
43
44
  end
44
45
 
45
46
  def test_find_logout_alias_comamnd
46
- command = @command_manager.find_command 'logout'
47
+ command = @command_manager.find_command "logout"
47
48
 
48
49
  assert_kind_of Gem::Commands::SignoutCommand, command
49
50
  end
@@ -54,7 +55,7 @@ class TestGemCommandManager < Gem::TestCase
54
55
 
55
56
  @command_manager.register_command :ins
56
57
 
57
- command = @command_manager.find_command 'ins'
58
+ command = @command_manager.find_command "ins"
58
59
 
59
60
  assert_kind_of ins_command, command
60
61
  ensure
@@ -63,20 +64,20 @@ class TestGemCommandManager < Gem::TestCase
63
64
 
64
65
  def test_find_command_unknown
65
66
  e = assert_raise Gem::UnknownCommandError do
66
- @command_manager.find_command 'xyz'
67
+ @command_manager.find_command "xyz"
67
68
  end
68
69
 
69
- assert_equal 'Unknown command xyz', e.message
70
+ assert_equal "Unknown command xyz", e.message
70
71
  end
71
72
 
72
73
  def test_find_command_unknown_suggestions
73
74
  e = assert_raise Gem::UnknownCommandError do
74
- @command_manager.find_command 'pish'
75
+ @command_manager.find_command "pish"
75
76
  end
76
77
 
77
- message = 'Unknown command pish'.dup
78
+ message = "Unknown command pish".dup
78
79
 
79
- if RUBY_VERSION >= "2.4" && defined?(DidYouMean::SPELL_CHECKERS) && defined?(DidYouMean::Correctable)
80
+ if defined?(DidYouMean::SPELL_CHECKERS) && defined?(DidYouMean::Correctable)
80
81
  message << "\nDid you mean? \"push\""
81
82
  end
82
83
 
@@ -100,7 +101,7 @@ class TestGemCommandManager < Gem::TestCase
100
101
  assert_raise Gem::MockGemUi::TermError do
101
102
  @command_manager.run %w[interrupt]
102
103
  end
103
- assert_equal '', ui.output
104
+ assert_equal "", ui.output
104
105
  assert_equal "ERROR: Interrupted\n", ui.error
105
106
  end
106
107
  ensure
@@ -117,7 +118,7 @@ class TestGemCommandManager < Gem::TestCase
117
118
  assert_raise Gem::MockGemUi::TermError do
118
119
  @command_manager.run %w[crash]
119
120
  end
120
- assert_equal '', ui.output
121
+ assert_equal "", ui.output
121
122
  err = ui.error.split("\n").first
122
123
  assert_equal "ERROR: Loading command: crash (RuntimeError)", err
123
124
  end
@@ -126,6 +127,46 @@ class TestGemCommandManager < Gem::TestCase
126
127
  @command_manager.unregister_command :crash
127
128
  end
128
129
 
130
+ def test_process_args_with_c_flag
131
+ custom_start_point = File.join @tempdir, "nice_folder"
132
+ FileUtils.mkdir_p custom_start_point
133
+
134
+ execution_path = nil
135
+ use_ui @ui do
136
+ @command_manager[:install].when_invoked do
137
+ execution_path = Dir.pwd
138
+ true
139
+ end
140
+ @command_manager.process_args %W[-C #{custom_start_point} install net-scp-4.0.0.gem --local]
141
+ end
142
+
143
+ assert_equal custom_start_point, execution_path
144
+ end
145
+
146
+ def test_process_args_with_c_flag_without_path
147
+ use_ui @ui do
148
+ assert_raise Gem::MockGemUi::TermError do
149
+ @command_manager.process_args %w[-C install net-scp-4.0.0.gem --local]
150
+ end
151
+ end
152
+
153
+ assert_match(/install isn't a directory./i, @ui.error)
154
+ end
155
+
156
+ def test_process_args_with_c_flag_path_not_found
157
+ custom_start_point = File.join @tempdir, "nice_folder"
158
+ FileUtils.mkdir_p custom_start_point
159
+ custom_start_point.tr!("_", "-")
160
+
161
+ use_ui @ui do
162
+ assert_raise Gem::MockGemUi::TermError do
163
+ @command_manager.process_args %W[-C #{custom_start_point} install net-scp-4.0.0.gem --local]
164
+ end
165
+ end
166
+
167
+ assert_match(/#{custom_start_point} isn't a directory./i, @ui.error)
168
+ end
169
+
129
170
  def test_process_args_bad_arg
130
171
  use_ui @ui do
131
172
  assert_raise Gem::MockGemUi::TermError do
@@ -141,7 +182,7 @@ class TestGemCommandManager < Gem::TestCase
141
182
  #capture all install options
142
183
  use_ui @ui do
143
184
  check_options = nil
144
- @command_manager['install'].when_invoked do |options|
185
+ @command_manager["install"].when_invoked do |options|
145
186
  check_options = options
146
187
  true
147
188
  end
@@ -166,7 +207,7 @@ class TestGemCommandManager < Gem::TestCase
166
207
  assert_equal true, check_options[:force]
167
208
  assert_equal :local, check_options[:domain]
168
209
  assert_equal false, check_options[:wrappers]
169
- assert_equal Gem::Requirement.new('3.0'), check_options[:version]
210
+ assert_equal Gem::Requirement.new("3.0"), check_options[:version]
170
211
  assert_equal Dir.pwd, check_options[:install_dir]
171
212
  assert_equal Dir.pwd, check_options[:bin_dir]
172
213
 
@@ -191,7 +232,7 @@ class TestGemCommandManager < Gem::TestCase
191
232
  def test_process_args_uninstall
192
233
  #capture all uninstall options
193
234
  check_options = nil
194
- @command_manager['uninstall'].when_invoked do |options|
235
+ @command_manager["uninstall"].when_invoked do |options|
195
236
  check_options = options
196
237
  true
197
238
  end
@@ -204,14 +245,14 @@ class TestGemCommandManager < Gem::TestCase
204
245
  check_options = nil
205
246
  @command_manager.process_args %w[uninstall foobar --version 3.0]
206
247
  assert_equal "foobar", check_options[:args].first
207
- assert_equal Gem::Requirement.new('3.0'), check_options[:version]
248
+ assert_equal Gem::Requirement.new("3.0"), check_options[:version]
208
249
  end
209
250
 
210
251
  # HACK move to check command test
211
252
  def test_process_args_check
212
253
  #capture all check options
213
254
  check_options = nil
214
- @command_manager['check'].when_invoked do |options|
255
+ @command_manager["check"].when_invoked do |options|
215
256
  check_options = options
216
257
  true
217
258
  end
@@ -230,7 +271,7 @@ class TestGemCommandManager < Gem::TestCase
230
271
  def test_process_args_build
231
272
  #capture all build options
232
273
  check_options = nil
233
- @command_manager['build'].when_invoked do |options|
274
+ @command_manager["build"].when_invoked do |options|
234
275
  check_options = options
235
276
  true
236
277
  end
@@ -242,14 +283,14 @@ class TestGemCommandManager < Gem::TestCase
242
283
  #check settings
243
284
  check_options = nil
244
285
  @command_manager.process_args %w[build foobar.rb]
245
- assert_equal 'foobar.rb', check_options[:args].first
286
+ assert_equal "foobar.rb", check_options[:args].first
246
287
  end
247
288
 
248
289
  # HACK move to query command test
249
290
  def test_process_args_query
250
291
  #capture all query options
251
292
  check_options = nil
252
- @command_manager['query'].when_invoked do |options|
293
+ @command_manager["query"].when_invoked do |options|
253
294
  check_options = options
254
295
  true
255
296
  end
@@ -290,25 +331,25 @@ class TestGemCommandManager < Gem::TestCase
290
331
  def test_process_args_update
291
332
  #capture all update options
292
333
  check_options = nil
293
- @command_manager['update'].when_invoked do |options|
334
+ @command_manager["update"].when_invoked do |options|
294
335
  check_options = options
295
336
  true
296
337
  end
297
338
 
298
339
  #check defaults
299
340
  @command_manager.process_args %w[update]
300
- assert_includes check_options[:document], 'ri'
341
+ assert_includes check_options[:document], "ri"
301
342
 
302
343
  #check settings
303
344
  check_options = nil
304
345
  @command_manager.process_args %w[update --force --document=ri --install-dir .]
305
- assert_includes check_options[:document], 'ri'
346
+ assert_includes check_options[:document], "ri"
306
347
  assert_equal true, check_options[:force]
307
348
  assert_equal Dir.pwd, check_options[:install_dir]
308
349
  end
309
350
 
310
351
  def test_deprecated_command
311
- require 'rubygems/command'
352
+ require "rubygems/command"
312
353
  foo_command = Class.new(Gem::Command) do
313
354
  extend Gem::Deprecate
314
355
 
@@ -331,4 +372,29 @@ class TestGemCommandManager < Gem::TestCase
331
372
  ensure
332
373
  Gem::Commands.send(:remove_const, :FooCommand)
333
374
  end
375
+
376
+ def test_deprecated_command_with_version
377
+ require "rubygems/command"
378
+ foo_command = Class.new(Gem::Command) do
379
+ extend Gem::Deprecate
380
+
381
+ rubygems_deprecate_command("9.9.9")
382
+
383
+ def execute
384
+ say "pew pew!"
385
+ end
386
+ end
387
+
388
+ Gem::Commands.send(:const_set, :FooCommand, foo_command)
389
+ @command_manager.register_command(:foo, foo_command.new("foo"))
390
+
391
+ use_ui @ui do
392
+ @command_manager.process_args(%w[foo])
393
+ end
394
+
395
+ assert_equal "pew pew!\n", @ui.output
396
+ assert_match(/WARNING: foo command is deprecated. It will be removed in Rubygems 9.9.9/, @ui.error)
397
+ ensure
398
+ Gem::Commands.send(:remove_const, :FooCommand)
399
+ end
334
400
  end