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,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  #
3
4
  #--
4
5
  # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
@@ -6,12 +7,11 @@
6
7
  # See LICENSE.txt for permissions.
7
8
  #++
8
9
 
9
- require_relative 'deprecate'
10
- require_relative 'basic_specification'
11
- require_relative 'stub_specification'
12
- require_relative 'platform'
13
- require_relative 'requirement'
14
- require_relative 'util/list'
10
+ require_relative "deprecate"
11
+ require_relative "basic_specification"
12
+ require_relative "stub_specification"
13
+ require_relative "platform"
14
+ require_relative "util/list"
15
15
 
16
16
  ##
17
17
  # The Specification class contains the information for a gem. Typically
@@ -75,29 +75,29 @@ class Gem::Specification < Gem::BasicSpecification
75
75
  # key should be equal to the CURRENT_SPECIFICATION_VERSION.
76
76
 
77
77
  SPECIFICATION_VERSION_HISTORY = { # :nodoc:
78
- -1 => ['(RubyGems versions up to and including 0.7 did not have versioned specifications)'],
79
- 1 => [
78
+ -1 => ["(RubyGems versions up to and including 0.7 did not have versioned specifications)"],
79
+ 1 => [
80
80
  'Deprecated "test_suite_file" in favor of the new, but equivalent, "test_files"',
81
81
  '"test_file=x" is a shortcut for "test_files=[x]"',
82
82
  ],
83
83
  2 => [
84
84
  'Added "required_rubygems_version"',
85
- 'Now forward-compatible with future versions',
85
+ "Now forward-compatible with future versions",
86
86
  ],
87
87
  3 => [
88
- 'Added Fixnum validation to the specification_version',
88
+ "Added Fixnum validation to the specification_version",
89
89
  ],
90
90
  4 => [
91
- 'Added sandboxed freeform metadata to the specification version.',
91
+ "Added sandboxed freeform metadata to the specification version.",
92
92
  ],
93
93
  }.freeze
94
94
 
95
95
  MARSHAL_FIELDS = { # :nodoc:
96
96
  -1 => 16,
97
- 1 => 16,
98
- 2 => 16,
99
- 3 => 17,
100
- 4 => 18,
97
+ 1 => 16,
98
+ 2 => 16,
99
+ 3 => 17,
100
+ 4 => 18,
101
101
  }.freeze
102
102
 
103
103
  today = Time.now.utc
@@ -125,35 +125,35 @@ class Gem::Specification < Gem::BasicSpecification
125
125
  # Map of attribute names to default values.
126
126
 
127
127
  @@default_value = {
128
- :authors => [],
129
- :autorequire => nil,
130
- :bindir => 'bin',
131
- :cert_chain => [],
132
- :date => nil,
133
- :dependencies => [],
134
- :description => nil,
135
- :email => nil,
136
- :executables => [],
137
- :extensions => [],
138
- :extra_rdoc_files => [],
139
- :files => [],
140
- :homepage => nil,
141
- :licenses => [],
142
- :metadata => {},
143
- :name => nil,
144
- :platform => Gem::Platform::RUBY,
145
- :post_install_message => nil,
146
- :rdoc_options => [],
147
- :require_paths => ['lib'],
148
- :required_ruby_version => Gem::Requirement.default,
128
+ :authors => [],
129
+ :autorequire => nil,
130
+ :bindir => "bin",
131
+ :cert_chain => [],
132
+ :date => nil,
133
+ :dependencies => [],
134
+ :description => nil,
135
+ :email => nil,
136
+ :executables => [],
137
+ :extensions => [],
138
+ :extra_rdoc_files => [],
139
+ :files => [],
140
+ :homepage => nil,
141
+ :licenses => [],
142
+ :metadata => {},
143
+ :name => nil,
144
+ :platform => Gem::Platform::RUBY,
145
+ :post_install_message => nil,
146
+ :rdoc_options => [],
147
+ :require_paths => ["lib"],
148
+ :required_ruby_version => Gem::Requirement.default,
149
149
  :required_rubygems_version => Gem::Requirement.default,
150
- :requirements => [],
151
- :rubygems_version => Gem::VERSION,
152
- :signing_key => nil,
153
- :specification_version => CURRENT_SPECIFICATION_VERSION,
154
- :summary => nil,
155
- :test_files => [],
156
- :version => nil,
150
+ :requirements => [],
151
+ :rubygems_version => Gem::VERSION,
152
+ :signing_key => nil,
153
+ :specification_version => CURRENT_SPECIFICATION_VERSION,
154
+ :summary => nil,
155
+ :test_files => [],
156
+ :version => nil,
157
157
  }.freeze
158
158
 
159
159
  # rubocop:disable Style/MutableConstant
@@ -339,7 +339,7 @@ class Gem::Specification < Gem::BasicSpecification
339
339
  # The simplest way is to specify the standard SPDX ID
340
340
  # https://spdx.org/licenses/ for the license.
341
341
  # Ideally, you should pick one that is OSI (Open Source Initiative)
342
- # http://opensource.org/licenses/alphabetical approved.
342
+ # https://opensource.org/licenses/ approved.
343
343
  #
344
344
  # The most commonly used OSI-approved licenses are MIT and Apache-2.0.
345
345
  # GitHub also provides a license picker at http://choosealicense.com/.
@@ -474,7 +474,7 @@ class Gem::Specification < Gem::BasicSpecification
474
474
  # spec.platform = Gem::Platform.local
475
475
 
476
476
  def platform=(platform)
477
- if @original_platform.nil? or
477
+ if @original_platform.nil? ||
478
478
  @original_platform == Gem::Platform::RUBY
479
479
  @original_platform = platform
480
480
  end
@@ -490,12 +490,12 @@ class Gem::Specification < Gem::BasicSpecification
490
490
  # legacy constants
491
491
  when nil, Gem::Platform::RUBY then
492
492
  @new_platform = Gem::Platform::RUBY
493
- when 'mswin32' then # was Gem::Platform::WIN32
494
- @new_platform = Gem::Platform.new 'x86-mswin32'
495
- when 'i586-linux' then # was Gem::Platform::LINUX_586
496
- @new_platform = Gem::Platform.new 'x86-linux'
497
- when 'powerpc-darwin' then # was Gem::Platform::DARWIN
498
- @new_platform = Gem::Platform.new 'ppc-darwin'
493
+ when "mswin32" then # was Gem::Platform::WIN32
494
+ @new_platform = Gem::Platform.new "x86-mswin32"
495
+ when "i586-linux" then # was Gem::Platform::LINUX_586
496
+ @new_platform = Gem::Platform.new "x86-linux"
497
+ when "powerpc-darwin" then # was Gem::Platform::DARWIN
498
+ @new_platform = Gem::Platform.new "ppc-darwin"
499
499
  else
500
500
  @new_platform = Gem::Platform.new platform
501
501
  end
@@ -1022,6 +1022,12 @@ class Gem::Specification < Gem::BasicSpecification
1022
1022
  Gem::Dependency.new(name, *requirements).to_spec
1023
1023
  end
1024
1024
 
1025
+ ##
1026
+ # Find the best specification matching a +full_name+.
1027
+ def self.find_by_full_name(full_name)
1028
+ stubs.find {|s| s.full_name == full_name }&.to_spec
1029
+ end
1030
+
1025
1031
  ##
1026
1032
  # Return the best specification that contains the file matching +path+.
1027
1033
 
@@ -1042,12 +1048,12 @@ class Gem::Specification < Gem::BasicSpecification
1042
1048
  next if s.activated?
1043
1049
  s.contains_requirable_file? path
1044
1050
  end
1045
- stub && stub.to_spec
1051
+ stub&.to_spec
1046
1052
  end
1047
1053
 
1048
1054
  def self.find_active_stub_by_path(path)
1049
1055
  stub = @@active_stub_with_requirable_file[path] ||= (stubs.find do |s|
1050
- s.activated? and s.contains_requirable_file? path
1056
+ s.activated? && s.contains_requirable_file?(path)
1051
1057
  end || NOT_FOUND)
1052
1058
  stub.this
1053
1059
  end
@@ -1150,7 +1156,7 @@ class Gem::Specification < Gem::BasicSpecification
1150
1156
  file = file.dup.tap(&Gem::UNTAINT)
1151
1157
  return unless File.file?(file)
1152
1158
 
1153
- code = Gem.open_file(file, 'r:UTF-8:-', &:read)
1159
+ code = Gem.open_file(file, "r:UTF-8:-", &:read)
1154
1160
 
1155
1161
  code.tap(&Gem::UNTAINT)
1156
1162
 
@@ -1235,7 +1241,7 @@ class Gem::Specification < Gem::BasicSpecification
1235
1241
  latest_remote = remotes.sort.last
1236
1242
 
1237
1243
  yield [local_spec, latest_remote] if
1238
- latest_remote and local_spec.version < latest_remote
1244
+ latest_remote && local_spec.version < latest_remote
1239
1245
  end
1240
1246
 
1241
1247
  nil
@@ -1266,8 +1272,7 @@ class Gem::Specification < Gem::BasicSpecification
1266
1272
  clear_load_cache
1267
1273
  unresolved = unresolved_deps
1268
1274
  unless unresolved.empty?
1269
- w = "W" + "ARN"
1270
- warn "#{w}: Unresolved or ambiguous specs during Gem::Specification.reset:"
1275
+ warn "WARN: Unresolved or ambiguous specs during Gem::Specification.reset:"
1271
1276
  unresolved.values.each do |dep|
1272
1277
  warn " #{dep}"
1273
1278
 
@@ -1277,7 +1282,7 @@ class Gem::Specification < Gem::BasicSpecification
1277
1282
  versions.each {|s| warn " - #{s.version}" }
1278
1283
  end
1279
1284
  end
1280
- warn "#{w}: Clearing out unresolved specs. Try 'gem cleanup <gem>'"
1285
+ warn "WARN: Clearing out unresolved specs. Try 'gem cleanup <gem>'"
1281
1286
  warn "Please report a bug if this causes problems."
1282
1287
  unresolved.clear
1283
1288
  end
@@ -1295,6 +1300,8 @@ class Gem::Specification < Gem::BasicSpecification
1295
1300
  def self._load(str)
1296
1301
  Gem.load_yaml
1297
1302
 
1303
+ yaml_set = false
1304
+
1298
1305
  array = begin
1299
1306
  Marshal.load str
1300
1307
  rescue ArgumentError => e
@@ -1307,7 +1314,10 @@ class Gem::Specification < Gem::BasicSpecification
1307
1314
  message = e.message
1308
1315
  raise unless message.include?("YAML::")
1309
1316
 
1310
- Object.const_set "YAML", Psych unless Object.const_defined?(:YAML)
1317
+ unless Object.const_defined?(:YAML)
1318
+ Object.const_set "YAML", Psych
1319
+ yaml_set = true
1320
+ end
1311
1321
 
1312
1322
  if message.include?("YAML::Syck::")
1313
1323
  YAML.const_set "Syck", YAML unless YAML.const_defined?(:Syck)
@@ -1318,6 +1328,8 @@ class Gem::Specification < Gem::BasicSpecification
1318
1328
  end
1319
1329
 
1320
1330
  retry
1331
+ ensure
1332
+ Object.__send__(:remove_const, "YAML") if yaml_set
1321
1333
  end
1322
1334
 
1323
1335
  spec = Gem::Specification.new
@@ -1392,7 +1404,7 @@ class Gem::Specification < Gem::BasicSpecification
1392
1404
  @required_rubygems_version,
1393
1405
  @original_platform,
1394
1406
  @dependencies,
1395
- '', # rubyforge_project
1407
+ "", # rubyforge_project
1396
1408
  @email,
1397
1409
  @authors,
1398
1410
  @description,
@@ -1558,7 +1570,7 @@ class Gem::Specification < Gem::BasicSpecification
1558
1570
  # Singular reader for #authors. Returns the first author in the list
1559
1571
 
1560
1572
  def author
1561
- val = authors and val.first
1573
+ (val = authors) && val.first
1562
1574
  end
1563
1575
 
1564
1576
  ##
@@ -1608,9 +1620,11 @@ class Gem::Specification < Gem::BasicSpecification
1608
1620
  def build_extensions # :nodoc:
1609
1621
  return if extensions.empty?
1610
1622
  return if default_gem?
1623
+ # we need to fresh build when same name and version of default gems
1624
+ return if self.class.find_by_full_name(full_name)&.default_gem?
1611
1625
  return if File.exist? gem_build_complete_path
1612
1626
  return if !File.writable?(base_dir)
1613
- return if !File.exist?(File.join(base_dir, 'extensions'))
1627
+ return if !File.exist?(File.join(base_dir, "extensions"))
1614
1628
 
1615
1629
  begin
1616
1630
  # We need to require things in $LOAD_PATH without looking for the
@@ -1618,9 +1632,9 @@ class Gem::Specification < Gem::BasicSpecification
1618
1632
  unresolved_deps = Gem::Specification.unresolved_deps.dup
1619
1633
  Gem::Specification.unresolved_deps.clear
1620
1634
 
1621
- require_relative 'config_file'
1622
- require_relative 'ext'
1623
- require_relative 'user_interaction'
1635
+ require_relative "config_file"
1636
+ require_relative "ext"
1637
+ require_relative "user_interaction"
1624
1638
 
1625
1639
  ui = Gem::SilentUI.new
1626
1640
  Gem::DefaultUserInteraction.use_ui ui do
@@ -1628,7 +1642,7 @@ class Gem::Specification < Gem::BasicSpecification
1628
1642
  builder.build_extensions
1629
1643
  end
1630
1644
  ensure
1631
- ui.close if ui
1645
+ ui&.close
1632
1646
  Gem::Specification.unresolved_deps.replace unresolved_deps
1633
1647
  end
1634
1648
  end
@@ -1670,7 +1684,7 @@ class Gem::Specification < Gem::BasicSpecification
1670
1684
  conflicts = {}
1671
1685
  self.runtime_dependencies.each do |dep|
1672
1686
  spec = Gem.loaded_specs[dep.name]
1673
- if spec and not spec.satisfies_requirement? dep
1687
+ if spec && !spec.satisfies_requirement?(dep)
1674
1688
  (conflicts[spec] ||= []) << dep
1675
1689
  end
1676
1690
  end
@@ -1697,7 +1711,7 @@ class Gem::Specification < Gem::BasicSpecification
1697
1711
  self.dependencies.any? do |dep|
1698
1712
  if dep.runtime?
1699
1713
  spec = Gem.loaded_specs[dep.name]
1700
- spec and not spec.satisfies_requirement? dep
1714
+ spec && !spec.satisfies_requirement?(dep)
1701
1715
  else
1702
1716
  false
1703
1717
  end
@@ -1718,7 +1732,7 @@ class Gem::Specification < Gem::BasicSpecification
1718
1732
 
1719
1733
  DateLike = Object.new # :nodoc:
1720
1734
  def DateLike.===(obj) # :nodoc:
1721
- defined?(::Date) and Date === obj
1735
+ defined?(::Date) && Date === obj
1722
1736
  end
1723
1737
 
1724
1738
  DateTimeFormat = # :nodoc:
@@ -1758,9 +1772,9 @@ class Gem::Specification < Gem::BasicSpecification
1758
1772
  # executable now. See Gem.bin_path.
1759
1773
 
1760
1774
  def default_executable # :nodoc:
1761
- if defined?(@default_executable) and @default_executable
1775
+ if defined?(@default_executable) && @default_executable
1762
1776
  result = @default_executable
1763
- elsif @executables and @executables.size == 1
1777
+ elsif @executables && @executables.size == 1
1764
1778
  result = Array(@executables).first
1765
1779
  else
1766
1780
  result = nil
@@ -1839,7 +1853,7 @@ class Gem::Specification < Gem::BasicSpecification
1839
1853
  # spec.doc_dir 'ri' # => "/path/to/gem_repo/doc/a-1/ri"
1840
1854
 
1841
1855
  def doc_dir(type = nil)
1842
- @doc_dir ||= File.join base_dir, 'doc', full_name
1856
+ @doc_dir ||= File.join base_dir, "doc", full_name
1843
1857
 
1844
1858
  if type
1845
1859
  File.join @doc_dir, type
@@ -1851,17 +1865,17 @@ class Gem::Specification < Gem::BasicSpecification
1851
1865
  def encode_with(coder) # :nodoc:
1852
1866
  mark_version
1853
1867
 
1854
- coder.add 'name', @name
1855
- coder.add 'version', @version
1868
+ coder.add "name", @name
1869
+ coder.add "version", @version
1856
1870
  platform = case @original_platform
1857
- when nil, '' then
1858
- 'ruby'
1871
+ when nil, "" then
1872
+ "ruby"
1859
1873
  when String then
1860
1874
  @original_platform
1861
1875
  else
1862
1876
  @original_platform.to_s
1863
1877
  end
1864
- coder.add 'platform', platform
1878
+ coder.add "platform", platform
1865
1879
 
1866
1880
  attributes = @@attributes.map(&:to_s) - %w[name version platform]
1867
1881
  attributes.each do |name|
@@ -1877,7 +1891,7 @@ class Gem::Specification < Gem::BasicSpecification
1877
1891
  # Singular accessor for #executables
1878
1892
 
1879
1893
  def executable
1880
- val = executables and val.first
1894
+ (val = executables) && val.first
1881
1895
  end
1882
1896
 
1883
1897
  ##
@@ -1989,7 +2003,7 @@ class Gem::Specification < Gem::BasicSpecification
1989
2003
  # True if this gem has files in test_files
1990
2004
 
1991
2005
  def has_unit_tests? # :nodoc:
1992
- not test_files.empty?
2006
+ !test_files.empty?
1993
2007
  end
1994
2008
 
1995
2009
  # :stopdoc:
@@ -2042,7 +2056,7 @@ class Gem::Specification < Gem::BasicSpecification
2042
2056
  self.name = name if name
2043
2057
  self.version = version if version
2044
2058
 
2045
- if platform = Gem.platforms.last and platform != Gem::Platform::RUBY and platform != Gem::Platform.local
2059
+ if (platform = Gem.platforms.last) && platform != Gem::Platform::RUBY && platform != Gem::Platform.local
2046
2060
  self.platform = platform
2047
2061
  end
2048
2062
 
@@ -2157,8 +2171,8 @@ class Gem::Specification < Gem::BasicSpecification
2157
2171
  return
2158
2172
  end
2159
2173
 
2160
- if @specification_version > CURRENT_SPECIFICATION_VERSION and
2161
- sym.to_s.end_with?("=")
2174
+ if @specification_version > CURRENT_SPECIFICATION_VERSION &&
2175
+ sym.to_s.end_with?("=")
2162
2176
  warn "ignoring #{sym} loading #{full_name}" if $DEBUG
2163
2177
  else
2164
2178
  super
@@ -2184,7 +2198,7 @@ class Gem::Specification < Gem::BasicSpecification
2184
2198
  # file list.
2185
2199
 
2186
2200
  def normalize
2187
- if defined?(@extra_rdoc_files) and @extra_rdoc_files
2201
+ if defined?(@extra_rdoc_files) && @extra_rdoc_files
2188
2202
  @extra_rdoc_files.uniq!
2189
2203
  @files ||= []
2190
2204
  @files.concat(@extra_rdoc_files)
@@ -2209,7 +2223,7 @@ class Gem::Specification < Gem::BasicSpecification
2209
2223
  # platform. For use with legacy gems.
2210
2224
 
2211
2225
  def original_name # :nodoc:
2212
- if platform == Gem::Platform::RUBY or platform.nil?
2226
+ if platform == Gem::Platform::RUBY || platform.nil?
2213
2227
  "#{@name}-#{@version}"
2214
2228
  else
2215
2229
  "#{@name}-#{@version}-#{@original_platform}"
@@ -2227,11 +2241,11 @@ class Gem::Specification < Gem::BasicSpecification
2227
2241
  # The platform this gem runs on. See Gem::Platform for details.
2228
2242
 
2229
2243
  def platform
2230
- @new_platform ||= Gem::Platform::RUBY
2244
+ @new_platform ||= Gem::Platform::RUBY # rubocop:disable Naming/MemoizedInstanceVariableName
2231
2245
  end
2232
2246
 
2233
2247
  def pretty_print(q) # :nodoc:
2234
- q.group 2, 'Gem::Specification.new do |s|', 'end' do
2248
+ q.group 2, "Gem::Specification.new do |s|", "end" do
2235
2249
  q.breakable
2236
2250
 
2237
2251
  attributes = @@attributes - [:name, :version]
@@ -2242,8 +2256,8 @@ class Gem::Specification < Gem::BasicSpecification
2242
2256
  attributes.each do |attr_name|
2243
2257
  current_value = self.send attr_name
2244
2258
  current_value = current_value.sort if %i[files test_files].include? attr_name
2245
- if current_value != default_value(attr_name) or
2246
- self.class.required_attribute? attr_name
2259
+ if current_value != default_value(attr_name) ||
2260
+ self.class.required_attribute?(attr_name)
2247
2261
 
2248
2262
  q.text "s.#{attr_name} = "
2249
2263
 
@@ -2301,7 +2315,7 @@ class Gem::Specification < Gem::BasicSpecification
2301
2315
  # Singular accessor for #require_paths
2302
2316
 
2303
2317
  def require_path
2304
- val = require_paths and val.first
2318
+ (val = require_paths) && val.first
2305
2319
  end
2306
2320
 
2307
2321
  ##
@@ -2326,7 +2340,7 @@ class Gem::Specification < Gem::BasicSpecification
2326
2340
  # Returns the full path to this spec's ri directory.
2327
2341
 
2328
2342
  def ri_dir
2329
- @ri_dir ||= File.join base_dir, 'ri', full_name
2343
+ @ri_dir ||= File.join base_dir, "ri", full_name
2330
2344
  end
2331
2345
 
2332
2346
  ##
@@ -2336,13 +2350,13 @@ class Gem::Specification < Gem::BasicSpecification
2336
2350
  def ruby_code(obj)
2337
2351
  case obj
2338
2352
  when String then obj.dump + ".freeze"
2339
- when Array then '[' + obj.map {|x| ruby_code x }.join(", ") + ']'
2353
+ when Array then "[" + obj.map {|x| ruby_code x }.join(", ") + "]"
2340
2354
  when Hash then
2341
2355
  seg = obj.keys.sort.map {|k| "#{k.to_s.dump} => #{obj[k].to_s.dump}" }
2342
2356
  "{ #{seg.join(', ')} }"
2343
2357
  when Gem::Version then obj.to_s.dump
2344
- when DateLike then obj.strftime('%Y-%m-%d').dump
2345
- when Time then obj.strftime('%Y-%m-%d').dump
2358
+ when DateLike then obj.strftime("%Y-%m-%d").dump
2359
+ when Time then obj.strftime("%Y-%m-%d").dump
2346
2360
  when Numeric then obj.inspect
2347
2361
  when true, false, nil then obj.inspect
2348
2362
  when Gem::Platform then "Gem::Platform.new(#{obj.to_a.inspect})"
@@ -2376,7 +2390,7 @@ class Gem::Specification < Gem::BasicSpecification
2376
2390
 
2377
2391
  def satisfies_requirement?(dependency)
2378
2392
  return @name == dependency.name &&
2379
- dependency.requirement.satisfied_by?(@version)
2393
+ dependency.requirement.satisfied_by?(@version)
2380
2394
  end
2381
2395
 
2382
2396
  ##
@@ -2430,7 +2444,7 @@ class Gem::Specification < Gem::BasicSpecification
2430
2444
  # Singular accessor for #test_files
2431
2445
 
2432
2446
  def test_file # :nodoc:
2433
- val = test_files and val.first
2447
+ (val = test_files) && val.first
2434
2448
  end
2435
2449
 
2436
2450
  ##
@@ -2452,7 +2466,7 @@ class Gem::Specification < Gem::BasicSpecification
2452
2466
  @test_files = [@test_suite_file].flatten
2453
2467
  @test_suite_file = nil
2454
2468
  end
2455
- if defined?(@test_files) and @test_files
2469
+ if defined?(@test_files) && @test_files
2456
2470
  @test_files
2457
2471
  else
2458
2472
  @test_files = []
@@ -2476,13 +2490,13 @@ class Gem::Specification < Gem::BasicSpecification
2476
2490
 
2477
2491
  result << " s.name = #{ruby_code name}"
2478
2492
  result << " s.version = #{ruby_code version}"
2479
- unless platform.nil? or platform == Gem::Platform::RUBY
2493
+ unless platform.nil? || platform == Gem::Platform::RUBY
2480
2494
  result << " s.platform = #{ruby_code original_platform}"
2481
2495
  end
2482
2496
  result << ""
2483
2497
  result << " s.required_rubygems_version = #{ruby_code required_rubygems_version} if s.respond_to? :required_rubygems_version="
2484
2498
 
2485
- if metadata and !metadata.empty?
2499
+ if metadata && !metadata.empty?
2486
2500
  result << " s.metadata = #{ruby_code metadata} if s.respond_to? :metadata="
2487
2501
  end
2488
2502
  result << " s.require_paths = #{ruby_code raw_require_paths}"
@@ -2520,25 +2534,14 @@ class Gem::Specification < Gem::BasicSpecification
2520
2534
 
2521
2535
  unless dependencies.empty?
2522
2536
  result << nil
2523
- result << " if s.respond_to? :specification_version then"
2524
- result << " s.specification_version = #{specification_version}"
2525
- result << " end"
2537
+ result << " s.specification_version = #{specification_version}"
2526
2538
  result << nil
2527
2539
 
2528
- result << " if s.respond_to? :add_runtime_dependency then"
2529
-
2530
2540
  dependencies.each do |dep|
2531
2541
  req = dep.requirements_list.inspect
2532
2542
  dep.instance_variable_set :@type, :runtime if dep.type.nil? # HACK
2533
- result << " s.add_#{dep.type}_dependency(%q<#{dep.name}>.freeze, #{req})"
2534
- end
2535
-
2536
- result << " else"
2537
- dependencies.each do |dep|
2538
- version_reqs_param = dep.requirements_list.inspect
2539
- result << " s.add_dependency(%q<#{dep.name}>.freeze, #{version_reqs_param})"
2543
+ result << " s.add_#{dep.type}_dependency(%q<#{dep.name}>.freeze, #{req})"
2540
2544
  end
2541
- result << " end"
2542
2545
  end
2543
2546
 
2544
2547
  result << "end"
@@ -2575,14 +2578,14 @@ class Gem::Specification < Gem::BasicSpecification
2575
2578
  # back, we have to check again here to make sure that our
2576
2579
  # psych code was properly loaded, and load it if not.
2577
2580
  unless Gem.const_defined?(:NoAliasYAMLTree)
2578
- require_relative 'psych_tree'
2581
+ require_relative "psych_tree"
2579
2582
  end
2580
2583
 
2581
2584
  builder = Gem::NoAliasYAMLTree.create
2582
2585
  builder << self
2583
2586
  ast = builder.tree
2584
2587
 
2585
- require 'stringio'
2588
+ require "stringio"
2586
2589
  io = StringIO.new
2587
2590
  io.set_encoding Encoding::UTF_8
2588
2591
 
@@ -2666,10 +2669,12 @@ class Gem::Specification < Gem::BasicSpecification
2666
2669
 
2667
2670
  def version=(version)
2668
2671
  @version = Gem::Version.create(version)
2672
+ return if @version.nil?
2673
+
2669
2674
  # skip to set required_ruby_version when pre-released rubygems.
2670
2675
  # It caused to raise CircularDependencyError
2671
2676
  if @version.prerelease? && (@name.nil? || @name.strip != "rubygems")
2672
- self.required_rubygems_version = '> 1.3.1'
2677
+ self.required_rubygems_version = "> 1.3.1"
2673
2678
  end
2674
2679
  invalidate_memoized_attributes
2675
2680
 
@@ -2715,6 +2720,8 @@ class Gem::Specification < Gem::BasicSpecification
2715
2720
  end
2716
2721
 
2717
2722
  @installed_by_version ||= nil
2723
+
2724
+ nil
2718
2725
  end
2719
2726
 
2720
2727
  def flatten_require_paths # :nodoc: