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,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'installer_test_case'
3
- require 'rubygems/commands/uninstall_command'
2
+
3
+ require_relative "installer_test_case"
4
+ require "rubygems/commands/uninstall_command"
4
5
 
5
6
  class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
6
7
  def setup
7
8
  super
8
9
  @cmd = Gem::Commands::UninstallCommand.new
9
- @executable = File.join(@gemhome, 'bin', 'executable')
10
+ @executable = File.join(@gemhome, "bin", "executable")
10
11
  end
11
12
 
12
13
  def test_execute_all_named
@@ -14,20 +15,15 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
14
15
 
15
16
  util_make_gems
16
17
 
17
- default = new_default_spec 'default', '1'
18
+ default = new_default_spec "default", "1"
18
19
  install_default_gems default
19
20
 
20
21
  gemhome2 = "#{@gemhome}2"
21
22
 
22
- a_4, = util_gem 'a', 4
23
+ a_4, = util_gem "a", 4
23
24
  install_gem a_4, :install_dir => gemhome2
24
25
 
25
- Gem::Specification.dirs = [@gemhome, gemhome2]
26
-
27
- assert_includes Gem::Specification.all_names, 'a-1'
28
- assert_includes Gem::Specification.all_names, 'a-4'
29
- assert_includes Gem::Specification.all_names, 'b-2'
30
- assert_includes Gem::Specification.all_names, 'default-1'
26
+ assert_gems_presence "a-1", "a-4", "b-2", "default-1", dirs: [@gemhome, gemhome2]
31
27
 
32
28
  @cmd.options[:all] = true
33
29
  @cmd.options[:args] = %w[a]
@@ -41,10 +37,10 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
41
37
  end
42
38
 
43
39
  def test_execute_all_named_default_single
44
- z_1 = new_default_spec 'z', '1'
40
+ z_1 = new_default_spec "z", "1"
45
41
  install_default_gems z_1
46
42
 
47
- assert_includes Gem::Specification.all_names, 'z-1'
43
+ assert_includes Gem::Specification.all_names, "z-1"
48
44
 
49
45
  @cmd.options[:all] = true
50
46
  @cmd.options[:args] = %w[z]
@@ -57,18 +53,18 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
57
53
 
58
54
  output = @ui.output.split "\n"
59
55
 
60
- assert_equal 'Gem z-1 cannot be uninstalled because it is a default gem', output.shift
56
+ assert_equal "Gem z-1 cannot be uninstalled because it is a default gem", output.shift
61
57
  end
62
58
 
63
59
  def test_execute_all_named_default_multiple
64
- z_1 = new_default_spec 'z', '1'
60
+ z_1 = new_default_spec "z", "1"
65
61
  install_default_gems z_1
66
62
 
67
- z_2, = util_gem 'z', 2
63
+ z_2, = util_gem "z", 2
68
64
  install_gem z_2
69
65
 
70
- assert_includes Gem::Specification.all_names, 'z-1'
71
- assert_includes Gem::Specification.all_names, 'z-2'
66
+ assert_includes Gem::Specification.all_names, "z-1"
67
+ assert_includes Gem::Specification.all_names, "z-2"
72
68
 
73
69
  @cmd.options[:all] = true
74
70
  @cmd.options[:args] = %w[z]
@@ -81,15 +77,15 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
81
77
 
82
78
  output = @ui.output.split "\n"
83
79
 
84
- assert_equal 'Gem z-1 cannot be uninstalled because it is a default gem', output.shift
85
- assert_equal 'Successfully uninstalled z-2', output.shift
80
+ assert_equal "Gem z-1 cannot be uninstalled because it is a default gem", output.shift
81
+ assert_equal "Successfully uninstalled z-2", output.shift
86
82
  end
87
83
 
88
84
  def test_execute_dependency_order
89
85
  initial_install
90
86
 
91
- c = quick_gem 'c' do |spec|
92
- spec.add_dependency 'a'
87
+ c = quick_gem "c" do |spec|
88
+ spec.add_dependency "a"
93
89
  end
94
90
 
