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,23 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'helper'
4
- require 'rubygems/commands/setup_command'
3
+ require_relative "helper"
4
+ require "rubygems/commands/setup_command"
5
5
 
6
6
  class TestGemCommandsSetupCommand < Gem::TestCase
7
- bundler_gemspec = File.expand_path('../../bundler/lib/bundler/version.rb', __dir__)
7
+ bundler_gemspec = File.expand_path("../../bundler/lib/bundler/version.rb", __dir__)
8
8
  if File.exist?(bundler_gemspec)
9
9
  BUNDLER_VERS = File.read(bundler_gemspec).match(/VERSION = "(#{Gem::Version::VERSION_PATTERN})"/)[1]
10
10
  else
11
- BUNDLER_VERS = "2.0.1".freeze
11
+ BUNDLER_VERS = "2.0.1"
12
12
  end
13
13
 
14
14
  def setup
15
15
  super
16
16
 
17
17
  @cmd = Gem::Commands::SetupCommand.new
18
+ @cmd.options[:document] = []
18
19
 
19
20
  filelist = %w[
20
- bin/gem
21
+ exe/gem
21
22
  lib/rubygems.rb
22
23
  lib/rubygems/requirement.rb
23
24
  lib/rubygems/ssl_certs/rubygems.org/foo.pem
@@ -42,11 +43,11 @@ class TestGemCommandsSetupCommand < Gem::TestCase
42
43
  gemspec.bindir = "exe"
43
44
  gemspec.executables = ["bundle", "bundler"]
44
45
 
45
- File.open 'bundler/bundler.gemspec', 'w' do |io|
46
+ File.open "bundler/bundler.gemspec", "w" do |io|
46
47
  io.puts gemspec.to_ruby
47
48
  end
48
49
 
49
- File.open(File.join(Gem.default_specifications_dir, "bundler-1.15.4.gemspec"), 'w') do |io|
50
+ File.open(File.join(Gem.default_specifications_dir, "bundler-1.15.4.gemspec"), "w") do |io|
50
51
  gemspec.version = "1.15.4"
51
52
  io.puts gemspec.to_ruby
52
53
  end
@@ -54,31 +55,29 @@ class TestGemCommandsSetupCommand < Gem::TestCase
54
55
  spec_fetcher do |fetcher|
55
56
  fetcher.download "bundler", "1.15.4"
56
57
 
57
- fetcher.gem "bundler", BUNDLER_VERS
58
+ fetcher.gem "bundler", bundler_version
58
59
 
59
60
  fetcher.gem "bundler-audit", "1.0.0"
60
61
  end
61
62
  end
62
63
 
63
64
  def test_execute_regenerate_binstubs
64
- gem_bin_path = gem_install 'a'
65
+ gem_bin_path = gem_install "a"
65
66
  write_file gem_bin_path do |io|
66
- io.puts 'I changed it!'
67
+ io.puts "I changed it!"
67
68
  end
68
69
 
69
- @cmd.options[:document] = []
70
70
  @cmd.execute
71
71
 
72
72
  assert_match %r{\A#!}, File.read(gem_bin_path)
73
73
  end
74
74
 
75
75
  def test_execute_no_regenerate_binstubs
76
- gem_bin_path = gem_install 'a'
76
+ gem_bin_path = gem_install "a"
77
77
  write_file gem_bin_path do |io|
78
- io.puts 'I changed it!'
78
+ io.puts "I changed it!"
79
79
  end
80
80
 
81
- @cmd.options[:document] = []
82
81
  @cmd.options[:regenerate_binstubs] = false
83
82
  @cmd.execute
84
83
 
@@ -86,24 +85,22 @@ class TestGemCommandsSetupCommand < Gem::TestCase
86
85
  end
87
86
 
88
87
  def test_execute_regenerate_plugins
89
- gem_plugin_path = gem_install_with_plugin 'a'
88
+ gem_plugin_path = gem_install_with_plugin "a"
90
89
  write_file gem_plugin_path do |io|
91
- io.puts 'I changed it!'
90
+ io.puts "I changed it!"
92
91
  end
93
92
 
94
- @cmd.options[:document] = []
95
93
  @cmd.execute
96
94
 
97
95
  assert_match %r{\Arequire}, File.read(gem_plugin_path)
98
96
  end
99
97
 
100
98
  def test_execute_no_regenerate_plugins
101
- gem_plugin_path = gem_install_with_plugin 'a'
99
+ gem_plugin_path = gem_install_with_plugin "a"
102
100
  write_file gem_plugin_path do |io|
103
- io.puts 'I changed it!'
101
+ io.puts "I changed it!"
104
102
  end
105
103
 
106
- @cmd.options[:document] = []
107
104
  @cmd.options[:regenerate_plugins] = false
108
105
  @cmd.execute
109
106
 
@@ -111,20 +108,17 @@ class TestGemCommandsSetupCommand < Gem::TestCase
111
108
  end
112
109
 
113
110
  def test_execute_regenerate_plugins_creates_plugins_dir_if_not_there
114
- gem_plugin_path = gem_install_with_plugin 'a'
111
+ gem_plugin_path = gem_install_with_plugin "a"
115
112
 
116
113
  # Simulate gem installed with an older rubygems without a plugins layout
117
114
  FileUtils.rm_rf Gem.plugindir
118
115
 
119
- @cmd.options[:document] = []
120
116
  @cmd.execute
121
117
 
122
118
  assert_match %r{\Arequire}, File.read(gem_plugin_path)
123
119
  end
124
120
 
125
121
  def test_execute_informs_about_installed_executables
126
- @cmd.options[:document] = []
127
-
128
122
  use_ui @ui do
129
123
  @cmd.execute
130
124
  end
@@ -138,16 +132,15 @@ class TestGemCommandsSetupCommand < Gem::TestCase
138
132
  end
139
133
 
140
134
  def test_env_shebang_flag
141
- gem_bin_path = gem_install 'a'
135
+ gem_bin_path = gem_install "a"
142
136
  write_file gem_bin_path do |io|
143
- io.puts 'I changed it!'
137
+ io.puts "I changed it!"
144
138
  end
145
139
 
146
- @cmd.options[:document] = []
147
140
  @cmd.options[:env_shebang] = true
148
141
  @cmd.execute
149
142
 
150
- ruby_exec = sprintf Gem.default_exec_format, 'ruby'
143
+ ruby_exec = sprintf Gem.default_exec_format, "ruby"
151
144
 
152
145
  bin_env = win_platform? ? "" : %w[/usr/bin/env /bin/env].find {|f| File.executable?(f) } + " "
153
146
  assert_match %r{\A#!\s*#{bin_env}#{ruby_exec}}, File.read(default_gem_bin_path)
@@ -159,47 +152,44 @@ class TestGemCommandsSetupCommand < Gem::TestCase
159
152
  def test_destdir_flag_does_not_try_to_write_to_the_default_gem_home
160
153
  FileUtils.chmod "-w", File.join(@gemhome, "plugins")
161
154
 
162
- destdir = File.join(@tempdir, 'foo')
155
+ destdir = File.join(@tempdir, "foo")
163
156
 
164
157
  @cmd.options[:destdir] = destdir
165
158
  @cmd.execute
166
159
 
167
- spec = Gem::Specification.load("bundler/bundler.gemspec")
168
-
169
- spec.executables.each do |e|
170
- assert_path_exist File.join destdir, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'gems', spec.full_name, spec.bindir, e
160
+ bundler_spec.executables.each do |e|
161
+ assert_path_exist prepend_destdir(destdir, File.join(@gemhome, "gems", bundler_spec.full_name, bundler_spec.bindir, e))
171
162
  end
172
163
  end
173
164
 
174
165
  def test_files_in
175
166
  assert_equal %w[rubygems.rb rubygems/requirement.rb rubygems/ssl_certs/rubygems.org/foo.pem],
176
- @cmd.files_in('lib').sort
167
+ @cmd.files_in("lib").sort
177
168
  end
178
169
 
179
170
  def test_install_lib
180
171
  @cmd.extend FileUtils
181
172
 
182
- Dir.mktmpdir 'lib' do |dir|
173
+ Dir.mktmpdir "lib" do |dir|
183
174
  @cmd.install_lib dir
184
175
 
185
- assert_path_exist File.join(dir, 'rubygems.rb')
186
- assert_path_exist File.join(dir, 'rubygems/ssl_certs/rubygems.org/foo.pem')
176
+ assert_path_exist File.join(dir, "rubygems.rb")
177
+ assert_path_exist File.join(dir, "rubygems/ssl_certs/rubygems.org/foo.pem")
187
178
 
188
- assert_path_exist File.join(dir, 'bundler.rb')
189
- assert_path_exist File.join(dir, 'bundler/b.rb')
179
+ assert_path_exist File.join(dir, "bundler.rb")
180
+ assert_path_exist File.join(dir, "bundler/b.rb")
190
181
 
191
- assert_path_exist File.join(dir, 'bundler/templates/.circleci/config.yml')
192
- assert_path_exist File.join(dir, 'bundler/templates/.travis.yml')
182
+ assert_path_exist File.join(dir, "bundler/templates/.circleci/config.yml")
183
+ assert_path_exist File.join(dir, "bundler/templates/.travis.yml")
193
184
  end
194
185
  end
195
186
 
196
187
  def test_install_default_bundler_gem
197
188
  @cmd.extend FileUtils
198
189
 
199
- bin_dir = File.join(@gemhome, 'bin')
190
+ bin_dir = File.join(@gemhome, "bin")
200
191
  @cmd.install_default_bundler_gem bin_dir
201
192
 
202
- bundler_spec = Gem::Specification.load("bundler/bundler.gemspec")
203
193
  default_spec_path = File.join(Gem.default_specifications_dir, "#{bundler_spec.full_name}.gemspec")
204
194
  spec = Gem::Specification.load(default_spec_path)
205
195
 
@@ -211,32 +201,46 @@ class TestGemCommandsSetupCommand < Gem::TestCase
211
201
  assert_path_exist File.join bin_dir, e
212
202
  end
213
203
 
214
- default_dir = Gem.default_specifications_dir
215
-
216
204
  # expect to remove other versions of bundler gemspecs on default specification directory.
217
- assert_path_not_exist File.join(default_dir, "bundler-1.15.4.gemspec")
218
- assert_path_exist File.join(default_dir, "bundler-#{BUNDLER_VERS}.gemspec")
205
+ assert_path_not_exist previous_bundler_specification_path
206
+ assert_path_exist new_bundler_specification_path
219
207
 
220
208
  # expect to not remove bundler-* gemspecs.
221
209
  assert_path_exist File.join(Gem.dir, "specifications", "bundler-audit-1.0.0.gemspec")
222
210
 
223
211
  # expect to remove normal gem that was same version. because it's promoted default gems.
224
- assert_path_not_exist File.join(Gem.dir, "specifications", "bundler-#{BUNDLER_VERS}.gemspec")
212
+ assert_path_not_exist File.join(Gem.dir, "specifications", "bundler-#{bundler_version}.gemspec")
225
213
 
226
- assert_path_exist "#{Gem.dir}/gems/bundler-#{BUNDLER_VERS}"
214
+ assert_path_exist "#{Gem.dir}/gems/bundler-#{bundler_version}"
227
215
  assert_path_exist "#{Gem.dir}/gems/bundler-1.15.4"
228
216
  assert_path_exist "#{Gem.dir}/gems/bundler-audit-1.0.0"
229
217
  end
230
218
 
219
+ def test_install_default_bundler_gem_with_default_gems_not_installed_at_default_dir
220
+ @cmd.extend FileUtils
221
+
222
+ gemhome2 = File.join(@tempdir, "gemhome2")
223
+ Gem.instance_variable_set(:@default_dir, gemhome2)
224
+
225
+ FileUtils.mkdir_p gemhome2
226
+ bin_dir = File.join(gemhome2, "bin")
227
+
228
+ @cmd.install_default_bundler_gem bin_dir
229
+
230
+ # expect to remove other versions of bundler gemspecs on default specification directory.
231
+ assert_path_not_exist previous_bundler_specification_path
232
+ assert_path_exist new_bundler_specification_path
233
+ end
234
+
231
235
  def test_install_default_bundler_gem_with_force_flag
232
236
  @cmd.extend FileUtils
233
237
 
234
- bin_dir = File.join(@gemhome, 'bin')
235
- bundle_bin = File.join(bin_dir, 'bundle')
238
+ bin_dir = File.join(@gemhome, "bin")
239
+ bundle_bin = File.join(bin_dir, "bundle")
236
240
 
237
241
  write_file bundle_bin do |f|
238
- f.puts '#!/usr/bin/ruby'
239
- f.puts ''
242
+ f.puts "#!/usr/bin/ruby"
243
+ f.puts ""
240
244
  f.puts 'echo "hello"'
241
245
  end
242
246
 
@@ -244,7 +248,6 @@ class TestGemCommandsSetupCommand < Gem::TestCase
244
248
 
245
249
  @cmd.install_default_bundler_gem bin_dir
246
250
 
247
- bundler_spec = Gem::Specification.load("bundler/bundler.gemspec")
248
251
  default_spec_path = File.join(Gem.default_specifications_dir, "#{bundler_spec.full_name}.gemspec")
249
252
  spec = Gem::Specification.load(default_spec_path)
250
253
 
@@ -262,17 +265,23 @@ class TestGemCommandsSetupCommand < Gem::TestCase
262
265
 
263
266
  FileUtils.chmod "-w", @gemhome
264
267
 
265
- destdir = File.join(@tempdir, 'foo')
266
- bin_dir = File.join(destdir, 'bin')
268
+ destdir = File.join(@tempdir, "foo")
269
+ bin_dir = File.join(destdir, "bin")
267
270
 
268
271
  @cmd.options[:destdir] = destdir
269
272
 
270
273
  @cmd.install_default_bundler_gem bin_dir
271
274
 
272
- spec = Gem::Specification.load("bundler/bundler.gemspec")
275
+ # leaves other versions of bundler gemspecs on default specification directory.
276
+ assert_path_exist previous_bundler_specification_path
277
+ assert_path_not_exist new_bundler_specification_path
273
278
 
274
- spec.executables.each do |e|
275
- assert_path_exist File.join destdir, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'gems', spec.full_name, spec.bindir, e
279
+ # installs the updated bundler gemspec to destdir
280
+ assert_path_not_exist prepend_destdir(destdir, previous_bundler_specification_path)
281
+ assert_path_exist prepend_destdir(destdir, new_bundler_specification_path)
282
+
283
+ bundler_spec.executables.each do |e|
284
+ assert_path_exist prepend_destdir(destdir, File.join(@gemhome, "gems", bundler_spec.full_name, bundler_spec.bindir, e))
276
285
  end
277
286
  ensure
278
287
  FileUtils.chmod "+w", @gemhome
@@ -281,39 +290,37 @@ class TestGemCommandsSetupCommand < Gem::TestCase
281
290
  def test_install_default_bundler_gem_with_destdir_and_prefix_flags
282
291
  @cmd.extend FileUtils
283
292
 
284
- destdir = File.join(@tempdir, 'foo')
285
- bin_dir = File.join(destdir, 'bin')
293
+ destdir = File.join(@tempdir, "foo")
294
+ bin_dir = File.join(destdir, "bin")
286
295
 
287
296
  @cmd.options[:destdir] = destdir
288
297
  @cmd.options[:prefix] = "/"
289
298
 
290
299
  @cmd.install_default_bundler_gem bin_dir
291
300
 
292
- spec = Gem::Specification.load("bundler/bundler.gemspec")
293
-
294
- spec.executables.each do |e|
295
- assert_path_exist File.join destdir, 'gems', spec.full_name, spec.bindir, e
301
+ bundler_spec.executables.each do |e|
302
+ assert_path_exist File.join destdir, "gems", bundler_spec.full_name, bundler_spec.bindir, e
296
303
  end
297
304
  end
298
305
 
299
306
  def test_remove_old_lib_files
300
307
  lib = RbConfig::CONFIG["sitelibdir"]
301
- lib_rubygems = File.join lib, 'rubygems'
302
- lib_bundler = File.join lib, 'bundler'
303
- lib_rubygems_defaults = File.join lib_rubygems, 'defaults'
304
- lib_bundler_templates = File.join lib_bundler, 'templates'
308
+ lib_rubygems = File.join lib, "rubygems"
309
+ lib_bundler = File.join lib, "bundler"
310
+ lib_rubygems_defaults = File.join lib_rubygems, "defaults"
311
+ lib_bundler_templates = File.join lib_bundler, "templates"
305
312
 
306
- securerandom_rb = File.join lib, 'securerandom.rb'
313
+ securerandom_rb = File.join lib, "securerandom.rb"
307
314
 
308
- engine_defaults_rb = File.join lib_rubygems_defaults, 'jruby.rb'
309
- os_defaults_rb = File.join lib_rubygems_defaults, 'operating_system.rb'
315
+ engine_defaults_rb = File.join lib_rubygems_defaults, "jruby.rb"
316
+ os_defaults_rb = File.join lib_rubygems_defaults, "operating_system.rb"
310
317
 
311
- old_gauntlet_rubygems_rb = File.join lib, 'gauntlet_rubygems.rb'
318
+ old_gauntlet_rubygems_rb = File.join lib, "gauntlet_rubygems.rb"
312
319
 
313
- old_builder_rb = File.join lib_rubygems, 'builder.rb'
314
- old_format_rb = File.join lib_rubygems, 'format.rb'
315
- old_bundler_c_rb = File.join lib_bundler, 'c.rb'
316
- old_bundler_ci = File.join lib_bundler_templates, '.lecacy_ci', 'config.yml'
320
+ old_builder_rb = File.join lib_rubygems, "builder.rb"
321
+ old_format_rb = File.join lib_rubygems, "format.rb"
322
+ old_bundler_c_rb = File.join lib_bundler, "c.rb"
323
+ old_bundler_ci = File.join lib_bundler_templates, ".lecacy_ci", "config.yml"
317
324
 
318
325
  files_that_go = [old_gauntlet_rubygems_rb, old_builder_rb, old_format_rb, old_bundler_c_rb, old_bundler_ci]
319
326
  files_that_stay = [securerandom_rb, engine_defaults_rb, os_defaults_rb]
@@ -328,15 +335,15 @@ class TestGemCommandsSetupCommand < Gem::TestCase
328
335
  end
329
336
 
330
337
  def test_remove_old_man_files
331
- man = File.join RbConfig::CONFIG['mandir'], 'man'
338
+ man = File.join RbConfig::CONFIG["mandir"], "man"
332
339
 
333
- ruby_1 = File.join man, 'man1', 'ruby.1'
334
- bundle_b_1 = File.join man, 'man1', 'bundle-b.1'
335
- bundle_b_1_ronn = File.join man, 'man1', 'bundle-b.1.ronn'
336
- bundle_b_1_txt = File.join man, 'man1', 'bundle-b.1.txt'
337
- gemfile_5 = File.join man, 'man5', 'gemfile.5'
338
- gemfile_5_ronn = File.join man, 'man5', 'gemfile.5.ronn'
339
- gemfile_5_txt = File.join man, 'man5', 'gemfile.5.txt'
340
+ ruby_1 = File.join man, "man1", "ruby.1"
341
+ bundle_b_1 = File.join man, "man1", "bundle-b.1"
342
+ bundle_b_1_ronn = File.join man, "man1", "bundle-b.1.ronn"
343
+ bundle_b_1_txt = File.join man, "man1", "bundle-b.1.txt"
344
+ gemfile_5 = File.join man, "man5", "gemfile.5"
345
+ gemfile_5_ronn = File.join man, "man5", "gemfile.5.ronn"
346
+ gemfile_5_txt = File.join man, "man5", "gemfile.5.txt"
340
347
 
341
348
  files_that_go = [bundle_b_1, bundle_b_1_txt, bundle_b_1_ronn, gemfile_5, gemfile_5_txt, gemfile_5_ronn]
342
349
  files_that_stay = [ruby_1]
@@ -354,9 +361,9 @@ class TestGemCommandsSetupCommand < Gem::TestCase
354
361
  @default_external = @ui.outs.external_encoding
355
362
  @ui.outs.set_encoding Encoding::US_ASCII
356
363
 
357
- @cmd.options[:previous_version] = Gem::Version.new '2.0.2'
364
+ @cmd.options[:previous_version] = Gem::Version.new "2.0.2"
358
365
 
359
- File.open 'CHANGELOG.md', 'w' do |io|
366
+ File.open "CHANGELOG.md", "w" do |io|
360
367
  io.puts <<-HISTORY_TXT
361
368
  # #{Gem::VERSION} / 2013-03-26
362
369
 
@@ -403,7 +410,7 @@ class TestGemCommandsSetupCommand < Gem::TestCase
403
410
  list.each do |file|
404
411
  FileUtils.mkdir_p File.dirname(file)
405
412
 
406
- File.open file, 'w' do |io|
413
+ File.open file, "w" do |io|
407
414
  io.puts "# #{File.basename(file)}"
408
415
  end
409
416
  end
@@ -414,19 +421,19 @@ class TestGemCommandsSetupCommand < Gem::TestCase
414
421
  s.executables = [name]
415
422
  s.files = %W[bin/#{name}]
416
423
  end
417
- write_file File.join @tempdir, 'bin', name do |f|
418
- f.puts '#!/usr/bin/ruby'
424
+ write_file File.join @tempdir, "bin", name do |f|
425
+ f.puts "#!/usr/bin/ruby"
419
426
  end
420
427
  install_gem gem
421
- File.join @gemhome, 'bin', name
428
+ File.join @gemhome, "bin", name
422
429
  end
423
430
 
424
431
  def gem_install_with_plugin(name)
425
432
  gem = util_spec name do |s|
426
433
  s.files = %W[lib/rubygems_plugin.rb]
427
434
  end
428
- write_file File.join @tempdir, 'lib', 'rubygems_plugin.rb' do |f|
429
- f.puts "require '#{gem.plugins.first}'"
435
+ write_file File.join @tempdir, "lib", "rubygems_plugin.rb" do |f|
436
+ f.puts "# do nothing"
430
437
  end
431
438
  install_gem gem
432
439
 
@@ -434,14 +441,34 @@ class TestGemCommandsSetupCommand < Gem::TestCase
434
441
  end
435
442
 
436
443
  def default_gem_bin_path
437
- File.join RbConfig::CONFIG['bindir'], 'gem'
444
+ File.join RbConfig::CONFIG["bindir"], "gem"
438
445
  end
439
446
 
440
447
  def default_bundle_bin_path
441
- File.join RbConfig::CONFIG['bindir'], 'bundle'
448
+ File.join RbConfig::CONFIG["bindir"], "bundle"
442
449
  end
443
450
 
444
451
  def default_bundler_bin_path
445
- File.join RbConfig::CONFIG['bindir'], 'bundler'
452
+ File.join RbConfig::CONFIG["bindir"], "bundler"
453
+ end
454
+
455
+ def previous_bundler_specification_path
456
+ File.join(Gem.default_specifications_dir, "bundler-1.15.4.gemspec")
457
+ end
458
+
459
+ def new_bundler_specification_path
460
+ File.join(Gem.default_specifications_dir, "bundler-#{bundler_version}.gemspec")
461
+ end
462
+
463
+ def bundler_spec
464
+ Gem::Specification.load("bundler/bundler.gemspec")
465
+ end
466
+
467
+ def bundler_version
468
+ bundler_spec.version
469
+ end
470
+
471
+ def prepend_destdir(destdir, path)
472
+ File.join(destdir, path.gsub(/^[a-zA-Z]:/, ""))
446
473
  end
447
474
  end unless Gem.java_platform?
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'helper'
3
- require 'rubygems/commands/signin_command'
4
- require 'rubygems/installer'
2
+
3
+ require_relative "helper"
4
+ require "rubygems/commands/signin_command"
5
+ require "rubygems/installer"
5
6
 
6
7
  class TestGemCommandsSigninCommand < Gem::TestCase
7
8
  def setup
@@ -34,7 +35,7 @@ class TestGemCommandsSigninCommand < Gem::TestCase
34
35
  end
35
36
 
36
37
  def test_execute_when_already_signed_in_with_same_host
37
- host = 'http://some-gemcutter-compatible-host.org'
38
+ host = "http://some-gemcutter-compatible-host.org"
38
39
 
39
40
  util_capture(nil, host) { @cmd.execute }
40
41
  old_credentials = load_yaml_file Gem.configuration.credentials_path
@@ -46,10 +47,10 @@ class TestGemCommandsSigninCommand < Gem::TestCase
46
47
  end
47
48
 
48
49
  def test_execute_when_already_signed_in_with_different_host
49
- api_key = 'a5fdbb6ba150cbb83aad2bb2fede64cf04045xxxx'
50
+ api_key = "a5fdbb6ba150cbb83aad2bb2fede64cf04045xxxx"
50
51
 
51
52
  util_capture(nil, nil, api_key) { @cmd.execute }
52
- host = 'http://some-gemcutter-compatible-host.org'
53
+ host = "http://some-gemcutter-compatible-host.org"
53
54
 
54
55
  util_capture(nil, host, api_key) { @cmd.execute }
55
56
  credentials = load_yaml_file Gem.configuration.credentials_path
@@ -60,30 +61,55 @@ class TestGemCommandsSigninCommand < Gem::TestCase
60
61
  end
61
62
 
62
63
  def test_execute_with_host_supplied
63
- host = 'http://some-gemcutter-compatible-host.org'
64
+ host = "http://some-gemcutter-compatible-host.org"
64
65
 
65
66
  sign_in_ui = util_capture(nil, host) { @cmd.execute }
66
67
  assert_match %r{Enter your #{host} credentials.}, sign_in_ui.output
67
68
  assert_match %r{Signed in.}, sign_in_ui.output
68
69
 
69
- api_key = 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903'
70
+ api_key = "a5fdbb6ba150cbb83aad2bb2fede64cf040453903"
70
71
  credentials = load_yaml_file Gem.configuration.credentials_path
71
72
  assert_equal api_key, credentials[host]
72
73
  end
73
74
 
75
+ def test_execute_with_host_permanent_redirect
76
+ host = "http://rubygems.example/"
77
+ ENV["RUBYGEMS_HOST"] = host
78
+ path = "/api/v1/api_key"
79
+ redirected_uri = "http://rubygems.example#{path}"
80
+ fetcher = Gem::FakeFetcher.new
81
+ fetcher.data["#{host}#{path}"] = HTTPResponseFactory.create(
82
+ body: "",
83
+ code: "308",
84
+ msg: "Permanent Redirect",
85
+ headers: { "location" => redirected_uri }
86
+ )
87
+ Gem::RemoteFetcher.fetcher = fetcher
88
+ ui = Gem::MockGemUi.new("you@example.com\nsecret\n\n\n\n\n\n\n\n\n")
89
+
90
+ assert_raise Gem::MockGemUi::TermError do
91
+ use_ui ui do
92
+ @cmd.execute
93
+ end
94
+ end
95
+
96
+ response = "The request has redirected permanently to #{redirected_uri}. Please check your defined push host URL."
97
+ assert_match response, ui.output
98
+ end
99
+
74
100
  def test_execute_with_valid_creds_set_for_default_host
75
101
  util_capture { @cmd.execute }
76
102
 
77
- api_key = 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903'
103
+ api_key = "a5fdbb6ba150cbb83aad2bb2fede64cf040453903"
78
104
  credentials = load_yaml_file Gem.configuration.credentials_path
79
105
 
80
106
  assert_equal api_key, credentials[:rubygems_api_key]
81
107
  end
82
108
 
83
109
  def test_execute_with_key_name_and_scope
84
- email = 'you@example.com'
85
- password = 'secret'
86
- api_key = '1234'
110
+ email = "you@example.com"
111
+ password = "secret"
112
+ api_key = "1234"
87
113
  fetcher = Gem::RemoteFetcher.fetcher
88
114
 
89
115
  key_name_ui = Gem::MockGemUi.new "#{email}\n#{password}\ntest-key\n\ny\n\n\n\n\n\n"
@@ -106,9 +132,9 @@ class TestGemCommandsSigninCommand < Gem::TestCase
106
132
  end
107
133
 
108
134
  def test_execute_with_key_name_scope_and_mfa_level_of_ui_only
109
- email = 'you@example.com'
110
- password = 'secret'
111
- api_key = '1234'
135
+ email = "you@example.com"
136
+ password = "secret"
137
+ api_key = "1234"
112
138
  fetcher = Gem::RemoteFetcher.fetcher
113
139
  mfa_level = "ui_only"
114
140
 
@@ -133,9 +159,9 @@ class TestGemCommandsSigninCommand < Gem::TestCase
133
159
  end
134
160
 
135
161
  def test_execute_with_key_name_scope_and_mfa_level_of_gem_signin
136
- email = 'you@example.com'
137
- password = 'secret'
138
- api_key = '1234'
162
+ email = "you@example.com"
163
+ password = "secret"
164
+ api_key = "1234"
139
165
  fetcher = Gem::RemoteFetcher.fetcher
140
166
  mfa_level = "ui_and_gem_signin"
141
167
 
@@ -159,20 +185,34 @@ class TestGemCommandsSigninCommand < Gem::TestCase
159
185
  assert_equal api_key, credentials[:rubygems_api_key]
160
186
  end
161
187
 
188
+ def test_execute_with_warnings
189
+ email = "you@example.com"
190
+ password = "secret"
191
+ api_key = "1234"
192
+ fetcher = Gem::RemoteFetcher.fetcher
193
+ mfa_level = "disabled"
194
+ warning = "/[WARNING/] For protection of your account and gems"
195
+
196
+ key_name_ui = Gem::MockGemUi.new "#{email}\n#{password}\ntest-key\n\ny\n\n\n\n\n\ny"
197
+ util_capture(key_name_ui, nil, api_key, fetcher, mfa_level, warning) { @cmd.execute }
198
+
199
+ assert_match warning, key_name_ui.output
200
+ end
201
+
162
202
  def test_execute_on_gemserver_without_profile_me_endpoint
163
- host = 'http://some-gemcutter-compatible-host.org'
203
+ host = "http://some-gemcutter-compatible-host.org"
164
204
 
165
- email = 'you@example.com'
166
- password = 'secret'
167
- api_key = '1234'
205
+ email = "you@example.com"
206
+ password = "secret"
207
+ api_key = "1234"
168
208
  fetcher = Gem::RemoteFetcher.fetcher
169
209
 
170
210
  key_name_ui = Gem::MockGemUi.new "#{email}\n#{password}\ntest-key\n\ny\n\n\n\n\n\ny"
171
211
 
172
212
  # Set the expected response for the Web-API supplied
173
- ENV['RUBYGEMS_HOST'] = host
213
+ ENV["RUBYGEMS_HOST"] = host
174
214
  data_key = "#{ENV['RUBYGEMS_HOST']}/api/v1/api_key"
175
- fetcher.data[data_key] = [api_key, 200, 'OK']
215
+ fetcher.data[data_key] = HTTPResponseFactory.create(body: api_key, code: 200, msg: "OK")
176
216
 
177
217
  use_ui key_name_ui do
178
218
  @cmd.execute
@@ -193,15 +233,15 @@ class TestGemCommandsSigninCommand < Gem::TestCase
193
233
 
194
234
  # Utility method to capture IO/UI within the block passed
195
235
 
196
- def util_capture(ui_stub = nil, host = nil, api_key = nil, fetcher = Gem::FakeFetcher.new, mfa_level = "disabled")
197
- api_key ||= 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903'
198
- response = [api_key, 200, 'OK']
199
- profile_response = [ "mfa: #{mfa_level}\n" , 200, 'OK']
200
- email = 'you@example.com'
201
- password = 'secret'
236
+ def util_capture(ui_stub = nil, host = nil, api_key = nil, fetcher = Gem::FakeFetcher.new, mfa_level = "disabled", warning = nil)
237
+ api_key ||= "a5fdbb6ba150cbb83aad2bb2fede64cf040453903"
238
+ response = HTTPResponseFactory.create(body: api_key, code: 200, msg: "OK")
239
+ profile_response = HTTPResponseFactory.create(body: "mfa: #{mfa_level}\nwarning: #{warning}", code: 200, msg: "OK")
240
+ email = "you@example.com"
241
+ password = "secret"
202
242
 
203
243
  # Set the expected response for the Web-API supplied
204
- ENV['RUBYGEMS_HOST'] = host || Gem::DEFAULT_HOST
244
+ ENV["RUBYGEMS_HOST"] = host || Gem::DEFAULT_HOST
205
245
  data_key = "#{ENV['RUBYGEMS_HOST']}/api/v1/api_key"
206
246
  fetcher.data[data_key] = response
207
247
  profile = "#{ENV['RUBYGEMS_HOST']}/api/v1/profile/me.yaml"
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'helper'
4
- require 'rubygems/commands/signout_command'
5
- require 'rubygems/installer'
3
+ require_relative "helper"
4
+ require "rubygems/commands/signout_command"
5
+ require "rubygems/installer"
6
6
 
7
7
  class TestGemCommandsSignoutCommand < Gem::TestCase
8
8
  def setup