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,43 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rubygems'
4
-
5
- # If bundler gemspec exists, add to stubs
6
- bundler_gemspec = File.expand_path('../../bundler/bundler.gemspec', __dir__)
7
- if File.exist?(bundler_gemspec)
8
- Gem::Specification.dirs.unshift File.dirname(bundler_gemspec)
9
- Gem::Specification.class_variable_set :@@stubs, nil
10
- Gem::Specification.stubs
11
- Gem::Specification.dirs.shift
12
- end
3
+ require "rubygems"
13
4
 
14
5
  begin
15
- gem 'test-unit', '~> 3.0'
6
+ gem "test-unit", "~> 3.0"
16
7
  rescue Gem::LoadError
17
8
  end
18
9
 
19
- if File.exist?(bundler_gemspec)
20
- require_relative '../../bundler/lib/bundler'
21
- else
22
- require 'bundler'
23
- end
24
-
25
- require 'test/unit'
10
+ require "test/unit"
26
11
 
27
12
  ENV["JARS_SKIP"] = "true" if Gem.java_platform? # avoid unnecessary and noisy `jar-dependencies` post install hook
28
13
 
29
- require 'rubygems/deprecate'
14
+ require "rubygems/deprecate"
30
15
 
31
- require 'fileutils'
32
- require 'pathname'
33
- require 'pp'
34
- require 'rubygems/package'
35
- require 'shellwords'
36
- require 'tmpdir'
37
- require 'uri'
38
- require 'zlib'
39
- require 'benchmark' # stdlib
40
- require 'rubygems/mock_gem_ui'
16
+ require "fileutils"
17
+ require "pathname"
18
+ require "pp"
19
+ require "rubygems/package"
20
+ require "shellwords"
21
+ require "tmpdir"
22
+ require "uri"
23
+ require "zlib"
24
+ require "benchmark" # stdlib
25
+ require "rubygems/mock_gem_ui"
41
26
 
42
27
  module Gem
43
28
 
@@ -165,15 +150,15 @@ class Gem::TestCase < Test::Unit::TestCase
165
150
  # the original value when the block ends
166
151
 
167
152
  def enable_shared(value)
168
- enable_shared = RbConfig::CONFIG['ENABLE_SHARED']
169
- RbConfig::CONFIG['ENABLE_SHARED'] = value
153
+ enable_shared = RbConfig::CONFIG["ENABLE_SHARED"]
154
+ RbConfig::CONFIG["ENABLE_SHARED"] = value
170
155
 
171
156
  yield
172
157
  ensure
173
158
  if enable_shared
174
- RbConfig::CONFIG['enable_shared'] = enable_shared
159
+ RbConfig::CONFIG["ENABLE_SHARED"] = enable_shared
175
160
  else
176
- RbConfig::CONFIG.delete 'enable_shared'
161
+ RbConfig::CONFIG.delete "ENABLE_SHARED"
177
162
  end
178
163
  end
179
164
 
@@ -182,20 +167,20 @@ class Gem::TestCase < Test::Unit::TestCase
182
167
  # original value when the block ends
183
168
  #
184
169
  def vendordir(value)
185
- vendordir = RbConfig::CONFIG['vendordir']
170
+ vendordir = RbConfig::CONFIG["vendordir"]
186
171
 
187
172
  if value
188
- RbConfig::CONFIG['vendordir'] = value
173
+ RbConfig::CONFIG["vendordir"] = value
189
174
  else
190
- RbConfig::CONFIG.delete 'vendordir'
175
+ RbConfig::CONFIG.delete "vendordir"
191
176
  end
192
177
 
193
178
  yield
194
179
  ensure
195
180
  if vendordir
196
- RbConfig::CONFIG['vendordir'] = vendordir
181
+ RbConfig::CONFIG["vendordir"] = vendordir
197
182
  else
198
- RbConfig::CONFIG.delete 'vendordir'
183
+ RbConfig::CONFIG.delete "vendordir"
199
184
  end
200
185
  end
201
186
 
@@ -205,21 +190,21 @@ class Gem::TestCase < Test::Unit::TestCase
205
190
  #
206
191
  def bindir(value)
207
192
  with_clean_path_to_ruby do
208
- bindir = RbConfig::CONFIG['bindir']
193
+ bindir = RbConfig::CONFIG["bindir"]
209
194
 
210
195
  if value
211
- RbConfig::CONFIG['bindir'] = value
196
+ RbConfig::CONFIG["bindir"] = value
212
197
  else
213
- RbConfig::CONFIG.delete 'bindir'
198
+ RbConfig::CONFIG.delete "bindir"
214
199
  end