95
91
  util_build_gem c
@@ -110,9 +106,9 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
110
106
 
111
107
  output = ui.output.split "\n"
112
108
 
113
- assert_equal 'Successfully uninstalled c-2', output.shift
109
+ assert_equal "Successfully uninstalled c-2", output.shift
114
110
  assert_equal "Removing executable", output.shift
115
- assert_equal 'Successfully uninstalled a-2', output.shift
111
+ assert_equal "Successfully uninstalled a-2", output.shift
116
112
  end
117
113
 
118
114
  def test_execute_removes_executable
@@ -149,12 +145,12 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
149
145
 
150
146
  FileUtils.rm_f @executable # Wish this didn't happen in #setup
151
147
 
152
- Gem::Installer.exec_format = 'foo-%s-bar'
148
+ Gem::Installer.exec_format = "foo-%s-bar"
153
149
 
154
150
  installer.format_executable = true
155
151
  installer.install
156
152
 
157
- formatted_executable = File.join @gemhome, 'bin', 'foo-executable-bar'
153
+ formatted_executable = File.join @gemhome, "bin", "foo-executable-bar"
158
154
  assert_equal true, File.exist?(formatted_executable)
159
155
 
160
156
  @cmd.options[:executables] = true
@@ -197,19 +193,19 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
197
193
 
198
194
  util_make_gems
199
195
 
200
- assert_equal 3, Gem::Specification.find_all_by_name('a').length
196
+ assert_equal 3, Gem::Specification.find_all_by_name("a").length
201
197
 
202
- @cmd.options[:version] = '1'
198
+ @cmd.options[:version] = "1"
203
199
  @cmd.options[:force] = true
204
- @cmd.options[:args] = ['a']
200
+ @cmd.options[:args] = ["a"]
205
201
 
206
202
  use_ui ui do
207
203
  @cmd.execute
208
204
  end
209
205
 
210
- assert_equal 2, Gem::Specification.find_all_by_name('a').length
206
+ assert_equal 2, Gem::Specification.find_all_by_name("a").length
211
207
 
212
- assert File.exist? File.join(@gemhome, 'bin', 'executable')
208
+ assert File.exist? File.join(@gemhome, "bin", "executable")
213
209
  end
214
210
 
215
211
  def test_execute_with_version_specified_as_colon
@@ -219,18 +215,18 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
219
215
 
220
216
  util_make_gems
221
217
 
222
- assert_equal 3, Gem::Specification.find_all_by_name('a').length
218
+ assert_equal 3, Gem::Specification.find_all_by_name("a").length
223
219
 
224
220
  @cmd.options[:force] = true
225
- @cmd.options[:args] = ['a:1']
221
+ @cmd.options[:args] = ["a:1"]
226
222
 
227
223
  use_ui ui do
228
224
  @cmd.execute
229
225
  end
230
226
 
231
- assert_equal 2, Gem::Specification.find_all_by_name('a').length
227
+ assert_equal 2, Gem::Specification.find_all_by_name("a").length
232
228
 
233
- assert File.exist? File.join(@gemhome, 'bin', 'executable')
229
+ assert File.exist? File.join(@gemhome, "bin", "executable")
234
230
  end
235
231
 
236
232
  def test_uninstall_selection
@@ -238,22 +234,22 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
238
234
 
239
235
  util_make_gems
240
236
 
241
- list = Gem::Specification.find_all_by_name 'a'
237
+ list = Gem::Specification.find_all_by_name "a"
242
238
 
243
- @cmd.options[:args] = ['a']
239
+ @cmd.options[:args] = ["a"]
244
240
 
245
241
  use_ui ui do
246
242
  @cmd.execute
247
243
  end
248
244
 
249
- updated_list = Gem::Specification.find_all_by_name('a')
245
+ updated_list = Gem::Specification.find_all_by_name("a")
250
246
  assert_equal list.length - 1, updated_list.length
251
247
 
252
- assert_match ' 1. a-1', ui.output
253
- assert_match ' 2. a-2', ui.output
254
- assert_match ' 3. a-3.a', ui.output
255
- assert_match ' 4. All versions', ui.output
256
- assert_match 'uninstalled a-1', ui.output
248
+ assert_match " 1. a-1", ui.output
249
+ assert_match " 2. a-2", ui.output
250
+ assert_match " 3. a-3.a", ui.output
251
+ assert_match " 4. All versions", ui.output
252
+ assert_match "uninstalled a-1", ui.output
257
253
  end
258
254
 
259
255
  def test_uninstall_selection_multiple_gems
@@ -261,31 +257,31 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
261
257
 
262
258
  util_make_gems
263
259
 
264
- a_list = Gem::Specification.find_all_by_name('a')
265
- b_list = Gem::Specification.find_all_by_name('b')
260
+ a_list = Gem::Specification.find_all_by_name("a")
261
+ b_list = Gem::Specification.find_all_by_name("b")
266
262
  list = a_list + b_list
267
263
 
268
- @cmd.options[:args] = ['a', 'b']
264
+ @cmd.options[:args] = ["a", "b"]
269
265
 
270
266
  use_ui ui do
271
267
  @cmd.execute
272
268
  end
273
269
 
274
- updated_a_list = Gem::Specification.find_all_by_name('a')
275
- updated_b_list = Gem::Specification.find_all_by_name('b')
270
+ updated_a_list = Gem::Specification.find_all_by_name("a")
271
+ updated_b_list = Gem::Specification.find_all_by_name("b")
276
272
  updated_list = updated_a_list + updated_b_list
277
273
 
278
274
  assert_equal list.length - 2, updated_list.length
279
275
 
280
276
  out = ui.output.split("\n")
281
- assert_match 'uninstalled b-2', out.shift
282
- assert_match '', out.shift
283
- assert_match 'Select gem to uninstall:', out.shift
284
- assert_match ' 1. a-1', out.shift
285
- assert_match ' 2. a-2', out.shift
286
- assert_match ' 3. a-3.a', out.shift
287
- assert_match ' 4. All versions', out.shift
288
- assert_match 'uninstalled a-1', out.shift
277
+ assert_match "uninstalled b-2", out.shift
278
+ assert_match "", out.shift
279
+ assert_match "Select gem to uninstall:", out.shift
280
+ assert_match " 1. a-1", out.shift
281
+ assert_match " 2. a-2", out.shift
282
+ assert_match " 3. a-3.a", out.shift
283
+ assert_match " 4. All versions", out.shift
284
+ assert_match "uninstalled a-1", out.shift
289
285
  assert_empty out
290
286
  end
291
287
 
@@ -294,22 +290,22 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
294
290
 
295
291
  ui = Gem::MockGemUi.new "y\n"
296
292
 
297
- a_1, = util_gem 'a', 1
293
+ a_1, = util_gem "a", 1
298
294
  install_gem a_1
299
295
 
300
- a_3a, = util_gem 'a', '3.a'
296
+ a_3a, = util_gem "a", "3.a"
301
297
  install_gem a_3a
302
298
 
303
- assert_equal 3, Gem::Specification.find_all_by_name('a').length
299
+ assert_equal 3, Gem::Specification.find_all_by_name("a").length
304
300
 
305
301
  @cmd.options[:force] = true
306
- @cmd.options[:args] = ['a']
302
+ @cmd.options[:args] = ["a"]
307
303
 
308
304
  use_ui ui do
309
305
  @cmd.execute
310
306
  end
311
307
 
312
- assert_empty Gem::Specification.find_all_by_name('a')
308
+ assert_empty Gem::Specification.find_all_by_name("a")
313
309
  assert_match "Removing executable", ui.output
314
310
  refute File.exist? @executable
315
311
  end
@@ -321,36 +317,32 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
321
317
 
322
318
  util_make_gems
323
319
 
324
- assert Gem::Specification.find_all_by_name('dep_x').length > 0
325
- assert Gem::Specification.find_all_by_name('x').length > 0
320
+ assert Gem::Specification.find_all_by_name("dep_x").length > 0
321
+ assert Gem::Specification.find_all_by_name("x").length > 0
326
322
 
