rubygems-update 3.3.18 → 3.4.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (615) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1429 -1064
  3. data/CONTRIBUTING.md +31 -8
  4. data/Manifest.txt +61 -36
  5. data/POLICIES.md +55 -20
  6. data/README.md +19 -6
  7. data/bundler/CHANGELOG.md +457 -1
  8. data/bundler/README.md +3 -6
  9. data/bundler/UPGRADING.md +11 -4
  10. data/bundler/bundler.gemspec +8 -10
  11. data/bundler/exe/bundle +5 -16
  12. data/bundler/lib/bundler/build_metadata.rb +2 -2
  13. data/bundler/lib/bundler/cli/add.rb +1 -1
  14. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  15. data/bundler/lib/bundler/cli/check.rb +1 -1
  16. data/bundler/lib/bundler/cli/common.rb +2 -0
  17. data/bundler/lib/bundler/cli/console.rb +2 -2
  18. data/bundler/lib/bundler/cli/doctor.rb +4 -6
  19. data/bundler/lib/bundler/cli/gem.rb +62 -40
  20. data/bundler/lib/bundler/cli/info.rb +1 -1
  21. data/bundler/lib/bundler/cli/init.rb +6 -2
  22. data/bundler/lib/bundler/cli/install.rb +8 -6
  23. data/bundler/lib/bundler/cli/lock.rb +8 -5
  24. data/bundler/lib/bundler/cli/open.rb +6 -4
  25. data/bundler/lib/bundler/cli/outdated.rb +14 -7
  26. data/bundler/lib/bundler/cli/platform.rb +7 -5
  27. data/bundler/lib/bundler/cli/viz.rb +1 -1
  28. data/bundler/lib/bundler/cli.rb +53 -7
  29. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
  30. data/bundler/lib/bundler/compact_index_client/updater.rb +40 -39
  31. data/bundler/lib/bundler/constants.rb +1 -1
  32. data/bundler/lib/bundler/current_ruby.rb +16 -5
  33. data/bundler/lib/bundler/definition.rb +262 -133
  34. data/bundler/lib/bundler/dependency.rb +20 -86
  35. data/bundler/lib/bundler/digest.rb +1 -1
  36. data/bundler/lib/bundler/dsl.rb +6 -7
  37. data/bundler/lib/bundler/endpoint_specification.rb +2 -13
  38. data/bundler/lib/bundler/env.rb +2 -2
  39. data/bundler/lib/bundler/environment_preserver.rb +3 -2
  40. data/bundler/lib/bundler/errors.rb +1 -11
  41. data/bundler/lib/bundler/feature_flag.rb +0 -2
  42. data/bundler/lib/bundler/fetcher/compact_index.rb +11 -13
  43. data/bundler/lib/bundler/fetcher/dependency.rb +2 -6
  44. data/bundler/lib/bundler/fetcher/downloader.rb +4 -5
  45. data/bundler/lib/bundler/fetcher/index.rb +1 -2
  46. data/bundler/lib/bundler/fetcher.rb +21 -15
  47. data/bundler/lib/bundler/force_platform.rb +18 -0
  48. data/bundler/lib/bundler/friendly_errors.rb +1 -4
  49. data/bundler/lib/bundler/gem_helper.rb +3 -4
  50. data/bundler/lib/bundler/gem_helpers.rb +7 -2
  51. data/bundler/lib/bundler/gem_version_promoter.rb +53 -98
  52. data/bundler/lib/bundler/graph.rb +3 -3
  53. data/bundler/lib/bundler/index.rb +13 -47
  54. data/bundler/lib/bundler/injector.rb +5 -4
  55. data/bundler/lib/bundler/inline.rb +9 -11
  56. data/bundler/lib/bundler/installer/parallel_installer.rb +4 -34
  57. data/bundler/lib/bundler/installer/standalone.rb +13 -9
  58. data/bundler/lib/bundler/installer.rb +17 -29
  59. data/bundler/lib/bundler/lazy_specification.rb +54 -53
  60. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  61. data/bundler/lib/bundler/lockfile_parser.rb +17 -16
  62. data/bundler/lib/bundler/man/bundle-add.1 +6 -2
  63. data/bundler/lib/bundler/man/bundle-add.1.ronn +4 -1
  64. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  65. data/bundler/lib/bundler/man/bundle-cache.1 +9 -3
  66. data/bundler/lib/bundler/man/bundle-cache.1.ronn +9 -2
  67. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  68. data/bundler/lib/bundler/man/bundle-clean.1 +2 -2
  69. data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
  70. data/bundler/lib/bundler/man/bundle-config.1 +26 -10
  71. data/bundler/lib/bundler/man/bundle-config.1.ronn +17 -10
  72. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  73. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  74. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  75. data/bundler/lib/bundler/man/bundle-exec.1 +6 -6
  76. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -6
  77. data/bundler/lib/bundler/man/bundle-gem.1 +27 -37
  78. data/bundler/lib/bundler/man/bundle-gem.1.ronn +5 -5
  79. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  80. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  81. data/bundler/lib/bundler/man/bundle-info.1 +3 -3
  82. data/bundler/lib/bundler/man/bundle-info.1.ronn +3 -3
  83. data/bundler/lib/bundler/man/bundle-init.1 +5 -1
  84. data/bundler/lib/bundler/man/bundle-init.1.ronn +2 -0
  85. data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
  86. data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
  87. data/bundler/lib/bundler/man/bundle-install.1 +5 -30
  88. data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -29
  89. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  90. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  91. data/bundler/lib/bundler/man/bundle-open.1 +22 -2
  92. data/bundler/lib/bundler/man/bundle-open.1.ronn +9 -1
  93. data/bundler/lib/bundler/man/bundle-outdated.1 +13 -9
  94. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +12 -9
  95. data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
  96. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  97. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  98. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  99. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  100. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  101. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  102. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  103. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  104. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  105. data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
  106. data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
  107. data/bundler/lib/bundler/man/bundle.1 +15 -10
  108. data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
  109. data/bundler/lib/bundler/man/gemfile.5 +55 -55
  110. data/bundler/lib/bundler/man/gemfile.5.ronn +57 -53
  111. data/bundler/lib/bundler/man/index.txt +4 -0
  112. data/bundler/lib/bundler/match_metadata.rb +13 -0
  113. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  114. data/bundler/lib/bundler/mirror.rb +5 -7
  115. data/bundler/lib/bundler/plugin/index.rb +5 -5
  116. data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
  117. data/bundler/lib/bundler/plugin/installer.rb +5 -2
  118. data/bundler/lib/bundler/plugin.rb +3 -1
  119. data/bundler/lib/bundler/remote_specification.rb +7 -12
  120. data/bundler/lib/bundler/resolver/base.rb +107 -0
  121. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  122. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  123. data/bundler/lib/bundler/resolver/package.rb +72 -0
  124. data/bundler/lib/bundler/resolver/root.rb +25 -0
  125. data/bundler/lib/bundler/resolver/spec_group.rb +42 -71
  126. data/bundler/lib/bundler/resolver.rb +335 -328
  127. data/bundler/lib/bundler/ruby_dsl.rb +7 -1
  128. data/bundler/lib/bundler/ruby_version.rb +8 -8
  129. data/bundler/lib/bundler/rubygems_ext.rb +100 -9
  130. data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -14
  131. data/bundler/lib/bundler/rubygems_integration.rb +11 -15
  132. data/bundler/lib/bundler/runtime.rb +2 -6
  133. data/bundler/lib/bundler/safe_marshal.rb +31 -0
  134. data/bundler/lib/bundler/settings.rb +5 -11
  135. data/bundler/lib/bundler/setup.rb +4 -1
  136. data/bundler/lib/bundler/shared_helpers.rb +3 -3
  137. data/bundler/lib/bundler/source/git/git_proxy.rb +237 -74
  138. data/bundler/lib/bundler/source/git.rb +55 -30
  139. data/bundler/lib/bundler/source/metadata.rb +1 -2
  140. data/bundler/lib/bundler/source/path/installer.rb +1 -22
  141. data/bundler/lib/bundler/source/path.rb +6 -6
  142. data/bundler/lib/bundler/source/rubygems.rb +26 -81
  143. data/bundler/lib/bundler/source.rb +1 -1
  144. data/bundler/lib/bundler/source_list.rb +8 -2
  145. data/bundler/lib/bundler/spec_set.rb +60 -37
  146. data/bundler/lib/bundler/templates/Executable +1 -1
  147. data/bundler/lib/bundler/templates/Executable.bundler +5 -10
  148. data/bundler/lib/bundler/templates/Executable.standalone +2 -0
  149. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  150. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +3 -0
  151. data/bundler/lib/bundler/templates/newgem/README.md.tt +6 -4
  152. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -1
  153. data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
  154. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  155. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  156. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  157. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  158. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  159. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  160. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
  161. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  162. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  163. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +9 -2
  164. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  165. data/bundler/lib/bundler/ui/shell.rb +35 -12
  166. data/bundler/lib/bundler/ui/silent.rb +21 -5
  167. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  168. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  169. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  170. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
  171. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1351 -409
  172. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  173. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  174. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  175. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  176. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  177. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  178. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  179. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  180. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  181. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  182. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  183. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  184. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  185. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  186. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  187. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  188. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  189. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  190. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  191. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
  192. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
  193. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  194. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
  195. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
  196. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
  197. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
  198. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  199. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  200. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
  201. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +15 -9
  202. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +11 -6
  203. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  204. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
  205. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
  206. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +3 -2
  207. data/bundler/lib/bundler/vendored_persistent.rb +1 -33
  208. data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
  209. data/bundler/lib/bundler/version.rb +5 -1
  210. data/bundler/lib/bundler/worker.rb +5 -7
  211. data/bundler/lib/bundler.rb +25 -77
  212. data/{bin → exe}/gem +4 -5
  213. data/{bin → exe}/update_rubygems +12 -10
  214. data/lib/rubygems/available_set.rb +4 -3
  215. data/lib/rubygems/basic_specification.rb +5 -4
  216. data/lib/rubygems/bundler_version_finder.rb +2 -2
  217. data/lib/rubygems/command.rb +41 -32
  218. data/lib/rubygems/command_manager.rb +30 -15
  219. data/lib/rubygems/commands/build_command.rb +12 -8
  220. data/lib/rubygems/commands/cert_command.rb +34 -33
  221. data/lib/rubygems/commands/check_command.rb +21 -20
  222. data/lib/rubygems/commands/cleanup_command.rb +18 -17
  223. data/lib/rubygems/commands/contents_command.rb +14 -13
  224. data/lib/rubygems/commands/dependency_command.rb +17 -16
  225. data/lib/rubygems/commands/environment_command.rb +6 -5
  226. data/lib/rubygems/commands/exec_command.rb +249 -0
  227. data/lib/rubygems/commands/fetch_command.rb +10 -9
  228. data/lib/rubygems/commands/generate_index_command.rb +18 -17
  229. data/lib/rubygems/commands/help_command.rb +7 -6
  230. data/lib/rubygems/commands/info_command.rb +3 -3
  231. data/lib/rubygems/commands/install_command.rb +28 -23
  232. data/lib/rubygems/commands/list_command.rb +4 -3
  233. data/lib/rubygems/commands/lock_command.rb +5 -4
  234. data/lib/rubygems/commands/mirror_command.rb +4 -3
  235. data/lib/rubygems/commands/open_command.rb +10 -9
  236. data/lib/rubygems/commands/outdated_command.rb +6 -5
  237. data/lib/rubygems/commands/owner_command.rb +17 -14
  238. data/lib/rubygems/commands/pristine_command.rb +46 -36
  239. data/lib/rubygems/commands/push_command.rb +9 -8
  240. data/lib/rubygems/commands/query_command.rb +9 -8
  241. data/lib/rubygems/commands/rdoc_command.rb +21 -19
  242. data/lib/rubygems/commands/search_command.rb +4 -3
  243. data/lib/rubygems/commands/server_command.rb +4 -3
  244. data/lib/rubygems/commands/setup_command.rb +97 -106
  245. data/lib/rubygems/commands/signin_command.rb +10 -9
  246. data/lib/rubygems/commands/signout_command.rb +8 -7
  247. data/lib/rubygems/commands/sources_command.rb +22 -21
  248. data/lib/rubygems/commands/specification_command.rb +14 -13
  249. data/lib/rubygems/commands/stale_command.rb +3 -2
  250. data/lib/rubygems/commands/uninstall_command.rb +44 -40
  251. data/lib/rubygems/commands/unpack_command.rb +14 -13
  252. data/lib/rubygems/commands/update_command.rb +42 -63
  253. data/lib/rubygems/commands/which_command.rb +8 -7
  254. data/lib/rubygems/commands/yank_command.rb +12 -11
  255. data/lib/rubygems/config_file.rb +55 -21
  256. data/lib/rubygems/core_ext/kernel_gem.rb +1 -6
  257. data/lib/rubygems/core_ext/kernel_require.rb +109 -115
  258. data/lib/rubygems/core_ext/kernel_warn.rb +33 -37
  259. data/lib/rubygems/core_ext/tcpsocket_init.rb +3 -1
  260. data/lib/rubygems/defaults.rb +33 -18
  261. data/lib/rubygems/dependency.rb +15 -11
  262. data/lib/rubygems/dependency_installer.rb +38 -37
  263. data/lib/rubygems/dependency_list.rb +7 -6
  264. data/lib/rubygems/deprecate.rb +3 -2
  265. data/lib/rubygems/doctor.rb +19 -18
  266. data/lib/rubygems/errors.rb +3 -2
  267. data/lib/rubygems/exceptions.rb +16 -8
  268. data/lib/rubygems/ext/build_error.rb +2 -1
  269. data/lib/rubygems/ext/builder.rb +37 -21
  270. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
  271. data/lib/rubygems/ext/cargo_builder.rb +150 -111
  272. data/lib/rubygems/ext/cmake_builder.rb +2 -2
  273. data/lib/rubygems/ext/configure_builder.rb +2 -1
  274. data/lib/rubygems/ext/ext_conf_builder.rb +11 -9
  275. data/lib/rubygems/ext/rake_builder.rb +7 -5
  276. data/lib/rubygems/ext.rb +8 -7
  277. data/lib/rubygems/gem_runner.rb +6 -5
  278. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  279. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  280. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
  281. data/lib/rubygems/gemcutter_utilities.rb +90 -34
  282. data/lib/rubygems/indexer.rb +29 -28
  283. data/lib/rubygems/install_default_message.rb +3 -2
  284. data/lib/rubygems/install_message.rb +3 -2
  285. data/lib/rubygems/install_update_options.rb +56 -55
  286. data/lib/rubygems/installer.rb +54 -46
  287. data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
  288. data/lib/rubygems/local_remote_options.rb +19 -20
  289. data/lib/rubygems/mock_gem_ui.rb +3 -2
  290. data/lib/rubygems/name_tuple.rb +5 -4
  291. data/lib/rubygems/optparse/lib/optparse.rb +20 -15
  292. data/lib/rubygems/optparse.rb +1 -1
  293. data/lib/rubygems/package/digest_io.rb +1 -0
  294. data/lib/rubygems/package/file_source.rb +3 -2
  295. data/lib/rubygems/package/io_source.rb +1 -0
  296. data/lib/rubygems/package/old.rb +9 -8
  297. data/lib/rubygems/package/source.rb +1 -0
  298. data/lib/rubygems/package/tar_header.rb +63 -62
  299. data/lib/rubygems/package/tar_reader/entry.rb +91 -9
  300. data/lib/rubygems/package/tar_reader.rb +2 -29
  301. data/lib/rubygems/package/tar_writer.rb +8 -7
  302. data/lib/rubygems/package.rb +64 -48
  303. data/lib/rubygems/package_task.rb +5 -4
  304. data/lib/rubygems/path_support.rb +1 -0
  305. data/lib/rubygems/platform.rb +79 -53
  306. data/lib/rubygems/psych_tree.rb +2 -1
  307. data/lib/rubygems/query_utils.rb +35 -35
  308. data/lib/rubygems/rdoc.rb +3 -2
  309. data/lib/rubygems/remote_fetcher.rb +23 -22
  310. data/lib/rubygems/request/connection_pools.rb +4 -4
  311. data/lib/rubygems/request/http_pool.rb +2 -1
  312. data/lib/rubygems/request/https_pool.rb +1 -0
  313. data/lib/rubygems/request.rb +23 -22
  314. data/lib/rubygems/request_set/gem_dependency_api.rb +123 -123
  315. data/lib/rubygems/request_set/lockfile/parser.rb +28 -27
  316. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -3
  317. data/lib/rubygems/request_set/lockfile.rb +6 -5
  318. data/lib/rubygems/request_set.rb +20 -19
  319. data/lib/rubygems/requirement.rb +15 -14
  320. data/lib/rubygems/resolver/activation_request.rb +4 -3
  321. data/lib/rubygems/resolver/api_set.rb +5 -4
  322. data/lib/rubygems/resolver/api_specification.rb +7 -6
  323. data/lib/rubygems/resolver/best_set.rb +6 -5
  324. data/lib/rubygems/resolver/composed_set.rb +1 -0
  325. data/lib/rubygems/resolver/conflict.rb +11 -10
  326. data/lib/rubygems/resolver/current_set.rb +1 -0
  327. data/lib/rubygems/resolver/dependency_request.rb +3 -2
  328. data/lib/rubygems/resolver/git_set.rb +3 -2
  329. data/lib/rubygems/resolver/git_specification.rb +7 -6
  330. data/lib/rubygems/resolver/index_set.rb +4 -3
  331. data/lib/rubygems/resolver/index_specification.rb +7 -5
  332. data/lib/rubygems/resolver/installed_specification.rb +5 -4
  333. data/lib/rubygems/resolver/installer_set.rb +15 -17
  334. data/lib/rubygems/resolver/local_specification.rb +3 -2
  335. data/lib/rubygems/resolver/lock_set.rb +5 -4
  336. data/lib/rubygems/resolver/lock_specification.rb +5 -4
  337. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +1 -1
  338. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +32 -26
  339. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  340. data/lib/rubygems/resolver/molinillo.rb +2 -1
  341. data/lib/rubygems/resolver/requirement_list.rb +1 -0
  342. data/lib/rubygems/resolver/set.rb +1 -0
  343. data/lib/rubygems/resolver/source_set.rb +2 -0
  344. data/lib/rubygems/resolver/spec_specification.rb +1 -0
  345. data/lib/rubygems/resolver/specification.rb +2 -1
  346. data/lib/rubygems/resolver/stats.rb +2 -1
  347. data/lib/rubygems/resolver/vendor_set.rb +2 -1
  348. data/lib/rubygems/resolver/vendor_specification.rb +4 -3
  349. data/lib/rubygems/resolver.rb +41 -40
  350. data/lib/rubygems/s3_uri_signer.rb +10 -8
  351. data/lib/rubygems/safe_yaml.rb +4 -2
  352. data/lib/rubygems/security/policies.rb +48 -47
  353. data/lib/rubygems/security/policy.rb +19 -18
  354. data/lib/rubygems/security/signer.rb +6 -5
  355. data/lib/rubygems/security/trust_dir.rb +5 -4
  356. data/lib/rubygems/security.rb +30 -42
  357. data/lib/rubygems/security_option.rb +6 -5
  358. data/lib/rubygems/shellwords.rb +3 -0
  359. data/lib/rubygems/source/git.rb +22 -22
  360. data/lib/rubygems/source/installed.rb +2 -1
  361. data/lib/rubygems/source/local.rb +3 -2
  362. data/lib/rubygems/source/lock.rb +1 -0
  363. data/lib/rubygems/source/specific_file.rb +2 -1
  364. data/lib/rubygems/source/vendor.rb +1 -0
  365. data/lib/rubygems/source.rb +16 -16
  366. data/lib/rubygems/spec_fetcher.rb +10 -9
  367. data/lib/rubygems/specification.rb +121 -114
  368. data/lib/rubygems/specification_policy.rb +36 -15
  369. data/lib/rubygems/stub_specification.rb +11 -9
  370. data/lib/rubygems/text.rb +2 -2
  371. data/lib/rubygems/tsort/lib/tsort.rb +308 -310
  372. data/lib/rubygems/tsort.rb +1 -1
  373. data/lib/rubygems/uninstaller.rb +19 -18
  374. data/lib/rubygems/update_suggestion.rb +69 -0
  375. data/lib/rubygems/uri.rb +4 -4
  376. data/lib/rubygems/uri_formatter.rb +1 -1
  377. data/lib/rubygems/user_interaction.rb +37 -21
  378. data/lib/rubygems/util/licenses.rb +4 -3
  379. data/lib/rubygems/util/list.rb +1 -0
  380. data/lib/rubygems/util.rb +12 -15
  381. data/lib/rubygems/validator.rb +7 -6
  382. data/lib/rubygems/version.rb +17 -11
  383. data/lib/rubygems/version_option.rb +4 -3
  384. data/lib/rubygems.rb +89 -68
  385. data/rubygems-update.gemspec +10 -8
  386. data/setup.rb +10 -9
  387. data/test/rubygems/alternate_cert.pem +14 -14
  388. data/test/rubygems/alternate_cert_32.pem +15 -15
  389. data/test/rubygems/alternate_key.pem +25 -25
  390. data/test/rubygems/bad_rake.rb +1 -0
  391. data/test/rubygems/bundler_test_gem.rb +421 -0
  392. data/test/rubygems/child_cert.pem +15 -16
  393. data/test/rubygems/child_cert_32.pem +15 -16
  394. data/test/rubygems/child_key.pem +25 -25
  395. data/test/rubygems/encrypted_private_key.pem +26 -26
  396. data/test/rubygems/expired_cert.pem +15 -15
  397. data/test/rubygems/fake_certlib/openssl.rb +1 -0
  398. data/test/rubygems/future_cert.pem +15 -15
  399. data/test/rubygems/future_cert_32.pem +15 -15
  400. data/test/rubygems/good_rake.rb +1 -0
  401. data/test/rubygems/grandchild_cert.pem +15 -16
  402. data/test/rubygems/grandchild_cert_32.pem +15 -16
  403. data/test/rubygems/grandchild_key.pem +25 -25
  404. data/test/rubygems/helper.rb +172 -151
  405. data/test/rubygems/installer_test_case.rb +14 -13
  406. data/test/rubygems/invalid_issuer_cert.pem +16 -16
  407. data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
  408. data/test/rubygems/invalid_key.pem +25 -25
  409. data/test/rubygems/invalid_signer_cert.pem +15 -15
  410. data/test/rubygems/invalid_signer_cert_32.pem +15 -15
  411. data/test/rubygems/invalidchild_cert.pem +15 -16
  412. data/test/rubygems/invalidchild_cert_32.pem +15 -16
  413. data/test/rubygems/invalidchild_key.pem +25 -25
  414. data/test/rubygems/multifactor_auth_utilities.rb +111 -0
  415. data/test/rubygems/package/tar_test_case.rb +53 -17
  416. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  417. data/test/rubygems/plugin/exception/rubygems_plugin.rb +2 -1
  418. data/test/rubygems/plugin/load/rubygems_plugin.rb +1 -0
  419. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +2 -1
  420. data/test/rubygems/private_key.pem +25 -25
  421. data/test/rubygems/public_cert.pem +16 -16
  422. data/test/rubygems/public_cert_32.pem +15 -15
  423. data/test/rubygems/public_key.pem +7 -7
  424. data/test/rubygems/rubygems/commands/crash_command.rb +1 -0
  425. data/test/rubygems/rubygems_plugin.rb +3 -2
  426. data/test/rubygems/simple_gem.rb +2 -1
  427. data/test/rubygems/specifications/bar-0.0.2.gemspec +2 -0
  428. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +6 -4
  429. data/test/rubygems/test_bundled_ca.rb +13 -12
  430. data/test/rubygems/test_config.rb +5 -4
  431. data/test/rubygems/test_deprecate.rb +5 -4
  432. data/test/rubygems/test_exit.rb +9 -3
  433. data/test/rubygems/test_gem.rb +339 -677
  434. data/test/rubygems/test_gem_available_set.rb +22 -21
  435. data/test/rubygems/test_gem_bundler_version_finder.rb +6 -4
  436. data/test/rubygems/test_gem_command.rb +45 -44
  437. data/test/rubygems/test_gem_command_manager.rb +96 -30
  438. data/test/rubygems/test_gem_commands_build_command.rb +74 -63
  439. data/test/rubygems/test_gem_commands_cert_command.rb +98 -99
  440. data/test/rubygems/test_gem_commands_check_command.rb +5 -4
  441. data/test/rubygems/test_gem_commands_cleanup_command.rb +41 -40
  442. data/test/rubygems/test_gem_commands_contents_command.rb +28 -27
  443. data/test/rubygems/test_gem_commands_dependency_command.rb +37 -36
  444. data/test/rubygems/test_gem_commands_environment_command.rb +17 -16
  445. data/test/rubygems/test_gem_commands_exec_command.rb +853 -0
  446. data/test/rubygems/test_gem_commands_fetch_command.rb +38 -37
  447. data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -7
  448. data/test/rubygems/test_gem_commands_help_command.rb +14 -13
  449. data/test/rubygems/test_gem_commands_info_command.rb +29 -2
  450. data/test/rubygems/test_gem_commands_install_command.rb +152 -132
  451. data/test/rubygems/test_gem_commands_list_command.rb +5 -4
  452. data/test/rubygems/test_gem_commands_lock_command.rb +11 -10
  453. data/test/rubygems/test_gem_commands_mirror.rb +3 -2
  454. data/test/rubygems/test_gem_commands_open_command.rb +5 -4
  455. data/test/rubygems/test_gem_commands_outdated_command.rb +10 -9
  456. data/test/rubygems/test_gem_commands_owner_command.rb +227 -50
  457. data/test/rubygems/test_gem_commands_pristine_command.rb +142 -93
  458. data/test/rubygems/test_gem_commands_push_command.rb +189 -64
  459. data/test/rubygems/test_gem_commands_query_command.rb +74 -73
  460. data/test/rubygems/test_gem_commands_search_command.rb +3 -2
  461. data/test/rubygems/test_gem_commands_server_command.rb +3 -2
  462. data/test/rubygems/test_gem_commands_setup_command.rb +123 -96
  463. data/test/rubygems/test_gem_commands_signin_command.rb +71 -31
  464. data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
  465. data/test/rubygems/test_gem_commands_sources_command.rb +29 -29
  466. data/test/rubygems/test_gem_commands_specification_command.rb +33 -32
  467. data/test/rubygems/test_gem_commands_stale_command.rb +5 -4
  468. data/test/rubygems/test_gem_commands_uninstall_command.rb +99 -81
  469. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -31
  470. data/test/rubygems/test_gem_commands_update_command.rb +96 -95
  471. data/test/rubygems/test_gem_commands_which_command.rb +7 -6
  472. data/test/rubygems/test_gem_commands_yank_command.rb +162 -43
  473. data/test/rubygems/test_gem_config_file.rb +94 -81
  474. data/test/rubygems/test_gem_dependency.rb +76 -73
  475. data/test/rubygems/test_gem_dependency_installer.rb +200 -165
  476. data/test/rubygems/test_gem_dependency_list.rb +48 -47
  477. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -4
  478. data/test/rubygems/test_gem_doctor.rb +27 -26
  479. data/test/rubygems/test_gem_ext_builder.rb +60 -61
  480. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +4 -4
  481. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.lock → ext/custom_name_lib/Cargo.lock} +23 -33
  482. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.toml → ext/custom_name_lib/Cargo.toml} +1 -1
  483. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{src → ext/custom_name_lib/src}/lib.rs +1 -1
  484. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +3 -0
  485. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +37 -33
  486. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  487. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +2 -0
  488. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +12 -0
  489. data/test/rubygems/test_gem_ext_cargo_builder.rb +48 -59
  490. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +20 -19
  491. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +21 -36
  492. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -15
  493. data/test/rubygems/test_gem_ext_configure_builder.rb +14 -13
  494. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
  495. data/test/rubygems/test_gem_ext_rake_builder.rb +16 -15
  496. data/test/rubygems/test_gem_gem_runner.rb +15 -9
  497. data/test/rubygems/test_gem_gemcutter_utilities.rb +170 -84
  498. data/test/rubygems/test_gem_impossible_dependencies_error.rb +5 -4
  499. data/test/rubygems/test_gem_indexer.rb +87 -67
  500. data/test/rubygems/test_gem_install_update_options.rb +17 -16
  501. data/test/rubygems/test_gem_installer.rb +422 -304
  502. data/test/rubygems/test_gem_local_remote_options.rb +11 -10
  503. data/test/rubygems/test_gem_name_tuple.rb +5 -4
  504. data/test/rubygems/test_gem_package.rb +243 -231
  505. data/test/rubygems/test_gem_package_old.rb +14 -13
  506. data/test/rubygems/test_gem_package_tar_header.rb +48 -47
  507. data/test/rubygems/test_gem_package_tar_reader.rb +56 -8
  508. data/test/rubygems/test_gem_package_tar_reader_entry.rb +162 -16
  509. data/test/rubygems/test_gem_package_tar_writer.rb +77 -76
  510. data/test/rubygems/test_gem_package_task.rb +19 -18
  511. data/test/rubygems/test_gem_path_support.rb +15 -14
  512. data/test/rubygems/test_gem_platform.rb +333 -227
  513. data/test/rubygems/test_gem_rdoc.rb +15 -14
  514. data/test/rubygems/test_gem_remote_fetcher.rb +155 -154
  515. data/test/rubygems/test_gem_request.rb +64 -58
  516. data/test/rubygems/test_gem_request_connection_pools.rb +30 -29
  517. data/test/rubygems/test_gem_request_set.rb +101 -100
  518. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +210 -211
  519. data/test/rubygems/test_gem_request_set_lockfile.rb +87 -86
  520. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +58 -57
  521. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +63 -62
  522. data/test/rubygems/test_gem_requirement.rb +48 -41
  523. data/test/rubygems/test_gem_resolver.rb +167 -99
  524. data/test/rubygems/test_gem_resolver_activation_request.rb +7 -6
  525. data/test/rubygems/test_gem_resolver_api_set.rb +34 -33
  526. data/test/rubygems/test_gem_resolver_api_specification.rb +48 -47
  527. data/test/rubygems/test_gem_resolver_best_set.rb +23 -22
  528. data/test/rubygems/test_gem_resolver_composed_set.rb +2 -1
  529. data/test/rubygems/test_gem_resolver_conflict.rb +13 -12
  530. data/test/rubygems/test_gem_resolver_dependency_request.rb +16 -15
  531. data/test/rubygems/test_gem_resolver_git_set.rb +22 -21
  532. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -21
  533. data/test/rubygems/test_gem_resolver_index_set.rb +13 -12
  534. data/test/rubygems/test_gem_resolver_index_specification.rb +17 -16
  535. data/test/rubygems/test_gem_resolver_installed_specification.rb +6 -5
  536. data/test/rubygems/test_gem_resolver_installer_set.rb +79 -34
  537. data/test/rubygems/test_gem_resolver_local_specification.rb +8 -7
  538. data/test/rubygems/test_gem_resolver_lock_set.rb +13 -12
  539. data/test/rubygems/test_gem_resolver_lock_specification.rb +18 -17
  540. data/test/rubygems/test_gem_resolver_requirement_list.rb +2 -1
  541. data/test/rubygems/test_gem_resolver_specification.rb +9 -8
  542. data/test/rubygems/test_gem_resolver_vendor_set.rb +7 -6
  543. data/test/rubygems/test_gem_resolver_vendor_specification.rb +11 -10
  544. data/test/rubygems/test_gem_security.rb +69 -68
  545. data/test/rubygems/test_gem_security_policy.rb +72 -72
  546. data/test/rubygems/test_gem_security_signer.rb +35 -34
  547. data/test/rubygems/test_gem_security_trust_dir.rb +7 -6
  548. data/test/rubygems/test_gem_silent_ui.rb +39 -32
  549. data/test/rubygems/test_gem_source.rb +45 -44
  550. data/test/rubygems/test_gem_source_fetch_problem.rb +10 -9
  551. data/test/rubygems/test_gem_source_git.rb +69 -62
  552. data/test/rubygems/test_gem_source_installed.rb +17 -16
  553. data/test/rubygems/test_gem_source_list.rb +6 -5
  554. data/test/rubygems/test_gem_source_local.rb +15 -14
  555. data/test/rubygems/test_gem_source_lock.rb +32 -31
  556. data/test/rubygems/test_gem_source_specific_file.rb +18 -17
  557. data/test/rubygems/test_gem_source_subpath_problem.rb +8 -7
  558. data/test/rubygems/test_gem_source_vendor.rb +14 -13
  559. data/test/rubygems/test_gem_spec_fetcher.rb +73 -72
  560. data/test/rubygems/test_gem_specification.rb +533 -469
  561. data/test/rubygems/test_gem_stream_ui.rb +53 -22
  562. data/test/rubygems/test_gem_stub_specification.rb +33 -32
  563. data/test/rubygems/test_gem_text.rb +2 -1
  564. data/test/rubygems/test_gem_uninstaller.rb +118 -117
  565. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +4 -3
  566. data/test/rubygems/test_gem_update_suggestion.rb +209 -0
  567. data/test/rubygems/test_gem_uri.rb +6 -4
  568. data/test/rubygems/test_gem_uri_formatter.rb +15 -14
  569. data/test/rubygems/test_gem_util.rb +24 -23
  570. data/test/rubygems/test_gem_validator.rb +8 -8
  571. data/test/rubygems/test_gem_version.rb +24 -16
  572. data/test/rubygems/test_gem_version_option.rb +16 -15
  573. data/test/rubygems/test_kernel.rb +43 -48
  574. data/test/rubygems/test_project_sanity.rb +32 -3
  575. data/test/rubygems/test_remote_fetch_error.rb +8 -7
  576. data/test/rubygems/test_require.rb +118 -103
  577. data/test/rubygems/test_rubygems.rb +10 -8
  578. data/test/rubygems/test_webauthn_listener.rb +143 -0
  579. data/test/rubygems/test_webauthn_listener_response.rb +93 -0
  580. data/test/rubygems/test_webauthn_poller.rb +124 -0
  581. data/test/rubygems/utilities.rb +98 -34
  582. data/test/rubygems/wrong_key_cert.pem +15 -15
  583. data/test/rubygems/wrong_key_cert_32.pem +15 -15
  584. data/test/test_changelog_generator.rb +1 -1
  585. metadata +99 -46
  586. data/bundler/lib/bundler/dep_proxy.rb +0 -55
  587. data/bundler/lib/bundler/templates/gems.rb +0 -5
  588. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  589. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  590. data/bundler/lib/bundler/vendor/molinillo/LICENSE +0 -9
  591. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  592. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  593. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  594. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  595. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  596. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  597. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  598. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  599. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  600. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  601. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  602. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  603. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
  604. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  605. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  606. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  607. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  608. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  609. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  610. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  611. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  612. data/bundler/lib/bundler/vendored_molinillo.rb +0 -4
  613. data/bundler/lib/bundler/version_ranges.rb +0 -122
  614. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
  615. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
