rubygems-update 3.4.21 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (564) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +132 -2
  3. data/Manifest.txt +39 -221
  4. data/README.md +1 -3
  5. data/bundler/CHANGELOG.md +74 -0
  6. data/bundler/README.md +1 -2
  7. data/bundler/bundler.gemspec +4 -2
  8. data/bundler/exe/bundle +1 -10
  9. data/bundler/lib/bundler/build_metadata.rb +3 -3
  10. data/bundler/lib/bundler/capistrano.rb +1 -1
  11. data/bundler/lib/bundler/checksum.rb +245 -0
  12. data/bundler/lib/bundler/ci_detector.rb +75 -0
  13. data/bundler/lib/bundler/cli/add.rb +3 -3
  14. data/bundler/lib/bundler/cli/binstubs.rb +4 -4
  15. data/bundler/lib/bundler/cli/cache.rb +1 -1
  16. data/bundler/lib/bundler/cli/check.rb +1 -1
  17. data/bundler/lib/bundler/cli/common.rb +9 -1
  18. data/bundler/lib/bundler/cli/config.rb +8 -7
  19. data/bundler/lib/bundler/cli/console.rb +3 -2
  20. data/bundler/lib/bundler/cli/doctor.rb +2 -2
  21. data/bundler/lib/bundler/cli/exec.rb +1 -1
  22. data/bundler/lib/bundler/cli/gem.rb +31 -23
  23. data/bundler/lib/bundler/cli/info.rb +2 -13
  24. data/bundler/lib/bundler/cli/install.rb +5 -4
  25. data/bundler/lib/bundler/cli/issue.rb +1 -1
  26. data/bundler/lib/bundler/cli/lock.rb +4 -4
  27. data/bundler/lib/bundler/cli/open.rb +1 -1
  28. data/bundler/lib/bundler/cli/outdated.rb +6 -6
  29. data/bundler/lib/bundler/cli/plugin.rb +7 -14
  30. data/bundler/lib/bundler/cli/pristine.rb +38 -30
  31. data/bundler/lib/bundler/cli/show.rb +2 -2
  32. data/bundler/lib/bundler/cli/update.rb +5 -5
  33. data/bundler/lib/bundler/cli.rb +215 -263
  34. data/bundler/lib/bundler/compact_index_client/cache.rb +29 -9
  35. data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
  36. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  37. data/bundler/lib/bundler/compact_index_client/updater.rb +79 -81
  38. data/bundler/lib/bundler/compact_index_client.rb +14 -7
  39. data/bundler/lib/bundler/constants.rb +1 -1
  40. data/bundler/lib/bundler/current_ruby.rb +5 -21
  41. data/bundler/lib/bundler/definition.rb +43 -16
  42. data/bundler/lib/bundler/dependency.rb +16 -12
  43. data/bundler/lib/bundler/digest.rb +2 -2
  44. data/bundler/lib/bundler/dsl.rb +43 -25
  45. data/bundler/lib/bundler/endpoint_specification.rb +6 -2
  46. data/bundler/lib/bundler/env.rb +1 -3
  47. data/bundler/lib/bundler/errors.rb +58 -0
  48. data/bundler/lib/bundler/fetcher/base.rb +3 -1
  49. data/bundler/lib/bundler/fetcher/compact_index.rb +4 -4
  50. data/bundler/lib/bundler/fetcher/downloader.rb +13 -11
  51. data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  52. data/bundler/lib/bundler/fetcher/index.rb +1 -1
  53. data/bundler/lib/bundler/fetcher.rb +28 -25
  54. data/bundler/lib/bundler/friendly_errors.rb +5 -5
  55. data/bundler/lib/bundler/gem_helper.rb +1 -1
  56. data/bundler/lib/bundler/gem_helpers.rb +12 -2
  57. data/bundler/lib/bundler/graph.rb +9 -9
  58. data/bundler/lib/bundler/index.rb +1 -2
  59. data/bundler/lib/bundler/injector.rb +1 -1
  60. data/bundler/lib/bundler/inline.rb +3 -3
  61. data/bundler/lib/bundler/installer/gem_installer.rb +10 -10
  62. data/bundler/lib/bundler/installer/parallel_installer.rb +16 -8
  63. data/bundler/lib/bundler/installer/standalone.rb +2 -3
  64. data/bundler/lib/bundler/installer.rb +9 -9
  65. data/bundler/lib/bundler/lazy_specification.rb +28 -17
  66. data/bundler/lib/bundler/lockfile_generator.rb +9 -0
  67. data/bundler/lib/bundler/lockfile_parser.rb +81 -10
  68. data/bundler/lib/bundler/man/bundle-add.1 +3 -26
  69. data/bundler/lib/bundler/man/bundle-binstubs.1 +4 -16
  70. data/bundler/lib/bundler/man/bundle-cache.1 +3 -24
  71. data/bundler/lib/bundler/man/bundle-check.1 +3 -12
  72. data/bundler/lib/bundler/man/bundle-clean.1 +3 -10
  73. data/bundler/lib/bundler/man/bundle-config.1 +20 -211
  74. data/bundler/lib/bundler/man/bundle-config.1.ronn +6 -0
  75. data/bundler/lib/bundler/man/bundle-console.1 +4 -22
  76. data/bundler/lib/bundler/man/bundle-doctor.1 +4 -18
  77. data/bundler/lib/bundler/man/bundle-exec.1 +12 -73
  78. data/bundler/lib/bundler/man/bundle-gem.1 +13 -49
  79. data/bundler/lib/bundler/man/bundle-help.1 +3 -7
  80. data/bundler/lib/bundler/man/bundle-info.1 +3 -9
  81. data/bundler/lib/bundler/man/bundle-init.1 +3 -12
  82. data/bundler/lib/bundler/man/bundle-inject.1 +6 -19
  83. data/bundler/lib/bundler/man/bundle-install.1 +27 -125
  84. data/bundler/lib/bundler/man/bundle-install.1.ronn +1 -0
  85. data/bundler/lib/bundler/man/bundle-list.1 +4 -19
  86. data/bundler/lib/bundler/man/bundle-lock.1 +5 -29
  87. data/bundler/lib/bundler/man/bundle-open.1 +7 -27
  88. data/bundler/lib/bundler/man/bundle-outdated.1 +3 -55
  89. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +1 -0
  90. data/bundler/lib/bundler/man/bundle-platform.1 +5 -27
  91. data/bundler/lib/bundler/man/bundle-plugin.1 +3 -29
  92. data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
  93. data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
  94. data/bundler/lib/bundler/man/bundle-show.1 +3 -10
  95. data/bundler/lib/bundler/man/bundle-update.1 +18 -137
  96. data/bundler/lib/bundler/man/bundle-version.1 +3 -16
  97. data/bundler/lib/bundler/man/bundle-viz.1 +4 -16
  98. data/bundler/lib/bundler/man/bundle.1 +5 -44
  99. data/bundler/lib/bundler/man/gemfile.5 +24 -301
  100. data/bundler/lib/bundler/man/gemfile.5.ronn +4 -0
  101. data/bundler/lib/bundler/match_metadata.rb +4 -0
  102. data/bundler/lib/bundler/match_platform.rb +1 -1
  103. data/bundler/lib/bundler/plugin/api/source.rb +3 -2
  104. data/bundler/lib/bundler/plugin/index.rb +8 -0
  105. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  106. data/bundler/lib/bundler/plugin.rb +12 -5
  107. data/bundler/lib/bundler/resolver/base.rb +1 -1
  108. data/bundler/lib/bundler/resolver/incompatibility.rb +1 -1
  109. data/bundler/lib/bundler/resolver/spec_group.rb +1 -4
  110. data/bundler/lib/bundler/resolver.rb +16 -16
  111. data/bundler/lib/bundler/ruby_dsl.rb +20 -12
  112. data/bundler/lib/bundler/ruby_version.rb +1 -1
  113. data/bundler/lib/bundler/rubygems_ext.rb +27 -54
  114. data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -58
  115. data/bundler/lib/bundler/rubygems_integration.rb +25 -94
  116. data/bundler/lib/bundler/runtime.rb +2 -2
  117. data/bundler/lib/bundler/self_manager.rb +23 -7
  118. data/bundler/lib/bundler/settings.rb +27 -7
  119. data/bundler/lib/bundler/setup.rb +4 -1
  120. data/bundler/lib/bundler/shared_helpers.rb +35 -13
  121. data/bundler/lib/bundler/source/git/git_proxy.rb +22 -14
  122. data/bundler/lib/bundler/source/git.rb +4 -3
  123. data/bundler/lib/bundler/source/metadata.rb +16 -16
  124. data/bundler/lib/bundler/source/path.rb +7 -6
  125. data/bundler/lib/bundler/source/rubygems.rb +21 -14
  126. data/bundler/lib/bundler/source.rb +2 -0
  127. data/bundler/lib/bundler/spec_set.rb +43 -12
  128. data/bundler/lib/bundler/stub_specification.rb +1 -0
  129. data/bundler/lib/bundler/templates/Executable.bundler +1 -1
  130. data/bundler/lib/bundler/templates/newgem/README.md.tt +3 -3
  131. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +2 -6
  132. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
  133. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
  134. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
  135. data/bundler/lib/bundler/ui/shell.rb +2 -2
  136. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  137. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
  138. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
  139. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
  140. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
  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 +36 -36
  143. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
  144. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  145. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
  146. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +8 -10
  147. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +15 -4
  148. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +15 -15
  149. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
  150. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
  151. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +4 -0
  152. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +16 -25
  153. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
  154. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
  155. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
  156. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +20 -1
  157. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
  158. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +27 -8
  159. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +44 -6
  160. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
  161. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
  162. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +26 -150
  163. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +4 -46
  164. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  165. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -45
  166. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb +49 -0
  167. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
  168. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  169. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  170. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  171. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
  172. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  173. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +155 -8
  174. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
  175. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
  176. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
  177. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
  178. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  179. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  180. data/bundler/lib/bundler/vendored_persistent.rb +0 -4
  181. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  182. data/bundler/lib/bundler/version.rb +1 -1
  183. data/bundler/lib/bundler/vlad.rb +1 -1
  184. data/bundler/lib/bundler/yaml_serializer.rb +9 -4
  185. data/bundler/lib/bundler.rb +38 -35
  186. data/lib/rubygems/available_set.rb +4 -4
  187. data/lib/rubygems/basic_specification.rb +35 -37
  188. data/lib/rubygems/bundler_version_finder.rb +4 -4
  189. data/lib/rubygems/ci_detector.rb +75 -0
  190. data/lib/rubygems/command.rb +15 -17
  191. data/lib/rubygems/command_manager.rb +5 -4
  192. data/lib/rubygems/commands/build_command.rb +2 -2
  193. data/lib/rubygems/commands/cert_command.rb +2 -3
  194. data/lib/rubygems/commands/check_command.rb +4 -4
  195. data/lib/rubygems/commands/cleanup_command.rb +12 -14
  196. data/lib/rubygems/commands/contents_command.rb +5 -5
  197. data/lib/rubygems/commands/dependency_command.rb +4 -5
  198. data/lib/rubygems/commands/environment_command.rb +3 -5
  199. data/lib/rubygems/commands/exec_command.rb +1 -1
  200. data/lib/rubygems/commands/fetch_command.rb +2 -2
  201. data/lib/rubygems/commands/generate_index_command.rb +39 -74
  202. data/lib/rubygems/commands/help_command.rb +4 -4
  203. data/lib/rubygems/commands/info_command.rb +2 -2
  204. data/lib/rubygems/commands/install_command.rb +8 -16
  205. data/lib/rubygems/commands/list_command.rb +2 -2
  206. data/lib/rubygems/commands/lock_command.rb +1 -1
  207. data/lib/rubygems/commands/open_command.rb +1 -1
  208. data/lib/rubygems/commands/owner_command.rb +1 -1
  209. data/lib/rubygems/commands/pristine_command.rb +13 -15
  210. data/lib/rubygems/commands/push_command.rb +2 -2
  211. data/lib/rubygems/commands/query_command.rb +4 -5
  212. data/lib/rubygems/commands/rdoc_command.rb +2 -2
  213. data/lib/rubygems/commands/search_command.rb +2 -2
  214. data/lib/rubygems/commands/setup_command.rb +33 -36
  215. data/lib/rubygems/commands/sources_command.rb +12 -12
  216. data/lib/rubygems/commands/specification_command.rb +10 -10
  217. data/lib/rubygems/commands/stale_command.rb +1 -1
  218. data/lib/rubygems/commands/uninstall_command.rb +13 -14
  219. data/lib/rubygems/commands/unpack_command.rb +7 -7
  220. data/lib/rubygems/commands/update_command.rb +11 -13
  221. data/lib/rubygems/commands/which_command.rb +1 -1
  222. data/lib/rubygems/commands/yank_command.rb +1 -1
  223. data/lib/rubygems/compatibility.rb +5 -6
  224. data/lib/rubygems/config_file.rb +7 -7
  225. data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
  226. data/lib/rubygems/core_ext/kernel_require.rb +20 -49
  227. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  228. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  229. data/lib/rubygems/defaults.rb +15 -3
  230. data/lib/rubygems/dependency.rb +12 -14
  231. data/lib/rubygems/dependency_installer.rb +30 -31
  232. data/lib/rubygems/dependency_list.rb +1 -1
  233. data/lib/rubygems/deprecate.rb +16 -15
  234. data/lib/rubygems/doctor.rb +6 -6
  235. data/lib/rubygems/errors.rb +2 -6
  236. data/lib/rubygems/exceptions.rb +2 -1
  237. data/lib/rubygems/ext/builder.rb +15 -10
  238. data/lib/rubygems/ext/cargo_builder.rb +5 -5
  239. data/lib/rubygems/ext/ext_conf_builder.rb +2 -4
  240. data/lib/rubygems/ext/rake_builder.rb +1 -1
  241. data/lib/rubygems/gem_runner.rb +4 -4
  242. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +3 -3
  243. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -3
  244. data/lib/rubygems/gemcutter_utilities.rb +18 -19
  245. data/lib/rubygems/install_update_options.rb +18 -19
  246. data/lib/rubygems/installer.rb +66 -45
  247. data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
  248. data/lib/rubygems/local_remote_options.rb +8 -11
  249. data/lib/rubygems/name_tuple.rb +7 -9
  250. data/lib/rubygems/net/http.rb +3 -0
  251. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  252. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  253. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  254. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  255. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  256. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  257. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  258. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  259. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  260. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  261. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  262. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  263. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  264. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  265. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  266. data/lib/rubygems/optparse/lib/optparse.rb +39 -17
  267. data/lib/rubygems/package/digest_io.rb +1 -1
  268. data/lib/rubygems/package/old.rb +2 -2
  269. data/lib/rubygems/package/tar_header.rb +45 -39
  270. data/lib/rubygems/package/tar_reader/entry.rb +5 -4
  271. data/lib/rubygems/package/tar_reader.rb +14 -5
  272. data/lib/rubygems/package/tar_writer.rb +20 -18
  273. data/lib/rubygems/package.rb +28 -27
  274. data/lib/rubygems/package_task.rb +2 -2
  275. data/lib/rubygems/path_support.rb +10 -11
  276. data/lib/rubygems/platform.rb +65 -48
  277. data/lib/rubygems/query_utils.rb +7 -9
  278. data/lib/rubygems/remote_fetcher.rb +17 -17
  279. data/lib/rubygems/request/connection_pools.rb +3 -3
  280. data/lib/rubygems/request.rb +20 -17
  281. data/lib/rubygems/request_set/gem_dependency_api.rb +120 -123
  282. data/lib/rubygems/request_set/lockfile/parser.rb +9 -9
  283. data/lib/rubygems/request_set/lockfile/tokenizer.rb +20 -12
  284. data/lib/rubygems/request_set/lockfile.rb +6 -11
  285. data/lib/rubygems/request_set.rb +5 -5
  286. data/lib/rubygems/requirement.rb +7 -7
  287. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  288. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  289. data/lib/rubygems/resolver/activation_request.rb +1 -3
  290. data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
  291. data/lib/rubygems/resolver/best_set.rb +1 -1
  292. data/lib/rubygems/resolver/composed_set.rb +1 -1
  293. data/lib/rubygems/resolver/conflict.rb +4 -12
  294. data/lib/rubygems/resolver/index_set.rb +4 -4
  295. data/lib/rubygems/resolver/index_specification.rb +2 -2
  296. data/lib/rubygems/resolver/installer_set.rb +5 -6
  297. data/lib/rubygems/resolver/lock_set.rb +1 -1
  298. data/lib/rubygems/resolver.rb +6 -13
  299. data/lib/rubygems/s3_uri_signer.rb +6 -6
  300. data/lib/rubygems/safe_marshal/elements.rb +138 -0
  301. data/lib/rubygems/safe_marshal/reader.rb +306 -0
  302. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  303. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
  304. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  305. data/lib/rubygems/safe_marshal.rb +74 -0
  306. data/lib/rubygems/safe_yaml.rb +5 -28
  307. data/lib/rubygems/security/policies.rb +36 -38
  308. data/lib/rubygems/security/policy.rb +7 -11
  309. data/lib/rubygems/security/signer.rb +1 -1
  310. data/lib/rubygems/security/trust_dir.rb +4 -4
  311. data/lib/rubygems/security.rb +8 -22
  312. data/lib/rubygems/source/git.rb +1 -3
  313. data/lib/rubygems/source/installed.rb +0 -2
  314. data/lib/rubygems/source/local.rb +7 -9
  315. data/lib/rubygems/source/lock.rb +1 -3
  316. data/lib/rubygems/source/specific_file.rb +0 -1
  317. data/lib/rubygems/source/vendor.rb +0 -2
  318. data/lib/rubygems/source.rb +12 -12
  319. data/lib/rubygems/source_list.rb +5 -5
  320. data/lib/rubygems/spec_fetcher.rb +31 -31
  321. data/lib/rubygems/specification.rb +145 -150
  322. data/lib/rubygems/specification_policy.rb +61 -31
  323. data/lib/rubygems/stub_specification.rb +4 -5
  324. data/lib/rubygems/text.rb +1 -2
  325. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  326. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  327. data/lib/rubygems/timeout.rb +3 -0
  328. data/lib/rubygems/tsort/lib/tsort.rb +3 -0
  329. data/lib/rubygems/uninstaller.rb +9 -11
  330. data/lib/rubygems/update_suggestion.rb +5 -18
  331. data/lib/rubygems/uri_formatter.rb +1 -1
  332. data/lib/rubygems/user_interaction.rb +17 -23
  333. data/lib/rubygems/util/licenses.rb +113 -35
  334. data/lib/rubygems/util/list.rb +3 -1
  335. data/lib/rubygems/util.rb +2 -4
  336. data/lib/rubygems/validator.rb +6 -4
  337. data/lib/rubygems/version.rb +35 -29
  338. data/lib/rubygems/version_option.rb +2 -5
  339. data/lib/rubygems/yaml_serializer.rb +9 -4
  340. data/lib/rubygems.rb +42 -42
  341. data/rubygems-update.gemspec +4 -4
  342. data/setup.rb +2 -2
  343. metadata +43 -225
  344. data/lib/rubygems/indexer.rb +0 -428
  345. data/lib/rubygems/mock_gem_ui.rb +0 -86
  346. data/test/rubygems/alternate_cert.pem +0 -19
  347. data/test/rubygems/alternate_cert_32.pem +0 -19
  348. data/test/rubygems/alternate_key.pem +0 -27
  349. data/test/rubygems/bad_rake.rb +0 -3
  350. data/test/rubygems/bundler_test_gem.rb +0 -424
  351. data/test/rubygems/ca_cert.pem +0 -77
  352. data/test/rubygems/child_cert.pem +0 -19
  353. data/test/rubygems/child_cert_32.pem +0 -19
  354. data/test/rubygems/child_key.pem +0 -27
  355. data/test/rubygems/client.pem +0 -107
  356. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  357. data/test/rubygems/data/gem-private_key.pem +0 -27
  358. data/test/rubygems/data/gem-public_cert.pem +0 -20
  359. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  360. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  361. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  362. data/test/rubygems/encrypted_private_key.pem +0 -30
  363. data/test/rubygems/expired_cert.pem +0 -19
  364. data/test/rubygems/fake_certlib/openssl.rb +0 -9
  365. data/test/rubygems/foo/discover.rb +0 -1
  366. data/test/rubygems/future_cert.pem +0 -19
  367. data/test/rubygems/future_cert_32.pem +0 -19
  368. data/test/rubygems/good_rake.rb +0 -3
  369. data/test/rubygems/grandchild_cert.pem +0 -19
  370. data/test/rubygems/grandchild_cert_32.pem +0 -19
  371. data/test/rubygems/grandchild_key.pem +0 -27
  372. data/test/rubygems/helper.rb +0 -1649
  373. data/test/rubygems/installer_test_case.rb +0 -248
  374. data/test/rubygems/invalid_client.pem +0 -49
  375. data/test/rubygems/invalid_issuer_cert.pem +0 -20
  376. data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
  377. data/test/rubygems/invalid_key.pem +0 -27
  378. data/test/rubygems/invalid_signer_cert.pem +0 -19
  379. data/test/rubygems/invalid_signer_cert_32.pem +0 -19
  380. data/test/rubygems/invalidchild_cert.pem +0 -19
  381. data/test/rubygems/invalidchild_cert_32.pem +0 -19
  382. data/test/rubygems/invalidchild_key.pem +0 -27
  383. data/test/rubygems/multifactor_auth_utilities.rb +0 -111
  384. data/test/rubygems/package/tar_test_case.rb +0 -175
  385. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  386. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  387. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  388. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -4
  389. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -5
  390. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -4
  391. data/test/rubygems/private3072_key.pem +0 -40
  392. data/test/rubygems/private_ec_key.pem +0 -9
  393. data/test/rubygems/private_key.pem +0 -27
  394. data/test/rubygems/public3072_cert.pem +0 -25
  395. data/test/rubygems/public_cert.pem +0 -20
  396. data/test/rubygems/public_cert_32.pem +0 -19
  397. data/test/rubygems/public_key.pem +0 -9
  398. data/test/rubygems/rubygems/commands/crash_command.rb +0 -5
  399. data/test/rubygems/rubygems_plugin.rb +0 -24
  400. data/test/rubygems/sff/discover.rb +0 -1
  401. data/test/rubygems/simple_gem.rb +0 -68
  402. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  403. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  404. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -14
  405. data/test/rubygems/ssl_cert.pem +0 -80
  406. data/test/rubygems/ssl_key.pem +0 -27
  407. data/test/rubygems/test_bundled_ca.rb +0 -61
  408. data/test/rubygems/test_config.rb +0 -28
  409. data/test/rubygems/test_deprecate.rb +0 -158
  410. data/test/rubygems/test_exit.rb +0 -17
  411. data/test/rubygems/test_gem.rb +0 -1799
  412. data/test/rubygems/test_gem_available_set.rb +0 -130
  413. data/test/rubygems/test_gem_bundler_version_finder.rb +0 -127
  414. data/test/rubygems/test_gem_command.rb +0 -403
  415. data/test/rubygems/test_gem_command_manager.rb +0 -400
  416. data/test/rubygems/test_gem_commands_build_command.rb +0 -739
  417. data/test/rubygems/test_gem_commands_cert_command.rb +0 -866
  418. data/test/rubygems/test_gem_commands_check_command.rb +0 -68
  419. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -292
  420. data/test/rubygems/test_gem_commands_contents_command.rb +0 -271
  421. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -228
  422. data/test/rubygems/test_gem_commands_environment_command.rb +0 -169
  423. data/test/rubygems/test_gem_commands_exec_command.rb +0 -857
  424. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -258
  425. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -81
  426. data/test/rubygems/test_gem_commands_help_command.rb +0 -94
  427. data/test/rubygems/test_gem_commands_info_command.rb +0 -70
  428. data/test/rubygems/test_gem_commands_install_command.rb +0 -1573
  429. data/test/rubygems/test_gem_commands_list_command.rb +0 -33
  430. data/test/rubygems/test_gem_commands_lock_command.rb +0 -67
  431. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  432. data/test/rubygems/test_gem_commands_open_command.rb +0 -101
  433. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -50
  434. data/test/rubygems/test_gem_commands_owner_command.rb +0 -503
  435. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -708
  436. data/test/rubygems/test_gem_commands_push_command.rb +0 -603
  437. data/test/rubygems/test_gem_commands_query_command.rb +0 -858
  438. data/test/rubygems/test_gem_commands_search_command.rb +0 -16
  439. data/test/rubygems/test_gem_commands_server_command.rb +0 -20
  440. data/test/rubygems/test_gem_commands_setup_command.rb +0 -474
  441. data/test/rubygems/test_gem_commands_signin_command.rb +0 -259
  442. data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
  443. data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
  444. data/test/rubygems/test_gem_commands_specification_command.rb +0 -277
  445. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  446. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -522
  447. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -224
  448. data/test/rubygems/test_gem_commands_update_command.rb +0 -836
  449. data/test/rubygems/test_gem_commands_which_command.rb +0 -85
  450. data/test/rubygems/test_gem_commands_yank_command.rb +0 -299
  451. data/test/rubygems/test_gem_config_file.rb +0 -551
  452. data/test/rubygems/test_gem_dependency.rb +0 -398
  453. data/test/rubygems/test_gem_dependency_installer.rb +0 -1190
  454. data/test/rubygems/test_gem_dependency_list.rb +0 -265
  455. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -27
  456. data/test/rubygems/test_gem_doctor.rb +0 -195
  457. data/test/rubygems/test_gem_ext_builder.rb +0 -337
  458. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
  459. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
  460. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +0 -249
  461. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +0 -10
  462. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +0 -27
  463. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +0 -3
  464. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
  465. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -249
  466. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
  467. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -10
  468. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -51
  469. data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -167
  470. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -34
  471. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -60
  472. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -84
  473. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -80
  474. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -229
  475. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -113
  476. data/test/rubygems/test_gem_gem_runner.rb +0 -119
  477. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -361
  478. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -60
  479. data/test/rubygems/test_gem_indexer.rb +0 -381
  480. data/test/rubygems/test_gem_install_update_options.rb +0 -208
  481. data/test/rubygems/test_gem_installer.rb +0 -2512
  482. data/test/rubygems/test_gem_local_remote_options.rb +0 -133
  483. data/test/rubygems/test_gem_name_tuple.rb +0 -43
  484. data/test/rubygems/test_gem_package.rb +0 -1306
  485. data/test/rubygems/test_gem_package_old.rb +0 -91
  486. data/test/rubygems/test_gem_package_tar_header.rb +0 -226
  487. data/test/rubygems/test_gem_package_tar_reader.rb +0 -135
  488. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -350
  489. data/test/rubygems/test_gem_package_tar_writer.rb +0 -331
  490. data/test/rubygems/test_gem_package_task.rb +0 -118
  491. data/test/rubygems/test_gem_path_support.rb +0 -139
  492. data/test/rubygems/test_gem_platform.rb +0 -497
  493. data/test/rubygems/test_gem_rdoc.rb +0 -137
  494. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1227
  495. data/test/rubygems/test_gem_request.rb +0 -547
  496. data/test/rubygems/test_gem_request_connection_pools.rb +0 -152
  497. data/test/rubygems/test_gem_request_set.rb +0 -672
  498. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -853
  499. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -469
  500. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -544
  501. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -307
  502. data/test/rubygems/test_gem_requirement.rb +0 -505
  503. data/test/rubygems/test_gem_resolver.rb +0 -859
  504. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -43
  505. data/test/rubygems/test_gem_resolver_api_set.rb +0 -210
  506. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -167
  507. data/test/rubygems/test_gem_resolver_best_set.rb +0 -159
  508. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -44
  509. data/test/rubygems/test_gem_resolver_conflict.rb +0 -82
  510. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -83
  511. data/test/rubygems/test_gem_resolver_git_set.rb +0 -188
  512. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  513. data/test/rubygems/test_gem_resolver_index_set.rb +0 -88
  514. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -93
  515. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -47
  516. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -320
  517. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -44
  518. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -62
  519. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -98
  520. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -19
  521. data/test/rubygems/test_gem_resolver_specification.rb +0 -63
  522. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -82
  523. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -82
  524. data/test/rubygems/test_gem_security.rb +0 -341
  525. data/test/rubygems/test_gem_security_policy.rb +0 -535
  526. data/test/rubygems/test_gem_security_signer.rb +0 -218
  527. data/test/rubygems/test_gem_security_trust_dir.rb +0 -99
  528. data/test/rubygems/test_gem_silent_ui.rb +0 -123
  529. data/test/rubygems/test_gem_source.rb +0 -254
  530. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -37
  531. data/test/rubygems/test_gem_source_git.rb +0 -310
  532. data/test/rubygems/test_gem_source_installed.rb +0 -35
  533. data/test/rubygems/test_gem_source_list.rb +0 -119
  534. data/test/rubygems/test_gem_source_local.rb +0 -107
  535. data/test/rubygems/test_gem_source_lock.rb +0 -113
  536. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  537. data/test/rubygems/test_gem_source_subpath_problem.rb +0 -50
  538. data/test/rubygems/test_gem_source_vendor.rb +0 -30
  539. data/test/rubygems/test_gem_spec_fetcher.rb +0 -338
  540. data/test/rubygems/test_gem_specification.rb +0 -3856
  541. data/test/rubygems/test_gem_stream_ui.rb +0 -255
  542. data/test/rubygems/test_gem_stub_specification.rb +0 -278
  543. data/test/rubygems/test_gem_text.rb +0 -103
  544. data/test/rubygems/test_gem_uninstaller.rb +0 -675
  545. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -31
  546. data/test/rubygems/test_gem_update_suggestion.rb +0 -209
  547. data/test/rubygems/test_gem_uri.rb +0 -41
  548. data/test/rubygems/test_gem_uri_formatter.rb +0 -27
  549. data/test/rubygems/test_gem_util.rb +0 -91
  550. data/test/rubygems/test_gem_validator.rb +0 -42
  551. data/test/rubygems/test_gem_version.rb +0 -305
  552. data/test/rubygems/test_gem_version_option.rb +0 -165
  553. data/test/rubygems/test_kernel.rb +0 -124
  554. data/test/rubygems/test_project_sanity.rb +0 -49
  555. data/test/rubygems/test_remote_fetch_error.rb +0 -20
  556. data/test/rubygems/test_require.rb +0 -732
  557. data/test/rubygems/test_rubygems.rb +0 -76
  558. data/test/rubygems/test_webauthn_listener.rb +0 -143
  559. data/test/rubygems/test_webauthn_listener_response.rb +0 -93
  560. data/test/rubygems/test_webauthn_poller.rb +0 -124
  561. data/test/rubygems/utilities.rb +0 -436
  562. data/test/rubygems/wrong_key_cert.pem +0 -19
  563. data/test/rubygems/wrong_key_cert_32.pem +0 -19
  564. data/test/test_changelog_generator.rb +0 -17
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gem
4
+ module CIDetector
5
+ # NOTE: Any changes made here will need to be made to both lib/rubygems/ci_detector.rb and
6
+ # bundler/lib/bundler/ci_detector.rb (which are enforced duplicates).
7
+ # TODO: Drop that duplication once bundler drops support for RubyGems 3.4
8
+ #
9
+ # ## Recognized CI providers, their signifiers, and the relevant docs ##
10
+ #
11
+ # Travis CI - CI, TRAVIS https://docs.travis-ci.com/user/environment-variables/#default-environment-variables
12
+ # Cirrus CI - CI, CIRRUS_CI https://cirrus-ci.org/guide/writing-tasks/#environment-variables
13
+ # Circle CI - CI, CIRCLECI https://circleci.com/docs/variables/#built-in-environment-variables
14
+ # Gitlab CI - CI, GITLAB_CI https://docs.gitlab.com/ee/ci/variables/
15
+ # AppVeyor - CI, APPVEYOR https://www.appveyor.com/docs/environment-variables/
16
+ # CodeShip - CI_NAME https://docs.cloudbees.com/docs/cloudbees-codeship/latest/pro-builds-and-configuration/environment-variables#_default_environment_variables
17
+ # dsari - CI, DSARI https://github.com/rfinnie/dsari#running
18
+ # Jenkins - BUILD_NUMBER https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
19
+ # TeamCity - TEAMCITY_VERSION https://www.jetbrains.com/help/teamcity/predefined-build-parameters.html#Predefined+Server+Build+Parameters
20
+ # Appflow - CI_BUILD_ID https://ionic.io/docs/appflow/automation/environments#predefined-environments
21
+ # TaskCluster - TASKCLUSTER_ROOT_URL https://docs.taskcluster.net/docs/manual/design/env-vars
22
+ # Semaphore - CI, SEMAPHORE https://docs.semaphoreci.com/ci-cd-environment/environment-variables/
23
+ # BuildKite - CI, BUILDKITE https://buildkite.com/docs/pipelines/environment-variables
24
+ # GoCD - GO_SERVER_URL https://docs.gocd.org/current/faq/dev_use_current_revision_in_build.html
25
+ # GH Actions - CI, GITHUB_ACTIONS https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables
26
+ #
27
+ # ### Some "standard" ENVs that multiple providers may set ###
28
+ #
29
+ # * CI - this is set by _most_ (but not all) CI providers now; it's approaching a standard.
30
+ # * CI_NAME - Not as frequently used, but some providers set this to specify their own name
31
+
32
+ # Any of these being set is a reasonably reliable indicator that we are
33
+ # executing in a CI environment.
34
+ ENV_INDICATORS = [
35
+ "CI",
36
+ "CI_NAME",
37
+ "CONTINUOUS_INTEGRATION",
38
+ "BUILD_NUMBER",
39
+ "CI_APP_ID",
40
+ "CI_BUILD_ID",
41
+ "CI_BUILD_NUMBER",
42
+ "RUN_ID",
43
+ "TASKCLUSTER_ROOT_URL",
44
+ ].freeze
45
+
46
+ # For each CI, this env suffices to indicate that we're on _that_ CI's
47
+ # containers. (A few of them only supply a CI_NAME variable, which is also
48
+ # nice). And if they set "CI" but we can't tell which one they are, we also
49
+ # want to know that - a bare "ci" without another token tells us as much.
50
+ ENV_DESCRIPTORS = {
51
+ "TRAVIS" => "travis",
52
+ "CIRCLECI" => "circle",
53
+ "CIRRUS_CI" => "cirrus",
54
+ "DSARI" => "dsari",
55
+ "SEMAPHORE" => "semaphore",
56
+ "JENKINS_URL" => "jenkins",
57
+ "BUILDKITE" => "buildkite",
58
+ "GO_SERVER_URL" => "go",
59
+ "GITLAB_CI" => "gitlab",
60
+ "GITHUB_ACTIONS" => "github",
61
+ "TASKCLUSTER_ROOT_URL" => "taskcluster",
62
+ "CI" => "ci",
63
+ }.freeze
64
+
65
+ def self.ci?
66
+ ENV_INDICATORS.any? {|var| ENV.include?(var) }
67
+ end
68
+
69
+ def self.ci_strings
70
+ matching_names = ENV_DESCRIPTORS.select {|env, _| ENV[env] }.values
71
+ matching_names << ENV["CI_NAME"].downcase if ENV["CI_NAME"]
72
+ matching_names.reject(&:empty?).sort.uniq
73
+ end
74
+ end
75
+ end
@@ -20,9 +20,7 @@ require_relative "user_interaction"
20
20
  class Gem::Command
21
21
  include Gem::UserInteraction
22
22
 
23
- Gem::OptionParser.accept Symbol do |value|
24
- value.to_sym
25
- end
23
+ Gem::OptionParser.accept Symbol, &:to_sym
26
24
 
27
25
  ##
28
26
  # The name of the command.
@@ -192,7 +190,7 @@ class Gem::Command
192
190
  "Please specify at least one gem name (e.g. gem build GEMNAME)"
193
191
  end
194
192
 
195
- args.select {|arg| arg !~ /^-/ }
193
+ args.reject {|arg| arg.start_with?("-") }
196
194
  end
197
195
 
198
196
  ##
@@ -316,7 +314,7 @@ class Gem::Command
316
314
  options[:build_args] = build_args
317
315
 
318
316
  if options[:silent]
319
- old_ui = self.ui
317
+ old_ui = ui
320
318
  self.ui = ui = Gem::SilentUI.new
321
319
  end
322
320
 
@@ -430,9 +428,9 @@ class Gem::Command
430
428
 
431
429
  def handles?(args)
432
430
  parser.parse!(args.dup)
433
- return true
431
+ true
434
432
  rescue StandardError
435
- return false
433
+ false
436
434
  end
437
435
 
438
436
  ##
@@ -459,7 +457,7 @@ class Gem::Command
459
457
  until extra.empty? do
460
458
  ex = []
461
459
  ex << extra.shift
462
- ex << extra.shift if extra.first.to_s =~ /^[^-]/ # rubocop:disable Performance/StartWith
460
+ ex << extra.shift if /^[^-]/.match?(extra.first.to_s)
463
461
  result << ex if handles?(ex)
464
462
  end
465
463
 
@@ -475,7 +473,7 @@ class Gem::Command
475
473
  private
476
474
 
477
475
  def option_is_deprecated?(option)
478
- @deprecated_options[command].has_key?(option)
476
+ @deprecated_options[command].key?(option)
479
477
  end
480
478
 
481
479
  def add_parser_description # :nodoc:
@@ -487,7 +485,7 @@ class Gem::Command
487
485
 
488
486
  @parser.separator nil
489
487
  @parser.separator " Description:"
490
- formatted.split("\n").each do |line|
488
+ formatted.each_line do |line|
491
489
  @parser.separator " #{line.rstrip}"
492
490
  end
493
491
  end
@@ -514,8 +512,8 @@ class Gem::Command
514
512
 
515
513
  @parser.separator nil
516
514
  @parser.separator " #{title}:"
517
- content.split(/\n/).each do |line|
518
- @parser.separator " #{line}"
515
+ content.each_line do |line|
516
+ @parser.separator " #{line.rstrip}"
519
517
  end
520
518
  end
521
519
 
@@ -524,7 +522,7 @@ class Gem::Command
524
522
 
525
523
  @parser.separator nil
526
524
  @parser.separator " Summary:"
527
- wrap(@summary, 80 - 4).split("\n").each do |line|
525
+ wrap(@summary, 80 - 4).each_line do |line|
528
526
  @parser.separator " #{line.strip}"
529
527
  end
530
528
  end
@@ -581,12 +579,12 @@ class Gem::Command
581
579
  # Add the options common to all commands.
582
580
 
583
581
  add_common_option("-h", "--help",
584
- "Get help on this command") do |value, options|
582
+ "Get help on this command") do |_value, options|
585
583
  options[:help] = true
586
584
  end
587
585
 
588
586
  add_common_option("-V", "--[no-]verbose",
589
- "Set the verbose level of output") do |value, options|
587
+ "Set the verbose level of output") do |value, _options|
590
588
  # Set us to "really verbose" so the progress meter works
591
589
  if Gem.configuration.verbose && value
592
590
  Gem.configuration.verbose = 1
@@ -595,12 +593,12 @@ class Gem::Command
595
593
  end
596
594
  end
597
595
 
598
- add_common_option("-q", "--quiet", "Silence command progress meter") do |value, options|
596
+ add_common_option("-q", "--quiet", "Silence command progress meter") do |_value, _options|
599
597
  Gem.configuration.verbose = false
600
598
  end
601
599
 
602
600
  add_common_option("--silent",
603
- "Silence RubyGems output") do |value, options|
601
+ "Silence RubyGems output") do |_value, options|
604
602
  options[:silent] = true
605
603
  end
606
604
 
@@ -106,7 +106,7 @@ class Gem::CommandManager
106
106
  # Register all the subcommands supported by the gem command.
107
107
 
108
108
  def initialize
109
- require "timeout"
109
+ require_relative "timeout"
110
110
  @commands = {}
111
111
 
112
112
  BUILTIN_COMMANDS.each do |name|
@@ -141,7 +141,7 @@ class Gem::CommandManager
141
141
  # Return a sorted list of all command names as strings.
142
142
 
143
143
  def command_names
144
- @commands.keys.collect {|key| key.to_s }.sort
144
+ @commands.keys.collect(&:to_s).sort
145
145
  end
146
146
 
147
147
  ##
@@ -149,7 +149,7 @@ class Gem::CommandManager
149
149
 
150
150
  def run(args, build_args=nil)
151
151
  process_args(args, build_args)
152
- rescue StandardError, Timeout::Error => ex
152
+ rescue StandardError, Gem::Timeout::Error => ex
153
153
  if ex.respond_to?(:detailed_message)
154
154
  msg = ex.detailed_message(highlight: false).sub(/\A(.*?)(?: \(.+?\))/) { $1 }
155
155
  else
@@ -238,7 +238,7 @@ class Gem::CommandManager
238
238
  load_error = e
239
239
  end
240
240
  Gem::Commands.const_get(const_name).new
241
- rescue Exception => e
241
+ rescue StandardError => e
242
242
  e = load_error if load_error
243
243
 
244
244
  alert_error clean_text("Loading command: #{command_name} (#{e.class})\n\t#{e}")
@@ -249,6 +249,7 @@ class Gem::CommandManager
249
249
  def invoke_command(args, build_args)
250
250
  cmd_name = args.shift.downcase
251
251
  cmd = find_command cmd_name
252
+ terminate_interaction 1 unless cmd
252
253
  cmd.deprecation_warning if cmd.deprecated?
253
254
  cmd.invoke_with_build_args args, build_args
254
255
  end
@@ -12,11 +12,11 @@ class Gem::Commands::BuildCommand < Gem::Command
12
12
 
13
13
  add_platform_option
14
14
 
15
- add_option "--force", "skip validation of the spec" do |value, options|
15
+ add_option "--force", "skip validation of the spec" do |_value, options|
16
16
  options[:force] = true
17
17
  end
18
18
 
19
- add_option "--strict", "consider warnings as errors when validating the spec" do |value, options|
19
+ add_option "--strict", "consider warnings as errors when validating the spec" do |_value, options|
20
20
  options[:strict] = true
21
21
  end
22
22
 
@@ -6,7 +6,7 @@ require_relative "../security"
6
6
  class Gem::Commands::CertCommand < Gem::Command
7
7
  def initialize
8
8
  super "cert", "Manage RubyGems certificates and signing settings",
9
- :add => [], :remove => [], :list => [], :build => [], :sign => []
9
+ add: [], remove: [], list: [], build: [], sign: []
10
10
 
11
11
  add_option("-a", "--add CERT",
12
12
  "Add a trusted certificate.") do |cert_file, options|
@@ -180,7 +180,7 @@ class Gem::Commands::CertCommand < Gem::Command
180
180
  key = Gem::Security.create_key(algorithm)
181
181
  key_path = Gem::Security.write key, "gem-private_key.pem", 0o600, passphrase
182
182
 
183
- return key, key_path
183
+ [key, key_path]
184
184
  end
185
185
 
186
186
  def certificates_matching(filter)
@@ -263,7 +263,6 @@ For further reading on signing gems see `ri Gem::Security`.
263
263
  key = File.read key_file
264
264
  passphrase = ENV["GEM_PRIVATE_KEY_PASSPHRASE"]
265
265
  options[:key] = OpenSSL::PKey.read key, passphrase
266
-
267
266
  rescue Errno::ENOENT
268
267
  alert_error \
269
268
  "--private-key not specified and ~/.gem/gem-private_key.pem does not exist"
@@ -10,7 +10,7 @@ class Gem::Commands::CheckCommand < Gem::Command
10
10
 
11
11
  def initialize
12
12
  super "check", "Check a gem repository for added or missing files",
13
- :alien => true, :doctor => false, :dry_run => false, :gems => true
13
+ alien: true, doctor: false, dry_run: false, gems: true
14
14
 
15
15
  add_option("-a", "--[no-]alien",
16
16
  'Report "unmanaged" or rogue files in the',
@@ -48,14 +48,14 @@ class Gem::Commands::CheckCommand < Gem::Command
48
48
  end
49
49
 
50
50
  Gem::Validator.new.alien(gems).sort.each do |key, val|
51
- unless val.empty?
51
+ if val.empty?
52
+ say "#{key} is error-free" if Gem.configuration.verbose
53
+ else
52
54
  say "#{key} has #{val.size} problems"
53
55
  val.each do |error_entry|
54
56
  say " #{error_entry.path}:"
55
57
  say " #{error_entry.problem}"
56
58
  end
57
- else
58
- say "#{key} is error-free" if Gem.configuration.verbose
59
59
  end
60
60
  say
61
61
  end
@@ -8,16 +8,16 @@ class Gem::Commands::CleanupCommand < Gem::Command
8
8
  def initialize
9
9
  super "cleanup",
10
10
  "Clean up old versions of installed gems",
11
- :force => false, :install_dir => Gem.dir,
12
- :check_dev => true
11
+ force: false, install_dir: Gem.dir,
12
+ check_dev: true
13
13
 
14
14
  add_option("-n", "-d", "--dry-run",
15
- "Do not uninstall gems") do |value, options|
15
+ "Do not uninstall gems") do |_value, options|
16
16
  options[:dryrun] = true
17
17
  end
18
18
 
19
19
  add_option(:Deprecated, "--dryrun",
20
- "Do not uninstall gems") do |value, options|
20
+ "Do not uninstall gems") do |_value, options|
21
21
  options[:dryrun] = true
22
22
  end
23
23
  deprecate_option("--dryrun", extra_msg: "Use --dry-run instead")
@@ -75,7 +75,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
75
75
  until done do
76
76
  clean_gems
77
77
 
78
- this_set = @gems_to_cleanup.map {|spec| spec.full_name }.sort
78
+ this_set = @gems_to_cleanup.map(&:full_name).sort
79
79
 
80
80
  done = this_set.empty? || last_set == this_set
81
81
 
@@ -88,7 +88,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
88
88
  say "Clean up complete"
89
89
 
90
90
  verbose do
91
- skipped = @default_gems.map {|spec| spec.full_name }
91
+ skipped = @default_gems.map(&:full_name)
92
92
 
93
93
  "Skipped default gems: #{skipped.join ", "}"
94
94
  end
@@ -117,12 +117,12 @@ If no gems are named all gems in GEM_HOME are cleaned.
117
117
  end
118
118
 
119
119
  def get_candidate_gems
120
- @candidate_gems = unless options[:args].empty?
120
+ @candidate_gems = if options[:args].empty?
121
+ Gem::Specification.to_a
122
+ else
121
123
  options[:args].map do |gem_name|
122
124
  Gem::Specification.find_all_by_name gem_name
123
125
  end.flatten
124
- else
125
- Gem::Specification.to_a
126
126
  end
127
127
  end
128
128
 
@@ -131,9 +131,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
131
131
  @primary_gems[spec.name].version != spec.version
132
132
  end
133
133
 
134
- default_gems, gems_to_cleanup = gems_to_cleanup.partition do |spec|
135
- spec.default_gem?
136
- end
134
+ default_gems, gems_to_cleanup = gems_to_cleanup.partition(&:default_gem?)
137
135
 
138
136
  uninstall_from = options[:user_install] ? Gem.user_dir : @original_home
139
137
 
@@ -168,8 +166,8 @@ If no gems are named all gems in GEM_HOME are cleaned.
168
166
  say "Attempting to uninstall #{spec.full_name}"
169
167
 
170
168
  uninstall_options = {
171
- :executables => false,
172
- :version => "= #{spec.version}",
169
+ executables: false,
170
+ version: "= #{spec.version}",
173
171
  }
174
172
 
175
173
  uninstall_options[:user_install] = Gem.user_dir == spec.base_dir
@@ -8,8 +8,8 @@ class Gem::Commands::ContentsCommand < Gem::Command
8
8
 
9
9
  def initialize
10
10
  super "contents", "Display the contents of the installed gems",
11
- :specdirs => [], :lib_only => false, :prefix => true,
12
- :show_install_dir => false
11
+ specdirs: [], lib_only: false, prefix: true,
12
+ show_install_dir: false
13
13
 
14
14
  add_version_option
15
15
 
@@ -94,7 +94,7 @@ prefix or only the files that are requireable.
94
94
  gem_path = spec.full_gem_path
95
95
  extra = "/{#{spec.require_paths.join ","}}" if options[:lib_only]
96
96
  glob = "#{gem_path}#{extra}/**/*"
