rubygems-update 3.4.22 → 3.5.1

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 (540) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +105 -2
  3. data/Manifest.txt +46 -221
  4. data/README.md +1 -3
  5. data/bundler/CHANGELOG.md +63 -0
  6. data/bundler/bundler.gemspec +4 -2
  7. data/bundler/exe/bundle +1 -10
  8. data/bundler/lib/bundler/build_metadata.rb +3 -3
  9. data/bundler/lib/bundler/capistrano.rb +1 -1
  10. data/bundler/lib/bundler/checksum.rb +254 -0
  11. data/bundler/lib/bundler/ci_detector.rb +75 -0
  12. data/bundler/lib/bundler/cli/add.rb +3 -3
  13. data/bundler/lib/bundler/cli/binstubs.rb +4 -4
  14. data/bundler/lib/bundler/cli/cache.rb +1 -1
  15. data/bundler/lib/bundler/cli/check.rb +1 -1
  16. data/bundler/lib/bundler/cli/common.rb +9 -1
  17. data/bundler/lib/bundler/cli/config.rb +8 -7
  18. data/bundler/lib/bundler/cli/console.rb +3 -2
  19. data/bundler/lib/bundler/cli/doctor.rb +2 -2
  20. data/bundler/lib/bundler/cli/exec.rb +1 -1
  21. data/bundler/lib/bundler/cli/gem.rb +28 -23
  22. data/bundler/lib/bundler/cli/info.rb +2 -13
  23. data/bundler/lib/bundler/cli/install.rb +5 -4
  24. data/bundler/lib/bundler/cli/issue.rb +1 -1
  25. data/bundler/lib/bundler/cli/lock.rb +4 -4
  26. data/bundler/lib/bundler/cli/open.rb +1 -1
  27. data/bundler/lib/bundler/cli/outdated.rb +6 -6
  28. data/bundler/lib/bundler/cli/plugin.rb +7 -14
  29. data/bundler/lib/bundler/cli/pristine.rb +38 -30
  30. data/bundler/lib/bundler/cli/show.rb +2 -2
  31. data/bundler/lib/bundler/cli/update.rb +5 -5
  32. data/bundler/lib/bundler/cli.rb +215 -263
  33. data/bundler/lib/bundler/compact_index_client/cache.rb +29 -9
  34. data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
  35. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  36. data/bundler/lib/bundler/compact_index_client/updater.rb +79 -81
  37. data/bundler/lib/bundler/compact_index_client.rb +14 -7
  38. data/bundler/lib/bundler/constants.rb +1 -1
  39. data/bundler/lib/bundler/current_ruby.rb +5 -21
  40. data/bundler/lib/bundler/definition.rb +42 -15
  41. data/bundler/lib/bundler/dependency.rb +16 -12
  42. data/bundler/lib/bundler/digest.rb +2 -2
  43. data/bundler/lib/bundler/dsl.rb +46 -30
  44. data/bundler/lib/bundler/endpoint_specification.rb +5 -1
  45. data/bundler/lib/bundler/env.rb +1 -3
  46. data/bundler/lib/bundler/errors.rb +43 -0
  47. data/bundler/lib/bundler/fetcher/base.rb +3 -1
  48. data/bundler/lib/bundler/fetcher/compact_index.rb +4 -4
  49. data/bundler/lib/bundler/fetcher/downloader.rb +13 -11
  50. data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  51. data/bundler/lib/bundler/fetcher/index.rb +1 -1
  52. data/bundler/lib/bundler/fetcher.rb +28 -25
  53. data/bundler/lib/bundler/friendly_errors.rb +5 -5
  54. data/bundler/lib/bundler/gem_helper.rb +1 -1
  55. data/bundler/lib/bundler/gem_helpers.rb +5 -2
  56. data/bundler/lib/bundler/graph.rb +9 -9
  57. data/bundler/lib/bundler/index.rb +1 -2
  58. data/bundler/lib/bundler/injector.rb +1 -1
  59. data/bundler/lib/bundler/inline.rb +3 -3
  60. data/bundler/lib/bundler/installer/gem_installer.rb +5 -5
  61. data/bundler/lib/bundler/installer/parallel_installer.rb +16 -8
  62. data/bundler/lib/bundler/installer/standalone.rb +2 -3
  63. data/bundler/lib/bundler/installer.rb +9 -9
  64. data/bundler/lib/bundler/lazy_specification.rb +24 -17
  65. data/bundler/lib/bundler/lockfile_generator.rb +9 -0
  66. data/bundler/lib/bundler/lockfile_parser.rb +81 -10
  67. data/bundler/lib/bundler/man/bundle-add.1 +3 -26
  68. data/bundler/lib/bundler/man/bundle-binstubs.1 +4 -16
  69. data/bundler/lib/bundler/man/bundle-cache.1 +3 -24
  70. data/bundler/lib/bundler/man/bundle-check.1 +3 -12
  71. data/bundler/lib/bundler/man/bundle-clean.1 +3 -10
  72. data/bundler/lib/bundler/man/bundle-config.1 +20 -211
  73. data/bundler/lib/bundler/man/bundle-config.1.ronn +6 -0
  74. data/bundler/lib/bundler/man/bundle-console.1 +4 -22
  75. data/bundler/lib/bundler/man/bundle-doctor.1 +4 -18
  76. data/bundler/lib/bundler/man/bundle-exec.1 +12 -73
  77. data/bundler/lib/bundler/man/bundle-gem.1 +13 -49
  78. data/bundler/lib/bundler/man/bundle-help.1 +3 -7
  79. data/bundler/lib/bundler/man/bundle-info.1 +3 -9
  80. data/bundler/lib/bundler/man/bundle-init.1 +3 -12
  81. data/bundler/lib/bundler/man/bundle-inject.1 +6 -19
  82. data/bundler/lib/bundler/man/bundle-install.1 +27 -125
  83. data/bundler/lib/bundler/man/bundle-install.1.ronn +1 -0
  84. data/bundler/lib/bundler/man/bundle-list.1 +4 -19
  85. data/bundler/lib/bundler/man/bundle-lock.1 +5 -29
  86. data/bundler/lib/bundler/man/bundle-open.1 +7 -27
  87. data/bundler/lib/bundler/man/bundle-outdated.1 +3 -55
  88. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +1 -0
  89. data/bundler/lib/bundler/man/bundle-platform.1 +5 -27
  90. data/bundler/lib/bundler/man/bundle-plugin.1 +3 -29
  91. data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
  92. data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
  93. data/bundler/lib/bundler/man/bundle-show.1 +3 -10
  94. data/bundler/lib/bundler/man/bundle-update.1 +18 -137
  95. data/bundler/lib/bundler/man/bundle-version.1 +3 -16
  96. data/bundler/lib/bundler/man/bundle-viz.1 +4 -16
  97. data/bundler/lib/bundler/man/bundle.1 +5 -44
  98. data/bundler/lib/bundler/man/gemfile.5 +24 -301
  99. data/bundler/lib/bundler/man/gemfile.5.ronn +4 -0
  100. data/bundler/lib/bundler/match_metadata.rb +4 -0
  101. data/bundler/lib/bundler/match_platform.rb +1 -1
  102. data/bundler/lib/bundler/plugin/api/source.rb +3 -2
  103. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  104. data/bundler/lib/bundler/plugin.rb +3 -3
  105. data/bundler/lib/bundler/resolver/base.rb +1 -1
  106. data/bundler/lib/bundler/resolver/incompatibility.rb +1 -1
  107. data/bundler/lib/bundler/resolver/spec_group.rb +1 -4
  108. data/bundler/lib/bundler/resolver.rb +16 -16
  109. data/bundler/lib/bundler/ruby_dsl.rb +20 -12
  110. data/bundler/lib/bundler/ruby_version.rb +1 -1
  111. data/bundler/lib/bundler/rubygems_ext.rb +24 -50
  112. data/bundler/lib/bundler/rubygems_gem_installer.rb +6 -56
  113. data/bundler/lib/bundler/rubygems_integration.rb +25 -94
  114. data/bundler/lib/bundler/runtime.rb +2 -2
  115. data/bundler/lib/bundler/self_manager.rb +23 -7
  116. data/bundler/lib/bundler/settings.rb +27 -7
  117. data/bundler/lib/bundler/setup.rb +4 -1
  118. data/bundler/lib/bundler/shared_helpers.rb +35 -13
  119. data/bundler/lib/bundler/source/git/git_proxy.rb +15 -15
  120. data/bundler/lib/bundler/source/git.rb +4 -3
  121. data/bundler/lib/bundler/source/metadata.rb +15 -15
  122. data/bundler/lib/bundler/source/path.rb +7 -6
  123. data/bundler/lib/bundler/source/rubygems.rb +21 -14
  124. data/bundler/lib/bundler/source.rb +2 -0
  125. data/bundler/lib/bundler/spec_set.rb +38 -10
  126. data/bundler/lib/bundler/stub_specification.rb +1 -0
  127. data/bundler/lib/bundler/templates/Executable.bundler +1 -1
  128. data/bundler/lib/bundler/templates/newgem/README.md.tt +3 -3
  129. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +2 -6
  130. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
  131. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
  132. data/bundler/lib/bundler/ui/shell.rb +1 -1
  133. data/bundler/lib/bundler/vendor/connection_pool/.document +1 -0
  134. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  135. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
  136. data/bundler/lib/bundler/vendor/fileutils/.document +1 -0
  137. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
  138. data/bundler/lib/bundler/vendor/net-http-persistent/.document +1 -0
  139. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +3 -3
  140. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +2 -2
  141. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  142. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +34 -34
  143. data/bundler/lib/bundler/vendor/pub_grub/.document +1 -0
  144. data/bundler/lib/bundler/vendor/thor/.document +1 -0
  145. data/bundler/lib/bundler/vendor/tsort/.document +1 -0
  146. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
  147. data/bundler/lib/bundler/vendor/uri/.document +1 -0
  148. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
  149. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
  150. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
  151. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  152. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  153. data/bundler/lib/bundler/vendored_persistent.rb +0 -4
  154. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  155. data/bundler/lib/bundler/version.rb +1 -1
  156. data/bundler/lib/bundler/vlad.rb +1 -1
  157. data/bundler/lib/bundler/yaml_serializer.rb +3 -3
  158. data/bundler/lib/bundler.rb +41 -32
  159. data/lib/rubygems/available_set.rb +4 -4
  160. data/lib/rubygems/basic_specification.rb +35 -37
  161. data/lib/rubygems/bundler_version_finder.rb +4 -4
  162. data/lib/rubygems/ci_detector.rb +75 -0
  163. data/lib/rubygems/command.rb +13 -15
  164. data/lib/rubygems/command_manager.rb +5 -4
  165. data/lib/rubygems/commands/build_command.rb +2 -2
  166. data/lib/rubygems/commands/cert_command.rb +1 -2
  167. data/lib/rubygems/commands/check_command.rb +4 -4
  168. data/lib/rubygems/commands/cleanup_command.rb +12 -14
  169. data/lib/rubygems/commands/contents_command.rb +4 -4
  170. data/lib/rubygems/commands/dependency_command.rb +4 -5
  171. data/lib/rubygems/commands/environment_command.rb +1 -3
  172. data/lib/rubygems/commands/exec_command.rb +1 -1
  173. data/lib/rubygems/commands/fetch_command.rb +2 -2
  174. data/lib/rubygems/commands/generate_index_command.rb +39 -74
  175. data/lib/rubygems/commands/help_command.rb +3 -3
  176. data/lib/rubygems/commands/info_command.rb +2 -2
  177. data/lib/rubygems/commands/install_command.rb +8 -16
  178. data/lib/rubygems/commands/list_command.rb +2 -2
  179. data/lib/rubygems/commands/lock_command.rb +1 -1
  180. data/lib/rubygems/commands/open_command.rb +1 -1
  181. data/lib/rubygems/commands/owner_command.rb +1 -1
  182. data/lib/rubygems/commands/pristine_command.rb +13 -15
  183. data/lib/rubygems/commands/push_command.rb +2 -2
  184. data/lib/rubygems/commands/query_command.rb +4 -5
  185. data/lib/rubygems/commands/rdoc_command.rb +2 -2
  186. data/lib/rubygems/commands/search_command.rb +2 -2
  187. data/lib/rubygems/commands/setup_command.rb +31 -34
  188. data/lib/rubygems/commands/sources_command.rb +12 -12
  189. data/lib/rubygems/commands/specification_command.rb +10 -10
  190. data/lib/rubygems/commands/stale_command.rb +1 -1
  191. data/lib/rubygems/commands/uninstall_command.rb +9 -10
  192. data/lib/rubygems/commands/unpack_command.rb +4 -4
  193. data/lib/rubygems/commands/update_command.rb +10 -12
  194. data/lib/rubygems/commands/which_command.rb +1 -1
  195. data/lib/rubygems/commands/yank_command.rb +1 -1
  196. data/lib/rubygems/compatibility.rb +5 -6
  197. data/lib/rubygems/config_file.rb +4 -4
  198. data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
  199. data/lib/rubygems/core_ext/kernel_require.rb +19 -48
  200. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  201. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  202. data/lib/rubygems/defaults.rb +15 -3
  203. data/lib/rubygems/dependency.rb +12 -14
  204. data/lib/rubygems/dependency_installer.rb +29 -30
  205. data/lib/rubygems/dependency_list.rb +1 -1
  206. data/lib/rubygems/deprecate.rb +16 -15
  207. data/lib/rubygems/doctor.rb +5 -5
  208. data/lib/rubygems/errors.rb +2 -6
  209. data/lib/rubygems/exceptions.rb +2 -1
  210. data/lib/rubygems/ext/builder.rb +15 -10
  211. data/lib/rubygems/ext/cargo_builder.rb +5 -5
  212. data/lib/rubygems/ext/ext_conf_builder.rb +1 -3
  213. data/lib/rubygems/gem_runner.rb +4 -4
  214. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +3 -3
  215. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -3
  216. data/lib/rubygems/gemcutter_utilities.rb +18 -19
  217. data/lib/rubygems/install_update_options.rb +18 -19
  218. data/lib/rubygems/installer.rb +59 -33
  219. data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
  220. data/lib/rubygems/local_remote_options.rb +7 -10
  221. data/lib/rubygems/name_tuple.rb +7 -9
  222. data/lib/rubygems/net/http.rb +3 -0
  223. data/lib/rubygems/net-http/.document +1 -0
  224. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  225. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  226. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  227. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  228. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  229. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  230. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  231. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  232. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  233. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  234. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  235. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  236. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  237. data/lib/rubygems/net-protocol/.document +1 -0
  238. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  239. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  240. data/lib/rubygems/optparse/lib/optparse.rb +39 -17
  241. data/lib/rubygems/package/old.rb +2 -2
  242. data/lib/rubygems/package/tar_header.rb +45 -39
  243. data/lib/rubygems/package/tar_reader/entry.rb +5 -4
  244. data/lib/rubygems/package/tar_reader.rb +5 -3
  245. data/lib/rubygems/package/tar_writer.rb +19 -17
  246. data/lib/rubygems/package.rb +27 -26
  247. data/lib/rubygems/package_task.rb +2 -2
  248. data/lib/rubygems/path_support.rb +9 -10
  249. data/lib/rubygems/platform.rb +60 -45
  250. data/lib/rubygems/query_utils.rb +7 -9
  251. data/lib/rubygems/remote_fetcher.rb +15 -15
  252. data/lib/rubygems/request/connection_pools.rb +3 -3
  253. data/lib/rubygems/request.rb +20 -17
  254. data/lib/rubygems/request_set/gem_dependency_api.rb +119 -122
  255. data/lib/rubygems/request_set/lockfile/parser.rb +9 -9
  256. data/lib/rubygems/request_set/lockfile/tokenizer.rb +20 -12
  257. data/lib/rubygems/request_set/lockfile.rb +6 -11
  258. data/lib/rubygems/request_set.rb +5 -5
  259. data/lib/rubygems/requirement.rb +7 -7
  260. data/lib/rubygems/resolv/.document +1 -0
  261. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  262. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  263. data/lib/rubygems/resolver/activation_request.rb +1 -3
  264. data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
  265. data/lib/rubygems/resolver/best_set.rb +1 -1
  266. data/lib/rubygems/resolver/composed_set.rb +1 -1
  267. data/lib/rubygems/resolver/conflict.rb +4 -12
  268. data/lib/rubygems/resolver/index_set.rb +4 -4
  269. data/lib/rubygems/resolver/index_specification.rb +2 -2
  270. data/lib/rubygems/resolver/installer_set.rb +5 -6
  271. data/lib/rubygems/resolver/lock_set.rb +1 -1
  272. data/lib/rubygems/resolver/molinillo/.document +1 -0
  273. data/lib/rubygems/resolver.rb +3 -10
  274. data/lib/rubygems/s3_uri_signer.rb +6 -6
  275. data/lib/rubygems/safe_marshal/elements.rb +138 -0
  276. data/lib/rubygems/safe_marshal/reader.rb +306 -0
  277. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  278. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
  279. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  280. data/lib/rubygems/safe_marshal.rb +74 -0
  281. data/lib/rubygems/safe_yaml.rb +5 -28
  282. data/lib/rubygems/security/policies.rb +36 -38
  283. data/lib/rubygems/security/policy.rb +7 -11
  284. data/lib/rubygems/security/signer.rb +1 -1
  285. data/lib/rubygems/security/trust_dir.rb +3 -3
  286. data/lib/rubygems/security.rb +8 -22
  287. data/lib/rubygems/source/git.rb +1 -3
  288. data/lib/rubygems/source/installed.rb +0 -2
  289. data/lib/rubygems/source/local.rb +5 -8
  290. data/lib/rubygems/source/lock.rb +1 -3
  291. data/lib/rubygems/source/specific_file.rb +0 -1
  292. data/lib/rubygems/source/vendor.rb +0 -2
  293. data/lib/rubygems/source.rb +12 -12
  294. data/lib/rubygems/source_list.rb +4 -4
  295. data/lib/rubygems/spec_fetcher.rb +29 -29
  296. data/lib/rubygems/specification.rb +125 -138
  297. data/lib/rubygems/specification_policy.rb +55 -25
  298. data/lib/rubygems/stub_specification.rb +4 -5
  299. data/lib/rubygems/text.rb +1 -2
  300. data/lib/rubygems/timeout/.document +1 -0
  301. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  302. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  303. data/lib/rubygems/timeout.rb +3 -0
  304. data/lib/rubygems/tsort/lib/tsort.rb +3 -0
  305. data/lib/rubygems/uninstaller.rb +7 -9
  306. data/lib/rubygems/update_suggestion.rb +5 -18
  307. data/lib/rubygems/uri_formatter.rb +1 -1
  308. data/lib/rubygems/user_interaction.rb +15 -21
  309. data/lib/rubygems/util/licenses.rb +65 -35
  310. data/lib/rubygems/util/list.rb +3 -1
  311. data/lib/rubygems/util.rb +2 -4
  312. data/lib/rubygems/validator.rb +5 -3
  313. data/lib/rubygems/version.rb +34 -28
  314. data/lib/rubygems/version_option.rb +2 -5
  315. data/lib/rubygems/yaml_serializer.rb +3 -3
  316. data/lib/rubygems.rb +37 -37
  317. data/rubygems-update.gemspec +4 -4
  318. data/setup.rb +2 -2
  319. metadata +50 -225
  320. data/lib/rubygems/indexer.rb +0 -428
  321. data/lib/rubygems/mock_gem_ui.rb +0 -86
  322. data/test/rubygems/alternate_cert.pem +0 -19
  323. data/test/rubygems/alternate_cert_32.pem +0 -19
  324. data/test/rubygems/alternate_key.pem +0 -27
  325. data/test/rubygems/bad_rake.rb +0 -3
  326. data/test/rubygems/bundler_test_gem.rb +0 -424
  327. data/test/rubygems/ca_cert.pem +0 -77
  328. data/test/rubygems/child_cert.pem +0 -19
  329. data/test/rubygems/child_cert_32.pem +0 -19
  330. data/test/rubygems/child_key.pem +0 -27
  331. data/test/rubygems/client.pem +0 -107
  332. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  333. data/test/rubygems/data/gem-private_key.pem +0 -27
  334. data/test/rubygems/data/gem-public_cert.pem +0 -20
  335. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  336. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  337. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  338. data/test/rubygems/encrypted_private_key.pem +0 -30
  339. data/test/rubygems/expired_cert.pem +0 -19
  340. data/test/rubygems/fake_certlib/openssl.rb +0 -9
  341. data/test/rubygems/foo/discover.rb +0 -1
  342. data/test/rubygems/future_cert.pem +0 -19
  343. data/test/rubygems/future_cert_32.pem +0 -19
  344. data/test/rubygems/good_rake.rb +0 -3
  345. data/test/rubygems/grandchild_cert.pem +0 -19
  346. data/test/rubygems/grandchild_cert_32.pem +0 -19
  347. data/test/rubygems/grandchild_key.pem +0 -27
  348. data/test/rubygems/helper.rb +0 -1649
  349. data/test/rubygems/installer_test_case.rb +0 -248
  350. data/test/rubygems/invalid_client.pem +0 -49
  351. data/test/rubygems/invalid_issuer_cert.pem +0 -20
  352. data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
  353. data/test/rubygems/invalid_key.pem +0 -27
  354. data/test/rubygems/invalid_signer_cert.pem +0 -19
  355. data/test/rubygems/invalid_signer_cert_32.pem +0 -19
  356. data/test/rubygems/invalidchild_cert.pem +0 -19
  357. data/test/rubygems/invalidchild_cert_32.pem +0 -19
  358. data/test/rubygems/invalidchild_key.pem +0 -27
  359. data/test/rubygems/multifactor_auth_utilities.rb +0 -111
  360. data/test/rubygems/package/tar_test_case.rb +0 -175
  361. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  362. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  363. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  364. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -4
  365. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -5
  366. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -4
  367. data/test/rubygems/private3072_key.pem +0 -40
  368. data/test/rubygems/private_ec_key.pem +0 -9
  369. data/test/rubygems/private_key.pem +0 -27
  370. data/test/rubygems/public3072_cert.pem +0 -25
  371. data/test/rubygems/public_cert.pem +0 -20
  372. data/test/rubygems/public_cert_32.pem +0 -19
  373. data/test/rubygems/public_key.pem +0 -9
  374. data/test/rubygems/rubygems/commands/crash_command.rb +0 -5
  375. data/test/rubygems/rubygems_plugin.rb +0 -24
  376. data/test/rubygems/sff/discover.rb +0 -1
  377. data/test/rubygems/simple_gem.rb +0 -68
  378. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  379. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  380. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -14
  381. data/test/rubygems/ssl_cert.pem +0 -80
  382. data/test/rubygems/ssl_key.pem +0 -27
  383. data/test/rubygems/test_bundled_ca.rb +0 -61
  384. data/test/rubygems/test_config.rb +0 -28
  385. data/test/rubygems/test_deprecate.rb +0 -158
  386. data/test/rubygems/test_exit.rb +0 -17
  387. data/test/rubygems/test_gem.rb +0 -1799
  388. data/test/rubygems/test_gem_available_set.rb +0 -130
  389. data/test/rubygems/test_gem_bundler_version_finder.rb +0 -127
  390. data/test/rubygems/test_gem_command.rb +0 -403
  391. data/test/rubygems/test_gem_command_manager.rb +0 -400
  392. data/test/rubygems/test_gem_commands_build_command.rb +0 -739
  393. data/test/rubygems/test_gem_commands_cert_command.rb +0 -866
  394. data/test/rubygems/test_gem_commands_check_command.rb +0 -68
  395. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -292
  396. data/test/rubygems/test_gem_commands_contents_command.rb +0 -271
  397. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -228
  398. data/test/rubygems/test_gem_commands_environment_command.rb +0 -169
  399. data/test/rubygems/test_gem_commands_exec_command.rb +0 -857
  400. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -258
  401. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -81
  402. data/test/rubygems/test_gem_commands_help_command.rb +0 -94
  403. data/test/rubygems/test_gem_commands_info_command.rb +0 -70
  404. data/test/rubygems/test_gem_commands_install_command.rb +0 -1573
  405. data/test/rubygems/test_gem_commands_list_command.rb +0 -33
  406. data/test/rubygems/test_gem_commands_lock_command.rb +0 -67
  407. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  408. data/test/rubygems/test_gem_commands_open_command.rb +0 -101
  409. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -50
  410. data/test/rubygems/test_gem_commands_owner_command.rb +0 -503
  411. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -708
  412. data/test/rubygems/test_gem_commands_push_command.rb +0 -603
  413. data/test/rubygems/test_gem_commands_query_command.rb +0 -858
  414. data/test/rubygems/test_gem_commands_search_command.rb +0 -16
  415. data/test/rubygems/test_gem_commands_server_command.rb +0 -20
  416. data/test/rubygems/test_gem_commands_setup_command.rb +0 -474
  417. data/test/rubygems/test_gem_commands_signin_command.rb +0 -259
  418. data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
  419. data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
  420. data/test/rubygems/test_gem_commands_specification_command.rb +0 -277
  421. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  422. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -542
  423. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -224
  424. data/test/rubygems/test_gem_commands_update_command.rb +0 -836
  425. data/test/rubygems/test_gem_commands_which_command.rb +0 -85
  426. data/test/rubygems/test_gem_commands_yank_command.rb +0 -299
  427. data/test/rubygems/test_gem_config_file.rb +0 -551
  428. data/test/rubygems/test_gem_dependency.rb +0 -398
  429. data/test/rubygems/test_gem_dependency_installer.rb +0 -1190
  430. data/test/rubygems/test_gem_dependency_list.rb +0 -265
  431. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -27
  432. data/test/rubygems/test_gem_doctor.rb +0 -195
  433. data/test/rubygems/test_gem_ext_builder.rb +0 -337
  434. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
  435. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
  436. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +0 -249
  437. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +0 -10
  438. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +0 -27
  439. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +0 -3
  440. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
  441. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -249
  442. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
  443. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -10
  444. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -51
  445. data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -167
  446. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -34
  447. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -60
  448. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -84
  449. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -80
  450. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -229
  451. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -113
  452. data/test/rubygems/test_gem_gem_runner.rb +0 -119
  453. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -361
  454. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -60
  455. data/test/rubygems/test_gem_indexer.rb +0 -381
  456. data/test/rubygems/test_gem_install_update_options.rb +0 -208
  457. data/test/rubygems/test_gem_installer.rb +0 -2512
  458. data/test/rubygems/test_gem_local_remote_options.rb +0 -133
  459. data/test/rubygems/test_gem_name_tuple.rb +0 -43
  460. data/test/rubygems/test_gem_package.rb +0 -1306
  461. data/test/rubygems/test_gem_package_old.rb +0 -91
  462. data/test/rubygems/test_gem_package_tar_header.rb +0 -226
  463. data/test/rubygems/test_gem_package_tar_reader.rb +0 -150
  464. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -350
  465. data/test/rubygems/test_gem_package_tar_writer.rb +0 -331
  466. data/test/rubygems/test_gem_package_task.rb +0 -118
  467. data/test/rubygems/test_gem_path_support.rb +0 -139
  468. data/test/rubygems/test_gem_platform.rb +0 -497
  469. data/test/rubygems/test_gem_rdoc.rb +0 -137
  470. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1227
  471. data/test/rubygems/test_gem_request.rb +0 -547
  472. data/test/rubygems/test_gem_request_connection_pools.rb +0 -152
  473. data/test/rubygems/test_gem_request_set.rb +0 -672
  474. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -853
  475. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -469
  476. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -544
  477. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -307
  478. data/test/rubygems/test_gem_requirement.rb +0 -505
  479. data/test/rubygems/test_gem_resolver.rb +0 -859
  480. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -43
  481. data/test/rubygems/test_gem_resolver_api_set.rb +0 -210
  482. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -167
  483. data/test/rubygems/test_gem_resolver_best_set.rb +0 -159
  484. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -44
  485. data/test/rubygems/test_gem_resolver_conflict.rb +0 -82
  486. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -83
  487. data/test/rubygems/test_gem_resolver_git_set.rb +0 -188
  488. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  489. data/test/rubygems/test_gem_resolver_index_set.rb +0 -88
  490. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -93
  491. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -47
  492. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -320
  493. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -44
  494. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -62
  495. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -98
  496. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -19
  497. data/test/rubygems/test_gem_resolver_specification.rb +0 -63
  498. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -82
  499. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -82
  500. data/test/rubygems/test_gem_security.rb +0 -341
  501. data/test/rubygems/test_gem_security_policy.rb +0 -535
  502. data/test/rubygems/test_gem_security_signer.rb +0 -218
  503. data/test/rubygems/test_gem_security_trust_dir.rb +0 -99
  504. data/test/rubygems/test_gem_silent_ui.rb +0 -123
  505. data/test/rubygems/test_gem_source.rb +0 -254
  506. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -37
  507. data/test/rubygems/test_gem_source_git.rb +0 -310
  508. data/test/rubygems/test_gem_source_installed.rb +0 -35
  509. data/test/rubygems/test_gem_source_list.rb +0 -119
  510. data/test/rubygems/test_gem_source_local.rb +0 -107
  511. data/test/rubygems/test_gem_source_lock.rb +0 -113
  512. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  513. data/test/rubygems/test_gem_source_subpath_problem.rb +0 -50
  514. data/test/rubygems/test_gem_source_vendor.rb +0 -30
  515. data/test/rubygems/test_gem_spec_fetcher.rb +0 -338
  516. data/test/rubygems/test_gem_specification.rb +0 -3856
  517. data/test/rubygems/test_gem_stream_ui.rb +0 -255
  518. data/test/rubygems/test_gem_stub_specification.rb +0 -278
  519. data/test/rubygems/test_gem_text.rb +0 -103
  520. data/test/rubygems/test_gem_uninstaller.rb +0 -675
  521. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -31
  522. data/test/rubygems/test_gem_update_suggestion.rb +0 -209
  523. data/test/rubygems/test_gem_uri.rb +0 -41
  524. data/test/rubygems/test_gem_uri_formatter.rb +0 -27
  525. data/test/rubygems/test_gem_util.rb +0 -91
  526. data/test/rubygems/test_gem_validator.rb +0 -42
  527. data/test/rubygems/test_gem_version.rb +0 -305
  528. data/test/rubygems/test_gem_version_option.rb +0 -165
  529. data/test/rubygems/test_kernel.rb +0 -124
  530. data/test/rubygems/test_project_sanity.rb +0 -49
  531. data/test/rubygems/test_remote_fetch_error.rb +0 -20
  532. data/test/rubygems/test_require.rb +0 -732
  533. data/test/rubygems/test_rubygems.rb +0 -76
  534. data/test/rubygems/test_webauthn_listener.rb +0 -143
  535. data/test/rubygems/test_webauthn_listener_response.rb +0 -93
  536. data/test/rubygems/test_webauthn_poller.rb +0 -124
  537. data/test/rubygems/utilities.rb +0 -436
  538. data/test/rubygems/wrong_key_cert.pem +0 -19
  539. data/test/rubygems/wrong_key_cert_32.pem +0 -19
  540. data/test/test_changelog_generator.rb +0 -17
@@ -198,7 +198,7 @@ class Gem::Ext::CargoBuilder < Gem::Ext::Builder
198
198
 
199
199
  output, status =
200
200
  begin
201
- Open3.capture2e(cargo, "metadata", "--no-deps", "--format-version", "1", :chdir => cargo_dir)
201
+ Open3.capture2e(cargo, "metadata", "--no-deps", "--format-version", "1", chdir: cargo_dir)
202
202
  rescue StandardError => error
203
203
  raise Gem::InstallError, "cargo metadata failed #{error.message}"
204
204
  end
@@ -246,10 +246,10 @@ EOF
246
246
  end
247
247
 
248
248
  def rustc_dynamic_linker_flags(dest_dir, crate_name)
249
- split_flags("DLDFLAGS")
250
- .map {|arg| maybe_resolve_ldflag_variable(arg, dest_dir, crate_name) }
251
- .compact
252
- .flat_map {|arg| ldflag_to_link_modifier(arg) }
249
+ split_flags("DLDFLAGS").
250
+ map {|arg| maybe_resolve_ldflag_variable(arg, dest_dir, crate_name) }.
251
+ compact.
252
+ flat_map {|arg| ldflag_to_link_modifier(arg) }
253
253
  end
254
254
 
255
255
  def rustc_lib_flags(dest_dir)
@@ -48,7 +48,7 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
48
48
  FileUtils.mkdir_p lib_dir
49
49
  entries = Dir.entries(full_tmp_dest) - %w[. ..]
50
50
  entries = entries.map {|entry| File.join full_tmp_dest, entry }
51
- FileUtils.cp_r entries, lib_dir, :remove_destination => true
51
+ FileUtils.cp_r entries, lib_dir, remove_destination: true
52
52
  end
53
53
 
54
54
  FileUtils::Entry_.new(full_tmp_dest).traverse do |ent|
@@ -66,8 +66,6 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
66
66
  FileUtils.rm_rf tmp_dest if tmp_dest
67
67
  end
68
68
 
69
- private
70
-
71
69
  def self.get_relative_path(path, base)
72
70
  path[0..base.length - 1] = "." if path.start_with?(base)
73
71
  path
@@ -45,10 +45,10 @@ class Gem::GemRunner
45
45
  cmd.command_names.each do |command_name|
46
46
  config_args = Gem.configuration[command_name]
47
47
  config_args = case config_args
48
- when String
49
- config_args.split " "
50
- else
51
- Array(config_args)
48
+ when String
49
+ config_args.split " "
50
+ else
51
+ Array(config_args)
52
52
  end
53
53
  Gem::Command.add_specific_extra_args command_name, config_args
54
54
  end
@@ -2,9 +2,9 @@
2
2
 
3
3
  ##
4
4
  # The WebauthnListener Response class is used by the WebauthnListener to create
5
- # responses to be sent to the Gem host. It creates a Net::HTTPResponse instance
5
+ # responses to be sent to the Gem host. It creates a Gem::Net::HTTPResponse instance
6
6
  # when initialized and can be converted to the appropriate format to be sent by a socket using `to_s`.
7
- # Net::HTTPResponse instances cannot be directly sent over a socket.
7
+ # Gem::Net::HTTPResponse instances cannot be directly sent over a socket.
8
8
  #
9
9
  # Types of response classes:
10
10
  # - OkResponse
@@ -60,7 +60,7 @@ module Gem::GemcutterUtilities
60
60
  def body; end
61
61
 
62
62
  def build_http_response
63
- response_class = Net::HTTPResponse::CODE_TO_OBJ[code.to_s]
63
+ response_class = Gem::Net::HTTPResponse::CODE_TO_OBJ[code.to_s]
64
64
  @http_response = response_class.new("1.1", code, reason_phrase)
65
65
  @http_response.instance_variable_set(:@read, true)
66
66
 
@@ -37,16 +37,16 @@ module Gem::GemcutterUtilities
37
37
  thread.abort_on_exception = true
