rubygems-update 3.5.5 → 3.6.9

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 (413) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +606 -1
  3. data/CODE_OF_CONDUCT.md +79 -28
  4. data/Manifest.txt +114 -73
  5. data/README.md +16 -11
  6. data/bundler/CHANGELOG.md +506 -6
  7. data/bundler/README.md +2 -2
  8. data/bundler/bundler.gemspec +2 -2
  9. data/bundler/lib/bundler/build_metadata.rb +2 -2
  10. data/bundler/lib/bundler/checksum.rb +22 -12
  11. data/bundler/lib/bundler/cli/add.rb +3 -1
  12. data/bundler/lib/bundler/cli/binstubs.rb +1 -1
  13. data/bundler/lib/bundler/cli/check.rb +3 -3
  14. data/bundler/lib/bundler/cli/console.rb +8 -10
  15. data/bundler/lib/bundler/cli/doctor/diagnose.rb +167 -0
  16. data/bundler/lib/bundler/cli/doctor/ssl.rb +249 -0
  17. data/bundler/lib/bundler/cli/doctor.rb +27 -151
  18. data/bundler/lib/bundler/cli/exec.rb +1 -0
  19. data/bundler/lib/bundler/cli/fund.rb +1 -1
  20. data/bundler/lib/bundler/cli/gem.rb +13 -17
  21. data/bundler/lib/bundler/cli/info.rb +6 -6
  22. data/bundler/lib/bundler/cli/inject.rb +3 -3
  23. data/bundler/lib/bundler/cli/install.rb +14 -5
  24. data/bundler/lib/bundler/cli/issue.rb +3 -3
  25. data/bundler/lib/bundler/cli/lock.rb +32 -11
  26. data/bundler/lib/bundler/cli/outdated.rb +22 -22
  27. data/bundler/lib/bundler/cli/plugin.rb +3 -2
  28. data/bundler/lib/bundler/cli/pristine.rb +1 -1
  29. data/bundler/lib/bundler/cli/show.rb +3 -3
  30. data/bundler/lib/bundler/cli.rb +51 -107
  31. data/bundler/lib/bundler/compact_index_client/cache.rb +48 -73
  32. data/bundler/lib/bundler/compact_index_client/cache_file.rb +0 -5
  33. data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
  34. data/bundler/lib/bundler/compact_index_client/updater.rb +2 -12
  35. data/bundler/lib/bundler/compact_index_client.rb +51 -80
  36. data/bundler/lib/bundler/constants.rb +8 -1
  37. data/bundler/lib/bundler/current_ruby.rb +23 -33
  38. data/bundler/lib/bundler/definition.rb +485 -313
  39. data/bundler/lib/bundler/dependency.rb +92 -46
  40. data/bundler/lib/bundler/dsl.rb +135 -101
  41. data/bundler/lib/bundler/endpoint_specification.rb +30 -3
  42. data/bundler/lib/bundler/env.rb +1 -1
  43. data/bundler/lib/bundler/environment_preserver.rb +5 -23
  44. data/bundler/lib/bundler/errors.rb +53 -5
  45. data/bundler/lib/bundler/feature_flag.rb +3 -6
  46. data/bundler/lib/bundler/fetcher/compact_index.rb +16 -25
  47. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  48. data/bundler/lib/bundler/fetcher.rb +14 -7
  49. data/bundler/lib/bundler/force_platform.rb +0 -2
  50. data/bundler/lib/bundler/friendly_errors.rb +1 -1
  51. data/bundler/lib/bundler/gem_helper.rb +1 -1
  52. data/bundler/lib/bundler/gem_helpers.rb +36 -19
  53. data/bundler/lib/bundler/gem_version_promoter.rb +42 -40
  54. data/bundler/lib/bundler/injector.rb +14 -16
  55. data/bundler/lib/bundler/inline.rb +42 -17
  56. data/bundler/lib/bundler/installer/gem_installer.rb +4 -3
  57. data/bundler/lib/bundler/installer/parallel_installer.rb +3 -2
  58. data/bundler/lib/bundler/installer/standalone.rb +2 -5
  59. data/bundler/lib/bundler/installer.rb +17 -41
  60. data/bundler/lib/bundler/lazy_specification.rb +117 -46
  61. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  62. data/bundler/lib/bundler/lockfile_parser.rb +18 -7
  63. data/bundler/lib/bundler/man/bundle-add.1 +44 -27
  64. data/bundler/lib/bundler/man/bundle-add.1.ronn +52 -23
  65. data/bundler/lib/bundler/man/bundle-binstubs.1 +9 -6
  66. data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
  67. data/bundler/lib/bundler/man/bundle-cache.1 +32 -4
  68. data/bundler/lib/bundler/man/bundle-cache.1.ronn +31 -2
  69. data/bundler/lib/bundler/man/bundle-check.1 +7 -5
  70. data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
  71. data/bundler/lib/bundler/man/bundle-clean.1 +3 -3
  72. data/bundler/lib/bundler/man/bundle-config.1 +11 -15
  73. data/bundler/lib/bundler/man/bundle-config.1.ronn +12 -15
  74. data/bundler/lib/bundler/man/bundle-console.1 +4 -6
  75. data/bundler/lib/bundler/man/bundle-console.1.ronn +2 -7
  76. data/bundler/lib/bundler/man/bundle-doctor.1 +4 -4
  77. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +1 -1
  78. data/bundler/lib/bundler/man/bundle-env.1 +9 -0
  79. data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
  80. data/bundler/lib/bundler/man/bundle-exec.1 +9 -6
  81. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -3
  82. data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
  83. data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
  84. data/bundler/lib/bundler/man/bundle-gem.1 +25 -7
  85. data/bundler/lib/bundler/man/bundle-gem.1.ronn +38 -6
  86. data/bundler/lib/bundler/man/bundle-help.1 +3 -3
  87. data/bundler/lib/bundler/man/bundle-info.1 +7 -4
  88. data/bundler/lib/bundler/man/bundle-info.1.ronn +6 -2
  89. data/bundler/lib/bundler/man/bundle-init.1 +5 -5
  90. data/bundler/lib/bundler/man/bundle-init.1.ronn +3 -2
  91. data/bundler/lib/bundler/man/bundle-inject.1 +12 -4
  92. data/bundler/lib/bundler/man/bundle-inject.1.ronn +9 -1
  93. data/bundler/lib/bundler/man/bundle-install.1 +19 -16
  94. data/bundler/lib/bundler/man/bundle-install.1.ronn +24 -20
  95. data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
  96. data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
  97. data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
  98. data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  99. data/bundler/lib/bundler/man/bundle-list.1 +3 -3
  100. data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
  101. data/bundler/lib/bundler/man/bundle-lock.1 +23 -8
  102. data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
  103. data/bundler/lib/bundler/man/bundle-open.1 +4 -4
  104. data/bundler/lib/bundler/man/bundle-open.1.ronn +2 -1
  105. data/bundler/lib/bundler/man/bundle-outdated.1 +10 -7
  106. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +8 -4
  107. data/bundler/lib/bundler/man/bundle-platform.1 +3 -3
  108. data/bundler/lib/bundler/man/bundle-plugin.1 +9 -6
  109. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +7 -3
  110. data/bundler/lib/bundler/man/bundle-pristine.1 +3 -3
  111. data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
  112. data/bundler/lib/bundler/man/bundle-remove.1 +3 -3
  113. data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
  114. data/bundler/lib/bundler/man/bundle-show.1 +7 -4
  115. data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
  116. data/bundler/lib/bundler/man/bundle-update.1 +15 -9
  117. data/bundler/lib/bundler/man/bundle-update.1.ronn +14 -6
  118. data/bundler/lib/bundler/man/bundle-version.1 +3 -3
  119. data/bundler/lib/bundler/man/bundle-viz.1 +6 -6
  120. data/bundler/lib/bundler/man/bundle-viz.1.ronn +7 -3
  121. data/bundler/lib/bundler/man/bundle.1 +3 -3
  122. data/bundler/lib/bundler/man/gemfile.5 +7 -5
  123. data/bundler/lib/bundler/man/gemfile.5.ronn +8 -2
  124. data/bundler/lib/bundler/man/index.txt +4 -0
  125. data/bundler/lib/bundler/match_metadata.rb +13 -0
  126. data/bundler/lib/bundler/materialization.rb +59 -0
  127. data/bundler/lib/bundler/mirror.rb +3 -3
  128. data/bundler/lib/bundler/plugin/api/source.rb +5 -4
  129. data/bundler/lib/bundler/plugin/events.rb +24 -0
  130. data/bundler/lib/bundler/plugin/index.rb +5 -1
  131. data/bundler/lib/bundler/plugin/installer/path.rb +26 -0
  132. data/bundler/lib/bundler/plugin/installer.rb +37 -17
  133. data/bundler/lib/bundler/plugin/source_list.rb +4 -4
  134. data/bundler/lib/bundler/plugin.rb +21 -2
  135. data/bundler/lib/bundler/process_lock.rb +10 -14
  136. data/bundler/lib/bundler/remote_specification.rb +6 -1
  137. data/bundler/lib/bundler/resolver/base.rb +14 -3
  138. data/bundler/lib/bundler/resolver/candidate.rb +18 -27
  139. data/bundler/lib/bundler/resolver/package.rb +20 -3
  140. data/bundler/lib/bundler/resolver/spec_group.rb +22 -27
  141. data/bundler/lib/bundler/resolver/strategy.rb +40 -0
  142. data/bundler/lib/bundler/resolver.rb +114 -50
  143. data/bundler/lib/bundler/retry.rb +1 -1
  144. data/bundler/lib/bundler/ruby_dsl.rb +12 -3
  145. data/bundler/lib/bundler/ruby_version.rb +7 -1
  146. data/bundler/lib/bundler/rubygems_ext.rb +282 -125
  147. data/bundler/lib/bundler/rubygems_gem_installer.rb +40 -5
  148. data/bundler/lib/bundler/rubygems_integration.rb +29 -67
  149. data/bundler/lib/bundler/runtime.rb +48 -35
  150. data/bundler/lib/bundler/self_manager.rb +27 -7
  151. data/bundler/lib/bundler/settings.rb +32 -21
  152. data/bundler/lib/bundler/setup.rb +6 -0
  153. data/bundler/lib/bundler/shared_helpers.rb +39 -21
  154. data/bundler/lib/bundler/source/gemspec.rb +1 -4
  155. data/bundler/lib/bundler/source/git/git_proxy.rb +23 -6
  156. data/bundler/lib/bundler/source/git.rb +113 -41
  157. data/bundler/lib/bundler/source/metadata.rb +4 -3
  158. data/bundler/lib/bundler/source/path.rb +7 -18
  159. data/bundler/lib/bundler/source/rubygems/remote.rb +12 -4
  160. data/bundler/lib/bundler/source/rubygems.rb +54 -48
  161. data/bundler/lib/bundler/source.rb +2 -0
  162. data/bundler/lib/bundler/source_list.rb +53 -7
  163. data/bundler/lib/bundler/spec_set.rb +187 -88
  164. data/bundler/lib/bundler/stub_specification.rb +29 -2
  165. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
  166. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +1 -3
  167. data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -3
  168. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +15 -15
  169. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -7
  170. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
  171. data/bundler/lib/bundler/ui/shell.rb +24 -2
  172. data/bundler/lib/bundler/ui/silent.rb +12 -1
  173. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
  174. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +53 -3
  175. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  176. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +11 -0
  177. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +15 -13
  178. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +68 -30
  179. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +4 -24
  180. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +1 -0
  181. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
  182. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +20 -8
  183. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +17 -29
  184. data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
  185. data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  186. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +3 -5
  187. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +11 -0
  188. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +1 -4
  189. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +2 -2
  190. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +2 -1
  191. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +9 -9
  192. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
  193. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +5 -21
  194. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  195. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  196. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +11 -0
  197. data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
  198. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +43 -16
  199. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +3 -3
  200. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +1 -1
  201. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +28 -37
  202. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +2 -2
  203. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -9
  204. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +26 -3
  205. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  206. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +9 -9
  207. data/bundler/lib/bundler/vendored_net_http.rb +20 -5
  208. data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
  209. data/bundler/lib/bundler/vendored_timeout.rb +7 -3
  210. data/bundler/lib/bundler/vendored_uri.rb +18 -1
  211. data/bundler/lib/bundler/version.rb +1 -1
  212. data/bundler/lib/bundler/yaml_serializer.rb +12 -7
  213. data/bundler/lib/bundler.rb +89 -51
  214. data/{CONTRIBUTING.md → doc/rubygems/CONTRIBUTING.md} +10 -14
  215. data/{POLICIES.md → doc/rubygems/POLICIES.md} +81 -12
  216. data/exe/update_rubygems +1 -1
  217. data/lib/rubygems/basic_specification.rb +43 -10
  218. data/lib/rubygems/bundler_version_finder.rb +1 -1
  219. data/lib/rubygems/command.rb +1 -4
  220. data/lib/rubygems/command_manager.rb +5 -6
  221. data/lib/rubygems/commands/build_command.rb +2 -11
  222. data/lib/rubygems/commands/cleanup_command.rb +3 -13
  223. data/lib/rubygems/commands/contents_command.rb +17 -10
  224. data/lib/rubygems/commands/environment_command.rb +5 -0
  225. data/lib/rubygems/commands/exec_command.rb +18 -11
  226. data/lib/rubygems/commands/fetch_command.rb +14 -0
  227. data/lib/rubygems/commands/help_command.rb +2 -2
  228. data/lib/rubygems/commands/install_command.rb +0 -4
  229. data/lib/rubygems/commands/pristine_command.rb +30 -17
  230. data/lib/rubygems/commands/push_command.rb +31 -6
  231. data/lib/rubygems/commands/rdoc_command.rb +3 -10
  232. data/lib/rubygems/commands/rebuild_command.rb +262 -0
  233. data/lib/rubygems/commands/setup_command.rb +11 -16
  234. data/lib/rubygems/commands/sources_command.rb +2 -2
  235. data/lib/rubygems/commands/uninstall_command.rb +9 -4
  236. data/lib/rubygems/commands/unpack_command.rb +0 -6
  237. data/lib/rubygems/commands/update_command.rb +10 -17
  238. data/lib/rubygems/config_file.rb +45 -16
  239. data/lib/rubygems/core_ext/kernel_warn.rb +2 -6
  240. data/lib/rubygems/defaults.rb +6 -6
  241. data/lib/rubygems/dependency.rb +12 -16
  242. data/lib/rubygems/dependency_list.rb +1 -1
  243. data/lib/rubygems/deprecate.rb +79 -77
  244. data/lib/rubygems/errors.rb +2 -1
  245. data/lib/rubygems/exceptions.rb +2 -9
  246. data/lib/rubygems/ext/builder.rb +21 -8
  247. data/lib/rubygems/ext/cargo_builder.rb +12 -26
  248. data/lib/rubygems/ext/cmake_builder.rb +7 -2
  249. data/lib/rubygems/ext/configure_builder.rb +7 -2
  250. data/lib/rubygems/ext/ext_conf_builder.rb +9 -5
  251. data/lib/rubygems/ext/rake_builder.rb +7 -4
  252. data/lib/rubygems/gem_runner.rb +9 -0
  253. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +1 -1
  254. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -1
  255. data/lib/rubygems/gemcutter_utilities.rb +52 -26
  256. data/lib/rubygems/gemspec_helpers.rb +19 -0
  257. data/lib/rubygems/install_update_options.rb +5 -0
  258. data/lib/rubygems/installer.rb +31 -40
  259. data/lib/rubygems/local_remote_options.rb +8 -8
  260. data/lib/rubygems/package/tar_header.rb +31 -4
  261. data/lib/rubygems/package/tar_reader/entry.rb +1 -5
  262. data/lib/rubygems/package/tar_writer.rb +5 -4
  263. data/lib/rubygems/package.rb +13 -8
  264. data/lib/rubygems/platform.rb +7 -5
  265. data/lib/rubygems/psych_tree.rb +4 -0
  266. data/lib/rubygems/query_utils.rb +2 -2
  267. data/lib/rubygems/rdoc.rb +16 -3
  268. data/lib/rubygems/remote_fetcher.rb +3 -4
  269. data/lib/rubygems/request.rb +5 -5
  270. data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
  271. data/lib/rubygems/request_set.rb +1 -1
  272. data/lib/rubygems/requirement.rb +16 -12
  273. data/lib/rubygems/resolver/activation_request.rb +1 -1
  274. data/lib/rubygems/resolver/api_set/gem_parser.rb +2 -5
  275. data/lib/rubygems/resolver/api_set.rb +13 -8
  276. data/lib/rubygems/resolver/best_set.rb +0 -28
  277. data/lib/rubygems/resolver/composed_set.rb +3 -3
  278. data/lib/rubygems/resolver/git_set.rb +0 -1
  279. data/lib/rubygems/resolver/index_set.rb +2 -2
  280. data/lib/rubygems/resolver/spec_specification.rb +7 -0
  281. data/lib/rubygems/resolver.rb +7 -7
  282. data/lib/rubygems/s3_uri_signer.rb +3 -3
  283. data/lib/rubygems/safe_marshal/reader.rb +31 -14
  284. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +29 -16
  285. data/lib/rubygems/safe_yaml.rb +10 -1
  286. data/lib/rubygems/security.rb +1 -1
  287. data/lib/rubygems/source/git.rb +22 -17
  288. data/lib/rubygems/source/installed.rb +3 -1
  289. data/lib/rubygems/source/local.rb +8 -4
  290. data/lib/rubygems/source/specific_file.rb +5 -3
  291. data/lib/rubygems/source.rb +10 -8
  292. data/lib/rubygems/source_list.rb +1 -1
  293. data/lib/rubygems/spec_fetcher.rb +47 -15
  294. data/lib/rubygems/specification.rb +107 -180
  295. data/lib/rubygems/specification_policy.rb +33 -13
  296. data/lib/rubygems/specification_record.rb +212 -0
  297. data/lib/rubygems/stub_specification.rb +32 -10
  298. data/lib/rubygems/target_rbconfig.rb +50 -0
  299. data/lib/rubygems/uninstaller.rb +42 -22
  300. data/lib/rubygems/uri.rb +6 -6
  301. data/lib/rubygems/util/licenses.rb +97 -1
  302. data/lib/rubygems/util.rb +1 -1
  303. data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  304. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
  305. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
  306. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  307. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  308. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  309. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  310. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
  311. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  312. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
  313. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
  314. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph.rb +2 -2
  315. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/errors.rb +1 -1
  316. data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
  317. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
  318. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/ui.rb +1 -1
  319. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolution.rb +4 -4
  320. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolver.rb +1 -1
  321. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/state.rb +1 -1
  322. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo.rb +2 -2
  323. data/lib/rubygems/vendor/net-http/COPYING +56 -0
  324. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/generic_request.rb +9 -9
  325. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/header.rb +3 -3
  326. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/request.rb +3 -3
  327. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/requests.rb +35 -30
  328. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/response.rb +2 -2
  329. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/responses.rb +6 -6
  330. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/status.rb +1 -1
  331. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http.rb +135 -51
  332. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/https.rb +1 -1
  333. data/lib/rubygems/vendor/optparse/COPYING +56 -0
  334. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
  335. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
  336. data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
  337. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
  338. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +158 -62
  339. data/lib/rubygems/vendor/resolv/COPYING +56 -0
  340. data/lib/rubygems/{resolv → vendor/resolv}/lib/resolv.rb +117 -49
  341. data/lib/rubygems/vendor/securerandom/COPYING +56 -0
  342. data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
  343. data/lib/rubygems/vendor/timeout/.document +1 -0
  344. data/lib/rubygems/vendor/timeout/COPYING +56 -0
  345. data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +10 -11
  346. data/lib/rubygems/vendor/tsort/.document +1 -0
  347. data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
  348. data/lib/rubygems/vendor/uri/.document +1 -0
  349. data/lib/rubygems/vendor/uri/COPYING +56 -0
  350. data/lib/rubygems/vendor/uri/lib/uri/common.rb +880 -0
  351. data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
  352. data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
  353. data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1579 -0
  354. data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
  355. data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
  356. data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
  357. data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
  358. data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
  359. data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  360. data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
  361. data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
  362. data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
  363. data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
  364. data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
  365. data/lib/rubygems/vendored_molinillo.rb +3 -0
  366. data/lib/rubygems/vendored_net_http.rb +5 -0
  367. data/lib/rubygems/vendored_optparse.rb +3 -0
  368. data/lib/rubygems/vendored_securerandom.rb +3 -0
  369. data/lib/rubygems/vendored_timeout.rb +5 -0
  370. data/lib/rubygems/vendored_tsort.rb +3 -0
  371. data/lib/rubygems/version.rb +26 -9
  372. data/lib/rubygems/yaml_serializer.rb +12 -7
  373. data/lib/rubygems.rb +82 -47
  374. data/rubygems-update.gemspec +11 -6
  375. data/setup.rb +1 -1
  376. metadata +131 -86
  377. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +0 -32
  378. data/lib/rubygems/net/http.rb +0 -3
  379. data/lib/rubygems/net-http/LICENSE.txt +0 -22
  380. data/lib/rubygems/net-http/lib/net/http/backward.rb +0 -40
  381. data/lib/rubygems/net-protocol/LICENSE.txt +0 -22
  382. data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
  383. data/lib/rubygems/optparse.rb +0 -3
  384. data/lib/rubygems/resolv/LICENSE.txt +0 -22
  385. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  386. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  387. data/lib/rubygems/resolver/molinillo.rb +0 -3
  388. data/lib/rubygems/shellwords.rb +0 -3
  389. data/lib/rubygems/timeout/LICENSE.txt +0 -22
  390. data/lib/rubygems/timeout.rb +0 -3
  391. data/lib/rubygems/tsort/LICENSE.txt +0 -22
  392. data/lib/rubygems/tsort.rb +0 -3
  393. /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
  394. /data/{lib/rubygems/net-http → bundler/lib/bundler/vendor/securerandom}/.document +0 -0
  395. /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
  396. /data/{bundler → doc/bundler}/UPGRADING.md +0 -0
  397. /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
  398. /data/lib/rubygems/{net-protocol → vendor/molinillo}/.document +0 -0
  399. /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +0 -0
  400. /data/lib/rubygems/{optparse → vendor/net-http}/.document +0 -0
  401. /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/exceptions.rb +0 -0
  402. /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/proxy_delta.rb +0 -0
  403. /data/lib/rubygems/{resolv → vendor/net-protocol}/.document +0 -0
  404. /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
  405. /data/lib/rubygems/{net-protocol → vendor/net-protocol}/lib/net/protocol.rb +0 -0
  406. /data/lib/rubygems/{resolver/molinillo → vendor/optparse}/.document +0 -0
  407. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
  408. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
  409. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
  410. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
  411. /data/lib/rubygems/{timeout → vendor/resolv}/.document +0 -0
  412. /data/lib/rubygems/{tsort → vendor/securerandom}/.document +0 -0
  413. /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
@@ -65,6 +65,59 @@ Bundler:
65
65
  have to work on weekends.
66
66
  * Continue with the regular release process below.
67
67
 
68
+ ### Branching
69
+
70
+ Bundler releases are synchronized with rubygems releases at the moment. That
71
+ means that releases for both share the same stable branch, and they should
72
+ generally happen together.
73
+
74
+ The current conventional naming for stable branches is `x+1.y`, where `x.y` is
75
+ the version of `bundler` that will be released. This is because `rubygems-x+1.y`
76
+ will be released at the same time.
77
+
78
+ For example, `rubygems-3.2.0` and `bundler-2.2.0` were both released from the
79
+ `3.2` stable branch.
80
+
81
+ Once a stable branch has been cut from `master`, changes for that minor release
82
+ series are only made _intentionally_, via patch releases. That is to say,
83
+ changes to `master` by default _won't_ make their way into the current stable
84
+ branch, and development on `master` will be targeting the next minor
85
+ or major release.
86
+
87
+ There is a `bin/rake prepare_release[<target_rubygems_version>]` rake task
88
+ that helps with creating a release. It takes a single argument, the _exact
89
+ rubygems release_ being made (e.g. `3.2.3` when releasing bundler `2.2.3`).
90
+ This task checks out the appropriate stable branch (`3.2`, for example), grabs
91
+ all merged but unreleased PRs from both bundler & rubygems from GitHub that are
92
+ compatible with the target release level, and then cherry-picks those changes
93
+ (and only those changes) to a new branch based off the stable branch. Then bumps
94
+ the version in all version files, synchronizes both changelogs to include all
95
+ backported changes and commits that change on top of the cherry-picks.
96
+
97
+ Note that this task requires all user facing pull requests to be tagged with
98
+ specific labels. See [Merging a PR](../bundler/playbooks/MERGING_A_PR.md) for details.
99
+
100
+ Also note that when this task cherry-picks, it cherry-picks the merge commits
101
+ using the following command:
102
+
103
+ ```bash
104
+ $ git cherry-pick -m 1 MERGE_COMMIT_SHAS
105
+ ```
106
+
107
+ For example, for PR [#5029](https://github.com/rubygems/bundler/pull/5029), we
108
+ cherry picked commit [dd6aef9](https://github.com/rubygems/bundler/commit/dd6aef97a5f2e7173f406267256a8c319d6134ab),
109
+ not [4fe9291](https://github.com/rubygems/bundler/commit/4fe92919f51e3463f0aad6fa833ab68044311f03)
110
+ using:
111
+
112
+ ```bash
113
+ $ git cherry-pick -m 1 dd6aef9
114
+ ```
115
+
116
+ After running the task, you'll have a release branch ready to be merged into the
117
+ stable branch. You'll want to open a PR from this branch into the stable branch
118
+ and provided CI is green, you can go ahead, merge the PR and run release tasks
119
+ as specified below from the updated stable branch.
120
+
68
121
  ### Automatic changelog and backport generation
69
122
 
70
123
  PR labels and titles are used to automatically generate changelogs for patch and
@@ -85,35 +138,51 @@ backporting a PR generates conflicts that are solved by backporting another PR
85
138
  with no user visible changes. You can use these special labels to also backport
86
139
  the other PR and not get any conflicts.
87
140
 
141
+ ### Breaking changes
142
+
143
+ Bundler cares a lot about preserving compatibility. As a result, changes that
144
+ break backwards compatibility should (whenever this is possible) include a feature
145
+ release that is backwards compatible, and issue warnings for all options and
146
+ behaviors that will change.
147
+
148
+ We only release major breaking changes when incrementing the _major_ version of
149
+ Bundler and RubyGems. However, experience shows that almost every single part of
150
+ Bundler and RubyGems is depended on by someone in ways hard to anticipate. So if
151
+ we were strict about breaking changes we'd need to hold on from making progress
152
+ a lot, or continuously increment the major version, emptying "really major"
153
+ versions from their meaning. Because of this, we also may release "small"
154
+ breaking changes in minor releases. "Small" here means that we expect them to
155
+ affect only very few users in rare cases.
156
+
88
157
  ### Steps for patch releases
89
158
 
90
159
  * Confirm all PRs that you want backported are properly tagged with `rubygems:
91
160
  <type>` or `bundler: <type>` labels at GitHub.
92
- * Run `rake prepare_release[<target_version>]`. This will create a PR to the
93
- stable branch with the backports included in the release, and proper
94
- changelogs and version bumps. It will also create a PR to merge release
95
- changelogs into master.
161
+ * Run `bin/rake prepare_release[<target_rubygems_version>]`. This will create
162
+ a PR to the stable branch with the backports included in the release, and
163
+ proper changelogs and version bumps. It will also create a PR to merge
164
+ release changelogs into master.
96
165
  * Once CI passes, merge the release PR, switch to the stable branch and pull
97
166
  the PR just merged.
98
- * Release `bundler` with `rake bundler:release`.
99
- * Release `rubygems` with `rake release`.
167
+ * Release `bundler` with `bin/rake bundler:release`.
168
+ * Release `rubygems` with `bin/rake release`.
100
169
 
101
170
  ### Steps for minor and major releases
102
171
 
103
172
  * Confirm all PRs that you want listed in changelogs are properly tagged with
104
173
  `rubygems: <type>` or `bundler: <type>` labels at GitHub.
105
- * Run `rake prepare_release[<target_version>]`. This will create a new stable
106
- branch off the master branch, and create a PR to it with the proper version
107
- bumps and changelogs. It will also create a PR to merge release changelogs
108
- into master.
174
+ * Run `bin/rake prepare_release[<target_rubygems_version>]`. This will create
175
+ a new stable branch off the master branch, and create a PR to it with the
176
+ proper version bumps and changelogs. It will also create a PR to merge
177
+ release changelogs into master.
109
178
  * Replace the stable branch in the workflows with the new stable branch, and
110
179
  push that change to the release PR.
111
180
  * Replace version numbers with the next ".dev" version, and push that change
112
181
  to the master PR.
113
182
  * Once CI passes, merge the release PR, switch to the stable branch and pull
114
183
  the PR just merged.
115
- * Release `bundler` with `rake bundler:release`.
116
- * Release `rubygems` with `rake release`.
184
+ * Release `bundler` with `bin/rake bundler:release`.
185
+ * Release `rubygems` with `bin/rake release`.
117
186
 
118
187
  ## Committer Access
119
188
 
data/exe/update_rubygems CHANGED
@@ -34,5 +34,5 @@ else
34
34
  update_dir = File.dirname(update_dir)
35
35
  Dir.chdir update_dir
36
36
  ENV["GEM_PREV_VER"] = Gem::VERSION
37
- abort unless system(Gem.ruby, "setup.rb", *ARGV)
37
+ abort unless system(Gem.ruby, "--disable-gems", "setup.rb", *ARGV)
38
38
  end
@@ -71,11 +71,7 @@ class Gem::BasicSpecification
71
71
  # Return true if this spec can require +file+.
72
72
 
73
73
  def contains_requirable_file?(file)
74
- if @ignored
75
- return false
76
- elsif missing_extensions?
77
- @ignored = true
78
-
74
+ if ignored?
79
75
  if platform == Gem::Platform::RUBY || Gem::Platform.local === platform
80
76
  warn "Ignoring #{full_name} because its extensions are not built. " \
81
77
  "Try: gem pristine #{name} --version #{version}"
@@ -93,11 +89,34 @@ class Gem::BasicSpecification
93
89
  end
94
90
  end
95
91
 
92
+ ##
93
+ # Return true if this spec should be ignored because it's missing extensions.
94
+
95
+ def ignored?
96
+ return @ignored unless @ignored.nil?
97
+
98
+ @ignored = missing_extensions?
99
+ end
100
+
96
101
  def default_gem?
97
- loaded_from &&
102
+ !loaded_from.nil? &&
98
103
  File.dirname(loaded_from) == Gem.default_specifications_dir
99
104
  end
100
105
 
106
+ ##
107
+ # Regular gems take precedence over default gems
108
+
109
+ def default_gem_priority
110
+ default_gem? ? 1 : -1
111
+ end
112
+
113
+ ##
114
+ # Gems higher up in +gem_path+ take precedence
115
+
116
+ def base_dir_priority(gem_path)
117
+ gem_path.index(base_dir) || gem_path.size
118
+ end
119
+
101
120
  ##
102
121
  # Returns full path to the directory where gem's extensions are installed.
103
122
 
@@ -115,7 +134,6 @@ class Gem::BasicSpecification
115
134
  end
116
135
 
117
136
  def find_full_gem_path # :nodoc:
118
- # TODO: also, shouldn't it default to full_name if it hasn't been written?
119
137
  File.expand_path File.join(gems_dir, full_name)
120
138
  end
121
139
 
@@ -123,10 +141,10 @@ class Gem::BasicSpecification
123
141
 
124
142
  ##
125
143
  # The full path to the gem (install path + full name).
144
+ #
145
+ # TODO: This is duplicated with #gem_dir. Eventually either of them should be deprecated.
126
146
 
127
147
  def full_gem_path
128
- # TODO: This is a heavily used method by gems, so we'll need
129
- # to aleast just alias it to #gem_dir rather than remove it.
130
148
  @full_gem_path ||= find_full_gem_path
131
149
  end
132
150
 
@@ -143,6 +161,19 @@ class Gem::BasicSpecification
143
161
  end
144
162
  end
145
163
 
164
+ ##
165
+ # Returns the full name of this Gem (see `Gem::BasicSpecification#full_name`).
166
+ # Information about where the gem is installed is also included if not
167
+ # installed in the default GEM_HOME.
168
+
169
+ def full_name_with_location
170
+ if base_dir != Gem.dir
171
+ "#{full_name} in #{base_dir}"
172
+ else
173
+ full_name
174
+ end
175
+ end
176
+
146
177
  ##
147
178
  # Full paths in the gem to add to <code>$LOAD_PATH</code> when this gem is
148
179
  # activated.
@@ -189,9 +220,11 @@ class Gem::BasicSpecification
189
220
  ##
190
221
  # Returns the full path to this spec's gem directory.
191
222
  # eg: /usr/local/lib/ruby/1.8/gems/mygem-1.0
223
+ #
224
+ # TODO: This is duplicated with #full_gem_path. Eventually either of them should be deprecated.
192
225
 
193
226
  def gem_dir
194
- @gem_dir ||= File.expand_path File.join(gems_dir, full_name)
227
+ @gem_dir ||= find_full_gem_path
195
228
  end
196
229
 
197
230
  ##
@@ -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"
24
+ return unless ["bundle", "bundler"].include? File.basename($0)
25
25
  return unless "update".start_with?(ARGV.first || " ")
26
26
  bundler_version = nil
27
27
  update_index = nil
@@ -6,7 +6,7 @@
6
6
  # See LICENSE.txt for permissions.
7
7
  #++
8
8
 
9
- require_relative "optparse"
9
+ require_relative "vendored_optparse"
10
10
  require_relative "requirement"
11
11
  require_relative "user_interaction"
12
12
 
@@ -650,9 +650,6 @@ RubyGems is a package manager for Ruby.
650
650
  gem help platforms gem platforms guide
651
651
  gem help <COMMAND> show help on COMMAND
652
652
  (e.g. 'gem help install')
653
- gem server present a web page at
654
- http://localhost:8808/
655
- with info about installed gems
656
653
  Further information:
657
654
  https://guides.rubygems.org
658
655
  HELP
@@ -60,6 +60,7 @@ class Gem::CommandManager
60
60
  :push,
61
61
  :query,
62
62
  :rdoc,
63
+ :rebuild,
63
64
  :search,
64
65
  :server,
65
66
  :signin,
@@ -106,7 +107,7 @@ class Gem::CommandManager
106
107
  # Register all the subcommands supported by the gem command.
107
108
 
108
109
  def initialize
109
- require_relative "timeout"
110
+ require_relative "vendored_timeout"
110
111
  @commands = {}
111
112
 
112
113
  BUILTIN_COMMANDS.each do |name|
@@ -229,18 +230,16 @@ class Gem::CommandManager
229
230
  def load_and_instantiate(command_name)
230
231
  command_name = command_name.to_s
231
232
  const_name = command_name.capitalize.gsub(/_(.)/) { $1.upcase } << "Command"
232
- load_error = nil
233
233
 
234
234
  begin
235
235
  begin
236
236
  require "rubygems/commands/#{command_name}_command"
237
- rescue LoadError => e
238
- load_error = e
237
+ rescue LoadError
238
+ # it may have been defined from a rubygems_plugin.rb file
239
239
  end
240
+
240
241
  Gem::Commands.const_get(const_name).new
241
242
  rescue StandardError => e
242
- e = load_error if load_error
243
-
244
243
  alert_error clean_text("Loading command: #{command_name} (#{e.class})\n\t#{e}")
245
244
  ui.backtrace e
246
245
  end
@@ -1,11 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "../command"
4
+ require_relative "../gemspec_helpers"
4
5
  require_relative "../package"
5
6
  require_relative "../version_option"
6
7
 
7
8
  class Gem::Commands::BuildCommand < Gem::Command
8
9
  include Gem::VersionOption
10
+ include Gem::GemspecHelpers
9
11
 
10
12
  def initialize
11
13
  super "build", "Build a gem from a gemspec"
@@ -75,17 +77,6 @@ Gems can be saved to a specified filename with the output option:
75
77
 
76
78
  private
77
79
 
78
- def find_gemspec(glob = "*.gemspec")
79
- gemspecs = Dir.glob(glob).sort
80
-
81
- if gemspecs.size > 1
82
- alert_error "Multiple gemspecs found: #{gemspecs}, please specify one"
83
- terminate_interaction(1)
84
- end
85
-
86
- gemspecs.first
87
- end
88
-
89
80
  def build_gem
90
81
  gemspec = resolve_gem_name
91
82
 
@@ -38,8 +38,6 @@ class Gem::Commands::CleanupCommand < Gem::Command
38
38
  @default_gems = []
39
39
  @full = nil
40
40
  @gems_to_cleanup = nil
41
- @original_home = nil
42
- @original_path = nil
43
41
  @primary_gems = nil
44
42
  end
45
43
 
@@ -95,9 +93,6 @@ If no gems are named all gems in GEM_HOME are cleaned.
95
93
  end
96
94
 
97
95
  def clean_gems
98
- @original_home = Gem.dir
99
- @original_path = Gem.path
100
-
101
96
  get_primary_gems
102
97
  get_candidate_gems
103
98
  get_gems_to_cleanup
@@ -112,17 +107,15 @@ If no gems are named all gems in GEM_HOME are cleaned.
112
107
  deps.reverse_each do |spec|
113
108
  uninstall_dep spec
114
109
  end
115
-
116
- Gem::Specification.reset
117
110
  end
118
111
 
119
112
  def get_candidate_gems
120
113
  @candidate_gems = if options[:args].empty?
121
114
  Gem::Specification.to_a
122
115
  else
123
- options[:args].map do |gem_name|
116
+ options[:args].flat_map do |gem_name|
124
117
  Gem::Specification.find_all_by_name gem_name
125
- end.flatten
118
+ end
126
119
  end
127
120
  end
128
121
 
@@ -133,7 +126,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
133
126
 
134
127
  default_gems, gems_to_cleanup = gems_to_cleanup.partition(&:default_gem?)
135
128
 
136
- uninstall_from = options[:user_install] ? Gem.user_dir : @original_home
129
+ uninstall_from = options[:user_install] ? Gem.user_dir : Gem.dir
137
130
 
138
131
  gems_to_cleanup = gems_to_cleanup.select do |spec|
139
132
  spec.base_dir == uninstall_from
@@ -181,8 +174,5 @@ If no gems are named all gems in GEM_HOME are cleaned.
181
174
  say "Unable to uninstall #{spec.full_name}:"
182
175
  say "\t#{e.class}: #{e.message}"
183
176
  end
184
- ensure
185
- # Restore path Gem::Uninstaller may have changed
186
- Gem.use_paths @original_home, *@original_path
187
177
  end
188
178
  end
@@ -102,15 +102,22 @@ prefix or only the files that are requireable.
102
102
  end
103
103
 
104
104
  def files_in_default_gem(spec)
105
- spec.files.map do |file|
106
- case file
107
- when %r{\A#{spec.bindir}/}
108
- # $' is POSTMATCH
109
- [RbConfig::CONFIG["bindir"], $']
110
- when /\.so\z/
111
- [RbConfig::CONFIG["archdir"], file]
105
+ spec.files.filter_map do |file|
106
+ if file.start_with?("#{spec.bindir}/")
107
+ [RbConfig::CONFIG["bindir"], file.delete_prefix("#{spec.bindir}/")]
112
108
  else
113
- [RbConfig::CONFIG["rubylibdir"], file]
109
+ gem spec.name, spec.version
110
+
111
+ require_path = spec.require_paths.find do |path|
112
+ file.start_with?("#{path}/")
113
+ end
114
+
115
+ requirable_part = file.delete_prefix("#{require_path}/")
116
+
117
+ resolve = $LOAD_PATH.resolve_feature_path(requirable_part)&.last
118
+ next unless resolve
119
+
120
+ [resolve.delete_suffix(requirable_part), requirable_part]
114
121
  end
115
122
  end
116
123
  end
@@ -182,8 +189,8 @@ prefix or only the files that are requireable.
182
189
  end
183
190
 
184
191
  def specification_directories # :nodoc:
185
- options[:specdirs].map do |i|
192
+ options[:specdirs].flat_map do |i|
186
193
  [i, File.join(i, "specifications")]
187
- end.flatten
194
+ end
188
195
  end
189
196
  end
@@ -15,6 +15,7 @@ class Gem::Commands::EnvironmentCommand < Gem::Command
15
15
  version display the gem format version
16
16
  remotesources display the remote gem servers
17
17
  platform display the supported gem platforms
18
+ credentials display the path where credentials are stored
18
19
  <omitted> display everything
19
20
  EOF
20
21
  args.gsub(/^\s+/, "")
@@ -88,6 +89,8 @@ lib/rubygems/defaults/operating_system.rb
88
89
  Gem.sources.to_a.join("\n")
89
90
  when /^platform/ then
90
91
  Gem.platforms.join(File::PATH_SEPARATOR)
92
+ when /^credentials/, /^creds/ then
93
+ Gem.configuration.credentials_path
91
94
  when nil then
92
95
  show_environment
93
96
  else
@@ -114,6 +117,8 @@ lib/rubygems/defaults/operating_system.rb
114
117
 
115
118
  out << " - USER INSTALLATION DIRECTORY: #{Gem.user_dir}\n"
116
119
 
120
+ out << " - CREDENTIALS FILE: #{Gem.configuration.credentials_path}\n"
121
+
117
122
  out << " - RUBYGEMS PREFIX: #{Gem.prefix}\n" unless Gem.prefix.nil?
118
123
 
119
124
  out << " - RUBY EXECUTABLE: #{Gem.ruby}\n"
@@ -57,8 +57,6 @@ to the same gem path as user-installed gems.
57
57
  end
58
58
 
59
59
  def execute
60
- gem_paths = { "GEM_HOME" => Gem.paths.home, "GEM_PATH" => Gem.paths.path.join(File::PATH_SEPARATOR), "GEM_SPEC_CACHE" => Gem.paths.spec_cache_dir }.compact
61
-
62
60
  check_executable
63
61
 
64
62
  print_command
@@ -74,9 +72,6 @@ to the same gem path as user-installed gems.
74
72
  end
75
73
 
76
74
  load!
77
- ensure
78
- ENV.update(gem_paths) if gem_paths
79
- Gem.clear_paths
80
75
  end
81
76
 
82
77
  private
@@ -143,7 +138,7 @@ to the same gem path as user-installed gems.
143
138
  end
144
139
 
145
140
  def set_gem_exec_install_paths
146
- home = File.join(Gem.dir, "gem_exec")
141
+ home = Gem.dir
147
142
 
148
143
  ENV["GEM_PATH"] = ([home] + Gem.path).join(File::PATH_SEPARATOR)
149
144
  ENV["GEM_HOME"] = home
@@ -200,7 +195,7 @@ to the same gem path as user-installed gems.
200
195
  argv = ARGV.clone
201
196
  ARGV.replace options[:args]
202
197
 
203
- exe = executable = options[:executable]
198
+ executable = options[:executable]
204
199
 
205
200
  contains_executable = Gem.loaded_specs.values.select do |spec|
206
201
  spec.executables.include?(executable)
@@ -211,13 +206,22 @@ to the same gem path as user-installed gems.
211
206
  end
212
207
 
213
208
  if contains_executable.empty?
214
- if (spec = Gem.loaded_specs[executable]) && (exe = spec.executable)
215
- contains_executable << spec
216
- else
209
+ spec = Gem.loaded_specs[executable]
210
+
211
+ if spec.nil? || spec.executables.empty?
217
212
  alert_error "Failed to load executable `#{executable}`," \
218
213
  " are you sure the gem `#{options[:gem_name]}` contains it?"
219
214
  terminate_interaction 1
220
215
  end
216
+
217
+ if spec.executables.size > 1
218
+ alert_error "Ambiguous which executable from gem `#{executable}` should be run: " \
219
+ "the options are #{spec.executables.sort}, specify one via COMMAND, and use `-g` and `-v` to specify gem and version"
220
+ terminate_interaction 1
221
+ end
222
+
223
+ contains_executable << spec
224
+ executable = spec.executable
221
225
  end
222
226
 
223
227
  if contains_executable.size > 1
@@ -227,8 +231,11 @@ to the same gem path as user-installed gems.
227
231
  terminate_interaction 1
228
232
  end
229
233
 
230
- load Gem.activate_bin_path(contains_executable.first.name, exe, ">= 0.a")
234
+ old_exe = $0
235
+ $0 = executable
236
+ load Gem.activate_bin_path(contains_executable.first.name, executable, ">= 0.a")
231
237
  ensure
238
+ $0 = old_exe if old_exe
232
239
  ARGV.replace argv
233
240
  end
234
241
 
@@ -63,6 +63,17 @@ then repackaging it.
63
63
 
64
64
  def execute
65
65
  check_version
66
+
67
+ exit_code = fetch_gems
68
+
69
+ terminate_interaction exit_code
70
+ end
71
+
72
+ private
73
+
74
+ def fetch_gems
75
+ exit_code = 0
76
+
66
77
  version = options[:version]
67
78
 
68
79
  platform = Gem.platforms.last
@@ -86,10 +97,13 @@ then repackaging it.
86
97
 
87
98
  if spec.nil?
88
99
  show_lookup_failure gem_name, gem_version, errors, suppress_suggestions, options[:domain]
100
+ exit_code |= 2
89
101
  next
90
102
  end
91
103
  source.download spec
92
104
  say "Downloaded #{spec.full_name}"
93
105
  end
106
+
107
+ exit_code
94
108
  end
95
109
  end
@@ -59,7 +59,7 @@ multiple environments. The RubyGems implementation is designed to be
59
59
  compatible with Bundler's Gemfile format. You can see additional
60
60
  documentation on the format at:
61
61
 
62
- http://bundler.io
62
+ https://bundler.io
63
63
 
64
64
  RubyGems automatically looks for these gem dependencies files:
65
65
 
@@ -172,7 +172,7 @@ and #platforms methods:
172
172
  See the bundler Gemfile manual page for a list of platforms supported in a gem
173
173
  dependencies file.:
174
174
 
175
- http://bundler.io/v1.6/man/gemfile.5.html
175
+ https://bundler.io/v2.5/man/gemfile.5.html
176
176
 
177
177
  Ruby Version and Engine Dependency
178
178
  ==================================
@@ -224,10 +224,6 @@ You can use `i` command instead of `install`.
224
224
  rescue Gem::InstallError => e
225
225
  alert_error "Error installing #{gem_name}:\n\t#{e.message}"
226
226
  exit_code |= 1
227
- rescue Gem::GemNotFoundException => e
228
- show_lookup_failure e.name, e.version, e.errors, suppress_suggestions
229
-
230
- exit_code |= 2
231
227
  rescue Gem::UnsatisfiableDependencyError => e
232
228
  show_lookup_failure e.name, e.version, e.errors, suppress_suggestions,
233
229
  "'#{gem_name}' (#{gem_version})"