97
- prefix_re = /#{Regexp.escape(gem_path)}\//
97
+ prefix_re = %r{#{Regexp.escape(gem_path)}/}
98
98
 
99
99
  Dir[glob].map do |file|
100
100
  [gem_path, file.sub(prefix_re, "")]
@@ -104,7 +104,7 @@ prefix or only the files that are requireable.
104
104
  def files_in_default_gem(spec)
105
105
  spec.files.map do |file|
106
106
  case file
107
- when /\A#{spec.bindir}\//
107
+ when %r{\A#{spec.bindir}/}
108
108
  # $' is POSTMATCH
109
109
  [RbConfig::CONFIG["bindir"], $']
110
110
  when /\.so\z/
@@ -178,7 +178,7 @@ prefix or only the files that are requireable.
178
178
  @spec_dirs.sort.each {|dir| say dir }
179
179
  end
180
180
 
181
- return nil
181
+ nil
182
182
  end
183
183
 
184
184
  def specification_directories # :nodoc:
@@ -11,15 +11,14 @@ class Gem::Commands::DependencyCommand < Gem::Command
11
11
  def initialize
12
12
  super "dependency",
13
13
  "Show the dependencies of an installed gem",
14
- :version => Gem::Requirement.default, :domain => :local
14
+ version: Gem::Requirement.default, domain: :local
15
15
 
16
16
  add_version_option
17
17
  add_platform_option
18
18
  add_prerelease_option
19
19
 
20
20
  add_option("-R", "--[no-]reverse-dependencies",
21
- "Include reverse dependencies in the output") do
22
- |value, options|
21
+ "Include reverse dependencies in the output") do |value, options|
23
22
  options[:reverse_dependencies] = value
24
23
  end
25
24
 
@@ -92,7 +91,7 @@ use with other commands.
92
91
  def display_pipe(specs) # :nodoc:
93
92
  specs.each do |spec|
94
93
  next if spec.dependencies.empty?
95
- spec.dependencies.sort_by {|dep| dep.name }.each do |dep|
94
+ spec.dependencies.sort_by(&:name).each do |dep|
96
95
  say "#{dep.name} --version '#{dep.requirement}'"
97
96
  end
98
97
  end
@@ -153,7 +152,7 @@ use with other commands.
153
152
  response = String.new
154
153
  response << " " * level + "Gem #{spec.full_name}\n"
155
154
  unless spec.dependencies.empty?
156
- spec.dependencies.sort_by {|dep| dep.name }.each do |dep|
155
+ spec.dependencies.sort_by(&:name).each do |dep|
157
156
  response << " " * level + " #{dep}\n"
158
157
  end
159
158
  end
@@ -17,7 +17,7 @@ class Gem::Commands::EnvironmentCommand < Gem::Command
17
17
  platform display the supported gem platforms
18
18
  <omitted> display everything
19
19
  EOF
20
- return args.gsub(/^\s+/, "")
20
+ args.gsub(/^\s+/, "")
21
21
  end
22
22
 
23
23
  def description # :nodoc:
@@ -108,9 +108,7 @@ lib/rubygems/defaults/operating_system.rb
108
108
 
109
109
  out << " - RUBYGEMS VERSION: #{Gem::VERSION}\n"
110
110
 
111
- out << " - RUBY VERSION: #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}"
112
- out << " patchlevel #{RUBY_PATCHLEVEL}" if defined? RUBY_PATCHLEVEL
113
- out << ") [#{RUBY_PLATFORM}]\n"
111
+ out << " - RUBY VERSION: #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} patchlevel #{RUBY_PATCHLEVEL}) [#{RUBY_PLATFORM}]\n"
114
112
 
115
113
  out << " - INSTALLATION DIRECTORY: #{Gem.dir}\n"
116
114
 
@@ -173,6 +171,6 @@ lib/rubygems/defaults/operating_system.rb
173
171
  end
174
172
  end
175
173
 
176
- return nil
174
+ nil
177
175
  end
178
176
  end
@@ -23,7 +23,7 @@ class Gem::Commands::ExecCommand < Gem::Command
23
23
 
24
24
  add_option(:"Install/Update", "--conservative",
25
25
  "Prefer the most recent installed version, ",
26
- "rather than the latest version overall") do |value, options|
26
+ "rather than the latest version overall") do |_value, options|
27
27
  options[:conservative] = true
28
28
  end
29
29
  end
@@ -10,8 +10,8 @@ class Gem::Commands::FetchCommand < Gem::Command
10
10
 
11
11
  def initialize
12
12
  defaults = {
13
- :suggest_alternate => true,
14
- :version => Gem::Requirement.default,
13
+ suggest_alternate: true,
14
+ version: Gem::Requirement.default,
15
15
  }
16
16
 
17
17
  super "fetch", "Download a gem and place it in the current directory", defaults
@@ -1,86 +1,51 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "../command"
4
- require_relative "../indexer"
5
4
 
6
- ##
7
- # Generates a index files for use as a gem server.
8
- #
9
- # See `gem help generate_index`
10
-
11
- class Gem::Commands::GenerateIndexCommand < Gem::Command
12
- def initialize
13
- super "generate_index",
14
- "Generates the index files for a gem server directory",
15
- :directory => ".", :build_modern => true
5
+ unless defined? Gem::Commands::GenerateIndexCommand
6
+ class Gem::Commands::GenerateIndexCommand < Gem::Command
7
+ module RubygemsTrampoline
8
+ def description # :nodoc:
9
+ <<~EOF
10
+ The generate_index command has been moved to the rubygems-generate_index gem.
11
+ EOF
12
+ end
16
13
 
17
- add_option "-d", "--directory=DIRNAME",
18
- "repository base dir containing gems subdir" do |dir, options|
19
- options[:directory] = File.expand_path dir
20
- end
14
+ def execute
15
+ alert_error "Install the rubygems-generate_index gem for the generate_index command"
16
+ end
21
17
 
22
- add_option "--[no-]modern",
23
- "Generate indexes for RubyGems",
24
- "(always true)" do |value, options|
25
- options[:build_modern] = value
18
+ def invoke_with_build_args(args, build_args)
19
+ name = "rubygems-generate_index"
20
+ spec = begin
21
+ Gem::Specification.find_by_name(name)
22
+ rescue Gem::LoadError
23
+ require "rubygems/dependency_installer"
24
+ Gem.install(name, Gem::Requirement.default, Gem::DependencyInstaller::DEFAULT_OPTIONS).find {|s| s.name == name }
25
+ end
26
+
27
+ # remove the methods defined in this file so that the methods defined in the gem are used instead,
28
+ # and without a method redefinition warning
29
+ %w[description execute invoke_with_build_args].each do |method|
30
+ RubygemsTrampoline.remove_method(method)
31
+ end
32
+ self.class.singleton_class.remove_method(:new)
33
+
34
+ spec.activate
35
+ Gem.load_plugin_files spec.matches_for_glob("rubygems_plugin#{Gem.suffix_pattern}")
36
+
37
+ self.class.new.invoke_with_build_args(args, build_args)
38
+ end
26
39
  end
40
+ private_constant :RubygemsTrampoline
27
41
 
28
- deprecate_option("--modern", version: "4.0", extra_msg: "Modern indexes (specs, latest_specs, and prerelease_specs) are always generated, so this option is not needed.")
29
- deprecate_option("--no-modern", version: "4.0", extra_msg: "The `--no-modern` option is currently ignored. Modern indexes (specs, latest_specs, and prerelease_specs) are always generated.")
30
-
31
- add_option "--update",
32
- "Update modern indexes with gems added",
33
- "since the last update" do |value, options|
34
- options[:update] = value
42
+ # remove_method(:initialize) warns, but removing new does not warn
43
+ def self.new
44
+ command = allocate
45
+ command.send(:initialize, "generate_index", "Generates the index files for a gem server directory (requires rubygems-generate_index)")
46
+ command
35
47
  end
36
- end
37
-
38
- def defaults_str # :nodoc:
39
- "--directory . --modern"
40
- end
41
-
42
- def description # :nodoc:
43
- <<-EOF
44
- The generate_index command creates a set of indexes for serving gems
45
- statically. The command expects a 'gems' directory under the path given to
46
- the --directory option. The given directory will be the directory you serve
47
- as the gem repository.
48
48
 
49
- For `gem generate_index --directory /path/to/repo`, expose /path/to/repo via
50
- your HTTP server configuration (not /path/to/repo/gems).
51
-
52
- When done, it will generate a set of files like this:
53
-
54
- gems/*.gem # .gem files you want to
55
- # index
56
-
57
- specs.<version>.gz # specs index
58
- latest_specs.<version>.gz # latest specs index
59
- prerelease_specs.<version>.gz # prerelease specs index
60
- quick/Marshal.<version>/<gemname>.gemspec.rz # Marshal quick index file
61
-
62
- The .rz extension files are compressed with the inflate algorithm.
63
- The Marshal version number comes from ruby's Marshal::MAJOR_VERSION and
64
- Marshal::MINOR_VERSION constants. It is used to ensure compatibility.
65
- EOF
66
- end
67
-
68
- def execute
69
- # This is always true because it's the only way now.
70
- options[:build_modern] = true
71
-
72
- if !File.exist?(options[:directory]) ||
73
- !File.directory?(options[:directory])
74
- alert_error "unknown directory name #{options[:directory]}."
75
- terminate_interaction 1
76
- else
77
- indexer = Gem::Indexer.new options.delete(:directory), options
78
-
79
- if options[:update]
80
- indexer.update_index
81
- else
82
- indexer.generate_index
83
- end
84
- end
49
+ prepend(RubygemsTrampoline)
85
50
  end
86
51
  end
@@ -269,7 +269,7 @@ Gem::Platform::CURRENT. This will correctly mark the gem with your ruby's
269
269
  platform.
270
270
  EOF
271
271
 
272
- # NOTE when updating also update Gem::Command::HELP
272
+ # NOTE: when updating also update Gem::Command::HELP
273
273
 
274
274
  SUBCOMMANDS = [
275
275
  ["commands", :show_commands],
@@ -324,7 +324,7 @@ platform.
324
324
 
325
325
  margin_width = 4
326
326
 
327
- desc_width = @command_manager.command_names.map {|n| n.size }.max + 4
327
+ desc_width = @command_manager.command_names.map(&:size).max + 4
328
328
 
329
329
  summary_width = 80 - margin_width - desc_width
330
330
  wrap_indent = " " * (margin_width + desc_width)
@@ -333,7 +333,7 @@ platform.
333
333
  @command_manager.command_names.each do |cmd_name|
334
334
  command = @command_manager[cmd_name]
335
335
 
336
- next if command.deprecated?
336
+ next if command&.deprecated?
337
337
 
338
338
  summary =
339
339
  if command
@@ -343,7 +343,7 @@ platform.
343
343
  end
344
344
 
345
345
  summary = wrap(summary, summary_width).split "\n"
346
- out << sprintf(format, cmd_name, summary.shift)
346
+ out << format(format, cmd_name, summary.shift)
347
347
  until summary.empty? do
348
348
  out << "#{wrap_indent}#{summary.shift}"
349
349
  end