215
200
 
216
201
  begin
217
202
  yield
218
203
  ensure
219
204
  if bindir
220
- RbConfig::CONFIG['bindir'] = bindir
205
+ RbConfig::CONFIG["bindir"] = bindir
221
206
  else
222
- RbConfig::CONFIG.delete 'bindir'
207
+ RbConfig::CONFIG.delete "bindir"
223
208
  end
224
209
  end
225
210
  end
@@ -230,20 +215,20 @@ class Gem::TestCase < Test::Unit::TestCase
230
215
  # original value when the block ends
231
216
  #
232
217
  def exeext(value)
233
- exeext = RbConfig::CONFIG['EXEEXT']
218
+ exeext = RbConfig::CONFIG["EXEEXT"]
234
219
 
235
220
  if value
236
- RbConfig::CONFIG['EXEEXT'] = value
221
+ RbConfig::CONFIG["EXEEXT"] = value
237
222
  else
238
- RbConfig::CONFIG.delete 'EXEEXT'
223
+ RbConfig::CONFIG.delete "EXEEXT"
239
224
  end
240
225
 
241
226
  yield
242
227
  ensure
243
228
  if exeext
244
- RbConfig::CONFIG['EXEEXT'] = exeext
229
+ RbConfig::CONFIG["EXEEXT"] = exeext
245
230
  else
246
- RbConfig::CONFIG.delete 'EXEEXT'
231
+ RbConfig::CONFIG.delete "EXEEXT"
247
232
  end
248
233
  end
249
234
 
@@ -264,23 +249,23 @@ class Gem::TestCase < Test::Unit::TestCase
264
249
  end
265
250
  end
266
251
 
267
- targets << '' if targets.empty?
252
+ targets << "" if targets.empty?
268
253
 
269
254
  targets
270
255
  end
271
256
 
272
257
  def assert_contains_make_command(target, output, msg = nil)
273
- if output.match(/\n/)
258
+ if output.include?("\n")
274
259
  msg = build_message(msg,
275
260
  "Expected output containing make command \"%s\", but was \n\nBEGIN_OF_OUTPUT\n%sEND_OF_OUTPUT" % [
276
- ('%s %s' % [make_command, target]).rstrip,
261
+ ("%s %s" % [make_command, target]).rstrip,
277
262
  output,
278
263
  ]
279
264
  )
280
265
  else
281
266
  msg = build_message(msg,
282
267
  'Expected make command "%s", but was "%s"' % [
283
- ('%s %s' % [make_command, target]).rstrip,
268
+ ("%s %s" % [make_command, target]).rstrip,
284
269
  output,
285
270
  ]
286
271
  )
@@ -317,13 +302,15 @@ class Gem::TestCase < Test::Unit::TestCase
317
302
  @tempdir = Dir.mktmpdir("test_rubygems_", @tmp)
318
303
  @tempdir.tap(&Gem::UNTAINT)
319
304
 
320
- ENV['GEM_VENDOR'] = nil
321
- ENV['GEMRC'] = nil
322
- ENV['XDG_CACHE_HOME'] = nil
323
- ENV['XDG_CONFIG_HOME'] = nil
324
- ENV['XDG_DATA_HOME'] = nil
325
- ENV['SOURCE_DATE_EPOCH'] = nil
326
- ENV['BUNDLER_VERSION'] = nil
305
+ ENV["GEM_VENDOR"] = nil
306
+ ENV["GEMRC"] = nil
307
+ ENV["XDG_CACHE_HOME"] = nil
308
+ ENV["XDG_CONFIG_HOME"] = nil
309
+ ENV["XDG_DATA_HOME"] = nil
310
+ ENV["XDG_STATE_HOME"] = nil
311
+ ENV["SOURCE_DATE_EPOCH"] = nil
312
+ ENV["BUNDLER_VERSION"] = nil
313
+ ENV["RUBYGEMS_PREVENT_UPDATE_SUGGESTION"] = "true"
327
314
 
328
315
  @current_dir = Dir.pwd
329
316
  @fetcher = nil
@@ -334,24 +321,23 @@ class Gem::TestCase < Test::Unit::TestCase
334
321
  # capture output
335
322
  Gem::DefaultUserInteraction.ui = Gem::MockGemUi.new
336
323
 
337
- ENV["TMPDIR"] = @tempdir
338
-
339
324
  @orig_SYSTEM_WIDE_CONFIG_FILE = Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE
340
325
  Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
341
326
  Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
342
- File.join(@tempdir, 'system-gemrc')
327
+ File.join(@tempdir, "system-gemrc")
343
328
 
344
- @gemhome = File.join @tempdir, 'gemhome'
345
- @userhome = File.join @tempdir, 'userhome'
346
- ENV["GEM_SPEC_CACHE"] = File.join @tempdir, 'spec_cache'
329
+ @gemhome = File.join @tempdir, "gemhome"
330
+ @userhome = File.join @tempdir, "userhome"
331
+ @statehome = File.join @tempdir, "statehome"
332
+ ENV["GEM_SPEC_CACHE"] = File.join @tempdir, "spec_cache"
347
333
 
348
- @orig_ruby = if ENV['RUBY']
334
+ @orig_ruby = if ENV["RUBY"]
349
335
  ruby = Gem.ruby
350
- Gem.ruby = ENV['RUBY']
336
+ Gem.ruby = ENV["RUBY"]
351
337
  ruby
352
338
  end
353
339
 
354
- @git = ENV['GIT'] || (win_platform? ? 'git.exe' : 'git')
340
+ @git = ENV["GIT"] || "git#{RbConfig::CONFIG['EXEEXT']}"
355
341
 
356
342
  Gem.ensure_gem_subdirectories @gemhome
357
343
  Gem.ensure_default_gem_subdirectories @gemhome
@@ -372,11 +358,12 @@ class Gem::TestCase < Test::Unit::TestCase
372
358
 
373
359
  Dir.chdir @tempdir
374
360
 
375
- ENV['HOME'] = @userhome
361
+ ENV["HOME"] = @userhome
376
362
  Gem.instance_variable_set :@config_file, nil
377
363
  Gem.instance_variable_set :@user_home, nil
378
364
  Gem.instance_variable_set :@config_home, nil
379
365
  Gem.instance_variable_set :@data_home, nil
366
+ Gem.instance_variable_set :@state_home, @statehome
380
367
  Gem.instance_variable_set :@gemdeps, nil
381
368
  Gem.instance_variable_set :@env_requirements_by_name, nil
382
369
  Gem.send :remove_instance_variable, :@ruby_version if
@@ -384,12 +371,12 @@ class Gem::TestCase < Test::Unit::TestCase
384
371
 
385
372
  FileUtils.mkdir_p @userhome
386
373
 
387
- ENV['GEM_PRIVATE_KEY_PASSPHRASE'] = PRIVATE_KEY_PASSPHRASE
374
+ ENV["GEM_PRIVATE_KEY_PASSPHRASE"] = PRIVATE_KEY_PASSPHRASE
388
375
 
389
376
  Gem.instance_variable_set(:@default_specifications_dir, nil)
390
377
  if Gem.java_platform?
391
- @orig_default_gem_home = RbConfig::CONFIG['default_gem_home']
392
- RbConfig::CONFIG['default_gem_home'] = @gemhome
378
+ @orig_default_gem_home = RbConfig::CONFIG["default_gem_home"]
379
+ RbConfig::CONFIG["default_gem_home"] = @gemhome
393
380
  else
394
381
  Gem.instance_variable_set(:@default_dir, @gemhome)
395
382
  end
@@ -411,7 +398,6 @@ class Gem::TestCase < Test::Unit::TestCase
411
398
  Gem.loaded_specs.clear
412
399
  Gem.instance_variable_set(:@activated_gem_paths, 0)
413
400
  Gem.clear_default_specs
414
- Bundler.reset!
415
401
 
416
402
  Gem.configuration.verbose = true
417
403
  Gem.configuration.update_sources = true
@@ -425,12 +411,12 @@ class Gem::TestCase < Test::Unit::TestCase
425
411
  Gem.searcher = nil
426
412
  Gem::SpecFetcher.fetcher = nil
427
413
 
428
- @orig_arch = RbConfig::CONFIG['arch']
414
+ @orig_arch = RbConfig::CONFIG["arch"]
429
415
 
430
416
  if win_platform?
431
- util_set_arch 'i386-mswin32'
417
+ util_set_arch "i386-mswin32"
432
418
  else
433
- util_set_arch 'i686-darwin8.10.1'
419
+ util_set_arch "i686-darwin8.10.1"
434
420
  end
435
421
 
436
422
  %w[post_install_hooks done_installing_hooks post_uninstall_hooks pre_uninstall_hooks pre_install_hooks pre_reset_hooks post_reset_hooks post_build_hooks].each do |name|
@@ -457,7 +443,7 @@ class Gem::TestCase < Test::Unit::TestCase
457
443
  end
458
444
  end
459
445
 