38
38
  thread.report_on_exception = false
39
39
  thread[:otp] = new(options, host).poll_for_otp(webauthn_url, credentials)
40
- rescue Gem::WebauthnVerificationError, Timeout::Error => e
40
+ rescue Gem::WebauthnVerificationError, Gem::Timeout::Error => e
41
41
  thread[:error] = e
42
42
  end
43
43
  end
44
44
 
45
45
  def poll_for_otp(webauthn_url, credentials)
46
- Timeout.timeout(TIMEOUT_IN_SECONDS) do
46
+ Gem::Timeout.timeout(TIMEOUT_IN_SECONDS) do
47
47
  loop do
48
48
  response = webauthn_verification_poll_response(webauthn_url, credentials)
49
- raise Gem::WebauthnVerificationError, response.message unless response.is_a?(Net::HTTPSuccess)
49
+ raise Gem::WebauthnVerificationError, response.message unless response.is_a?(Gem::Net::HTTPSuccess)
50
50
 
51
51
  require "json"
52
52
  parsed_response = JSON.parse(response.body)
@@ -9,9 +9,8 @@ require_relative "gemcutter_utilities/webauthn_poller"
9
9
  # Utility methods for using the RubyGems API.
10
10
 
11
11
  module Gem::GemcutterUtilities
12
-
13
12
  ERROR_CODE = 1
14
- API_SCOPES = %i[index_rubygems push_rubygem yank_rubygem add_owner remove_owner access_webhooks show_dashboard].freeze
13
+ API_SCOPES = [:index_rubygems, :push_rubygem, :yank_rubygem, :add_owner, :remove_owner, :access_webhooks, :show_dashboard].freeze
15
14
 
16
15
  include Gem::Text
17
16
 
@@ -85,7 +84,7 @@ module Gem::GemcutterUtilities
85
84
  # If +allowed_push_host+ metadata is present, then it will only allow that host.
86
85
 
87
86
  def rubygems_api_request(method, path, host = nil, allowed_push_host = nil, scope: nil, credentials: {}, &block)
88
- require "net/http"
87
+ require_relative "net/http"
89
88
 
90
89
  self.host = host if host
91
90
  unless self.host
@@ -120,11 +119,11 @@ module Gem::GemcutterUtilities
120
119
  end
121
120
 
122
121
  def mfa_unauthorized?(response)
123
- response.is_a?(Net::HTTPUnauthorized) && response.body.start_with?("You have enabled multifactor authentication")
122
+ response.is_a?(Gem::Net::HTTPUnauthorized) && response.body.start_with?("You have enabled multifactor authentication")
124
123
  end
125
124
 
126
125
  def update_scope(scope)
127
- sign_in_host = self.host
126
+ sign_in_host = host
128
127
  pretty_host = pretty_host(sign_in_host)
129
128
  update_scope_params = { scope => true }
130
129
 
@@ -137,10 +136,10 @@ module Gem::GemcutterUtilities
137
136
  sign_in_host, scope: scope) do |request|
138
137
  request.basic_auth email, password
139
138
  request["OTP"] = otp if otp
140
- request.body = URI.encode_www_form({ :api_key => api_key }.merge(update_scope_params))
139
+ request.body = URI.encode_www_form({ api_key: api_key }.merge(update_scope_params))
141
140
  end
142
141
 
143
- with_response response do |resp|
142
+ with_response response do |_resp|
144
143
  say "Added #{scope} scope to the existing API key"
145
144
  end
146
145
  end
@@ -150,13 +149,13 @@ module Gem::GemcutterUtilities
150
149
  # key.
151
150
 
152
151
  def sign_in(sign_in_host = nil, scope: nil)
153
- sign_in_host ||= self.host
152
+ sign_in_host ||= host
154
153
  return if api_key
155
154
 
156
155
  pretty_host = pretty_host(sign_in_host)
157
156
 
158
157
  say "Enter your #{pretty_host} credentials."
159
- say "Don't have an account yet? " +
158
+ say "Don't have an account yet? " \
160
159
  "Create one at #{sign_in_host}/sign_up"
161
160
 
162
161
  email = ask " Email: "
@@ -209,13 +208,13 @@ module Gem::GemcutterUtilities
209
208
 
210
209
  def with_response(response, error_prefix = nil)
211
210
  case response
212
- when Net::HTTPSuccess then
211
+ when Gem::Net::HTTPSuccess then
213
212
  if block_given?
214
213
  yield response
215
214
  else
216
215
  say clean_text(response.body)
217
216
  end
218
- when Net::HTTPPermanentRedirect, Net::HTTPRedirection then
217
+ when Gem::Net::HTTPPermanentRedirect, Gem::Net::HTTPRedirection then
219
218
  message = "The request has redirected permanently to #{response["location"]}. Please check your defined push host URL."
220
219
  message = "#{error_prefix}: #{message}" if error_prefix
221
220
 
@@ -245,7 +244,7 @@ module Gem::GemcutterUtilities
245
244
  private
246
245
 
247
246
  def request_with_otp(method, uri, &block)
248
- request_method = Net::HTTP.const_get method.to_s.capitalize
247
+ request_method = Gem::Net::HTTP.const_get method.to_s.capitalize
249
248
 
250
249
  Gem::RemoteFetcher.fetcher.request(uri, request_method) do |req|
251
250
  req["OTP"] = otp if otp
@@ -298,7 +297,7 @@ module Gem::GemcutterUtilities
298
297
  request.basic_auth credentials[:email], credentials[:password]
299
298
  end
300
299
  end
301
- response.is_a?(Net::HTTPSuccess) ? response.body : nil
300
+ response.is_a?(Gem::Net::HTTPSuccess) ? response.body : nil
302
301
  end
303
302
 
304
303
  def pretty_host(host)
@@ -316,9 +315,9 @@ module Gem::GemcutterUtilities
316
315
  scope_params = { scope => true }
317
316
  else
318
317
  say "Please select scopes you want to enable for the API key (y/n)"
319
- API_SCOPES.each do |scope|
320
- selected = ask_yes_no("#{scope}", false)
321
- scope_params[scope] = true if selected
318
+ API_SCOPES.each do |s|
319
+ selected = ask_yes_no(s.to_s, false)
320
+ scope_params[s] = true if selected
322
321
  end
323
322
  say "\n"
324
323
  end
@@ -327,7 +326,7 @@ module Gem::GemcutterUtilities
327
326
  end
328
327
 
329
328
  def default_host?
330
- self.host == Gem::DEFAULT_HOST
329
+ host == Gem::DEFAULT_HOST
331
330
  end
332
331
 
333
332
  def get_user_profile(email, password)
@@ -345,7 +344,7 @@ module Gem::GemcutterUtilities
345
344
  def get_mfa_params(profile)
346
345
  mfa_level = profile["mfa"]
347
346
  params = {}
348
- if mfa_level == "ui_only" || mfa_level == "ui_and_gem_signin"
347
+ if ["ui_only", "ui_and_gem_signin"].include?(mfa_level)
349
348
  selected = ask_yes_no("Would you like to enable MFA for this key? (strongly recommended)")
350
349
  params["mfa"] = true if selected
351
350
  end
@@ -367,6 +366,6 @@ module Gem::GemcutterUtilities
367
366
  end
368
367
 
369
368
  def api_key_forbidden?(response)
370
- response.is_a?(Net::HTTPForbidden) && response.body.start_with?("The API key doesn't have access")
369
+ response.is_a?(Gem::Net::HTTPForbidden) && response.body.start_with?("The API key doesn't have access")
371
370
  end
372
371
  end
@@ -36,9 +36,9 @@ module Gem::InstallUpdateOptions
36
36
  "List the documentation types you wish to",
37
37
  "generate. For example: rdoc,ri") do |value, options|
38
38
  options[:document] = case value
39
- when nil then %w[ri]
40
- when false then []
41
- else value
39
+ when nil then %w[ri]
40
+ when false then []
41
+ else value
42
42
  end
43
43
  end
44
44
 
@@ -50,7 +50,7 @@ module Gem::InstallUpdateOptions
50
50
 
51
51
  add_option(:"Install/Update", "--vendor",
52
52
  "Install gem into the vendor directory.",
53
- "Only for use by gem repackagers.") do |value, options|
53
+ "Only for use by gem repackagers.") do |_value, options|
54
54
  unless Gem.vendor_dir
55
55
  raise Gem::OptionParser::InvalidOption.new "your platform is not supported"
56
56
  end
@@ -60,7 +60,7 @@ module Gem::InstallUpdateOptions
60
60
  end
61
61
 
62
62
  add_option(:"Install/Update", "-N", "--no-document",
63
- "Disable documentation generation") do |value, options|
63
+ "Disable documentation generation") do |_value, options|
64
64
  options[:document] = []
65
65
  end
66
66
 
@@ -104,21 +104,21 @@ module Gem::InstallUpdateOptions
104
104
 
105
105
  add_option(:"Install/Update", "--development",
106
106
  "Install additional development",
107
- "dependencies") do |value, options|
107
+ "dependencies") do |_value, options|
108
108
  options[:development] = true
109
109
  options[:dev_shallow] = true
110
110
  end
111
111
 
112
112
  add_option(:"Install/Update", "--development-all",
113
113
  "Install development dependencies for all",
114
- "gems (including dev deps themselves)") do |value, options|
114
+ "gems (including dev deps themselves)") do |_value, options|
115
115
  options[:development] = true
116
116
  options[:dev_shallow] = false
117
117
  end
118
118
 
119
119
  add_option(:"Install/Update", "--conservative",
120
120
  "Don't attempt to upgrade gems already",
121
- "meeting version requirement") do |value, options|
121
+ "meeting version requirement") do |_value, options|
122
122
  options[:conservative] = true
123
123
  options[:minimal_deps] = true
124
124
  end
@@ -136,10 +136,10 @@ module Gem::InstallUpdateOptions
136
136
 
137
137
  add_option(:"Install/Update", "-g", "--file [FILE]",
138
138
  "Read from a gem dependencies API file and",
139
- "install the listed gems") do |v,o|
140
- v = Gem::GEM_DEP_FILES.find do |file|
139
+ "install the listed gems") do |v,_o|
140
+ v ||= Gem::GEM_DEP_FILES.find do |file|
141
141
  File.exist? file
142
- end unless v
142
+ end
143
143
 
144
144
  unless v
145
145
  message = v ? v : "(tried #{Gem::GEM_DEP_FILES.join ", "})"
@@ -154,29 +154,29 @@ module Gem::InstallUpdateOptions
154
154
  add_option(:"Install/Update", "--without GROUPS", Array,
155
155
  "Omit the named groups (comma separated)",
156
156
  "when installing from a gem dependencies",
157
- "file") do |v,o|
158
- options[:without_groups].concat v.map {|without| without.intern }
157
+ "file") do |v,_o|
158
+ options[:without_groups].concat v.map(&:intern)
159
159
  end
160
160
 
161
161
  add_option(:"Install/Update", "--default",
162
162
  "Add the gem's full specification to",
163
- "specifications/default and extract only its bin") do |v,o|
163
+ "specifications/default and extract only its bin") do |v,_o|
164
164
  options[:install_as_default] = v
165
165
  end
166
166
 
167
167
  add_option(:"Install/Update", "--explain",
168
168
  "Rather than install the gems, indicate which would",
169
- "be installed") do |v,o|
169
+ "be installed") do |v,_o|
170
170
  options[:explain] = v
171
171
  end
172
172
 
173
173
  add_option(:"Install/Update", "--[no-]lock",
174
- "Create a lock file (when used with -g/--file)") do |v,o|
174
+ "Create a lock file (when used with -g/--file)") do |v,_o|
175
175
  options[:lock] = v
176
176
  end
177
177
 
178
178
  add_option(:"Install/Update", "--[no-]suggestions",
179
- "Suggest alternates when gems are not found") do |v,o|
179
+ "Suggest alternates when gems are not found") do |v,_o|
180
180
  options[:suggest_alternate] = v
181
181
  end
182
182
  end
@@ -186,7 +186,7 @@ module Gem::InstallUpdateOptions
186
186
 
187
187
  def install_update_options
188
188
  {
189
- :document => %w[ri],
189
+ document: %w[ri],
190
190
  }
191
191
  end
192
192
 
@@ -196,5 +196,4 @@ module Gem::InstallUpdateOptions
196
196
  def install_update_defaults_str
197
197
  "--document=ri"
198
198
  end
199
-
200
199
  end
@@ -189,10 +189,12 @@ class Gem::Installer
189
189
  @package.prog_mode = options[:prog_mode]
190
190
  @package.data_mode = options[:data_mode]
191
191
 
192
- if options[:user_install]
193
- @gem_home = Gem.user_dir
194
- @bin_dir = Gem.bindir gem_home unless options[:bin_dir]
195
- @plugins_dir = Gem.plugindir(gem_home)
192
+ if @gem_home == Gem.user_dir
193
+ # If we get here, then one of the following likely happened:
194
+ # - `--user-install` was specified
195
+ # - `Gem::PathSupport#home` fell back to `Gem.user_dir`
196
+ # - GEM_HOME was manually set to `Gem.user_dir`
197
+
196
198
  check_that_user_bin_dir_is_in_path
197
199
  end
198
200
  end
@@ -222,10 +224,11 @@ class Gem::Installer
222
224
 
223
225
  File.open generated_bin, "rb" do |io|
224
226
  line = io.gets
225
- shebang = /^#!.*ruby/
227
+ shebang = /^#!.*ruby/o
226
228
 
227
- if load_relative_enabled?
228
- until line.nil? || line =~ shebang do
229
+ # TruffleRuby uses a bash prelude in default launchers
230
+ if load_relative_enabled? || RUBY_ENGINE == "truffleruby"
231
+ until line.nil? || shebang.match?(line) do
229
232
  line = io.gets
230
233
  end
231
234
  end
@@ -236,17 +239,17 @@ class Gem::Installer
236
239
 
237
240
  # TODO: detect a specially formatted comment instead of trying
238
241
  # to find a string inside Ruby code.
239
- next unless io.gets.to_s.include?("This file was generated by RubyGems")
242
+ next unless io.gets&.include?("This file was generated by RubyGems")
240
243
 
241
244
  ruby_executable = true
242
- existing = io.read.slice(%r{
245
+ existing = io.read.slice(/
243
246
  ^\s*(
244
247
  gem \s |
245
248
  load \s Gem\.bin_path\( |
246
249
  load \s Gem\.activate_bin_path\(
247
250
  )
248
251
  (['"])(.*?)(\2),
249
- }x, 3)
252
+ /x, 3)
250
253
  end
251
254
 
252
255
  return if spec.name == existing
@@ -316,7 +319,7 @@ class Gem::Installer
316
319
  FileUtils.rm_rf spec.extension_dir
317
320
 
318
321
  dir_mode = options[:dir_mode]
319
- FileUtils.mkdir_p gem_dir, :mode => dir_mode && 0o755
322
+ FileUtils.mkdir_p gem_dir, mode: dir_mode && 0o755
320
323
 
321
324
  if @options[:install_as_default]
322
325
  extract_bin
@@ -348,6 +351,9 @@ class Gem::Installer
348
351
  run_post_install_hooks
349
352
 
350
353
  spec
354
+ rescue Errno::EACCES => e
355
+ # Permission denied - /path/to/foo
356
+ raise Gem::FilePermissionError, e.message.split(" - ").last
351
357
  end
352
358
 
353
359
  def run_pre_install_hooks # :nodoc:
@@ -388,7 +394,7 @@ class Gem::Installer
388
394
  specs = []
389
395
 
390
396
  Gem::Util.glob_files_in_dir("*.gemspec", File.join(gem_home, "specifications")).each do |path|
391
- spec = Gem::Specification.load path.tap(&Gem::UNTAINT)
397
+ spec = Gem::Specification.load path
392
398
  specs << spec if spec
393
399
  end
394
400
 
@@ -458,6 +464,9 @@ class Gem::Installer
458
464
  ##
459
465
  # Writes the full .gemspec specification (in Ruby) to the gem home's
460
466
  # specifications/default directory.
467
+ #
468
+ # In contrast to #write_spec, this keeps file lists, so the `gem contents`
469
+ # command works.
461
470
 
462
471
  def write_default_spec
463
472
  Gem.write_binary(default_spec_file, spec.to_ruby)
@@ -484,7 +493,6 @@ class Gem::Installer
484
493
  ensure_writable_dir @bin_dir
485
494
 
486
495
  spec.executables.each do |filename|
487
- filename.tap(&Gem::UNTAINT)
488
496
  bin_path = File.join gem_dir, spec.bindir, filename
489
497
  next unless File.exist? bin_path
490
498
 
@@ -517,6 +525,8 @@ class Gem::Installer
517
525
  else
518
526
  regenerate_plugins_for(spec, @plugins_dir)
519
527
  end
528
+ rescue ArgumentError => e
529
+ raise e, "#{latest.name} #{latest.version} #{spec.name} #{spec.version}: #{e.message}"
520
530
  end
521
531
 
522
532
  ##
@@ -524,7 +534,7 @@ class Gem::Installer
524
534
  #--
525
535
  # The Windows script is generated in addition to the regular one due to a
526
536
  # bug or misfeature in the Windows shell's pipe. See
527
- # http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/193379
537
+ # https://blade.ruby-lang.org/ruby-talk/193379
528
538
 
529
539
  def generate_bin_script(filename, bindir)
530
540
  bin_script_path = File.join bindir, formatted_program_filename(filename)
@@ -559,7 +569,7 @@ class Gem::Installer
559
569
  File.unlink dst
560
570
  end
561
571
 
562
- FileUtils.symlink src, dst, :verbose => Gem.configuration.really_verbose
572
+ FileUtils.symlink src, dst, verbose: Gem.configuration.really_verbose
563
573
  rescue NotImplementedError, SystemCallError
564
574
  alert_warning "Unable to use symlinks, installing wrapper"
565
575
  generate_bin_script filename, bindir
@@ -582,7 +592,7 @@ class Gem::Installer
582
592
 
583
593
  def shebang(bin_file_name)
584
594
  path = File.join gem_dir, spec.bindir, bin_file_name
585
- first_line = File.open(path, "rb") {|file| file.gets } || ""
595
+ first_line = File.open(path, "rb", &:gets) || ""
586
596
 
587
597
  if first_line.start_with?("#!")
588
598
  # Preserve extra words on shebang line, like "-w". Thanks RPA.
@@ -624,7 +634,6 @@ class Gem::Installer
624
634
 
625
635
  def ensure_loadable_spec
626
636
  ruby = spec.to_ruby_for_cache
627
- ruby.tap(&Gem::UNTAINT)
628
637
 
629
638
  begin
630
639
  eval ruby
@@ -645,32 +654,37 @@ class Gem::Installer
645
654
 
646
655
  def process_options # :nodoc:
647
656
  @options = {
648
- :bin_dir => nil,
649
- :env_shebang => false,
650
- :force => false,
651
- :only_install_dir => false,
652
- :post_install_message => true,
657
+ bin_dir: nil,
658
+ env_shebang: false,
659
+ force: false,
660
+ only_install_dir: false,
661
+ post_install_message: true,
653
662
  }.merge options
654
663
 
655
664
  @env_shebang = options[:env_shebang]
656
665
  @force = options[:force]
657
666
  @install_dir = options[:install_dir]
658
- @gem_home = options[:install_dir] || Gem.dir
659
- @plugins_dir = Gem.plugindir(@gem_home)
667
+ @user_install = options[:user_install]
660
668
  @ignore_dependencies = options[:ignore_dependencies]
661
669
  @format_executable = options[:format_executable]
662
670
  @wrappers = options[:wrappers]
663
671
  @only_install_dir = options[:only_install_dir]
664
672
 
665
- # If the user has asked for the gem to be installed in a directory that is
666
- # the system gem directory, then use the system bin directory, else create
667
- # (or use) a new bin dir under the gem_home.
668
- @bin_dir = options[:bin_dir] || Gem.bindir(gem_home)
673
+ @bin_dir = options[:bin_dir]
669
674
  @development = options[:development]
670
675
  @build_root = options[:build_root]
671
676
 
672
677
  @build_args = options[:build_args]
673
678
 
679
+ @gem_home = @install_dir || user_install_dir || Gem.dir
680
+
681
+ # If the user has asked for the gem to be installed in a directory that is
682
+ # the system gem directory, then use the system bin directory, else create
683
+ # (or use) a new bin dir under the gem_home.
684
+ @bin_dir ||= Gem.bindir(@gem_home)
685
+
686
+ @plugins_dir = Gem.plugindir(@gem_home)
687
+
674
688
  unless @build_root.nil?
675
689
  @bin_dir = File.join(@build_root, @bin_dir.gsub(/^[a-zA-Z]:/, ""))
676
690
  @gem_home = File.join(@build_root, @gem_home.gsub(/^[a-zA-Z]:/, ""))
@@ -704,8 +718,7 @@ class Gem::Installer
704
718
  end
705
719
 
706
720
  def verify_gem_home # :nodoc:
707
- FileUtils.mkdir_p gem_home, :mode => options[:dir_mode] && 0o755
708
- raise Gem::FilePermissionError, gem_home unless File.writable?(gem_home)
721
+ FileUtils.mkdir_p gem_home, mode: options[:dir_mode] && 0o755
709
722
  end
710
723
 
711
724
  def verify_spec
@@ -804,7 +817,7 @@ TEXT
804
817
  ruby_exe = "#{rb_config["RUBY_INSTALL_NAME"]}#{rb_config["EXEEXT"]}"
805
818
  ruby_exe = "ruby.exe" if ruby_exe.empty?
806
819
 
807
- if File.exist?(File.join bindir, ruby_exe)
820
+ if File.exist?(File.join(bindir, ruby_exe))
808
821
  # stub & ruby.exe within same folder. Portable
809
822
  <<-TEXT
810
823
  @ECHO OFF
@@ -926,7 +939,7 @@ TEXT
926
939
  build_info_dir = File.join gem_home, "build_info"
927
940
 
928
941
  dir_mode = options[:dir_mode]
929
- FileUtils.mkdir_p build_info_dir, :mode => dir_mode && 0o755
942
+ FileUtils.mkdir_p build_info_dir, mode: dir_mode && 0o755
930
943
 
931
944
  build_info_file = File.join build_info_dir, "#{spec.full_name}.info"
932
945
 
@@ -959,6 +972,19 @@ TEXT
959
972
 
960
973
  private
961
974
 
975
+ def user_install_dir
976
+ # never install to user home in --build-root mode
977
+ return unless @build_root.nil?
978
+
979
+ # Please note that @user_install might have three states:
980
+ # * `true`: `--user-install`
981
+ # * `false`: `--no-user-install` and
982
+ # * `nil`: option was not specified
983
+ if @user_install || (@user_install.nil? && Gem.default_user_install)
984
+ Gem.user_dir
985
+ end
986
+ end
987
+
962
988
  def build_args
963
989
  @build_args ||= begin
964
990
  require_relative "command"
@@ -984,7 +1010,7 @@ TEXT
984
1010
  bindir="${0%/*}"
985
1011
  EOS
986
1012
 
987
- script << %Q(exec "$bindir/#{ruby_install_name}" "-x" "$0" "$@"\n)
1013
+ script << %(exec "$bindir/#{ruby_install_name}" "-x" "$0" "$@"\n)
988
1014
 
989
1015
  <<~EOS
990
1016
  #!/bin/sh
@@ -4,7 +4,6 @@
4
4
  # Helper methods for both Gem::Installer and Gem::Uninstaller
5
5
 
6
6
  module Gem::InstallerUninstallerUtils
7
-
8
7
  def regenerate_plugins_for(spec, plugins_dir)
9
8
  plugins = spec.plugins
10
9
  return if plugins.empty?
@@ -25,5 +24,4 @@ module Gem::InstallerUninstallerUtils
25
24
  def remove_plugins_for(spec, plugins_dir)
26
25
  FileUtils.rm_f Gem::Util.glob_files_in_dir("#{spec.name}#{Gem.plugin_suffix_pattern}", plugins_dir)
27
26
  end
28
-
29
27
  end