@@ -79,6 +79,5 @@ module Bundler::URI
79
79
  end
80
80
  end
81
81
 
82
- @@schemes['WS'] = WS
83
-
82
+ register_scheme 'WS', WS
84
83
  end
@@ -18,5 +18,6 @@ module Bundler::URI
18
18
  # A Default port of 443 for Bundler::URI::WSS
19
19
  DEFAULT_PORT = 443
20
20
  end
21
- @@schemes['WSS'] = WSS
21
+
22
+ register_scheme 'WSS', WSS
22
23
  end
@@ -30,7 +30,7 @@
30
30
  # class RSYNC < Generic
31
31
  # DEFAULT_PORT = 873
32
32
  # end
33
- # @@schemes['RSYNC'] = RSYNC
33
+ # register_scheme 'RSYNC', RSYNC
34
34
  # end
35
35
  # #=> Bundler::URI::RSYNC
36
36
  #
@@ -70,7 +70,6 @@
70
70
  # - Bundler::URI::REGEXP - (in uri/common.rb)
71
71
  # - Bundler::URI::REGEXP::PATTERN - (in uri/common.rb)
72
72
  # - Bundler::URI::Util - (in uri/common.rb)
73
- # - Bundler::URI::Escape - (in uri/common.rb)
74
73
  # - Bundler::URI::Error - (in uri/common.rb)
75
74
  # - Bundler::URI::InvalidURIError - (in uri/common.rb)
76
75
  # - Bundler::URI::InvalidComponentError - (in uri/common.rb)
@@ -101,3 +100,5 @@ require_relative 'uri/https'
101
100
  require_relative 'uri/ldap'
102
101
  require_relative 'uri/ldaps'
103
102
  require_relative 'uri/mailto'
103
+ require_relative 'uri/ws'
104
+ require_relative 'uri/wss'
@@ -11,37 +11,5 @@ end
11
11
  require_relative "vendor/net-http-persistent/lib/net/http/persistent"
12
12
 
13
13
  module Bundler
14
- class PersistentHTTP < Persistent::Net::HTTP::Persistent
15
- def connection_for(uri)
16
- super(uri) do |connection|
17
- result = yield connection
18
- warn_old_tls_version_rubygems_connection(uri, connection)
19
- result
20
- end
21
- end
22
-
23
- def warn_old_tls_version_rubygems_connection(uri, connection)
24
- return unless connection.http.use_ssl?
25
- return unless (uri.host || "").end_with?("rubygems.org")
26
-
27
- socket = connection.instance_variable_get(:@socket)
28
- return unless socket
29
- socket_io = socket.io
30
- return unless socket_io.respond_to?(:ssl_version)
31
- ssl_version = socket_io.ssl_version
32
-
33
- case ssl_version
34
- when /TLSv([\d\.]+)/
35
- version = Gem::Version.new($1)
36
- if version < Gem::Version.new("1.2")
37
- Bundler.ui.warn \
38
- "Warning: Your Ruby version is compiled against a copy of OpenSSL that is very old. " \
39
- "Starting in January 2018, RubyGems.org will refuse connection requests from these " \
40
- "very old versions of OpenSSL. If you will need to continue installing gems after " \
41
- "January 2018, please follow this guide to upgrade: http://ruby.to/tls-outdated.",
42
- :wrap => true
43
- end
44
- end
45
- end
46
- end
14
+ PersistentHTTP = Persistent::Net::HTTP::Persistent
47
15
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bundler; end
4
- require_relative "vendor/tmpdir/lib/tmpdir"
4
+ require_relative "vendor/pub_grub/lib/pub_grub"
@@ -1,9 +1,13 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Bundler
4
- VERSION = "2.3.18".freeze
4
+ VERSION = "2.4.19".freeze
5
5
 
6
6
  def self.bundler_major_version
7
7
  @bundler_major_version ||= VERSION.split(".").first.to_i
8
8
  end
9
+
10
+ def self.gem_version
11
+ @gem_version ||= Gem::Version.create(VERSION)
12
+ end
9
13
  end
@@ -87,14 +87,12 @@ module Bundler
87
87
  creation_errors = []
88
88
 
89
89
  @threads = Array.new(@size) do |i|
90
- begin
91
- Thread.start { process_queue(i) }.tap do |thread|
92
- thread.name = "#{name} Worker ##{i}" if thread.respond_to?(:name=)
93
- end
94
- rescue ThreadError => e
95
- creation_errors << e
96
- nil
90
+ Thread.start { process_queue(i) }.tap do |thread|
91
+ thread.name = "#{name} Worker ##{i}" if thread.respond_to?(:name=)
97
92
  end
93
+ rescue ThreadError => e
94
+ creation_errors << e
95
+ nil
98
96
  end.compact
99
97
 
100
98
  add_interrupt_handler unless @threads.empty?
@@ -41,7 +41,6 @@ module Bundler
41
41
 
42
42
  autoload :Definition, File.expand_path("bundler/definition", __dir__)
43
43
  autoload :Dependency, File.expand_path("bundler/dependency", __dir__)