460
- RbConfig::CONFIG['arch'] = @orig_arch
446
+ RbConfig::CONFIG["arch"] = @orig_arch
461
447
 
462
448
  if defined? Gem::RemoteFetcher
463
449
  Gem::RemoteFetcher.fetcher = nil
@@ -467,7 +453,7 @@ class Gem::TestCase < Test::Unit::TestCase
467
453
 
468
454
  FileUtils.rm_rf @tempdir
469
455
 
470
- ENV.replace(@orig_env)
456
+ restore_env
471
457
 
472
458
  Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
473
459
  Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
@@ -475,13 +461,13 @@ class Gem::TestCase < Test::Unit::TestCase
475
461
 
476
462
  Gem.ruby = @orig_ruby if @orig_ruby
477
463
 
478
- RbConfig::CONFIG['mandir'] = @orig_mandir
479
- RbConfig::CONFIG['sitelibdir'] = @orig_sitelibdir
480
- RbConfig::CONFIG['bindir'] = @orig_bindir
464
+ RbConfig::CONFIG["mandir"] = @orig_mandir
465
+ RbConfig::CONFIG["sitelibdir"] = @orig_sitelibdir
466
+ RbConfig::CONFIG["bindir"] = @orig_bindir
481
467
 
482
468
  Gem.instance_variable_set :@default_specifications_dir, nil
483
469
  if Gem.java_platform?
484
- RbConfig::CONFIG['default_gem_home'] = @orig_default_gem_home
470
+ RbConfig::CONFIG["default_gem_home"] = @orig_default_gem_home
485
471
  else
486
472
  Gem.instance_variable_set :@default_dir, nil
487
473
  end
@@ -497,9 +483,9 @@ class Gem::TestCase < Test::Unit::TestCase
497
483
  end
498
484
 
499
485
  def credential_setup
500
- @temp_cred = File.join(@userhome, '.gem', 'credentials')
486
+ @temp_cred = File.join(@userhome, ".gem", "credentials")
501
487
  FileUtils.mkdir_p File.dirname(@temp_cred)
502
- File.write @temp_cred, ':rubygems_api_key: 701229f217cdf23b1344c7b4b54ca97'
488
+ File.write @temp_cred, ":rubygems_api_key: 701229f217cdf23b1344c7b4b54ca97"
503
489
  File.chmod 0600, @temp_cred
504
490
  end
505
491
 
@@ -554,10 +540,10 @@ class Gem::TestCase < Test::Unit::TestCase
554
540
  #
555
541
  # Yields the +specification+ to the block, if given
556
542
 
557
- def git_gem(name = 'a', version = 1)
543
+ def git_gem(name = "a", version = 1)
558
544
  have_git?
559
545
 
560
- directory = File.join 'git', name
546
+ directory = File.join "git", name
561
547
  directory = File.expand_path directory
562
548
 
563
549
  git_spec = Gem::Specification.new name, version do |specification|
@@ -568,22 +554,22 @@ class Gem::TestCase < Test::Unit::TestCase
568
554
 
569
555
  gemspec = "#{name}.gemspec"
570
556
 
571
- File.open File.join(directory, gemspec), 'w' do |io|
557
+ File.open File.join(directory, gemspec), "w" do |io|
572
558
  io.write git_spec.to_ruby
573
559
  end
574
560
 
575
561
  head = nil
576
562
 
577
563
  Dir.chdir directory do
578
- unless File.exist? '.git'
579
- system @git, 'init', '--quiet'
580
- system @git, 'config', 'user.name', 'RubyGems Tests'
581
- system @git, 'config', 'user.email', 'rubygems@example'
564
+ unless File.exist? ".git"
565
+ system @git, "init", "--quiet"
566
+ system @git, "config", "user.name", "RubyGems Tests"
567
+ system @git, "config", "user.email", "rubygems@example"
582
568
  end
583
569
 
584
- system @git, 'add', gemspec
585
- system @git, 'commit', '-a', '-m', 'a non-empty commit message', '--quiet'
586
- head = Gem::Util.popen(@git, 'rev-parse', 'master').strip
570
+ system @git, "add", gemspec
571
+ system @git, "commit", "-a", "-m", "a non-empty commit message", "--quiet"
572
+ head = Gem::Util.popen(@git, "rev-parse", "HEAD").strip
587
573
  end
588
574
 
589
575
  return name, git_spec.version, directory, head
@@ -595,13 +581,13 @@ class Gem::TestCase < Test::Unit::TestCase
595
581
  def have_git?
596
582
  return if in_path? @git
597
583
 
598
- pend 'cannot find git executable, use GIT environment variable to set'
584
+ pend "cannot find git executable, use GIT environment variable to set"
599
585
  end
600
586
 
601
587
  def in_path?(executable) # :nodoc:
602
- return true if %r{\A([A-Z]:|/)} =~ executable and File.exist? executable
588
+ return true if %r{\A([A-Z]:|/)} =~ executable && File.exist?(executable)
603
589
 
604
- ENV['PATH'].split(File::PATH_SEPARATOR).any? do |directory|
590
+ ENV["PATH"].split(File::PATH_SEPARATOR).any? do |directory|
605
591
  File.exist? File.join directory, executable
606
592
  end
607
593
  end
@@ -610,7 +596,7 @@ class Gem::TestCase < Test::Unit::TestCase
610
596
  # Builds and installs the Gem::Specification +spec+
611
597
 
612
598
  def install_gem(spec, options = {})
613
- require 'rubygems/installer'
599
+ require "rubygems/installer"
614
600
 
615
601
  gem = spec.cache_file
616
602
 
@@ -637,7 +623,7 @@ class Gem::TestCase < Test::Unit::TestCase
637
623
  ##
638
624
  # Uninstalls the Gem::Specification +spec+
639
625
  def uninstall_gem(spec)
640
- require 'rubygems/uninstaller'
626
+ require "rubygems/uninstaller"
641
627
 
642
628
  Class.new(Gem::Uninstaller) do
643
629
  def ask_if_ok(spec)
@@ -660,7 +646,7 @@ class Gem::TestCase < Test::Unit::TestCase
660
646
  # Reads a Marshal file at +path+
661
647
 
662
648
  def read_cache(path)
663
- File.open path.dup.tap(&Gem::UNTAINT), 'rb' do |io|
649
+ File.open path.dup.tap(&Gem::UNTAINT), "rb" do |io|
664
650
  Marshal.load io.read
665
651
  end
666
652
  end
@@ -680,7 +666,7 @@ class Gem::TestCase < Test::Unit::TestCase
680
666
  dir = File.dirname path
681
667
  FileUtils.mkdir_p dir unless File.directory? dir
682
668
 
683
- File.open path, 'wb' do |io|
669
+ File.open path, "wb" do |io|
684
670
  yield io if block_given?
685
671
  end
686
672
 
@@ -723,16 +709,16 @@ class Gem::TestCase < Test::Unit::TestCase
723
709
  #
724
710
  # Use this with #write_file to build an installed gem.
725
711
 
726
- def quick_gem(name, version='2')
727
- require 'rubygems/specification'
712
+ def quick_gem(name, version="2")
713
+ require "rubygems/specification"
728
714
 
729
715
  spec = Gem::Specification.new do |s|
730
716
  s.platform = Gem::Platform::RUBY
731
717
  s.name = name
732
718
  s.version = version
733
- s.author = 'A User'
734
- s.email = 'example@example.com'
735
- s.homepage = 'http://example.com'
719
+ s.author = "A User"
720
+ s.email = "example@example.com"
721
+ s.homepage = "http://example.com"
736
722
  s.summary = "this is a summary"
737
723
  s.description = "This is a test description"
738
724
 
@@ -763,7 +749,7 @@ class Gem::TestCase < Test::Unit::TestCase
763
749
  next if File.exist? file
764
750
  FileUtils.mkdir_p File.dirname(file)
765
751
 
766
- File.open file, 'w' do |fp|
752
+ File.open file, "w" do |fp|
767
753
  fp.puts "# #{file}"
768
754
  end
769
755
  end
@@ -849,15 +835,15 @@ class Gem::TestCase < Test::Unit::TestCase
849
835
  # or a +block+ can be given for full customization of the specification.
850
836
 
851
837
  def util_spec(name, version = 2, deps = nil, *files) # :yields: specification
852
- raise "deps or block, not both" if deps and block_given?
838
+ raise "deps or block, not both" if deps && block_given?
853
839
 
854
840
  spec = Gem::Specification.new do |s|
855
841
  s.platform = Gem::Platform::RUBY
856
842
  s.name = name
857
843
  s.version = version
858
- s.author = 'A User'
859
- s.email = 'example@example.com'
860
- s.homepage = 'http://example.com'
844
+ s.author = "A User"
845
+ s.email = "example@example.com"
846
+ s.homepage = "http://example.com"
861
847
  s.summary = "this is a summary"
862
848
  s.description = "This is a test description"
863
849
 
@@ -868,7 +854,7 @@ class Gem::TestCase < Test::Unit::TestCase
868
854
 
