rubygems-update 3.3.18 → 3.4.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (615) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1429 -1064
  3. data/CONTRIBUTING.md +31 -8
  4. data/Manifest.txt +61 -36
  5. data/POLICIES.md +55 -20
  6. data/README.md +19 -6
  7. data/bundler/CHANGELOG.md +457 -1
  8. data/bundler/README.md +3 -6
  9. data/bundler/UPGRADING.md +11 -4
  10. data/bundler/bundler.gemspec +8 -10
  11. data/bundler/exe/bundle +5 -16
  12. data/bundler/lib/bundler/build_metadata.rb +2 -2
  13. data/bundler/lib/bundler/cli/add.rb +1 -1
  14. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  15. data/bundler/lib/bundler/cli/check.rb +1 -1
  16. data/bundler/lib/bundler/cli/common.rb +2 -0
  17. data/bundler/lib/bundler/cli/console.rb +2 -2
  18. data/bundler/lib/bundler/cli/doctor.rb +4 -6
  19. data/bundler/lib/bundler/cli/gem.rb +62 -40
  20. data/bundler/lib/bundler/cli/info.rb +1 -1
  21. data/bundler/lib/bundler/cli/init.rb +6 -2
  22. data/bundler/lib/bundler/cli/install.rb +8 -6
  23. data/bundler/lib/bundler/cli/lock.rb +8 -5
  24. data/bundler/lib/bundler/cli/open.rb +6 -4
  25. data/bundler/lib/bundler/cli/outdated.rb +14 -7
  26. data/bundler/lib/bundler/cli/platform.rb +7 -5
  27. data/bundler/lib/bundler/cli/viz.rb +1 -1
  28. data/bundler/lib/bundler/cli.rb +53 -7
  29. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
  30. data/bundler/lib/bundler/compact_index_client/updater.rb +40 -39
  31. data/bundler/lib/bundler/constants.rb +1 -1
  32. data/bundler/lib/bundler/current_ruby.rb +16 -5
  33. data/bundler/lib/bundler/definition.rb +262 -133
  34. data/bundler/lib/bundler/dependency.rb +20 -86
  35. data/bundler/lib/bundler/digest.rb +1 -1
  36. data/bundler/lib/bundler/dsl.rb +6 -7
  37. data/bundler/lib/bundler/endpoint_specification.rb +2 -13
  38. data/bundler/lib/bundler/env.rb +2 -2
  39. data/bundler/lib/bundler/environment_preserver.rb +3 -2
  40. data/bundler/lib/bundler/errors.rb +1 -11
  41. data/bundler/lib/bundler/feature_flag.rb +0 -2
  42. data/bundler/lib/bundler/fetcher/compact_index.rb +11 -13
  43. data/bundler/lib/bundler/fetcher/dependency.rb +2 -6
  44. data/bundler/lib/bundler/fetcher/downloader.rb +4 -5
  45. data/bundler/lib/bundler/fetcher/index.rb +1 -2
  46. data/bundler/lib/bundler/fetcher.rb +21 -15
  47. data/bundler/lib/bundler/force_platform.rb +18 -0
  48. data/bundler/lib/bundler/friendly_errors.rb +1 -4
  49. data/bundler/lib/bundler/gem_helper.rb +3 -4
  50. data/bundler/lib/bundler/gem_helpers.rb +7 -2
  51. data/bundler/lib/bundler/gem_version_promoter.rb +53 -98
  52. data/bundler/lib/bundler/graph.rb +3 -3
  53. data/bundler/lib/bundler/index.rb +13 -47
  54. data/bundler/lib/bundler/injector.rb +5 -4
  55. data/bundler/lib/bundler/inline.rb +9 -11
  56. data/bundler/lib/bundler/installer/parallel_installer.rb +4 -34
  57. data/bundler/lib/bundler/installer/standalone.rb +13 -9
  58. data/bundler/lib/bundler/installer.rb +17 -29
  59. data/bundler/lib/bundler/lazy_specification.rb +54 -53
  60. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  61. data/bundler/lib/bundler/lockfile_parser.rb +17 -16
  62. data/bundler/lib/bundler/man/bundle-add.1 +6 -2
  63. data/bundler/lib/bundler/man/bundle-add.1.ronn +4 -1
  64. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  65. data/bundler/lib/bundler/man/bundle-cache.1 +9 -3
  66. data/bundler/lib/bundler/man/bundle-cache.1.ronn +9 -2
  67. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  68. data/bundler/lib/bundler/man/bundle-clean.1 +2 -2
  69. data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
  70. data/bundler/lib/bundler/man/bundle-config.1 +26 -10
  71. data/bundler/lib/bundler/man/bundle-config.1.ronn +17 -10
  72. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  73. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  74. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  75. data/bundler/lib/bundler/man/bundle-exec.1 +6 -6
  76. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -6
  77. data/bundler/lib/bundler/man/bundle-gem.1 +27 -37
  78. data/bundler/lib/bundler/man/bundle-gem.1.ronn +5 -5
  79. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  80. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  81. data/bundler/lib/bundler/man/bundle-info.1 +3 -3
  82. data/bundler/lib/bundler/man/bundle-info.1.ronn +3 -3
  83. data/bundler/lib/bundler/man/bundle-init.1 +5 -1
  84. data/bundler/lib/bundler/man/bundle-init.1.ronn +2 -0
  85. data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
  86. data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
  87. data/bundler/lib/bundler/man/bundle-install.1 +5 -30
  88. data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -29
  89. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  90. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  91. data/bundler/lib/bundler/man/bundle-open.1 +22 -2
  92. data/bundler/lib/bundler/man/bundle-open.1.ronn +9 -1
  93. data/bundler/lib/bundler/man/bundle-outdated.1 +13 -9
  94. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +12 -9
  95. data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
  96. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  97. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  98. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  99. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  100. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  101. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  102. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  103. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  104. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  105. data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
  106. data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
  107. data/bundler/lib/bundler/man/bundle.1 +15 -10
  108. data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
  109. data/bundler/lib/bundler/man/gemfile.5 +55 -55
  110. data/bundler/lib/bundler/man/gemfile.5.ronn +57 -53
  111. data/bundler/lib/bundler/man/index.txt +4 -0
  112. data/bundler/lib/bundler/match_metadata.rb +13 -0
  113. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  114. data/bundler/lib/bundler/mirror.rb +5 -7
  115. data/bundler/lib/bundler/plugin/index.rb +5 -5
  116. data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
  117. data/bundler/lib/bundler/plugin/installer.rb +5 -2
  118. data/bundler/lib/bundler/plugin.rb +3 -1
  119. data/bundler/lib/bundler/remote_specification.rb +7 -12
  120. data/bundler/lib/bundler/resolver/base.rb +107 -0
  121. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  122. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  123. data/bundler/lib/bundler/resolver/package.rb +72 -0
  124. data/bundler/lib/bundler/resolver/root.rb +25 -0
  125. data/bundler/lib/bundler/resolver/spec_group.rb +42 -71
  126. data/bundler/lib/bundler/resolver.rb +335 -328
  127. data/bundler/lib/bundler/ruby_dsl.rb +7 -1
  128. data/bundler/lib/bundler/ruby_version.rb +8 -8
  129. data/bundler/lib/bundler/rubygems_ext.rb +100 -9
  130. data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -14
  131. data/bundler/lib/bundler/rubygems_integration.rb +11 -15
  132. data/bundler/lib/bundler/runtime.rb +2 -6
  133. data/bundler/lib/bundler/safe_marshal.rb +31 -0
  134. data/bundler/lib/bundler/settings.rb +5 -11
  135. data/bundler/lib/bundler/setup.rb +4 -1
  136. data/bundler/lib/bundler/shared_helpers.rb +3 -3
  137. data/bundler/lib/bundler/source/git/git_proxy.rb +237 -74
  138. data/bundler/lib/bundler/source/git.rb +55 -30
  139. data/bundler/lib/bundler/source/metadata.rb +1 -2
  140. data/bundler/lib/bundler/source/path/installer.rb +1 -22
  141. data/bundler/lib/bundler/source/path.rb +6 -6
  142. data/bundler/lib/bundler/source/rubygems.rb +26 -81
  143. data/bundler/lib/bundler/source.rb +1 -1
  144. data/bundler/lib/bundler/source_list.rb +8 -2
  145. data/bundler/lib/bundler/spec_set.rb +60 -37
  146. data/bundler/lib/bundler/templates/Executable +1 -1
  147. data/bundler/lib/bundler/templates/Executable.bundler +5 -10
  148. data/bundler/lib/bundler/templates/Executable.standalone +2 -0
  149. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  150. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +3 -0
  151. data/bundler/lib/bundler/templates/newgem/README.md.tt +6 -4
  152. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -1
  153. data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
  154. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  155. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  156. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  157. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  158. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  159. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  160. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
  161. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  162. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  163. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +9 -2
  164. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  165. data/bundler/lib/bundler/ui/shell.rb +35 -12
  166. data/bundler/lib/bundler/ui/silent.rb +21 -5
  167. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  168. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  169. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  170. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
  171. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1351 -409
  172. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  173. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  174. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  175. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  176. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  177. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  178. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  179. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  180. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  181. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  182. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  183. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  184. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  185. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  186. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  187. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  188. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  189. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  190. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  191. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
  192. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
  193. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  194. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
  195. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
  196. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
  197. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
  198. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  199. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  200. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
  201. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +15 -9
  202. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +11 -6
  203. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  204. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
  205. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
  206. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +3 -2
  207. data/bundler/lib/bundler/vendored_persistent.rb +1 -33
  208. data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
  209. data/bundler/lib/bundler/version.rb +5 -1
  210. data/bundler/lib/bundler/worker.rb +5 -7
  211. data/bundler/lib/bundler.rb +25 -77
  212. data/{bin → exe}/gem +4 -5
  213. data/{bin → exe}/update_rubygems +12 -10
  214. data/lib/rubygems/available_set.rb +4 -3
  215. data/lib/rubygems/basic_specification.rb +5 -4
  216. data/lib/rubygems/bundler_version_finder.rb +2 -2
  217. data/lib/rubygems/command.rb +41 -32
  218. data/lib/rubygems/command_manager.rb +30 -15
  219. data/lib/rubygems/commands/build_command.rb +12 -8
  220. data/lib/rubygems/commands/cert_command.rb +34 -33
  221. data/lib/rubygems/commands/check_command.rb +21 -20
  222. data/lib/rubygems/commands/cleanup_command.rb +18 -17
  223. data/lib/rubygems/commands/contents_command.rb +14 -13
  224. data/lib/rubygems/commands/dependency_command.rb +17 -16
  225. data/lib/rubygems/commands/environment_command.rb +6 -5
  226. data/lib/rubygems/commands/exec_command.rb +249 -0
  227. data/lib/rubygems/commands/fetch_command.rb +10 -9
  228. data/lib/rubygems/commands/generate_index_command.rb +18 -17
  229. data/lib/rubygems/commands/help_command.rb +7 -6
  230. data/lib/rubygems/commands/info_command.rb +3 -3
  231. data/lib/rubygems/commands/install_command.rb +28 -23
  232. data/lib/rubygems/commands/list_command.rb +4 -3
  233. data/lib/rubygems/commands/lock_command.rb +5 -4
  234. data/lib/rubygems/commands/mirror_command.rb +4 -3
  235. data/lib/rubygems/commands/open_command.rb +10 -9
  236. data/lib/rubygems/commands/outdated_command.rb +6 -5
  237. data/lib/rubygems/commands/owner_command.rb +17 -14
  238. data/lib/rubygems/commands/pristine_command.rb +46 -36
  239. data/lib/rubygems/commands/push_command.rb +9 -8
  240. data/lib/rubygems/commands/query_command.rb +9 -8
  241. data/lib/rubygems/commands/rdoc_command.rb +21 -19
  242. data/lib/rubygems/commands/search_command.rb +4 -3
  243. data/lib/rubygems/commands/server_command.rb +4 -3
  244. data/lib/rubygems/commands/setup_command.rb +97 -106
  245. data/lib/rubygems/commands/signin_command.rb +10 -9
  246. data/lib/rubygems/commands/signout_command.rb +8 -7
  247. data/lib/rubygems/commands/sources_command.rb +22 -21
  248. data/lib/rubygems/commands/specification_command.rb +14 -13
  249. data/lib/rubygems/commands/stale_command.rb +3 -2
  250. data/lib/rubygems/commands/uninstall_command.rb +44 -40
  251. data/lib/rubygems/commands/unpack_command.rb +14 -13
  252. data/lib/rubygems/commands/update_command.rb +42 -63
  253. data/lib/rubygems/commands/which_command.rb +8 -7
  254. data/lib/rubygems/commands/yank_command.rb +12 -11
  255. data/lib/rubygems/config_file.rb +55 -21
  256. data/lib/rubygems/core_ext/kernel_gem.rb +1 -6
  257. data/lib/rubygems/core_ext/kernel_require.rb +109 -115
  258. data/lib/rubygems/core_ext/kernel_warn.rb +33 -37
  259. data/lib/rubygems/core_ext/tcpsocket_init.rb +3 -1
  260. data/lib/rubygems/defaults.rb +33 -18
  261. data/lib/rubygems/dependency.rb +15 -11
  262. data/lib/rubygems/dependency_installer.rb +38 -37
  263. data/lib/rubygems/dependency_list.rb +7 -6
  264. data/lib/rubygems/deprecate.rb +3 -2
  265. data/lib/rubygems/doctor.rb +19 -18
  266. data/lib/rubygems/errors.rb +3 -2
  267. data/lib/rubygems/exceptions.rb +16 -8
  268. data/lib/rubygems/ext/build_error.rb +2 -1
  269. data/lib/rubygems/ext/builder.rb +37 -21
  270. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
  271. data/lib/rubygems/ext/cargo_builder.rb +150 -111
  272. data/lib/rubygems/ext/cmake_builder.rb +2 -2
  273. data/lib/rubygems/ext/configure_builder.rb +2 -1
  274. data/lib/rubygems/ext/ext_conf_builder.rb +11 -9
  275. data/lib/rubygems/ext/rake_builder.rb +7 -5
  276. data/lib/rubygems/ext.rb +8 -7
  277. data/lib/rubygems/gem_runner.rb +6 -5
  278. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  279. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  280. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
  281. data/lib/rubygems/gemcutter_utilities.rb +90 -34
  282. data/lib/rubygems/indexer.rb +29 -28
  283. data/lib/rubygems/install_default_message.rb +3 -2
  284. data/lib/rubygems/install_message.rb +3 -2
  285. data/lib/rubygems/install_update_options.rb +56 -55
  286. data/lib/rubygems/installer.rb +54 -46
  287. data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
  288. data/lib/rubygems/local_remote_options.rb +19 -20
  289. data/lib/rubygems/mock_gem_ui.rb +3 -2
  290. data/lib/rubygems/name_tuple.rb +5 -4
  291. data/lib/rubygems/optparse/lib/optparse.rb +20 -15
  292. data/lib/rubygems/optparse.rb +1 -1
  293. data/lib/rubygems/package/digest_io.rb +1 -0
  294. data/lib/rubygems/package/file_source.rb +3 -2
  295. data/lib/rubygems/package/io_source.rb +1 -0
  296. data/lib/rubygems/package/old.rb +9 -8
  297. data/lib/rubygems/package/source.rb +1 -0
  298. data/lib/rubygems/package/tar_header.rb +63 -62
  299. data/lib/rubygems/package/tar_reader/entry.rb +91 -9
  300. data/lib/rubygems/package/tar_reader.rb +2 -29
  301. data/lib/rubygems/package/tar_writer.rb +8 -7
  302. data/lib/rubygems/package.rb +64 -48
  303. data/lib/rubygems/package_task.rb +5 -4
  304. data/lib/rubygems/path_support.rb +1 -0
  305. data/lib/rubygems/platform.rb +79 -53
  306. data/lib/rubygems/psych_tree.rb +2 -1
  307. data/lib/rubygems/query_utils.rb +35 -35
  308. data/lib/rubygems/rdoc.rb +3 -2
  309. data/lib/rubygems/remote_fetcher.rb +23 -22
  310. data/lib/rubygems/request/connection_pools.rb +4 -4
  311. data/lib/rubygems/request/http_pool.rb +2 -1
  312. data/lib/rubygems/request/https_pool.rb +1 -0
  313. data/lib/rubygems/request.rb +23 -22
  314. data/lib/rubygems/request_set/gem_dependency_api.rb +123 -123
  315. data/lib/rubygems/request_set/lockfile/parser.rb +28 -27
  316. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -3
  317. data/lib/rubygems/request_set/lockfile.rb +6 -5
  318. data/lib/rubygems/request_set.rb +20 -19
  319. data/lib/rubygems/requirement.rb +15 -14
  320. data/lib/rubygems/resolver/activation_request.rb +4 -3
  321. data/lib/rubygems/resolver/api_set.rb +5 -4
  322. data/lib/rubygems/resolver/api_specification.rb +7 -6
  323. data/lib/rubygems/resolver/best_set.rb +6 -5
  324. data/lib/rubygems/resolver/composed_set.rb +1 -0
  325. data/lib/rubygems/resolver/conflict.rb +11 -10
  326. data/lib/rubygems/resolver/current_set.rb +1 -0
  327. data/lib/rubygems/resolver/dependency_request.rb +3 -2
  328. data/lib/rubygems/resolver/git_set.rb +3 -2
  329. data/lib/rubygems/resolver/git_specification.rb +7 -6
  330. data/lib/rubygems/resolver/index_set.rb +4 -3
  331. data/lib/rubygems/resolver/index_specification.rb +7 -5
  332. data/lib/rubygems/resolver/installed_specification.rb +5 -4
  333. data/lib/rubygems/resolver/installer_set.rb +15 -17
  334. data/lib/rubygems/resolver/local_specification.rb +3 -2
  335. data/lib/rubygems/resolver/lock_set.rb +5 -4
  336. data/lib/rubygems/resolver/lock_specification.rb +5 -4
  337. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +1 -1
  338. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +32 -26
  339. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  340. data/lib/rubygems/resolver/molinillo.rb +2 -1
  341. data/lib/rubygems/resolver/requirement_list.rb +1 -0
  342. data/lib/rubygems/resolver/set.rb +1 -0
  343. data/lib/rubygems/resolver/source_set.rb +2 -0
  344. data/lib/rubygems/resolver/spec_specification.rb +1 -0
  345. data/lib/rubygems/resolver/specification.rb +2 -1
  346. data/lib/rubygems/resolver/stats.rb +2 -1
  347. data/lib/rubygems/resolver/vendor_set.rb +2 -1
  348. data/lib/rubygems/resolver/vendor_specification.rb +4 -3
  349. data/lib/rubygems/resolver.rb +41 -40
  350. data/lib/rubygems/s3_uri_signer.rb +10 -8
  351. data/lib/rubygems/safe_yaml.rb +4 -2
  352. data/lib/rubygems/security/policies.rb +48 -47
  353. data/lib/rubygems/security/policy.rb +19 -18
  354. data/lib/rubygems/security/signer.rb +6 -5
  355. data/lib/rubygems/security/trust_dir.rb +5 -4
  356. data/lib/rubygems/security.rb +30 -42
  357. data/lib/rubygems/security_option.rb +6 -5
  358. data/lib/rubygems/shellwords.rb +3 -0
  359. data/lib/rubygems/source/git.rb +22 -22
  360. data/lib/rubygems/source/installed.rb +2 -1
  361. data/lib/rubygems/source/local.rb +3 -2
  362. data/lib/rubygems/source/lock.rb +1 -0
  363. data/lib/rubygems/source/specific_file.rb +2 -1
  364. data/lib/rubygems/source/vendor.rb +1 -0
  365. data/lib/rubygems/source.rb +16 -16
  366. data/lib/rubygems/spec_fetcher.rb +10 -9
  367. data/lib/rubygems/specification.rb +121 -114
  368. data/lib/rubygems/specification_policy.rb +36 -15
  369. data/lib/rubygems/stub_specification.rb +11 -9
  370. data/lib/rubygems/text.rb +2 -2
  371. data/lib/rubygems/tsort/lib/tsort.rb +308 -310
  372. data/lib/rubygems/tsort.rb +1 -1
  373. data/lib/rubygems/uninstaller.rb +19 -18
  374. data/lib/rubygems/update_suggestion.rb +69 -0
  375. data/lib/rubygems/uri.rb +4 -4
  376. data/lib/rubygems/uri_formatter.rb +1 -1
  377. data/lib/rubygems/user_interaction.rb +37 -21
  378. data/lib/rubygems/util/licenses.rb +4 -3
  379. data/lib/rubygems/util/list.rb +1 -0
  380. data/lib/rubygems/util.rb +12 -15
  381. data/lib/rubygems/validator.rb +7 -6
  382. data/lib/rubygems/version.rb +17 -11
  383. data/lib/rubygems/version_option.rb +4 -3
  384. data/lib/rubygems.rb +89 -68
  385. data/rubygems-update.gemspec +10 -8
  386. data/setup.rb +10 -9
  387. data/test/rubygems/alternate_cert.pem +14 -14
  388. data/test/rubygems/alternate_cert_32.pem +15 -15
  389. data/test/rubygems/alternate_key.pem +25 -25
  390. data/test/rubygems/bad_rake.rb +1 -0
  391. data/test/rubygems/bundler_test_gem.rb +421 -0
  392. data/test/rubygems/child_cert.pem +15 -16
  393. data/test/rubygems/child_cert_32.pem +15 -16
  394. data/test/rubygems/child_key.pem +25 -25
  395. data/test/rubygems/encrypted_private_key.pem +26 -26
  396. data/test/rubygems/expired_cert.pem +15 -15
  397. data/test/rubygems/fake_certlib/openssl.rb +1 -0
  398. data/test/rubygems/future_cert.pem +15 -15
  399. data/test/rubygems/future_cert_32.pem +15 -15
  400. data/test/rubygems/good_rake.rb +1 -0
  401. data/test/rubygems/grandchild_cert.pem +15 -16
  402. data/test/rubygems/grandchild_cert_32.pem +15 -16
  403. data/test/rubygems/grandchild_key.pem +25 -25
  404. data/test/rubygems/helper.rb +172 -151
  405. data/test/rubygems/installer_test_case.rb +14 -13
  406. data/test/rubygems/invalid_issuer_cert.pem +16 -16
  407. data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
  408. data/test/rubygems/invalid_key.pem +25 -25
  409. data/test/rubygems/invalid_signer_cert.pem +15 -15
  410. data/test/rubygems/invalid_signer_cert_32.pem +15 -15
  411. data/test/rubygems/invalidchild_cert.pem +15 -16
  412. data/test/rubygems/invalidchild_cert_32.pem +15 -16
  413. data/test/rubygems/invalidchild_key.pem +25 -25
  414. data/test/rubygems/multifactor_auth_utilities.rb +111 -0
  415. data/test/rubygems/package/tar_test_case.rb +53 -17
  416. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  417. data/test/rubygems/plugin/exception/rubygems_plugin.rb +2 -1
  418. data/test/rubygems/plugin/load/rubygems_plugin.rb +1 -0
  419. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +2 -1
  420. data/test/rubygems/private_key.pem +25 -25
  421. data/test/rubygems/public_cert.pem +16 -16
  422. data/test/rubygems/public_cert_32.pem +15 -15
  423. data/test/rubygems/public_key.pem +7 -7
  424. data/test/rubygems/rubygems/commands/crash_command.rb +1 -0
  425. data/test/rubygems/rubygems_plugin.rb +3 -2
  426. data/test/rubygems/simple_gem.rb +2 -1
  427. data/test/rubygems/specifications/bar-0.0.2.gemspec +2 -0
  428. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +6 -4
  429. data/test/rubygems/test_bundled_ca.rb +13 -12
  430. data/test/rubygems/test_config.rb +5 -4
  431. data/test/rubygems/test_deprecate.rb +5 -4
  432. data/test/rubygems/test_exit.rb +9 -3
  433. data/test/rubygems/test_gem.rb +339 -677
  434. data/test/rubygems/test_gem_available_set.rb +22 -21
  435. data/test/rubygems/test_gem_bundler_version_finder.rb +6 -4
  436. data/test/rubygems/test_gem_command.rb +45 -44
  437. data/test/rubygems/test_gem_command_manager.rb +96 -30
  438. data/test/rubygems/test_gem_commands_build_command.rb +74 -63
  439. data/test/rubygems/test_gem_commands_cert_command.rb +98 -99
  440. data/test/rubygems/test_gem_commands_check_command.rb +5 -4
  441. data/test/rubygems/test_gem_commands_cleanup_command.rb +41 -40
  442. data/test/rubygems/test_gem_commands_contents_command.rb +28 -27
  443. data/test/rubygems/test_gem_commands_dependency_command.rb +37 -36
  444. data/test/rubygems/test_gem_commands_environment_command.rb +17 -16
  445. data/test/rubygems/test_gem_commands_exec_command.rb +853 -0
  446. data/test/rubygems/test_gem_commands_fetch_command.rb +38 -37
  447. data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -7
  448. data/test/rubygems/test_gem_commands_help_command.rb +14 -13
  449. data/test/rubygems/test_gem_commands_info_command.rb +29 -2
  450. data/test/rubygems/test_gem_commands_install_command.rb +152 -132
  451. data/test/rubygems/test_gem_commands_list_command.rb +5 -4
  452. data/test/rubygems/test_gem_commands_lock_command.rb +11 -10
  453. data/test/rubygems/test_gem_commands_mirror.rb +3 -2
  454. data/test/rubygems/test_gem_commands_open_command.rb +5 -4
  455. data/test/rubygems/test_gem_commands_outdated_command.rb +10 -9
  456. data/test/rubygems/test_gem_commands_owner_command.rb +227 -50
  457. data/test/rubygems/test_gem_commands_pristine_command.rb +142 -93
  458. data/test/rubygems/test_gem_commands_push_command.rb +189 -64
  459. data/test/rubygems/test_gem_commands_query_command.rb +74 -73
  460. data/test/rubygems/test_gem_commands_search_command.rb +3 -2
  461. data/test/rubygems/test_gem_commands_server_command.rb +3 -2
  462. data/test/rubygems/test_gem_commands_setup_command.rb +123 -96
  463. data/test/rubygems/test_gem_commands_signin_command.rb +71 -31
  464. data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
  465. data/test/rubygems/test_gem_commands_sources_command.rb +29 -29
  466. data/test/rubygems/test_gem_commands_specification_command.rb +33 -32
  467. data/test/rubygems/test_gem_commands_stale_command.rb +5 -4
  468. data/test/rubygems/test_gem_commands_uninstall_command.rb +99 -81
  469. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -31
  470. data/test/rubygems/test_gem_commands_update_command.rb +96 -95
  471. data/test/rubygems/test_gem_commands_which_command.rb +7 -6
  472. data/test/rubygems/test_gem_commands_yank_command.rb +162 -43
  473. data/test/rubygems/test_gem_config_file.rb +94 -81
  474. data/test/rubygems/test_gem_dependency.rb +76 -73
  475. data/test/rubygems/test_gem_dependency_installer.rb +200 -165
  476. data/test/rubygems/test_gem_dependency_list.rb +48 -47
  477. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -4
  478. data/test/rubygems/test_gem_doctor.rb +27 -26
  479. data/test/rubygems/test_gem_ext_builder.rb +60 -61
  480. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +4 -4
  481. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.lock → ext/custom_name_lib/Cargo.lock} +23 -33
  482. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.toml → ext/custom_name_lib/Cargo.toml} +1 -1
  483. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{src → ext/custom_name_lib/src}/lib.rs +1 -1
  484. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +3 -0
  485. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +37 -33
  486. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  487. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +2 -0
  488. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +12 -0
  489. data/test/rubygems/test_gem_ext_cargo_builder.rb +48 -59
  490. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +20 -19
  491. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +21 -36
  492. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -15
  493. data/test/rubygems/test_gem_ext_configure_builder.rb +14 -13
  494. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
  495. data/test/rubygems/test_gem_ext_rake_builder.rb +16 -15
  496. data/test/rubygems/test_gem_gem_runner.rb +15 -9
  497. data/test/rubygems/test_gem_gemcutter_utilities.rb +170 -84
  498. data/test/rubygems/test_gem_impossible_dependencies_error.rb +5 -4
  499. data/test/rubygems/test_gem_indexer.rb +87 -67
  500. data/test/rubygems/test_gem_install_update_options.rb +17 -16
  501. data/test/rubygems/test_gem_installer.rb +422 -304
  502. data/test/rubygems/test_gem_local_remote_options.rb +11 -10
  503. data/test/rubygems/test_gem_name_tuple.rb +5 -4
  504. data/test/rubygems/test_gem_package.rb +243 -231
  505. data/test/rubygems/test_gem_package_old.rb +14 -13
  506. data/test/rubygems/test_gem_package_tar_header.rb +48 -47
  507. data/test/rubygems/test_gem_package_tar_reader.rb +56 -8
  508. data/test/rubygems/test_gem_package_tar_reader_entry.rb +162 -16
  509. data/test/rubygems/test_gem_package_tar_writer.rb +77 -76
  510. data/test/rubygems/test_gem_package_task.rb +19 -18
  511. data/test/rubygems/test_gem_path_support.rb +15 -14
  512. data/test/rubygems/test_gem_platform.rb +333 -227
  513. data/test/rubygems/test_gem_rdoc.rb +15 -14
  514. data/test/rubygems/test_gem_remote_fetcher.rb +155 -154
  515. data/test/rubygems/test_gem_request.rb +64 -58
  516. data/test/rubygems/test_gem_request_connection_pools.rb +30 -29
  517. data/test/rubygems/test_gem_request_set.rb +101 -100
  518. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +210 -211
  519. data/test/rubygems/test_gem_request_set_lockfile.rb +87 -86
  520. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +58 -57
  521. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +63 -62
  522. data/test/rubygems/test_gem_requirement.rb +48 -41
  523. data/test/rubygems/test_gem_resolver.rb +167 -99
  524. data/test/rubygems/test_gem_resolver_activation_request.rb +7 -6
  525. data/test/rubygems/test_gem_resolver_api_set.rb +34 -33
  526. data/test/rubygems/test_gem_resolver_api_specification.rb +48 -47
  527. data/test/rubygems/test_gem_resolver_best_set.rb +23 -22
  528. data/test/rubygems/test_gem_resolver_composed_set.rb +2 -1
  529. data/test/rubygems/test_gem_resolver_conflict.rb +13 -12
  530. data/test/rubygems/test_gem_resolver_dependency_request.rb +16 -15
  531. data/test/rubygems/test_gem_resolver_git_set.rb +22 -21
  532. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -21
  533. data/test/rubygems/test_gem_resolver_index_set.rb +13 -12
  534. data/test/rubygems/test_gem_resolver_index_specification.rb +17 -16
  535. data/test/rubygems/test_gem_resolver_installed_specification.rb +6 -5
  536. data/test/rubygems/test_gem_resolver_installer_set.rb +79 -34
  537. data/test/rubygems/test_gem_resolver_local_specification.rb +8 -7
  538. data/test/rubygems/test_gem_resolver_lock_set.rb +13 -12
  539. data/test/rubygems/test_gem_resolver_lock_specification.rb +18 -17
  540. data/test/rubygems/test_gem_resolver_requirement_list.rb +2 -1
  541. data/test/rubygems/test_gem_resolver_specification.rb +9 -8
  542. data/test/rubygems/test_gem_resolver_vendor_set.rb +7 -6
  543. data/test/rubygems/test_gem_resolver_vendor_specification.rb +11 -10
  544. data/test/rubygems/test_gem_security.rb +69 -68
  545. data/test/rubygems/test_gem_security_policy.rb +72 -72
  546. data/test/rubygems/test_gem_security_signer.rb +35 -34
  547. data/test/rubygems/test_gem_security_trust_dir.rb +7 -6
  548. data/test/rubygems/test_gem_silent_ui.rb +39 -32
  549. data/test/rubygems/test_gem_source.rb +45 -44
  550. data/test/rubygems/test_gem_source_fetch_problem.rb +10 -9
  551. data/test/rubygems/test_gem_source_git.rb +69 -62
  552. data/test/rubygems/test_gem_source_installed.rb +17 -16
  553. data/test/rubygems/test_gem_source_list.rb +6 -5
  554. data/test/rubygems/test_gem_source_local.rb +15 -14
  555. data/test/rubygems/test_gem_source_lock.rb +32 -31
  556. data/test/rubygems/test_gem_source_specific_file.rb +18 -17
  557. data/test/rubygems/test_gem_source_subpath_problem.rb +8 -7
  558. data/test/rubygems/test_gem_source_vendor.rb +14 -13
  559. data/test/rubygems/test_gem_spec_fetcher.rb +73 -72
  560. data/test/rubygems/test_gem_specification.rb +533 -469
  561. data/test/rubygems/test_gem_stream_ui.rb +53 -22
  562. data/test/rubygems/test_gem_stub_specification.rb +33 -32
  563. data/test/rubygems/test_gem_text.rb +2 -1
  564. data/test/rubygems/test_gem_uninstaller.rb +118 -117
  565. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +4 -3
  566. data/test/rubygems/test_gem_update_suggestion.rb +209 -0
  567. data/test/rubygems/test_gem_uri.rb +6 -4
  568. data/test/rubygems/test_gem_uri_formatter.rb +15 -14
  569. data/test/rubygems/test_gem_util.rb +24 -23
  570. data/test/rubygems/test_gem_validator.rb +8 -8
  571. data/test/rubygems/test_gem_version.rb +24 -16
  572. data/test/rubygems/test_gem_version_option.rb +16 -15
  573. data/test/rubygems/test_kernel.rb +43 -48
  574. data/test/rubygems/test_project_sanity.rb +32 -3
  575. data/test/rubygems/test_remote_fetch_error.rb +8 -7
  576. data/test/rubygems/test_require.rb +118 -103
  577. data/test/rubygems/test_rubygems.rb +10 -8
  578. data/test/rubygems/test_webauthn_listener.rb +143 -0
  579. data/test/rubygems/test_webauthn_listener_response.rb +93 -0
  580. data/test/rubygems/test_webauthn_poller.rb +124 -0
  581. data/test/rubygems/utilities.rb +98 -34
  582. data/test/rubygems/wrong_key_cert.pem +15 -15
  583. data/test/rubygems/wrong_key_cert_32.pem +15 -15
  584. data/test/test_changelog_generator.rb +1 -1
  585. metadata +99 -46
  586. data/bundler/lib/bundler/dep_proxy.rb +0 -55
  587. data/bundler/lib/bundler/templates/gems.rb +0 -5
  588. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  589. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  590. data/bundler/lib/bundler/vendor/molinillo/LICENSE +0 -9
  591. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  592. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  593. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  594. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  595. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  596. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  597. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  598. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  599. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  600. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  601. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  602. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  603. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
  604. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  605. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  606. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  607. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  608. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  609. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  610. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  611. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  612. data/bundler/lib/bundler/vendored_molinillo.rb +0 -4
  613. data/bundler/lib/bundler/version_ranges.rb +0 -122
  614. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
  615. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