327
323
  @cmd.options[:force] = true
328
- @cmd.options[:args] = ['x']
324
+ @cmd.options[:args] = ["x"]
329
325
 
330
326
  use_ui ui do
331
327
  @cmd.execute
332
328
  end
333
329
 
334
- assert Gem::Specification.find_all_by_name('dep_x').length > 0
335
- assert Gem::Specification.find_all_by_name('x').length.zero?
330
+ assert Gem::Specification.find_all_by_name("dep_x").length > 0
331
+ assert Gem::Specification.find_all_by_name("x").length.zero?
336
332
  end
337
333
 
338
334
  def test_execute_all
339
335
  util_make_gems
340
336
 
341
- default = new_default_spec 'default', '1'
337
+ default = new_default_spec "default", "1"
342
338
  install_default_gems default
343
339
 
344
340
  gemhome2 = "#{@gemhome}2"
345
341
 
346
- a_4, = util_gem 'a', 4
342
+ a_4, = util_gem "a", 4
347
343
  install_gem a_4
348
344
 
349
- Gem::Specification.dirs = [@gemhome, gemhome2]
350
-
351
- assert_includes Gem::Specification.all_names, 'a-1'
352
- assert_includes Gem::Specification.all_names, 'a-4'
353
- assert_includes Gem::Specification.all_names, 'default-1'
345
+ assert_gems_presence "a-1", "a-4", "default-1", dirs: [@gemhome, gemhome2]
354
346
 
355
347
  @cmd.options[:all] = true
356
348
  @cmd.options[:args] = []
@@ -368,14 +360,12 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
368
360
 
369
361
  gemhome2 = "#{@gemhome}2"
370
362
 
371
- a_4, = util_gem 'a', 4
363
+ a_4, = util_gem "a", 4
372
364
  install_gem a_4 , :install_dir => gemhome2
373
365
 
374
- Gem::Specification.dirs = [@gemhome, gemhome2]
366
+ assert_gems_presence "a-4", dirs: [@gemhome, gemhome2]
375
367
 
376
- assert_includes Gem::Specification.all_names, 'a-4'
377
-
378
- @cmd.options[:args] = ['a:4']
368
+ @cmd.options[:args] = ["a:4"]
379
369
 
380
370
  e = assert_raise Gem::InstallError do
381
371
  use_ui ui do
@@ -386,6 +376,26 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
386
376
  assert_includes e.message, "a is not installed in GEM_HOME"
387
377
  end
388
378
 
379
+ def test_execute_outside_gem_home_when_install_dir_given
380
+ gemhome2 = "#{@gemhome}2"
381
+
382
+ a_4, = util_gem "a", 4
383
+ install_gem a_4 , :install_dir => gemhome2
384
+
385
+ assert_gems_presence "a-4", dirs: [@gemhome, gemhome2]
386
+
387
+ Gem::Specification.dirs = [@gemhome]
388
+
389
+ @cmd.options[:install_dir] = gemhome2
390
+ @cmd.options[:args] = ["a:4"]
391
+
392
+ @cmd.execute
393
+
394
+ Gem::Specification.dirs = [gemhome2]
395
+
396
+ refute_includes Gem::Specification.all_names.sort, "a-4"
397
+ end
398
+
389
399
  def test_handle_options
390
400
  @cmd.handle_options %w[]
391
401
 
@@ -397,7 +407,7 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
397
407
  end
398
408
 
399
409
  def test_handle_options_vendor
400
- vendordir(File.join(@tempdir, 'vendor')) do
410
+ vendordir(File.join(@tempdir, "vendor")) do
401
411
  use_ui @ui do
402
412
  @cmd.handle_options %w[--vendor]
403
413
  end
@@ -440,7 +450,7 @@ WARNING: Use your OS package manager to uninstall vendor gems
440
450
  @cmd.handle_options %w[--vendor]
441
451
  end
442
452
 
443
- assert_equal 'invalid option: --vendor your platform is not supported',
453
+ assert_equal "invalid option: --vendor your platform is not supported",
444
454
  e.message
445
455
 
446
456
  refute @cmd.options[:vendor]
@@ -449,7 +459,7 @@ WARNING: Use your OS package manager to uninstall vendor gems
449
459
  end
450
460
 
451
461
  def test_execute_with_gem_not_installed
452
- @cmd.options[:args] = ['d']
462
+ @cmd.options[:args] = ["d"]
453
463
 
454
464
  use_ui ui do
455
465
  @cmd.execute
@@ -501,4 +511,12 @@ WARNING: Use your OS package manager to uninstall vendor gems
501
511
  end
502
512
  end
503
513
  end
514
+
515
+ def assert_gems_presence(*gems, dirs:)
516
+ Gem::Specification.dirs = dirs
517
+
518
+ gems.each do |full_name|
519
+ assert_includes Gem::Specification.all_names, full_name
520
+ end
521
+ end
504
522
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'helper'
3
- require 'rubygems/commands/unpack_command'
2
+
3
+ require_relative "helper"
4
+ require "rubygems/commands/unpack_command"
4
5
 
5
6
  class TestGemCommandsUnpackCommand < Gem::TestCase
6
7
  def setup
@@ -17,28 +18,28 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
17
18
  assert_equal(
18
19
  @cmd.find_in_cache(File.basename @a1.cache_file),
19
20
  @a1.cache_file,
20
- 'found a-1.gem in the cache'
21
+ "found a-1.gem in the cache"
21
22
  )
22
23
  end
23
24
 
24
25
  def test_get_path
25
26
  specs = spec_fetcher do |fetcher|
26
- fetcher.gem 'a', 1
27
+ fetcher.gem "a", 1
27
28
  end
28
29
 
29
- dep = Gem::Dependency.new 'a', 1
30
+ dep = Gem::Dependency.new "a", 1
30
31
  assert_equal(
31
32
  @cmd.get_path(dep),
32
- specs['a-1'].cache_file,
33
- 'fetches a-1 and returns the cache path'
33
+ specs["a-1"].cache_file,
34
+ "fetches a-1 and returns the cache path"
34
35
  )
35
36
 
36
- FileUtils.rm specs['a-1'].cache_file
37
+ FileUtils.rm specs["a-1"].cache_file
37
38
 
38
39
  assert_equal(
39
40
  @cmd.get_path(dep),
40
- specs['a-1'].cache_file,
41
- 'when removed from cache, refetches a-1'
41
+ specs["a-1"].cache_file,
42
+ "when removed from cache, refetches a-1"
42
43
  )
43
44
  end
44
45
 
@@ -53,18 +54,18 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
53
54
  end
54
55
  end
55
56
 
56
- assert File.exist?(File.join(@tempdir, 'a-3.a')), 'a should be unpacked'
57
- assert File.exist?(File.join(@tempdir, 'b-2')), 'b should be unpacked'
57
+ assert File.exist?(File.join(@tempdir, "a-3.a")), "a should be unpacked"
58
+ assert File.exist?(File.join(@tempdir, "b-2")), "b should be unpacked"
58
59
  end
59
60
 
60
61
  def test_execute_gem_path
61
62
  spec_fetcher do |fetcher|
62
- fetcher.gem 'a', '3.a'
63
+ fetcher.gem "a", "3.a"
63
64
  end
64
65
 
65
66
  Gem.clear_paths
66
67
 
67
- gemhome2 = File.join @tempdir, 'gemhome2'
68
+ gemhome2 = File.join @tempdir, "gemhome2"
68
69
 
69
70
  Gem.use_paths gemhome2, [gemhome2, @gemhome]
70
71
 
@@ -76,7 +77,7 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
76
77
  end
77
78
  end
78
79
 
79
- assert File.exist?(File.join(@tempdir, 'a-3.a'))
80
+ assert File.exist?(File.join(@tempdir, "a-3.a"))
80
81
  end
81
82
 
82
83
  def test_execute_gem_path_missing
@@ -84,7 +85,7 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
84
85
 
85
86
  Gem.clear_paths
86
87
 
87
- gemhome2 = File.join @tempdir, 'gemhome2'
88
+ gemhome2 = File.join @tempdir, "gemhome2"
88
89
 
89
90
  Gem.use_paths gemhome2, [gemhome2, @gemhome]
90
91
 
@@ -96,13 +97,13 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
96
97
  end
97
98
  end
98
99
 
99
- assert_equal '', @ui.output
100
+ assert_equal "", @ui.output
100
101
  end
101
102
 
102
103
  def test_execute_remote
103
104
  spec_fetcher do |fetcher|
104
- fetcher.download 'a', 1
105
- fetcher.download 'a', 2
105
+ fetcher.download "a", 1
106
+ fetcher.download "a", 2
106
107
  end
107
108
 
108
109
  Gem.configuration.verbose = :really
@@ -114,7 +115,7 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
114
115
  end
115
116
  end
116
117
 
117
- assert File.exist?(File.join(@tempdir, 'a-2')), 'a should be unpacked'
118
+ assert File.exist?(File.join(@tempdir, "a-2")), "a should be unpacked"
118
119
  end
119
120
 
120
121
  def test_execute_spec
@@ -129,15 +130,15 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
129
130
  end
130
131
  end
131
132
 
132
- assert File.exist?(File.join(@tempdir, 'a-3.a.gemspec'))
133
- assert File.exist?(File.join(@tempdir, 'b-2.gemspec'))
133
+ assert File.exist?(File.join(@tempdir, "a-3.a.gemspec"))
134
+ assert File.exist?(File.join(@tempdir, "b-2.gemspec"))
134
135
  end
135
136
 
136
137
  def test_execute_spec_target
137
138
  util_make_gems
138
139
 
139
140
  @cmd.options[:args] = %w[a b]
140
- @cmd.options[:target] = 'specs'
141
+ @cmd.options[:target] = "specs"
141
142
  @cmd.options[:spec] = true
142
143
 
143
144
  use_ui @ui do
@@ -146,12 +147,12 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
146
147
  end
147
148
  end
148
149
 
149
- assert File.exist?(File.join(@tempdir, 'specs/a-3.a.gemspec'))
150
- assert File.exist?(File.join(@tempdir, 'specs/b-2.gemspec'))
150
+ assert File.exist?(File.join(@tempdir, "specs/a-3.a.gemspec"))
151
+ assert File.exist?(File.join(@tempdir, "specs/b-2.gemspec"))
151
152
  end
152
153
 
153
154
  def test_execute_sudo
154
- pend 'Cannot perform this test on windows (chmod)' if win_platform?
155
+ pend "Cannot perform this test on windows (chmod)" if win_platform?
155
156
 
156
157
  util_make_gems
157
158
 
@@ -165,7 +166,7 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
165
166
  end
166
167
  end
167
168
 
168
- assert File.exist?(File.join(@tempdir, 'b-2')), 'b should be unpacked'
169
+ assert File.exist?(File.join(@tempdir, "b-2")), "b should be unpacked"
169
170
  ensure
170
171
  FileUtils.chmod 0755, @gemhome
171
172
  end
@@ -173,7 +174,7 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
173
174
  def test_execute_with_target_option
174
175
  util_make_gems
175
176
 
176
- target = 'with_target'
177
+ target = "with_target"
177
178
  @cmd.options[:args] = %w[a]
178
179
  @cmd.options[:target] = target
179
180
 
@@ -183,12 +184,12 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
183
184
  end
184
185
  end
185
186
 
186
- assert File.exist?(File.join(@tempdir, target, 'a-3.a'))
187
+ assert File.exist?(File.join(@tempdir, target, "a-3.a"))
187
188
  end
188
189
 
189
190
  def test_execute_exact_match
190
- foo_spec = util_spec 'foo'
191
- foo_bar_spec = util_spec 'foo_bar'
191
+ foo_spec = util_spec "foo"
192
+ foo_bar_spec = util_spec "foo_bar"
192
193
 
193
194
  use_ui @ui do
194
195
  Dir.chdir @tempdir do