869
855
  if deps
870
856
  deps.keys.each do |n|
871
- spec.add_dependency n, (deps[n] || '>= 0')
857
+ spec.add_dependency n, (deps[n] || ">= 0")
872
858
  end
873
859
  end
874
860
 
@@ -895,7 +881,7 @@ class Gem::TestCase < Test::Unit::TestCase
895
881
  if deps
896
882
  block = proc do |s|
897
883
  deps.keys.each do |n|
898
- s.add_dependency n, (deps[n] || '>= 0')
884
+ s.add_dependency n, (deps[n] || ">= 0")
899
885
  end
900
886
  end
901
887
  end
@@ -904,7 +890,7 @@ class Gem::TestCase < Test::Unit::TestCase
904
890
 
905
891
  util_build_gem spec
906
892
 
907
- cache_file = File.join @tempdir, 'gems', "#{spec.original_name}.gem"
893
+ cache_file = File.join @tempdir, "gems", "#{spec.original_name}.gem"
908
894
  FileUtils.mkdir_p File.dirname cache_file
909
895
  FileUtils.mv spec.cache_file, cache_file
910
896
  FileUtils.rm spec.spec_file
@@ -946,11 +932,11 @@ class Gem::TestCase < Test::Unit::TestCase
946
932
  # TODO: nuke this and fix tests. this should speed up a lot
947
933
 
948
934
  def util_make_gems(prerelease = false)
949
- @a1 = quick_gem 'a', '1' do |s|
935
+ @a1 = quick_gem "a", "1" do |s|
950
936
  s.files = %w[lib/code.rb]
951
937
  s.require_paths = %w[lib]
952
938
  s.date = Gem::Specification::TODAY - 86400
953
- s.homepage = 'http://a.example.com'
939
+ s.homepage = "http://a.example.com"
954
940
  s.email = %w[example@example.com example2@example.com]
955
941
  s.authors = %w[Example Example2]
956
942
  s.description = <<-DESC
@@ -967,27 +953,27 @@ Also, a list:
967
953
  s.require_paths = %w[lib]
968
954
  end
969
955
 
970
- @a2 = quick_gem('a', '2', &init)
971
- @a3a = quick_gem('a', '3.a', &init)
972
- @a_evil9 = quick_gem('a_evil', '9', &init)
973
- @b2 = quick_gem('b', '2', &init)
974
- @c1_2 = quick_gem('c', '1.2', &init)
975
- @x = quick_gem('x', '1', &init)
976
- @dep_x = quick_gem('dep_x', '1') do |s|
956
+ @a2 = quick_gem("a", "2", &init)
957
+ @a3a = quick_gem("a", "3.a", &init)
958
+ @a_evil9 = quick_gem("a_evil", "9", &init)
959
+ @b2 = quick_gem("b", "2", &init)
960
+ @c1_2 = quick_gem("c", "1.2", &init)
961
+ @x = quick_gem("x", "1", &init)
962
+ @dep_x = quick_gem("dep_x", "1") do |s|
977
963
  s.files = %w[lib/code.rb]
978
964
  s.require_paths = %w[lib]
979
- s.add_dependency 'x', '>= 1'
965
+ s.add_dependency "x", ">= 1"
980
966
  end
981
967
 
982
- @pl1 = quick_gem 'pl', '1' do |s| # l for legacy
968
+ @pl1 = quick_gem "pl", "1" do |s| # l for legacy
983
969
  s.files = %w[lib/code.rb]
984
970
  s.require_paths = %w[lib]
985
- s.platform = Gem::Platform.new 'i386-linux'
986
- s.instance_variable_set :@original_platform, 'i386-linux'
971
+ s.platform = Gem::Platform.new "i386-linux"
972
+ s.instance_variable_set :@original_platform, "i386-linux"
987
973
  end
988
974
 
989
975
  if prerelease