@@ -1,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  #--
3
4
  # Copyright (C) 2004 Mauricio Julio Fernández Pradier
4
5
  # See LICENSE.txt for additional licensing information.
5
6
  #++
6
7
 
7
8
  require_relative "../rubygems"
8
- require_relative 'security'
9
- require_relative 'user_interaction'
9
+ require_relative "security"
10
+ require_relative "user_interaction"
10
11
 
11
12
  ##
12
13
  # Example using a Gem::Package
@@ -68,14 +69,14 @@ class Gem::Package
68
69
  class PathError < Error
69
70
  def initialize(destination, destination_dir)
70
71
  super "installing into parent path %s of %s is not allowed" %
71
- [destination, destination_dir]
72
+ [destination, destination_dir]
72
73
  end
73
74
  end
74
75
 
75
76
  class SymlinkError < Error
76
77
  def initialize(name, destination, destination_dir)
77
78
  super "installing symlink '%s' pointing to parent path %s of %s is not allowed" %
78
- [name, destination, destination_dir]
79
+ [name, destination, destination_dir]
79
80
  end
80
81
  end
81
82
 
@@ -158,7 +159,7 @@ class Gem::Package
158
159
  return super unless gem.present?
159
160
 
160
161
  return super unless gem.start
161
- return super unless gem.start.include? 'MD5SUM ='
162
+ return super unless gem.start.include? "MD5SUM ="
162
163
 
163
164
  Gem::Package::Old.new gem
164
165
  end
@@ -178,9 +179,9 @@ class Gem::Package
178
179
  tar = Gem::Package::TarReader.new io
179
180
  tar.each_entry do |entry|
180
181
  case entry.full_name
181
- when 'metadata' then
182
+ when "metadata" then
182
183
  metadata = entry.read
183
- when 'metadata.gz' then
184
+ when "metadata.gz" then
184
185
  metadata = Gem::Util.gunzip entry.read
185
186
  end
186
187
  end
@@ -193,7 +194,7 @@ class Gem::Package
193
194
  # Creates a new package that will read or write to the file +gem+.
194
195
 
195
196
  def initialize(gem, security_policy) # :notnew:
196
- require 'zlib'
197
+ require "zlib"
197
198
 
198
199
  @gem = gem
199
200
 
@@ -229,7 +230,7 @@ class Gem::Package
229
230
  end
230
231
  end
231
232
 
232
- tar.add_file_signed 'checksums.yaml.gz', 0444, @signer do |io|
233
+ tar.add_file_signed "checksums.yaml.gz", 0444, @signer do |io|
233
234
  gzip_to io do |gz_io|
234
235
  Psych.dump checksums_by_algorithm, gz_io
235
236
  end
@@ -241,7 +242,7 @@ class Gem::Package
241
242
  # and adds this file to the +tar+.