44
- autoload :DepProxy, File.expand_path("bundler/dep_proxy", __dir__)
45
44
  autoload :Deprecate, File.expand_path("bundler/deprecate", __dir__)
46
45
  autoload :Digest, File.expand_path("bundler/digest", __dir__)
47
46
  autoload :Dsl, File.expand_path("bundler/dsl", __dir__)
@@ -58,7 +57,7 @@ module Bundler
58
57
  autoload :Installer, File.expand_path("bundler/installer", __dir__)
59
58
  autoload :LazySpecification, File.expand_path("bundler/lazy_specification", __dir__)
60
59
  autoload :LockfileParser, File.expand_path("bundler/lockfile_parser", __dir__)
61
- autoload :MatchPlatform, File.expand_path("bundler/match_platform", __dir__)
60
+ autoload :MatchRemoteMetadata, File.expand_path("bundler/match_remote_metadata", __dir__)
62
61
  autoload :ProcessLock, File.expand_path("bundler/process_lock", __dir__)
63
62
  autoload :RemoteSpecification, File.expand_path("bundler/remote_specification", __dir__)
64
63
  autoload :Resolver, File.expand_path("bundler/resolver", __dir__)
@@ -76,11 +75,12 @@ module Bundler
76
75
  autoload :StubSpecification, File.expand_path("bundler/stub_specification", __dir__)
77
76
  autoload :UI, File.expand_path("bundler/ui", __dir__)
78
77
  autoload :URICredentialsFilter, File.expand_path("bundler/uri_credentials_filter", __dir__)
79
- autoload :VersionRanges, File.expand_path("bundler/version_ranges", __dir__)
78
+ autoload :URINormalizer, File.expand_path("bundler/uri_normalizer", __dir__)
79
+ autoload :SafeMarshal, File.expand_path("bundler/safe_marshal", __dir__)
80
80
 
81
81
  class << self
82
82
  def configure
83
- @configured ||= configure_gem_home_and_path
83
+ @configure ||= configure_gem_home_and_path
84
84
  end
85
85
 
86
86
  def ui
@@ -210,9 +210,10 @@ module Bundler
210
210
  end
211
211
 
212
212
  def frozen_bundle?
213
- frozen = settings[:deployment]
214
- frozen ||= settings[:frozen]
215
- frozen
213
+ frozen = settings[:frozen]
214
+ return frozen unless frozen.nil?
215
+
216
+ settings[:deployment]
216
217
  end
217
218
 
218
219
  def locked_gems
@@ -331,9 +332,9 @@ module Bundler
331
332
  FileUtils.remove_entry_secure(path) if path && File.exist?(path)
332
333
  rescue ArgumentError
333
334
  message = <<EOF
334
- It is a security vulnerability to allow your home directory to be world-writable, and bundler can not continue.
335
+ It is a security vulnerability to allow your home directory to be world-writable, and bundler cannot continue.
335
336
  You should probably consider fixing this issue by running `chmod o-w ~` on *nix.
336
- Please refer to https://ruby-doc.org/stdlib-2.1.2/libdoc/fileutils/rdoc/FileUtils.html#method-c-remove_entry_secure for details.
337
+ Please refer to https://ruby-doc.org/stdlib-3.1.2/libdoc/fileutils/rdoc/FileUtils.html#method-c-remove_entry_secure for details.
337
338
  EOF
338
339
  File.world_writable?(path) ? Bundler.ui.warn(message) : raise
339
340
  raise PathError, "Please fix the world-writable issue with your #{path} directory"
@@ -455,7 +456,7 @@ EOF
455
456
  end
456
457
 
457
458
  def local_platform
458
- return Gem::Platform::RUBY if settings[:force_ruby_platform] || Gem.platforms == [Gem::Platform::RUBY]
459
+ return Gem::Platform::RUBY if settings[:force_ruby_platform]
459
460
  Gem::Platform.local
460
461
  end
461
462
 
@@ -488,41 +489,9 @@ EOF
488
489
  configured_bundle_path.use_system_gems?
489
490
  end
490
491
 
491
- def requires_sudo?
492
- return @requires_sudo if defined?(@requires_sudo_ran)
493
-
494
- sudo_present = which "sudo" if settings.allow_sudo?
495
-
496
- if sudo_present
497
- # the bundle path and subdirectories need to be writable for RubyGems
498
- # to be able to unpack and install gems without exploding
499
- path = bundle_path
500
- path = path.parent until path.exist?
501
-
502
- # bins are written to a different location on OS X
503
- bin_dir = Pathname.new(Bundler.system_bindir)
504
- bin_dir = bin_dir.parent until bin_dir.exist?
505
-
506
- # if any directory is not writable, we need sudo
507
- files = [path, bin_dir] | Dir[bundle_path.join("build_info/*").to_s] | Dir[bundle_path.join("*").to_s]
508
- unwritable_files = files.reject {|f| File.writable?(f) }
509
- sudo_needed = !unwritable_files.empty?
510
- if sudo_needed
511
- Bundler.ui.warn "Following files may not be writable, so sudo is needed:\n #{unwritable_files.map(&:to_s).sort.join("\n ")}"
512
- end
513
- end
514
-
515
- @requires_sudo_ran = true
516
- @requires_sudo = settings.allow_sudo? && sudo_present && sudo_needed
517
- end
518
-
519
492
  def mkdir_p(path, options = {})
520
- if requires_sudo? && !options[:no_sudo]
521
- sudo "mkdir -p '#{path}'" unless File.exist?(path)
522
- else
523
- SharedHelpers.filesystem_access(path, :write) do |p|
524
- FileUtils.mkdir_p(p)
525
- end
493
+ SharedHelpers.filesystem_access(path, :write) do |p|
494
+ FileUtils.mkdir_p(p)
526
495
  end
527
496
  end
528
497
 
@@ -530,7 +499,7 @@ EOF
530
499
  if File.file?(executable) && File.executable?(executable)
531
500
  executable
532
501
  elsif paths = ENV["PATH"]
533
- quote = '"'.freeze
502
+ quote = '"'
534
503
  paths.split(File::PATH_SEPARATOR).find do |path|
535
504
  path = path[1..-2] if path.start_with?(quote) && path.end_with?(quote)
536
505
  executable_path = File.expand_path(executable, path)
@@ -539,41 +508,14 @@ EOF
539
508
  end
540
509
  end
541
510
 
542
- def sudo(str)
543
- SUDO_MUTEX.synchronize do
544
- prompt = "\n\n" + <<-PROMPT.gsub(/^ {6}/, "").strip + " "
545
- Your user account isn't allowed to install to the system RubyGems.
546
- You can cancel this installation and run:
547
-
548
- bundle config set --local path 'vendor/bundle'
549
- bundle install
550
-
551
- to install the gems into ./vendor/bundle/, or you can enter your password
552
- and install the bundled gems to RubyGems using sudo.
553
-
554
- Password:
555
- PROMPT
556
-
557
- unless @prompted_for_sudo ||= system(%(sudo -k -p "#{prompt}" true))
558
- raise SudoNotPermittedError,
559
- "Bundler requires sudo access to install at the moment. " \
560
- "Try installing again, granting Bundler sudo access when prompted, or installing into a different path."
561
- end
562
-
563
- `sudo -p "#{prompt}" #{str}`
564
- end
565
- end
566
-
567
511
  def read_file(file)
568
512
  SharedHelpers.filesystem_access(file, :read) do
569
513
  File.open(file, "r:UTF-8", &:read)
570
514
  end
571
515
  end
572
516
 
573
- def load_marshal(data)
574
- Marshal.load(data)
575
- rescue TypeError => e
576
- raise MarshalError, "#{e.class}: #{e.message}"
517
+ def safe_load_marshal(data)
518
+ load_marshal(data, :marshal_proc => SafeMarshal.proc)
577
519
  end
578
520
 
579
521
  def load_gemspec(file, validate = false)
@@ -582,7 +524,7 @@ EOF
582
524
  @gemspec_cache[key] ||= load_gemspec_uncached(file, validate)
583
525
  # Protect against caching side-effected gemspecs by returning a
584
526
  # new instance each time.
585
- @gemspec_cache[key].dup if @gemspec_cache[key]
527
+ @gemspec_cache[key]&.dup
586
528
  end
587
529
 
588
530
  def load_gemspec_uncached(file, validate = false)
@@ -609,7 +551,7 @@ EOF
609
551
 
610
552
  def git_present?
611
553
  return @git_present if defined?(@git_present)
612
- @git_present = Bundler.which("git") || Bundler.which("git.exe")
554
+ @git_present = Bundler.which("git#{RbConfig::CONFIG["EXEEXT"]}")
613
555
  end
614
556
 
615
557
  def feature_flag
@@ -631,7 +573,7 @@ EOF
631
573
  @bin_path = nil
632
574
  @bundler_major_version = nil
633
575
  @bundle_path = nil
634
- @configured = nil
576
+ @configure = nil
635
577
  @configured_bundle_path = nil
636
578
  @definition = nil
637
579
  @load = nil
@@ -664,6 +606,12 @@ EOF
664
606
 
665
607
  private
666
608
 
609
+ def load_marshal(data, marshal_proc: nil)
610
+ Marshal.load(data, marshal_proc)
611
+ rescue TypeError => e
612
+ raise MarshalError, "#{e.class}: #{e.message}"
613
+ end
614
+
667
615
  def eval_yaml_gemspec(path, contents)
668
616
  Kernel.require "psych"
669
617
 
data/{bin → exe}/gem RENAMED
@@ -1,13 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
2
4
  #--
3
5
  # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
4
6
  # All rights reserved.
5
7
  # See LICENSE.txt for permissions.
6
8
  #++
7
9
 
8
- require 'rubygems'
9
- require 'rubygems/gem_runner'
10
-
11
- args = ARGV.clone
10
+ require "rubygems/gem_runner"
12
11
 
13
- Gem::GemRunner.new.run args
12
+ Gem::GemRunner.new.run ARGV.clone
@@ -1,26 +1,28 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
2
4
  #--
3
5
  # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
4
6
  # All rights reserved.
5
7
  # See LICENSE.txt for permissions.
6
8
  #++
7
9
 
8
- require 'rubygems'
10
+ require "rubygems"
9
11
 
10
- if ARGV.include? '-h' or ARGV.include? '--help'
11
- $stderr.puts "rubygems_update [options]"
12
- $stderr.puts
13
- $stderr.puts "This will install the latest version of RubyGems."
14
- $stderr.puts
15
- $stderr.puts "\t--version=X.Y\tUpdate RubyGems from the X.Y version."
12
+ if ARGV.include?("-h") || ARGV.include?("--help")
13
+ warn "rubygems_update [options]"
14
+ warn ""
15
+ warn "This will install the latest version of RubyGems."
16
+ warn ""
17
+ warn "\t--version=X.Y\tUpdate RubyGems from the X.Y version."
16
18
  exit
17
19
  end
18
20
 
19
21
  unless ARGV.grep(/--version=([\d\.]*)/).empty?
20
- exec Gem.ruby, '-S', $PROGRAM_NAME, "_#{$1}_"
22
+ exec Gem.ruby, "-S", $PROGRAM_NAME, "_#{$1}_"
21
23
  end
22
24
 
23
- update_dir = $LOAD_PATH.find {|dir| dir =~ /rubygems-update/ }
25
+ update_dir = $LOAD_PATH.find {|dir| dir.include?("rubygems-update") }
24
26
 
25
27
  if update_dir.nil?
26
28
  puts "Error: Cannot find RubyGems update path!"
@@ -32,5 +34,5 @@ else
32
34
  update_dir = File.dirname(update_dir)
33
35
  Dir.chdir update_dir
34
36
  ENV["GEM_PREV_VER"] = Gem::VERSION
35
- abort unless system(Gem.ruby, 'setup.rb', *ARGV)
37
+ abort unless system(Gem.ruby, "setup.rb", *ARGV)
36
38
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Gem::AvailableSet
3
4
  include Enumerable
4
5
 
@@ -26,7 +27,7 @@ class Gem::AvailableSet
26
27
  s = o.set
27
28
  when Array
28
29
  s = o.map do |sp,so|
29
- if !sp.kind_of?(Gem::Specification) or !so.kind_of?(Gem::Source)
30
+ if !sp.kind_of?(Gem::Specification) || !so.kind_of?(Gem::Source)
30
31
  raise TypeError, "Array must be in [[spec, source], ...] form"
31
32
  end
32
33
 
@@ -149,8 +150,8 @@ class Gem::AvailableSet
149
150
  @set.reject! do |t|
150
151
  # already locally installed
151
152
  Gem::Specification.any? do |installed_spec|
152
- dep.name == installed_spec.name and
153
- dep.requirement.satisfied_by? installed_spec.version
153
+ dep.name == installed_spec.name &&
154
+ dep.requirement.satisfied_by?(installed_spec.version)
154
155
  end
155
156
  end
156
157
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  ##
3
4
  # BasicSpecification is an abstract class which implements some common code
4
5
  # used by both Specification and StubSpecification.
@@ -47,7 +48,7 @@ class Gem::BasicSpecification
47
48
  # directory.
48
49
 
49
50
  def gem_build_complete_path # :nodoc:
50
- File.join extension_dir, 'gem.build_complete'
51
+ File.join extension_dir, "gem.build_complete"
51
52
  end
52
53
 
53
54
  ##
@@ -77,7 +78,7 @@ class Gem::BasicSpecification
77
78
 
78
79
  if Gem::Platform::RUBY == platform || Gem::Platform.local === platform
79
80
  warn "Ignoring #{full_name} because its extensions are not built. " +
80
- "Try: gem pristine #{name} --version #{version}"
81
+ "Try: gem pristine #{name} --version #{version}"
81
82
  end
82
83
 
83
84
  return false
@@ -103,7 +104,7 @@ class Gem::BasicSpecification
103
104
 
104
105
  def extensions_dir
105
106
  Gem.default_ext_dir_for(base_dir) ||