990
- @a2_pre = quick_gem('a', '2.a', &init)
976
+ @a2_pre = quick_gem("a", "2.a", &init)
991
977
  write_file File.join(*%W[gems #{@a2_pre.original_name} lib code.rb])
992
978
  util_build_gem @a2_pre
993
979
  end
@@ -1013,7 +999,7 @@ Also, a list:
1013
999
  # Set the platform to +arch+
1014
1000
 
1015
1001
  def util_set_arch(arch)
1016
- RbConfig::CONFIG['arch'] = arch
1002
+ RbConfig::CONFIG["arch"] = arch
1017
1003
  platform = Gem::Platform.new arch
1018
1004
 
1019
1005
  Gem.instance_variable_set :@platforms, nil
@@ -1182,7 +1168,7 @@ Also, a list:
1182
1168
  # Borland) versus Cygwin, Mingw, etc.
1183
1169
 
1184
1170
  def self.vc_windows?
1185
- RUBY_PLATFORM.match('mswin')
1171
+ RUBY_PLATFORM.match("mswin")
1186
1172
  end
1187
1173
 
1188
1174
  ##
@@ -1190,7 +1176,21 @@ Also, a list:
1190
1176
  # Borland) versus Cygwin, Mingw, etc.
1191
1177
 
1192
1178
  def vc_windows?
1193
- RUBY_PLATFORM.match('mswin')
1179
+ RUBY_PLATFORM.match("mswin")
1180
+ end
1181
+
1182
+ ##
1183
+ # Is this test being run on a version of Ruby built with mingw?
1184
+
1185
+ def self.mingw_windows?
1186
+ RUBY_PLATFORM.match("mingw")
1187
+ end
1188
+
1189
+ ##
1190
+ # Is this test being run on a version of Ruby built with mingw?
1191
+
1192
+ def mingw_windows?
1193
+ RUBY_PLATFORM.match("mingw")
1194
1194
  end
1195
1195
 
1196
1196
  ##
@@ -1207,7 +1207,7 @@ Also, a list:
1207
1207
  # other platforms, including Cygwin, it will return 'make'.
1208
1208
 
1209
1209
  def self.make_command
1210
- ENV["make"] || ENV["MAKE"] || (vc_windows? ? 'nmake' : 'make')
1210
+ ENV["make"] || ENV["MAKE"] || (vc_windows? ? "nmake" : "make")
1211
1211
  end
1212
1212
 
1213
1213
  ##
@@ -1216,14 +1216,14 @@ Also, a list:
1216
1216
  # other platforms, including Cygwin, it will return 'make'.
1217
1217
 
1218
1218
  def make_command
1219
- ENV["make"] || ENV["MAKE"] || (vc_windows? ? 'nmake' : 'make')
1219
+ ENV["make"] || ENV["MAKE"] || (vc_windows? ? "nmake" : "make")
1220
1220
  end
1221
1221
 
1222
1222
  ##
1223
1223
  # Returns whether or not the nmake command could be found.
1224
1224
 
1225
1225
  def nmake_found?
1226
- system('nmake /? 1>NUL 2>&1')
1226
+ system("nmake /? 1>NUL 2>&1")
1227
1227
  end
1228
1228
 
1229
1229
  # In case we're building docs in a background process, this method waits for
@@ -1276,13 +1276,13 @@ Also, a list:
1276
1276
  ruby = ENV["RUBY"]
1277
1277
  return ruby if ruby
1278
1278
  ruby = "ruby"
1279
- rubyexe = "#{ruby}.exe"
1279
+ rubyexe = "#{ruby}#{RbConfig::CONFIG['EXEEXT']}"
1280
1280
 
1281
1281
  3.times do
1282
- if File.exist? ruby and File.executable? ruby and !File.directory? ruby
1282
+ if File.exist?(ruby) && File.executable?(ruby) && !File.directory?(ruby)
1283
1283
  return File.expand_path(ruby)
1284
1284
  end
1285
- if File.exist? rubyexe and File.executable? rubyexe
1285
+ if File.exist?(rubyexe) && File.executable?(rubyexe)
1286
1286
  return File.expand_path(rubyexe)
1287
1287
  end
1288
1288
  ruby = File.join("..", ruby)
@@ -1303,6 +1303,10 @@ Also, a list:
1303
1303
  $LOAD_PATH.find {|p| p == File.dirname($LOADED_FEATURES.find {|f| f.end_with?("/rubygems.rb") }) }
1304
1304
  end
1305
1305
 
1306
+ def bundler_path
1307
+ $LOAD_PATH.find {|p| p == File.dirname($LOADED_FEATURES.find {|f| f.end_with?("/bundler.rb") }) }
1308
+ end
1309
+
1306
1310
  def with_clean_path_to_ruby
1307
1311
  orig_ruby = Gem.ruby
1308
1312
 
@@ -1431,8 +1435,8 @@ Also, a list:
1431
1435
  #
1432
1436
  # Yields the +specification+ to the block, if given
1433
1437
 
1434
- def vendor_gem(name = 'a', version = 1)
1435
- directory = File.join 'vendor', name
1438
+ def vendor_gem(name = "a", version = 1)
1439
+ directory = File.join "vendor", name
1436
1440
 
1437
1441
  FileUtils.mkdir_p directory
1438
1442
 
@@ -1445,12 +1449,12 @@ Also, a list:
1445
1449
  #
1446
1450
  # Yields the +specification+ to the block, if given
1447
1451
 
1448
- def save_gemspec(name = 'a', version = 1, directory = '.')
1452
+ def save_gemspec(name = "a", version = 1, directory = ".")
1449
1453
  vendor_spec = Gem::Specification.new name, version do |specification|
1450
1454
  yield specification if block_given?
1451
1455
  end
1452
1456
 
1453
- File.open File.join(directory, "#{name}.gemspec"), 'w' do |io|
1457
+ File.open File.join(directory, "#{name}.gemspec"), "w" do |io|
1454
1458
  io.write vendor_spec.to_ruby
1455
1459
  end
1456
1460
 
@@ -1564,25 +1568,42 @@ Also, a list:
1564
1568
  # :stopdoc:
1565
1569
  # only available in RubyGems tests
1566
1570
 
1567
- PRIVATE_KEY_PASSPHRASE = 'Foo bar'.freeze
1571
+ PRIVATE_KEY_PASSPHRASE = "Foo bar"
1568
1572
 
1569
1573
  begin
1570
- PRIVATE_KEY = load_key 'private'
1571
- PRIVATE_KEY_PATH = key_path 'private'
1574
+ PRIVATE_KEY = load_key "private"
1575
+ PRIVATE_KEY_PATH = key_path "private"
1572
1576
 
1573
1577
  # ENCRYPTED_PRIVATE_KEY is PRIVATE_KEY encrypted with PRIVATE_KEY_PASSPHRASE
1574
- ENCRYPTED_PRIVATE_KEY = load_key 'encrypted_private', PRIVATE_KEY_PASSPHRASE
1575
- ENCRYPTED_PRIVATE_KEY_PATH = key_path 'encrypted_private'
1578
+ ENCRYPTED_PRIVATE_KEY = load_key "encrypted_private", PRIVATE_KEY_PASSPHRASE
1579
+ ENCRYPTED_PRIVATE_KEY_PATH = key_path "encrypted_private"
1576
1580
 
1577
1581
  PUBLIC_KEY = PRIVATE_KEY.public_key
1578
1582
 
1579
- PUBLIC_CERT = load_cert 'public'
1580
- PUBLIC_CERT_PATH = cert_path 'public'
1583
+ PUBLIC_CERT = load_cert "public"
1584
+ PUBLIC_CERT_PATH = cert_path "public"
1581
1585
  rescue Errno::ENOENT
1582
1586
  PRIVATE_KEY = nil
1583
1587
  PUBLIC_KEY = nil
1584
1588
  PUBLIC_CERT = nil
1585
1589
  end if Gem::HAVE_OPENSSL
1590
+
1591
+ private
1592
+
1593
+ def restore_env
1594
+ unless Gem.win_platform?
1595
+ ENV.replace(@orig_env)
1596
+ return
1597
+ end
1598
+
1599
+ # Fallback logic for Windows below to workaround
1600
+ # https://bugs.ruby-lang.org/issues/16798. Can be dropped once all
1601
+ # supported rubies include the fix for that.
1602
+
1603
+ ENV.clear
1604
+
1605
+ @orig_env.each {|k, v| ENV[k] = v }
1606
+ end
1586
1607
  end
1587
1608
 
1588
1609
  # https://github.com/seattlerb/minitest/blob/13c48a03d84a2a87855a4de0c959f96800100357/lib/minitest/mock.rb#L192
@@ -1592,7 +1613,7 @@ class Object
1592
1613
 
1593
1614
  metaclass = class << self; self; end
1594
1615
 
1595
- if respond_to? name and not methods.map(&:to_s).include? name.to_s
1616
+ if respond_to?(name) && !methods.map(&:to_s).include?(name.to_s)
1596
1617
  metaclass.send :define_method, name do |*args|
1597
1618
  super(*args)
1598
1619
  end
@@ -1604,7 +1625,7 @@ class Object
1604
1625
  if val_or_callable.respond_to? :call
1605
1626
  val_or_callable.call(*args, &blk)
1606
1627
  else
1607
- blk.call(*block_args) if blk
1628
+ blk&.call(*block_args)
1608
1629
  val_or_callable
1609
1630
  end
1610
1631
  end
@@ -1619,4 +1640,4 @@ class Object
1619
1640
  end unless method_defined?(:stub) # lib/resolv/test_dns.rb also has the same method definition
1620
1641
  end
1621
1642
 
1622
- require_relative 'utilities'
1643
+ require_relative "utilities"