242
243
 
243
244
  def add_contents(tar) # :nodoc:
244
- digests = tar.add_file_signed 'data.tar.gz', 0444, @signer do |io|
245
+ digests = tar.add_file_signed "data.tar.gz", 0444, @signer do |io|
245
246
  gzip_to io do |gz_io|
246
247
  Gem::Package::TarWriter.new gz_io do |data_tar|
247
248
  add_files data_tar
@@ -249,7 +250,7 @@ class Gem::Package
249
250
  end
250
251
  end
251
252
 
252
- @checksums['data.tar.gz'] = digests
253
+ @checksums["data.tar.gz"] = digests
253
254
  end
254
255
 
255
256
  ##
@@ -266,7 +267,7 @@ class Gem::Package
266
267
  next unless stat.file?
267
268
 
268
269
  tar.add_file_simple file, stat.mode, stat.size do |dst_io|
269
- File.open file, 'rb' do |src_io|
270
+ File.open file, "rb" do |src_io|
270
271
  dst_io.write src_io.read 16384 until src_io.eof?
271
272
  end
272
273
  end
@@ -277,13 +278,13 @@ class Gem::Package
277
278
  # Adds the package's Gem::Specification to the +tar+ file
278
279
 
279
280
  def add_metadata(tar) # :nodoc:
280
- digests = tar.add_file_signed 'metadata.gz', 0444, @signer do |io|
281
+ digests = tar.add_file_signed "metadata.gz", 0444, @signer do |io|
281
282
  gzip_to io do |gz_io|
282
283
  gz_io.write @spec.to_yaml
283
284
  end
284
285
  end
285
286
 
286
- @checksums['metadata.gz'] = digests
287
+ @checksums["metadata.gz"] = digests
287
288
  end
288
289
 
289
290
  ##
@@ -335,7 +336,7 @@ EOM
335
336
  gem_tar = Gem::Package::TarReader.new io
336
337
 
337
338
  gem_tar.each do |entry|
338
- next unless entry.full_name == 'data.tar.gz'
339
+ next unless entry.full_name == "data.tar.gz"
339
340
 
340
341
  open_tar_gz entry do |pkg_tar|
341
342
  pkg_tar.each do |contents_entry|
@@ -387,7 +388,7 @@ EOM
387
388
  reader = Gem::Package::TarReader.new io
388
389
 
389
390
  reader.each do |entry|
390
- next unless entry.full_name == 'data.tar.gz'
391
+ next unless entry.full_name == "data.tar.gz"
391
392
 
392
393
  extract_tar_gz entry, destination_dir, pattern
393
394
 
