rubygems-update 3.4.22 → 3.5.0

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 (528) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +99 -2
  3. data/Manifest.txt +34 -221
  4. data/README.md +1 -3
  5. data/bundler/CHANGELOG.md +53 -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 +245 -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 +43 -25
  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/lib/connection_pool/version.rb +1 -1
  134. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
  135. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
  136. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +3 -3
  137. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +2 -2
  138. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  139. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +35 -35
  140. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
  141. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
  142. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
  143. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
  144. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  145. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  146. data/bundler/lib/bundler/vendored_persistent.rb +0 -4
  147. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  148. data/bundler/lib/bundler/version.rb +1 -1
  149. data/bundler/lib/bundler/vlad.rb +1 -1
  150. data/bundler/lib/bundler/yaml_serializer.rb +3 -3
  151. data/bundler/lib/bundler.rb +38 -27
  152. data/lib/rubygems/available_set.rb +4 -4
  153. data/lib/rubygems/basic_specification.rb +35 -37
  154. data/lib/rubygems/bundler_version_finder.rb +4 -4
  155. data/lib/rubygems/ci_detector.rb +75 -0
  156. data/lib/rubygems/command.rb +13 -15
  157. data/lib/rubygems/command_manager.rb +5 -4
  158. data/lib/rubygems/commands/build_command.rb +2 -2
  159. data/lib/rubygems/commands/cert_command.rb +1 -2
  160. data/lib/rubygems/commands/check_command.rb +4 -4
  161. data/lib/rubygems/commands/cleanup_command.rb +12 -14
  162. data/lib/rubygems/commands/contents_command.rb +4 -4
  163. data/lib/rubygems/commands/dependency_command.rb +4 -5
  164. data/lib/rubygems/commands/environment_command.rb +1 -3
  165. data/lib/rubygems/commands/exec_command.rb +1 -1
  166. data/lib/rubygems/commands/fetch_command.rb +2 -2
  167. data/lib/rubygems/commands/generate_index_command.rb +39 -74
  168. data/lib/rubygems/commands/help_command.rb +3 -3
  169. data/lib/rubygems/commands/info_command.rb +2 -2
  170. data/lib/rubygems/commands/install_command.rb +8 -16
  171. data/lib/rubygems/commands/list_command.rb +2 -2
  172. data/lib/rubygems/commands/lock_command.rb +1 -1
  173. data/lib/rubygems/commands/open_command.rb +1 -1
  174. data/lib/rubygems/commands/owner_command.rb +1 -1
  175. data/lib/rubygems/commands/pristine_command.rb +13 -15
  176. data/lib/rubygems/commands/push_command.rb +2 -2
  177. data/lib/rubygems/commands/query_command.rb +4 -5
  178. data/lib/rubygems/commands/rdoc_command.rb +2 -2
  179. data/lib/rubygems/commands/search_command.rb +2 -2
  180. data/lib/rubygems/commands/setup_command.rb +31 -34
  181. data/lib/rubygems/commands/sources_command.rb +12 -12
  182. data/lib/rubygems/commands/specification_command.rb +10 -10
  183. data/lib/rubygems/commands/stale_command.rb +1 -1
  184. data/lib/rubygems/commands/uninstall_command.rb +9 -10
  185. data/lib/rubygems/commands/unpack_command.rb +4 -4
  186. data/lib/rubygems/commands/update_command.rb +10 -12
  187. data/lib/rubygems/commands/which_command.rb +1 -1
  188. data/lib/rubygems/commands/yank_command.rb +1 -1
  189. data/lib/rubygems/compatibility.rb +5 -6
  190. data/lib/rubygems/config_file.rb +4 -4
  191. data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
  192. data/lib/rubygems/core_ext/kernel_require.rb +19 -48
  193. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  194. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  195. data/lib/rubygems/defaults.rb +15 -3
  196. data/lib/rubygems/dependency.rb +12 -14
  197. data/lib/rubygems/dependency_installer.rb +29 -30
  198. data/lib/rubygems/dependency_list.rb +1 -1
  199. data/lib/rubygems/deprecate.rb +16 -15
  200. data/lib/rubygems/doctor.rb +5 -5
  201. data/lib/rubygems/errors.rb +2 -6
  202. data/lib/rubygems/exceptions.rb +2 -1
  203. data/lib/rubygems/ext/builder.rb +15 -10
  204. data/lib/rubygems/ext/cargo_builder.rb +5 -5
  205. data/lib/rubygems/ext/ext_conf_builder.rb +1 -3
  206. data/lib/rubygems/gem_runner.rb +4 -4
  207. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +3 -3
  208. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -3
  209. data/lib/rubygems/gemcutter_utilities.rb +18 -19
  210. data/lib/rubygems/install_update_options.rb +18 -19
  211. data/lib/rubygems/installer.rb +59 -33
  212. data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
  213. data/lib/rubygems/local_remote_options.rb +7 -10
  214. data/lib/rubygems/name_tuple.rb +7 -9
  215. data/lib/rubygems/net/http.rb +3 -0
  216. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  217. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  218. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  219. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  220. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  221. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  222. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  223. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  224. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  225. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  226. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  227. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  228. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  229. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  230. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  231. data/lib/rubygems/optparse/lib/optparse.rb +39 -17
  232. data/lib/rubygems/package/old.rb +2 -2
  233. data/lib/rubygems/package/tar_header.rb +45 -39
  234. data/lib/rubygems/package/tar_reader/entry.rb +5 -4
  235. data/lib/rubygems/package/tar_reader.rb +5 -3
  236. data/lib/rubygems/package/tar_writer.rb +19 -17
  237. data/lib/rubygems/package.rb +27 -26
  238. data/lib/rubygems/package_task.rb +2 -2
  239. data/lib/rubygems/path_support.rb +9 -10
  240. data/lib/rubygems/platform.rb +60 -45
  241. data/lib/rubygems/query_utils.rb +7 -9
  242. data/lib/rubygems/remote_fetcher.rb +15 -15
  243. data/lib/rubygems/request/connection_pools.rb +3 -3
  244. data/lib/rubygems/request.rb +20 -17
  245. data/lib/rubygems/request_set/gem_dependency_api.rb +119 -122
  246. data/lib/rubygems/request_set/lockfile/parser.rb +9 -9
  247. data/lib/rubygems/request_set/lockfile/tokenizer.rb +20 -12
  248. data/lib/rubygems/request_set/lockfile.rb +6 -11
  249. data/lib/rubygems/request_set.rb +5 -5
  250. data/lib/rubygems/requirement.rb +7 -7
  251. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  252. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  253. data/lib/rubygems/resolver/activation_request.rb +1 -3
  254. data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
  255. data/lib/rubygems/resolver/best_set.rb +1 -1
  256. data/lib/rubygems/resolver/composed_set.rb +1 -1
  257. data/lib/rubygems/resolver/conflict.rb +4 -12
  258. data/lib/rubygems/resolver/index_set.rb +4 -4
  259. data/lib/rubygems/resolver/index_specification.rb +2 -2
  260. data/lib/rubygems/resolver/installer_set.rb +5 -6
  261. data/lib/rubygems/resolver/lock_set.rb +1 -1
  262. data/lib/rubygems/resolver.rb +3 -10
  263. data/lib/rubygems/s3_uri_signer.rb +6 -6
  264. data/lib/rubygems/safe_marshal/elements.rb +138 -0
  265. data/lib/rubygems/safe_marshal/reader.rb +306 -0
  266. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  267. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
  268. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  269. data/lib/rubygems/safe_marshal.rb +74 -0
  270. data/lib/rubygems/safe_yaml.rb +5 -28
  271. data/lib/rubygems/security/policies.rb +36 -38
  272. data/lib/rubygems/security/policy.rb +7 -11
  273. data/lib/rubygems/security/signer.rb +1 -1
  274. data/lib/rubygems/security/trust_dir.rb +3 -3
  275. data/lib/rubygems/security.rb +8 -22
  276. data/lib/rubygems/source/git.rb +1 -3
  277. data/lib/rubygems/source/installed.rb +0 -2
  278. data/lib/rubygems/source/local.rb +5 -8
  279. data/lib/rubygems/source/lock.rb +1 -3
  280. data/lib/rubygems/source/specific_file.rb +0 -1
  281. data/lib/rubygems/source/vendor.rb +0 -2
  282. data/lib/rubygems/source.rb +12 -12
  283. data/lib/rubygems/source_list.rb +4 -4
  284. data/lib/rubygems/spec_fetcher.rb +29 -29
  285. data/lib/rubygems/specification.rb +125 -138
  286. data/lib/rubygems/specification_policy.rb +55 -25
  287. data/lib/rubygems/stub_specification.rb +4 -5
  288. data/lib/rubygems/text.rb +1 -2
  289. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  290. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  291. data/lib/rubygems/timeout.rb +3 -0
  292. data/lib/rubygems/tsort/lib/tsort.rb +3 -0
  293. data/lib/rubygems/uninstaller.rb +7 -9
  294. data/lib/rubygems/update_suggestion.rb +5 -18
  295. data/lib/rubygems/uri_formatter.rb +1 -1
  296. data/lib/rubygems/user_interaction.rb +15 -21
  297. data/lib/rubygems/util/licenses.rb +65 -35
  298. data/lib/rubygems/util/list.rb +3 -1
  299. data/lib/rubygems/util.rb +2 -4
  300. data/lib/rubygems/validator.rb +5 -3
  301. data/lib/rubygems/version.rb +34 -28
  302. data/lib/rubygems/version_option.rb +2 -5
  303. data/lib/rubygems/yaml_serializer.rb +3 -3
  304. data/lib/rubygems.rb +37 -37
  305. data/rubygems-update.gemspec +4 -4
  306. data/setup.rb +2 -2
  307. metadata +38 -225
  308. data/lib/rubygems/indexer.rb +0 -428
  309. data/lib/rubygems/mock_gem_ui.rb +0 -86
  310. data/test/rubygems/alternate_cert.pem +0 -19
  311. data/test/rubygems/alternate_cert_32.pem +0 -19
  312. data/test/rubygems/alternate_key.pem +0 -27
  313. data/test/rubygems/bad_rake.rb +0 -3
  314. data/test/rubygems/bundler_test_gem.rb +0 -424
  315. data/test/rubygems/ca_cert.pem +0 -77
  316. data/test/rubygems/child_cert.pem +0 -19
  317. data/test/rubygems/child_cert_32.pem +0 -19
  318. data/test/rubygems/child_key.pem +0 -27
  319. data/test/rubygems/client.pem +0 -107
  320. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  321. data/test/rubygems/data/gem-private_key.pem +0 -27
  322. data/test/rubygems/data/gem-public_cert.pem +0 -20
  323. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  324. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  325. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  326. data/test/rubygems/encrypted_private_key.pem +0 -30
  327. data/test/rubygems/expired_cert.pem +0 -19
  328. data/test/rubygems/fake_certlib/openssl.rb +0 -9
  329. data/test/rubygems/foo/discover.rb +0 -1
  330. data/test/rubygems/future_cert.pem +0 -19
  331. data/test/rubygems/future_cert_32.pem +0 -19
  332. data/test/rubygems/good_rake.rb +0 -3
  333. data/test/rubygems/grandchild_cert.pem +0 -19
  334. data/test/rubygems/grandchild_cert_32.pem +0 -19
  335. data/test/rubygems/grandchild_key.pem +0 -27
  336. data/test/rubygems/helper.rb +0 -1649
  337. data/test/rubygems/installer_test_case.rb +0 -248
  338. data/test/rubygems/invalid_client.pem +0 -49
  339. data/test/rubygems/invalid_issuer_cert.pem +0 -20
  340. data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
  341. data/test/rubygems/invalid_key.pem +0 -27
  342. data/test/rubygems/invalid_signer_cert.pem +0 -19
  343. data/test/rubygems/invalid_signer_cert_32.pem +0 -19
  344. data/test/rubygems/invalidchild_cert.pem +0 -19
  345. data/test/rubygems/invalidchild_cert_32.pem +0 -19
  346. data/test/rubygems/invalidchild_key.pem +0 -27
  347. data/test/rubygems/multifactor_auth_utilities.rb +0 -111
  348. data/test/rubygems/package/tar_test_case.rb +0 -175
  349. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  350. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  351. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  352. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -4
  353. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -5
  354. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -4
  355. data/test/rubygems/private3072_key.pem +0 -40
  356. data/test/rubygems/private_ec_key.pem +0 -9
  357. data/test/rubygems/private_key.pem +0 -27
  358. data/test/rubygems/public3072_cert.pem +0 -25
  359. data/test/rubygems/public_cert.pem +0 -20
  360. data/test/rubygems/public_cert_32.pem +0 -19
  361. data/test/rubygems/public_key.pem +0 -9
  362. data/test/rubygems/rubygems/commands/crash_command.rb +0 -5
  363. data/test/rubygems/rubygems_plugin.rb +0 -24
  364. data/test/rubygems/sff/discover.rb +0 -1
  365. data/test/rubygems/simple_gem.rb +0 -68
  366. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  367. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  368. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -14
  369. data/test/rubygems/ssl_cert.pem +0 -80
  370. data/test/rubygems/ssl_key.pem +0 -27
  371. data/test/rubygems/test_bundled_ca.rb +0 -61
  372. data/test/rubygems/test_config.rb +0 -28
  373. data/test/rubygems/test_deprecate.rb +0 -158
  374. data/test/rubygems/test_exit.rb +0 -17
  375. data/test/rubygems/test_gem.rb +0 -1799
  376. data/test/rubygems/test_gem_available_set.rb +0 -130
  377. data/test/rubygems/test_gem_bundler_version_finder.rb +0 -127
  378. data/test/rubygems/test_gem_command.rb +0 -403
  379. data/test/rubygems/test_gem_command_manager.rb +0 -400
  380. data/test/rubygems/test_gem_commands_build_command.rb +0 -739
  381. data/test/rubygems/test_gem_commands_cert_command.rb +0 -866
  382. data/test/rubygems/test_gem_commands_check_command.rb +0 -68
  383. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -292
  384. data/test/rubygems/test_gem_commands_contents_command.rb +0 -271
  385. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -228
  386. data/test/rubygems/test_gem_commands_environment_command.rb +0 -169
  387. data/test/rubygems/test_gem_commands_exec_command.rb +0 -857
  388. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -258
  389. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -81
  390. data/test/rubygems/test_gem_commands_help_command.rb +0 -94
  391. data/test/rubygems/test_gem_commands_info_command.rb +0 -70
  392. data/test/rubygems/test_gem_commands_install_command.rb +0 -1573
  393. data/test/rubygems/test_gem_commands_list_command.rb +0 -33
  394. data/test/rubygems/test_gem_commands_lock_command.rb +0 -67
  395. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  396. data/test/rubygems/test_gem_commands_open_command.rb +0 -101
  397. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -50
  398. data/test/rubygems/test_gem_commands_owner_command.rb +0 -503
  399. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -708
  400. data/test/rubygems/test_gem_commands_push_command.rb +0 -603
  401. data/test/rubygems/test_gem_commands_query_command.rb +0 -858
  402. data/test/rubygems/test_gem_commands_search_command.rb +0 -16
  403. data/test/rubygems/test_gem_commands_server_command.rb +0 -20
  404. data/test/rubygems/test_gem_commands_setup_command.rb +0 -474
  405. data/test/rubygems/test_gem_commands_signin_command.rb +0 -259
  406. data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
  407. data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
  408. data/test/rubygems/test_gem_commands_specification_command.rb +0 -277
  409. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  410. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -542
  411. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -224
  412. data/test/rubygems/test_gem_commands_update_command.rb +0 -836
  413. data/test/rubygems/test_gem_commands_which_command.rb +0 -85
  414. data/test/rubygems/test_gem_commands_yank_command.rb +0 -299
  415. data/test/rubygems/test_gem_config_file.rb +0 -551
  416. data/test/rubygems/test_gem_dependency.rb +0 -398
  417. data/test/rubygems/test_gem_dependency_installer.rb +0 -1190
  418. data/test/rubygems/test_gem_dependency_list.rb +0 -265
  419. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -27
  420. data/test/rubygems/test_gem_doctor.rb +0 -195
  421. data/test/rubygems/test_gem_ext_builder.rb +0 -337
  422. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
  423. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
  424. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +0 -249
  425. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +0 -10
  426. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +0 -27
  427. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +0 -3
  428. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
  429. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -249
  430. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
  431. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -10
  432. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -51
  433. data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -167
  434. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -34
  435. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -60
  436. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -84
  437. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -80
  438. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -229
  439. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -113
  440. data/test/rubygems/test_gem_gem_runner.rb +0 -119
  441. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -361
  442. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -60
  443. data/test/rubygems/test_gem_indexer.rb +0 -381
  444. data/test/rubygems/test_gem_install_update_options.rb +0 -208
  445. data/test/rubygems/test_gem_installer.rb +0 -2512
  446. data/test/rubygems/test_gem_local_remote_options.rb +0 -133
  447. data/test/rubygems/test_gem_name_tuple.rb +0 -43
  448. data/test/rubygems/test_gem_package.rb +0 -1306
  449. data/test/rubygems/test_gem_package_old.rb +0 -91
  450. data/test/rubygems/test_gem_package_tar_header.rb +0 -226
  451. data/test/rubygems/test_gem_package_tar_reader.rb +0 -150
  452. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -350
  453. data/test/rubygems/test_gem_package_tar_writer.rb +0 -331
  454. data/test/rubygems/test_gem_package_task.rb +0 -118
  455. data/test/rubygems/test_gem_path_support.rb +0 -139
  456. data/test/rubygems/test_gem_platform.rb +0 -497
  457. data/test/rubygems/test_gem_rdoc.rb +0 -137
  458. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1227
  459. data/test/rubygems/test_gem_request.rb +0 -547
  460. data/test/rubygems/test_gem_request_connection_pools.rb +0 -152
  461. data/test/rubygems/test_gem_request_set.rb +0 -672
  462. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -853
  463. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -469
  464. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -544
  465. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -307
  466. data/test/rubygems/test_gem_requirement.rb +0 -505
  467. data/test/rubygems/test_gem_resolver.rb +0 -859
  468. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -43
  469. data/test/rubygems/test_gem_resolver_api_set.rb +0 -210
  470. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -167
  471. data/test/rubygems/test_gem_resolver_best_set.rb +0 -159
  472. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -44
  473. data/test/rubygems/test_gem_resolver_conflict.rb +0 -82
  474. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -83
  475. data/test/rubygems/test_gem_resolver_git_set.rb +0 -188
  476. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  477. data/test/rubygems/test_gem_resolver_index_set.rb +0 -88
  478. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -93
  479. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -47
  480. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -320
  481. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -44
  482. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -62
  483. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -98
  484. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -19
  485. data/test/rubygems/test_gem_resolver_specification.rb +0 -63
  486. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -82
  487. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -82
  488. data/test/rubygems/test_gem_security.rb +0 -341
  489. data/test/rubygems/test_gem_security_policy.rb +0 -535
  490. data/test/rubygems/test_gem_security_signer.rb +0 -218
  491. data/test/rubygems/test_gem_security_trust_dir.rb +0 -99
  492. data/test/rubygems/test_gem_silent_ui.rb +0 -123
  493. data/test/rubygems/test_gem_source.rb +0 -254
  494. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -37
  495. data/test/rubygems/test_gem_source_git.rb +0 -310
  496. data/test/rubygems/test_gem_source_installed.rb +0 -35
  497. data/test/rubygems/test_gem_source_list.rb +0 -119
  498. data/test/rubygems/test_gem_source_local.rb +0 -107
  499. data/test/rubygems/test_gem_source_lock.rb +0 -113
  500. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  501. data/test/rubygems/test_gem_source_subpath_problem.rb +0 -50
  502. data/test/rubygems/test_gem_source_vendor.rb +0 -30
  503. data/test/rubygems/test_gem_spec_fetcher.rb +0 -338
  504. data/test/rubygems/test_gem_specification.rb +0 -3856
  505. data/test/rubygems/test_gem_stream_ui.rb +0 -255
  506. data/test/rubygems/test_gem_stub_specification.rb +0 -278
  507. data/test/rubygems/test_gem_text.rb +0 -103
  508. data/test/rubygems/test_gem_uninstaller.rb +0 -675
  509. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -31
  510. data/test/rubygems/test_gem_update_suggestion.rb +0 -209
  511. data/test/rubygems/test_gem_uri.rb +0 -41
  512. data/test/rubygems/test_gem_uri_formatter.rb +0 -27
  513. data/test/rubygems/test_gem_util.rb +0 -91
  514. data/test/rubygems/test_gem_validator.rb +0 -42
  515. data/test/rubygems/test_gem_version.rb +0 -305
  516. data/test/rubygems/test_gem_version_option.rb +0 -165
  517. data/test/rubygems/test_kernel.rb +0 -124
  518. data/test/rubygems/test_project_sanity.rb +0 -49
  519. data/test/rubygems/test_remote_fetch_error.rb +0 -20
  520. data/test/rubygems/test_require.rb +0 -732
  521. data/test/rubygems/test_rubygems.rb +0 -76
  522. data/test/rubygems/test_webauthn_listener.rb +0 -143
  523. data/test/rubygems/test_webauthn_listener_response.rb +0 -93
  524. data/test/rubygems/test_webauthn_poller.rb +0 -124
  525. data/test/rubygems/utilities.rb +0 -436
  526. data/test/rubygems/wrong_key_cert.pem +0 -19
  527. data/test/rubygems/wrong_key_cert_32.pem +0 -19
  528. data/test/test_changelog_generator.rb +0 -17
@@ -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
@@ -13,7 +13,6 @@ require_relative "../rubygems"
13
13
  # Mixin methods for local and remote Gem::Command options.
14
14
 
15
15
  module Gem::LocalRemoteOptions
16
-
17
16
  ##
18
17
  # Allows Gem::OptionParser to handle HTTP URIs.
19
18
 
@@ -40,17 +39,17 @@ module Gem::LocalRemoteOptions
40
39
 
41
40
  def add_local_remote_options
42
41
  add_option(:"Local/Remote", "-l", "--local",
43
- "Restrict operations to the LOCAL domain") do |value, options|
42
+ "Restrict operations to the LOCAL domain") do |_value, options|
44
43
  options[:domain] = :local
45
44
  end
46
45
 
47
46
  add_option(:"Local/Remote", "-r", "--remote",
48
- "Restrict operations to the REMOTE domain") do |value, options|
47
+ "Restrict operations to the REMOTE domain") do |_value, options|
49
48
  options[:domain] = :remote
50
49
  end
51
50
 
52
51
  add_option(:"Local/Remote", "-b", "--both",
53
- "Allow LOCAL and REMOTE operations") do |value, options|
52
+ "Allow LOCAL and REMOTE operations") do |_value, options|
54
53
  options[:domain] = :both
55
54
  end
56
55
 
@@ -67,8 +66,7 @@ module Gem::LocalRemoteOptions
67
66
  def add_bulk_threshold_option
68
67
  add_option(:"Local/Remote", "-B", "--bulk-threshold COUNT",
69
68
  "Threshold for switching to bulk",
70
- "synchronization (default #{Gem.configuration.bulk_threshold})") do
71
- |value, options|
69
+ "synchronization (default #{Gem.configuration.bulk_threshold})") do |value, _options|
72
70
  Gem.configuration.bulk_threshold = value.to_i
73
71
  end
74
72
  end
@@ -78,7 +76,7 @@ module Gem::LocalRemoteOptions
78
76
 
79
77
  def add_clear_sources_option
80
78
  add_option(:"Local/Remote", "--clear-sources",
81
- "Clear the gem sources") do |value, options|
79
+ "Clear the gem sources") do |_value, options|
82
80
  Gem.sources = nil
83
81
  options[:sources_cleared] = true
84
82
  end
@@ -92,7 +90,7 @@ module Gem::LocalRemoteOptions
92
90
 
93
91
  add_option(:"Local/Remote", "-p", "--[no-]http-proxy [URL]", URI::HTTP,
94
92
  "Use HTTP proxy for remote operations") do |value, options|
95
- options[:http_proxy] = (value == false) ? :no_proxy : value
93
+ options[:http_proxy] = value == false ? :no_proxy : value
96
94
  Gem.configuration[:http_proxy] = options[:http_proxy]
97
95
  end
98
96
  end
@@ -120,7 +118,7 @@ module Gem::LocalRemoteOptions
120
118
 
121
119
  def add_update_sources_option
122
120
  add_option(:Deprecated, "-u", "--[no-]update-sources",
123
- "Update local source cache") do |value, options|
121
+ "Update local source cache") do |value, _options|
124
122
  Gem.configuration.update_sources = value
125
123
  end
126
124
  end
@@ -145,5 +143,4 @@ module Gem::LocalRemoteOptions
145
143
  def remote?
146
144
  options[:domain] == :remote || options[:domain] == :both
147
145
  end
148
-
149
146
  end
@@ -6,14 +6,12 @@
6
6
  # wrap the data returned from the indexes.
7
7
 
8
8
  class Gem::NameTuple
9
- def initialize(name, version, platform="ruby")
9
+ def initialize(name, version, platform=Gem::Platform::RUBY)
10
10
  @name = name
11
11
  @version = version
12
12
 
13
- unless platform.is_a? Gem::Platform
14
- platform = "ruby" if !platform || platform.empty?
15
- end
16
-
13
+ platform &&= platform.to_s
14
+ platform = Gem::Platform::RUBY if !platform || platform.empty?
17
15
  @platform = platform
18
16
  end
19
17
 
@@ -32,7 +30,7 @@ class Gem::NameTuple
32
30
  # [name, version, platform] tuples.
33
31
 
34
32
  def self.to_basic(list)
35
- list.map {|t| t.to_a }
33
+ list.map(&:to_a)
36
34
  end
37
35
 
38
36
  ##
@@ -49,11 +47,11 @@ class Gem::NameTuple
49
47
 
50
48
  def full_name
51
49
  case @platform
52
- when nil, "ruby", ""
50
+ when nil, "", Gem::Platform::RUBY
53
51
  "#{@name}-#{@version}"
54
52
  else
55
53
  "#{@name}-#{@version}-#{@platform}"
56
- end.dup.tap(&Gem::UNTAINT)
54
+ end
57
55
  end
58
56
 
59
57
  ##
@@ -87,7 +85,7 @@ class Gem::NameTuple
87
85
  "#<Gem::NameTuple #{@name}, #{@version}, #{@platform}>"
88
86
  end
89
87
 
90
- alias to_s inspect # :nodoc:
88
+ alias_method :to_s, :inspect # :nodoc:
91
89
 
92
90
  def <=>(other)
93
91
  [@name, @version, Gem::Platform.sort_priority(@platform)] <=>
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../net-http/lib/net/http"
@@ -0,0 +1,22 @@
1
+ Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.
2
+
3
+ Redistribution and use in source and binary forms, with or without
4
+ modification, are permitted provided that the following conditions
5
+ are met:
6
+ 1. Redistributions of source code must retain the above copyright
7
+ notice, this list of conditions and the following disclaimer.
8
+ 2. Redistributions in binary form must reproduce the above copyright
9
+ notice, this list of conditions and the following disclaimer in the
10
+ documentation and/or other materials provided with the distribution.
11
+
12
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
13
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
15
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
16
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
17
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
18
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
19
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
20
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
21
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
22
+ SUCH DAMAGE.