106
- File.join(base_dir, 'extensions', Gem::Platform.local.to_s,
107
+ File.join(base_dir, "extensions", Gem::Platform.local.to_s,
107
108
  Gem.extension_api_version)
108
109
  end
109
110
 
@@ -131,7 +132,7 @@ class Gem::BasicSpecification
131
132
  # default Ruby platform.
132
133
 
133
134
  def full_name
134
- if platform == Gem::Platform::RUBY or platform.nil?
135
+ if platform == Gem::Platform::RUBY || platform.nil?
135
136
  "#{name}-#{version}".dup.tap(&Gem::UNTAINT)
136
137
  else
137
138
  "#{name}-#{version}-#{platform}".dup.tap(&Gem::UNTAINT)
@@ -21,7 +21,7 @@ module Gem::BundlerVersionFinder
21
21
  end
22
22
 
23
23
  def self.bundle_update_bundler_version
24
- return unless File.basename($0) == "bundle".freeze
24
+ return unless File.basename($0) == "bundle"
25
25
  return unless "update".start_with?(ARGV.first || " ")
26
26
  bundler_version = nil
27
27
  update_index = nil
@@ -47,7 +47,7 @@ module Gem::BundlerVersionFinder
47
47
 
48
48
  def self.lockfile_contents
49
49
  gemfile = ENV["BUNDLE_GEMFILE"]
50
- gemfile = nil if gemfile && gemfile.empty?
50
+ gemfile = nil if gemfile&.empty?
51
51
 
52
52
  unless gemfile
53
53
  begin
@@ -1,13 +1,14 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  #--
3
4
  # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
4
5
  # All rights reserved.
5
6
  # See LICENSE.txt for permissions.
6
7
  #++
7
8
 
8
- require_relative 'optparse'
9
- require_relative 'requirement'
10
- require_relative 'user_interaction'
9
+ require_relative "optparse"
10
+ require_relative "requirement"
11
+ require_relative "user_interaction"
11
12
 
12
13
  ##
13
14
  # Base class for all Gem commands. When creating a new gem command, define
@@ -76,7 +77,7 @@ class Gem::Command
76
77
  when Array
77
78
  @extra_args = value
78
79
  when String
79
- @extra_args = value.split(' ')
80
+ @extra_args = value.split(" ")
80
81
  end
81
82
  end
82
83
 
@@ -159,11 +160,11 @@ class Gem::Command
159
160
  gem = "'#{gem_name}' (#{version})"
160
161
  msg = String.new "Could not find a valid gem #{gem}"
161
162
 
162
- if errors and !errors.empty?
163
+ if errors && !errors.empty?
163
164
  msg << ", here is why:\n"
164
165
  errors.each {|x| msg << " #{x.wordy}\n" }
165
166
  else
166
- if required_by and gem != required_by
167
+ if required_by && gem != required_by
167
168
  msg << " (required by #{required_by}) in any repository"
168
169
  else
169
170
  msg << " in any repository"
@@ -186,7 +187,7 @@ class Gem::Command
186
187
  def get_all_gem_names
187
188
  args = options[:args]
188
189
 
189
- if args.nil? or args.empty?
190
+ if args.nil? || args.empty?
190
191
  raise Gem::CommandLineError,
191
192
  "Please specify at least one gem name (e.g. gem build GEMNAME)"
192
193
  end
@@ -201,11 +202,15 @@ class Gem::Command
201
202
  # respectively.
202
203
  def get_all_gem_names_and_versions
203
204
  get_all_gem_names.map do |name|
204
- if /\A(.*):(#{Gem::Requirement::PATTERN_RAW})\z/ =~ name
205
- [$1, $2]
206
- else
207
- [name]
208
- end
205
+ extract_gem_name_and_version(name)
206
+ end
207
+ end
208
+
209
+ def extract_gem_name_and_version(name) # :nodoc:
210
+ if /\A(.*):(#{Gem::Requirement::PATTERN_RAW})\z/ =~ name
211
+ [$1, $2]
212
+ else
213
+ [name]
209
214
  end
210
215
  end
211
216
 
@@ -216,7 +221,7 @@ class Gem::Command
216
221
  def get_one_gem_name
217
222
  args = options[:args]
218
223
 
219
- if args.nil? or args.empty?
224
+ if args.nil? || args.empty?
220
225
  raise Gem::CommandLineError,
221
226
  "Please specify a gem name on the command line (e.g. gem build GEMNAME)"
222
227
  end
@@ -554,9 +559,9 @@ class Gem::Command
554
559
  end
555
560
 
556
561
  def configure_options(header, option_list)
557
- return if option_list.nil? or option_list.empty?
562
+ return if option_list.nil? || option_list.empty?
558
563
 
559
- header = header.to_s.empty? ? '' : "#{header} "
564
+ header = header.to_s.empty? ? "" : "#{header} "
560
565
  @parser.separator " #{header}Options:"
561
566
 
562
567
  option_list.each do |args, handler|
@@ -565,7 +570,7 @@ class Gem::Command
565
570
  end
566
571
  end
567
572
 
568
- @parser.separator ''
573
+ @parser.separator ""
569
574
  end
570
575
 
571
576
  ##
@@ -578,22 +583,22 @@ class Gem::Command
578
583
  # ----------------------------------------------------------------
579
584
  # Add the options common to all commands.
580
585
 
581
- add_common_option('-h', '--help',
582
- 'Get help on this command') do |value, options|
586
+ add_common_option("-h", "--help",
587
+ "Get help on this command") do |value, options|
583
588
  options[:help] = true
584
589
  end
585
590
 
586
- add_common_option('-V', '--[no-]verbose',
587
- 'Set the verbose level of output') do |value, options|
591
+ add_common_option("-V", "--[no-]verbose",
592
+ "Set the verbose level of output") do |value, options|
588
593
  # Set us to "really verbose" so the progress meter works
589
- if Gem.configuration.verbose and value
594
+ if Gem.configuration.verbose && value
590
595
  Gem.configuration.verbose = 1
591
596
  else
592
597
  Gem.configuration.verbose = value
593
598
  end
594
599
  end
595
600
 
596
- add_common_option('-q', '--quiet', 'Silence command progress meter') do |value, options|
601
+ add_common_option("-q", "--quiet", "Silence command progress meter") do |value, options|
597
602
  Gem.configuration.verbose = false
598
603
  end
599
604
 
@@ -606,31 +611,35 @@ class Gem::Command
606
611
  # commands. Both options are actually handled before the other
607
612
  # options get parsed.
608
613
 
609
- add_common_option('--config-file FILE',
610
- 'Use this config file instead of default') do
614
+ add_common_option("--config-file FILE",
615
+ "Use this config file instead of default") do
611
616
  end
612
617
 
613
- add_common_option('--backtrace',
614
- 'Show stack backtrace on errors') do
618
+ add_common_option("--backtrace",
619
+ "Show stack backtrace on errors") do
615
620
  end
616
621
 
617
- add_common_option('--debug',
618
- 'Turn on Ruby debugging') do
622
+ add_common_option("--debug",
623
+ "Turn on Ruby debugging") do
619
624
  end
620
625
 
621
- add_common_option('--norc',
622
- 'Avoid loading any .gemrc file') do
626
+ add_common_option("--norc",
627
+ "Avoid loading any .gemrc file") do
623
628
  end
624
629
 
625
630
  # :stopdoc:
626
631
 
627
- HELP = <<-HELP.freeze
632
+ HELP = <<-HELP
628
633
  RubyGems is a package manager for Ruby.
629
634
 
630
635
  Usage:
631
636
  gem -h/--help
632
637
  gem -v/--version
633
- gem command [arguments...] [options...]
638
+ gem [global options...] command [arguments...] [options...]
639
+
640
+ Global options:
641
+ -C PATH run as if gem was started in <PATH>
642
+ instead of the current working directory
634
643
 
635
644
  Examples:
636
645
  gem install rake