@@ -409,18 +410,23 @@ EOM
409
410
 
410
411
  def extract_tar_gz(io, destination_dir, pattern = "*") # :nodoc:
411
412
  directories = []
413
+ symlinks = []
414
+
412
415
  open_tar_gz io do |tar|
413
416
  tar.each do |entry|
414
- next unless File.fnmatch pattern, entry.full_name, File::FNM_DOTMATCH
417
+ full_name = entry.full_name
418
+ next unless File.fnmatch pattern, full_name, File::FNM_DOTMATCH
415
419
 
416
- destination = install_location entry.full_name, destination_dir
420
+ destination = install_location full_name, destination_dir
417
421
 
418
422
  if entry.symlink?
419
423
  link_target = entry.header.linkname
420
424
  real_destination = link_target.start_with?("/") ? link_target : File.expand_path(link_target, File.dirname(destination))
421
425
 
422
- raise Gem::Package::SymlinkError.new(entry.full_name, real_destination, destination_dir) unless
423
- normalize_path(real_destination).start_with? normalize_path(destination_dir + '/')
426
+ raise Gem::Package::SymlinkError.new(full_name, real_destination, destination_dir) unless
427
+ normalize_path(real_destination).start_with? normalize_path(destination_dir + "/")
428
+
429
+ symlinks << [full_name, link_target, destination, real_destination]
424
430
  end
425
431
 
426
432
  FileUtils.rm_rf destination
@@ -439,24 +445,35 @@ EOM
439
445
  directories << mkdir
440
446
  end
441
447
 
442
- File.open destination, 'wb' do |out|
443
- out.write entry.read
448
+ if entry.file?
449
+ File.open(destination, "wb") {|out| out.write entry.read }
444
450
  FileUtils.chmod file_mode(entry.header.mode), destination
445
- end if entry.file?
446
-
447
- File.symlink(entry.header.linkname, destination) if entry.symlink?
451
+ end
448
452
 
449
453
  verbose destination
450
454
  end
451
455
  end
452
456
 
457
+ symlinks.each do |name, target, destination, real_destination|
458
+ if File.exist?(real_destination)
459
+ File.symlink(target, destination)
460
+ else
461
+ alert_warning "#{@spec.full_name} ships with a dangling symlink named #{name} pointing to missing #{target} file. Ignoring"
462
+ end
463
+ end
464
+
453
465
  if dir_mode
454
466
  File.chmod(dir_mode, *directories)
455
467
  end
456
468
  end
457
469
 
458
470
  def file_mode(mode) # :nodoc:
459
- ((mode & 0111).zero? ? data_mode : prog_mode) || mode
471
+ ((mode & 0111).zero? ? data_mode : prog_mode) ||
472
+ # If we're not using one of the default modes, then we're going to fall
473
+ # back to the mode from the tarball. In this case we need to mask it down
474
+ # to fit into 2^16 bits (the maximum value for a mode in CRuby since it
475
+ # gets put into an unsigned short).
476
+ (mode & ((1 << 16) - 1))
460
477
  end
461
478
 
462
479
  ##
@@ -481,13 +498,13 @@ EOM
481
498
 
482
499
  def install_location(filename, destination_dir) # :nodoc:
483
500
  raise Gem::Package::PathError.new(filename, destination_dir) if
484
- filename.start_with? '/'
501
+ filename.start_with? "/"
485
502
 
486
503
  destination_dir = File.realpath(destination_dir)
487
504
  destination = File.expand_path(filename, destination_dir)
488
505
 
489
506
  raise Gem::Package::PathError.new(destination, destination_dir) unless
490
- normalize_path(destination).start_with? normalize_path(destination_dir + '/')
507
+ normalize_path(destination).start_with? normalize_path(destination_dir + "/")
491
508
 
492
509
  destination.tap(&Gem::UNTAINT)
493
510
  destination
@@ -506,9 +523,9 @@ EOM
506
523
 
507
524
  def load_spec(entry) # :nodoc:
508
525
  case entry.full_name
509
- when 'metadata' then
526
+ when "metadata" then
510
527
  @spec = Gem::Specification.from_yaml entry.read
511
- when 'metadata.gz' then
528
+ when "metadata.gz" then
512
529
  Zlib::GzipReader.wrap(entry, external_encoding: Encoding::UTF_8) do |gzio|
513
530
  @spec = Gem::Specification.from_yaml gzio.read
514
531
  end
@@ -532,7 +549,7 @@ EOM
532
549
  def read_checksums(gem)
533
550
  Gem.load_yaml
534
551
 
535
- @checksums = gem.seek 'checksums.yaml.gz' do |entry|
552
+ @checksums = gem.seek "checksums.yaml.gz" do |entry|
536
553
  Zlib::GzipReader.wrap entry do |gz_io|
537
554
  Gem::SafeYAML.safe_load gz_io.read
538
555
  end
@@ -544,7 +561,7 @@ EOM
544
561
  # certificate and key are not present only checksum generation is set up.
545
562
 
546
563
  def setup_signer(signer_options: {})
547
- passphrase = ENV['GEM_PRIVATE_KEY_PASSPHRASE']
564
+ passphrase = ENV["GEM_PRIVATE_KEY_PASSPHRASE"]
548
565
  if @spec.signing_key
549
566
  @signer =
550
567
  Gem::Security::Signer.new(
@@ -600,8 +617,7 @@ EOM
600
617
 
601
618
  verify_checksums @digests, @checksums
602
619
 
603
- @security_policy.verify_signatures @spec, @digests, @signatures if
604
- @security_policy
620
+ @security_policy&.verify_signatures @spec, @digests, @signatures
605
621
 
606
622
  true
607
623
  rescue Gem::Security::Exception
@@ -651,7 +667,7 @@ EOM
651
667
  case file_name
652
668
  when "metadata", "metadata.gz" then
653
669
  load_spec entry
654
- when 'data.tar.gz' then
670
+ when "data.tar.gz" then
655
671
  verify_gz entry
656
672
  end
657
673
  rescue
@@ -668,15 +684,15 @@ EOM
668
684
  end
669
685
 
670
686
  unless @spec
671
- raise Gem::Package::FormatError.new 'package metadata is missing', @gem
687
+ raise Gem::Package::FormatError.new "package metadata is missing", @gem
672
688
  end
673
689
 
674
- unless @files.include? 'data.tar.gz'
690
+ unless @files.include? "data.tar.gz"
675
691
  raise Gem::Package::FormatError.new \
676
- 'package content (data.tar.gz) is missing', @gem
692
+ "package content (data.tar.gz) is missing", @gem
677
693
  end
678
694
 
679
- if duplicates = @files.group_by {|f| f }.select {|k,v| v.size > 1 }.map(&:first) and duplicates.any?
695
+ if (duplicates = @files.group_by {|f| f }.select {|k,v| v.size > 1 }.map(&:first)) && duplicates.any?
680
696
  raise Gem::Security::Exception, "duplicate files in the package: (#{duplicates.map(&:inspect).join(', ')})"
681
697
  end
682
698
  end
@@ -693,12 +709,12 @@ EOM
693
709
  end
694
710
  end
695
711
 
696
- require_relative 'package/digest_io'
697
- require_relative 'package/source'
698
- require_relative 'package/file_source'
699
- require_relative 'package/io_source'
700
- require_relative 'package/old'
701
- require_relative 'package/tar_header'
702
- require_relative 'package/tar_reader'
703
- require_relative 'package/tar_reader/entry'
704
- require_relative 'package/tar_writer'
712
+ require_relative "package/digest_io"
713
+ require_relative "package/source"
714
+ require_relative "package/file_source"
715
+ require_relative "package/io_source"
716
+ require_relative "package/old"
717
+ require_relative "package/tar_header"
718
+ require_relative "package/tar_reader"
719
+ require_relative "package/tar_reader/entry"
720
+ require_relative "package/tar_writer"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # Copyright (c) 2003, 2004 Jim Weirich, 2009 Eric Hodel
3
4
  #
4
5
  # Permission is hereby granted, free of charge, to any person obtaining
@@ -20,9 +21,9 @@
20
21
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
22
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
23
 
23
- require_relative '../rubygems'
24
- require_relative 'package'
25
- require 'rake/packagetask'
24
+ require_relative "../rubygems"
25
+ require_relative "package"
26
+ require "rake/packagetask"
26
27
 
27
28
  ##
28
29
  # Create a package based upon a Gem::Specification. Gem packages, as well as
@@ -113,7 +114,7 @@ class Gem::PackageTask < Rake::PackageTask
113
114
  Gem::Package.build gem_spec
114
115
 
115
116
  verbose trace do
116
- mv gem_file, '..'
117
+ mv gem_file, ".."
117
118
  end
118
119
  end
119
120
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  ##
3
4
  #
4
5
  # Gem::PathSupport facilitates the GEM_HOME and GEM_PATH environment settings
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "deprecate"
3
4
 
4
5
  ##
@@ -12,7 +13,7 @@ class Gem::Platform
12
13
  attr_accessor :cpu, :os, :version
13
14
 
14
15
  def self.local
15
- arch = RbConfig::CONFIG['arch']
16
+ arch = RbConfig::CONFIG["arch"]
16
17
  arch = "#{arch}_60" if arch =~ /mswin(?:32|64)$/
17
18
  @local ||= new(arch)
18
19
  end
@@ -22,10 +23,11 @@ class Gem::Platform
22
23
  end
23
24
 
24
25
  def self.match_platforms?(platform, platforms)
26
+ platform = Gem::Platform.new(platform) unless platform.is_a?(Gem::Platform)
25
27
  platforms.any? do |local_platform|
26
- platform.nil? or
27
- local_platform == platform or
28
- (local_platform != Gem::Platform::RUBY and local_platform =~ platform)
28
+ platform.nil? ||
29
+ local_platform == platform ||
30
+ (local_platform != Gem::Platform::RUBY && platform =~ local_platform)
29
31
  end
30
32
  end
31
33
  private_class_method :match_platforms?
@@ -56,7 +58,7 @@ class Gem::Platform
56
58
  case arch
57
59
  when Gem::Platform::CURRENT then
58
60
  Gem::Platform.local
59
- when Gem::Platform::RUBY, nil, '' then
61
+ when Gem::Platform::RUBY, nil, "" then
60
62
  Gem::Platform::RUBY
61
63
  else
62
64
  super
@@ -68,9 +70,9 @@ class Gem::Platform
68
70
  when Array then
69
71
  @cpu, @os, @version = arch
70
72
  when String then
71
- arch = arch.split '-'
73
+ arch = arch.split "-"
72
74
 
73
- if arch.length > 2 and arch.last !~ /\d/ # reassemble x86-linux-gnu
75
+ if arch.length > 2 && arch.last !~ /\d+(\.\d+)?$/ # reassemble x86-linux-{libc}
74
76
  extra = arch.pop
75
77
  arch.last << "-#{extra}"
76
78
  end
@@ -78,11 +80,11 @@ class Gem::Platform
78
80
  cpu = arch.shift
79
81
 
80
82
  @cpu = case cpu
81
- when /i\d86/ then 'x86'
83
+ when /i\d86/ then "x86"
82
84
  else cpu
83
85
  end
84
86
 
85
- if arch.length == 2 and arch.last =~ /^\d+(\.\d+)?$/ # for command-line
87
+ if arch.length == 2 && arch.last =~ /^\d+(\.\d+)?$/ # for command-line
86
88
  @os, @version = arch
87
89
  return
88
90
  end
@@ -91,31 +93,29 @@ class Gem::Platform
91
93
  @cpu, os = nil, cpu if os.nil? # legacy jruby
92
94
 
93
95
  @os, @version = case os
94
- when /aix(\d+)?/ then [ 'aix', $1 ]
95
- when /cygwin/ then [ 'cygwin', nil ]
96
- when /darwin(\d+)?/ then [ 'darwin', $1 ]
97
- when /^macruby$/ then [ 'macruby', nil ]
98
- when /freebsd(\d+)?/ then [ 'freebsd', $1 ]
99
- when /hpux(\d+)?/ then [ 'hpux', $1 ]
100
- when /^java$/, /^jruby$/ then [ 'java', nil ]
101
- when /^java([\d.]*)/ then [ 'java', $1 ]
102
- when /^dalvik(\d+)?$/ then [ 'dalvik', $1 ]
103
- when /^dotnet$/ then [ 'dotnet', nil ]
104
- when /^dotnet([\d.]*)/ then [ 'dotnet', $1 ]
105
- when /linux-?((?!gnu)\w+)?/ then [ 'linux', $1 ]
106
- when /mingw32/ then [ 'mingw32', nil ]
107
- when /mingw-?(\w+)?/ then [ 'mingw', $1 ]
96
+ when /aix(\d+)?/ then [ "aix", $1 ]
97
+ when /cygwin/ then [ "cygwin", nil ]
98
+ when /darwin(\d+)?/ then [ "darwin", $1 ]
99
+ when /^macruby$/ then [ "macruby", nil ]
100
+ when /freebsd(\d+)?/ then [ "freebsd", $1 ]
101
+ when /^java$/, /^jruby$/ then [ "java", nil ]
102
+ when /^java([\d.]*)/ then [ "java", $1 ]
103
+ when /^dalvik(\d+)?$/ then [ "dalvik", $1 ]
104
+ when /^dotnet$/ then [ "dotnet", nil ]
105
+ when /^dotnet([\d.]*)/ then [ "dotnet", $1 ]
106
+ when /linux-?(\w+)?/ then [ "linux", $1 ]
107
+ when /mingw32/ then [ "mingw32", nil ]
108
+ when /mingw-?(\w+)?/ then [ "mingw", $1 ]
108
109
  when /(mswin\d+)(\_(\d+))?/ then
109
110
  os, version = $1, $3
110
- @cpu = 'x86' if @cpu.nil? and os =~ /32$/
111
+ @cpu = "x86" if @cpu.nil? && os =~ /32$/
111
112
  [os, version]
112
- when /netbsdelf/ then [ 'netbsdelf', nil ]
113
- when /openbsd(\d+\.\d+)?/ then [ 'openbsd', $1 ]
114
- when /bitrig(\d+\.\d+)?/ then [ 'bitrig', $1 ]
115
- when /solaris(\d+\.\d+)?/ then [ 'solaris', $1 ]
113
+ when /netbsdelf/ then [ "netbsdelf", nil ]
114
+ when /openbsd(\d+\.\d+)?/ then [ "openbsd", $1 ]
115
+ when /solaris(\d+\.\d+)?/ then [ "solaris", $1 ]
116
116
  # test
117
117
  when /^(\w+_platform)(\d+)?/ then [ $1, $2 ]
118
- else [ 'unknown', nil ]
118
+ else [ "unknown", nil ]
119
119
  end
120
120
  when Gem::Platform then
121
121
  @cpu = arch.cpu
@@ -131,7 +131,7 @@ class Gem::Platform
131
131
  end
132
132
 
133
133
  def to_s
134
- to_a.compact.join '-'
134
+ to_a.compact.join "-"
135
135
  end
136
136
 
137
137
  ##
@@ -139,7 +139,7 @@ class Gem::Platform
139
139
  # the same CPU, OS and version.
140
140
 
141
141
  def ==(other)
142
- self.class === other and to_a == other.to_a
142
+ self.class === other && to_a == other.to_a
143
143
  end
144
144
 
145
145
  alias :eql? :==
@@ -151,27 +151,53 @@ class Gem::Platform
151
151
  ##
152
152
  # Does +other+ match this platform? Two platforms match if they have the
153
153
  # same CPU, or either has a CPU of 'universal', they have the same OS, and
154
- # they have the same version, or either has no version.
154
+ # they have the same version, or either one has no version
155
155
  #
156
156
  # Additionally, the platform will match if the local CPU is 'arm' and the
157
157
  # other CPU starts with "arm" (for generic ARM family support).
158
+ #
159
+ # Of note, this method is not commutative. Indeed the OS 'linux' has a
160
+ # special case: the version is the libc name, yet while "no version" stands
161
+ # as a wildcard for a binary gem platform (as for other OSes), for the
162
+ # runtime platform "no version" stands for 'gnu'. To be able to distinguish
163
+ # these, the method receiver is the gem platform, while the argument is
164
+ # the runtime platform.
165
+ #
166
+ #--
167
+ # NOTE: Until it can be removed, changes to this method must also be reflected in `bundler/lib/bundler/rubygems_ext.rb`
158
168
 
159
169
  def ===(other)
160
170
  return nil unless Gem::Platform === other
161
171
 
162
172
  # universal-mingw32 matches x64-mingw-ucrt
163
- return true if (@cpu == 'universal' or other.cpu == 'universal') and
164
- @os.start_with?('mingw') and other.os.start_with?('mingw')
173
+ return true if (@cpu == "universal" || other.cpu == "universal") &&
174
+ @os.start_with?("mingw") && other.os.start_with?("mingw")
165
175
 
166
176
  # cpu
167
- ([nil,'universal'].include?(@cpu) or [nil, 'universal'].include?(other.cpu) or @cpu == other.cpu or
168
- (@cpu == 'arm' and other.cpu.start_with?("arm"))) and
177
+ ([nil,"universal"].include?(@cpu) || [nil, "universal"].include?(other.cpu) || @cpu == other.cpu ||
178
+ (@cpu == "arm" && other.cpu.start_with?("arm"))) &&
179
+
180
+ # os
181
+ @os == other.os &&
182
+
183
+ # version
184
+ (
185
+ (@os != "linux" && (@version.nil? || other.version.nil?)) ||
186
+ (@os == "linux" && (normalized_linux_version == other.normalized_linux_version || ["musl#{@version}", "musleabi#{@version}", "musleabihf#{@version}"].include?(other.version))) ||
187
+ @version == other.version
188
+ )
189
+ end
190
+
191
+ #--
192
+ # NOTE: Until it can be removed, changes to this method must also be reflected in `bundler/lib/bundler/rubygems_ext.rb`
193
+
194
+ def normalized_linux_version
195
+ return nil unless @version
169
196
 
170
- # os
171
- @os == other.os and
197
+ without_gnu_nor_abi_modifiers = @version.sub(/\Agnu/, "").sub(/eabi(hf)?\Z/, "")
198
+ return nil if without_gnu_nor_abi_modifiers.empty?
172
199
 
173
- # version
174
- (@version.nil? or other.version.nil? or @version == other.version)
200
+ without_gnu_nor_abi_modifiers
175
201
  end
176
202
 
177
203
  ##
@@ -184,17 +210,17 @@ class Gem::Platform
184
210
  when String then
185
211
  # This data is from http://gems.rubyforge.org/gems/yaml on 19 Aug 2007
186
212
  other = case other
187
- when /^i686-darwin(\d)/ then ['x86', 'darwin', $1 ]
188
- when /^i\d86-linux/ then ['x86', 'linux', nil ]
189
- when 'java', 'jruby' then [nil, 'java', nil ]
190
- when /^dalvik(\d+)?$/ then [nil, 'dalvik', $1 ]
191
- when /dotnet(\-(\d+\.\d+))?/ then ['universal','dotnet', $2 ]
192
- when /mswin32(\_(\d+))?/ then ['x86', 'mswin32', $2 ]
193
- when /mswin64(\_(\d+))?/ then ['x64', 'mswin64', $2 ]
194
- when 'powerpc-darwin' then ['powerpc', 'darwin', nil ]
195
- when /powerpc-darwin(\d)/ then ['powerpc', 'darwin', $1 ]
196
- when /sparc-solaris2.8/ then ['sparc', 'solaris', '2.8' ]
197
- when /universal-darwin(\d)/ then ['universal', 'darwin', $1 ]
213
+ when /^i686-darwin(\d)/ then ["x86", "darwin", $1 ]
214
+ when /^i\d86-linux/ then ["x86", "linux", nil ]
215
+ when "java", "jruby" then [nil, "java", nil ]
216
+ when /^dalvik(\d+)?$/ then [nil, "dalvik", $1 ]
217
+ when /dotnet(\-(\d+\.\d+))?/ then ["universal","dotnet", $2 ]
218
+ when /mswin32(\_(\d+))?/ then ["x86", "mswin32", $2 ]
219
+ when /mswin64(\_(\d+))?/ then ["x64", "mswin64", $2 ]
220
+ when "powerpc-darwin" then ["powerpc", "darwin", nil ]
221
+ when /powerpc-darwin(\d)/ then ["powerpc", "darwin", $1 ]
222
+ when /sparc-solaris2.8/ then ["sparc", "solaris", "2.8" ]
223
+ when /universal-darwin(\d)/ then ["universal", "darwin", $1 ]
198
224
  else other
199
225
  end
200
226
 
@@ -210,11 +236,11 @@ class Gem::Platform
210
236
  # A pure-Ruby gem that may use Gem::Specification#extensions to build
211
237
  # binary files.
212
238
 
213
- RUBY = 'ruby'.freeze
239
+ RUBY = "ruby"
214
240
 
215
241
  ##
216
242
  # A platform-specific gem that is built for the packaging Ruby's platform.
217
243
  # This will be replaced with Gem::Platform::local.
218
244
 
219
- CURRENT = 'current'.freeze
245
+ CURRENT = "current"
220
246
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Gem
3
4
  if defined? ::Psych::Visitors
4
5
  class NoAliasYAMLTree < Psych::Visitors::YAMLTree
@@ -7,7 +8,7 @@ module Gem
7
8
  end unless respond_to? :create
8
9
 
9
10
  def visit_String(str)
10
- return super unless str == '=' # or whatever you want
11
+ return super unless str == "=" # or whatever you want
11
12
 
12
13
  quote = Psych::Nodes::Scalar::SINGLE_QUOTED
13
14
  @emitter.scalar str, nil, nil, false, true, quote