rubygems-update 3.1.6 → 3.3.22

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 (703) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +1452 -514
  3. data/CODE_OF_CONDUCT.md +55 -19
  4. data/CONTRIBUTING.md +74 -27
  5. data/Manifest.txt +154 -117
  6. data/POLICIES.md +27 -19
  7. data/README.md +10 -8
  8. data/UPGRADING.md +5 -81
  9. data/bin/gem +3 -8
  10. data/bin/update_rubygems +5 -5
  11. data/bundler/CHANGELOG.md +2358 -1430
  12. data/bundler/README.md +7 -9
  13. data/bundler/UPGRADING.md +27 -34
  14. data/bundler/bundler.gemspec +8 -11
  15. data/bundler/exe/bundle +10 -8
  16. data/bundler/exe/bundler +1 -1
  17. data/bundler/lib/bundler/.document +1 -0
  18. data/bundler/lib/bundler/build_metadata.rb +4 -12
  19. data/bundler/lib/bundler/cli/add.rb +1 -1
  20. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  21. data/bundler/lib/bundler/cli/cache.rb +3 -8
  22. data/bundler/lib/bundler/cli/check.rb +4 -2
  23. data/bundler/lib/bundler/cli/clean.rb +1 -1
  24. data/bundler/lib/bundler/cli/common.rb +31 -3
  25. data/bundler/lib/bundler/cli/config.rb +10 -1
  26. data/bundler/lib/bundler/cli/console.rb +1 -1
  27. data/bundler/lib/bundler/cli/doctor.rb +25 -6
  28. data/bundler/lib/bundler/cli/exec.rb +5 -10
  29. data/bundler/lib/bundler/cli/fund.rb +36 -0
  30. data/bundler/lib/bundler/cli/gem.rb +219 -28
  31. data/bundler/lib/bundler/cli/info.rb +38 -6
  32. data/bundler/lib/bundler/cli/init.rb +3 -3
  33. data/bundler/lib/bundler/cli/inject.rb +1 -1
  34. data/bundler/lib/bundler/cli/install.rb +25 -54
  35. data/bundler/lib/bundler/cli/issue.rb +5 -4
  36. data/bundler/lib/bundler/cli/list.rb +19 -11
  37. data/bundler/lib/bundler/cli/lock.rb +5 -1
  38. data/bundler/lib/bundler/cli/open.rb +1 -2
  39. data/bundler/lib/bundler/cli/outdated.rb +105 -76
  40. data/bundler/lib/bundler/cli/platform.rb +2 -2
  41. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  42. data/bundler/lib/bundler/cli/pristine.rb +5 -0
  43. data/bundler/lib/bundler/cli/remove.rb +1 -2
  44. data/bundler/lib/bundler/cli/show.rb +2 -2
  45. data/bundler/lib/bundler/cli/update.rb +20 -9
  46. data/bundler/lib/bundler/cli.rb +106 -83
  47. data/bundler/lib/bundler/compact_index_client/cache.rb +6 -23
  48. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  49. data/bundler/lib/bundler/compact_index_client/updater.rb +29 -25
  50. data/bundler/lib/bundler/compact_index_client.rb +3 -9
  51. data/bundler/lib/bundler/current_ruby.rb +17 -6
  52. data/bundler/lib/bundler/definition.rb +297 -396
  53. data/bundler/lib/bundler/dep_proxy.rb +16 -9
  54. data/bundler/lib/bundler/dependency.rb +22 -77
  55. data/bundler/lib/bundler/digest.rb +71 -0
  56. data/bundler/lib/bundler/dsl.rb +76 -83
  57. data/bundler/lib/bundler/endpoint_specification.rb +16 -14
  58. data/bundler/lib/bundler/env.rb +2 -2
  59. data/bundler/lib/bundler/environment_preserver.rb +29 -2
  60. data/bundler/lib/bundler/errors.rb +30 -3
  61. data/bundler/lib/bundler/feature_flag.rb +0 -9
  62. data/bundler/lib/bundler/fetcher/base.rb +7 -9
  63. data/bundler/lib/bundler/fetcher/compact_index.rb +11 -16
  64. data/bundler/lib/bundler/fetcher/downloader.rb +10 -7
  65. data/bundler/lib/bundler/fetcher/index.rb +2 -30
  66. data/bundler/lib/bundler/fetcher.rb +24 -25
  67. data/bundler/lib/bundler/friendly_errors.rb +46 -47
  68. data/bundler/lib/bundler/gem_helper.rb +53 -31
  69. data/bundler/lib/bundler/gem_helpers.rb +43 -24
  70. data/bundler/lib/bundler/gem_version_promoter.rb +10 -20
  71. data/bundler/lib/bundler/graph.rb +1 -1
  72. data/bundler/lib/bundler/index.rb +19 -25
  73. data/bundler/lib/bundler/injector.rb +38 -6
  74. data/bundler/lib/bundler/inline.rb +4 -13
  75. data/bundler/lib/bundler/installer/gem_installer.rb +19 -24
  76. data/bundler/lib/bundler/installer/parallel_installer.rb +46 -25
  77. data/bundler/lib/bundler/installer/standalone.rb +58 -11
  78. data/bundler/lib/bundler/installer.rb +51 -81
  79. data/bundler/lib/bundler/lazy_specification.rb +79 -36
  80. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  81. data/bundler/lib/bundler/lockfile_parser.rb +19 -44
  82. data/bundler/lib/bundler/man/.document +1 -0
  83. data/bundler/{man → lib/bundler/man}/bundle-add.1 +21 -5
  84. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +16 -4
  85. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +5 -3
  86. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
  87. data/bundler/{man → lib/bundler/man}/bundle-cache.1 +7 -1
  88. data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +7 -0
  89. data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
  90. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +1 -1
  91. data/bundler/{man → lib/bundler/man}/bundle-config.1 +65 -47
  92. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +74 -65
  93. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  94. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  95. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  96. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +2 -2
  97. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +1 -1
  98. data/bundler/{man → lib/bundler/man}/bundle-gem.1 +38 -3
  99. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +46 -7
  100. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  101. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  102. data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
  103. data/bundler/{man → lib/bundler/man}/bundle-init.1 +1 -1
  104. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +5 -2
  105. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +3 -1
  106. data/bundler/{man → lib/bundler/man}/bundle-install.1 +35 -4
  107. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +33 -5
  108. data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
  109. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  110. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  111. data/bundler/{man → lib/bundler/man}/bundle-open.1 +1 -1
  112. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +3 -10
  113. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +1 -10
  114. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +16 -6
  115. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
  116. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  117. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  118. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  119. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  120. data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
  121. data/bundler/{man → lib/bundler/man}/bundle-update.1 +5 -5
  122. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +5 -4
  123. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  124. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  125. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +4 -1
  126. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +2 -0
  127. data/bundler/{man → lib/bundler/man}/bundle.1 +15 -10
  128. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +12 -7
  129. data/bundler/{man → lib/bundler/man}/gemfile.5 +106 -80
  130. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +94 -83
  131. data/bundler/{man → lib/bundler/man}/index.txt +4 -0
  132. data/bundler/lib/bundler/match_metadata.rb +13 -0
  133. data/bundler/lib/bundler/match_platform.rb +0 -1
  134. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  135. data/bundler/lib/bundler/mirror.rb +2 -2
  136. data/bundler/lib/bundler/plugin/api/source.rb +25 -9
  137. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  138. data/bundler/lib/bundler/plugin/index.rb +13 -1
  139. data/bundler/lib/bundler/plugin/installer/git.rb +0 -4
  140. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -5
  141. data/bundler/lib/bundler/plugin/installer.rb +11 -11
  142. data/bundler/lib/bundler/plugin/source_list.rb +5 -1
  143. data/bundler/lib/bundler/plugin.rb +58 -11
  144. data/bundler/lib/bundler/process_lock.rb +1 -1
  145. data/bundler/lib/bundler/remote_specification.rb +11 -6
  146. data/bundler/lib/bundler/resolver/base.rb +50 -0
  147. data/bundler/lib/bundler/resolver/spec_group.rb +64 -57
  148. data/bundler/lib/bundler/resolver.rb +234 -230
  149. data/bundler/lib/bundler/retry.rb +2 -2
  150. data/bundler/lib/bundler/ruby_dsl.rb +1 -1
  151. data/bundler/lib/bundler/ruby_version.rb +6 -19
  152. data/bundler/lib/bundler/rubygems_ext.rb +194 -33
  153. data/bundler/lib/bundler/rubygems_gem_installer.rb +87 -16
  154. data/bundler/lib/bundler/rubygems_integration.rb +71 -153
  155. data/bundler/lib/bundler/runtime.rb +22 -26
  156. data/bundler/lib/bundler/self_manager.rb +168 -0
  157. data/bundler/lib/bundler/settings.rb +145 -66
  158. data/bundler/lib/bundler/setup.rb +2 -2
  159. data/bundler/lib/bundler/shared_helpers.rb +17 -32
  160. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  161. data/bundler/lib/bundler/source/git/git_proxy.rb +88 -84
  162. data/bundler/lib/bundler/source/git.rb +50 -32
  163. data/bundler/lib/bundler/source/metadata.rb +3 -7
  164. data/bundler/lib/bundler/source/path/installer.rb +10 -10
  165. data/bundler/lib/bundler/source/path.rb +10 -4
  166. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  167. data/bundler/lib/bundler/source/rubygems.rb +201 -179
  168. data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
  169. data/bundler/lib/bundler/source.rb +25 -5
  170. data/bundler/lib/bundler/source_list.rb +105 -63
  171. data/bundler/lib/bundler/source_map.rb +71 -0
  172. data/bundler/lib/bundler/spec_set.rb +62 -57
  173. data/bundler/lib/bundler/stub_specification.rb +30 -10
  174. data/bundler/lib/bundler/templates/Executable +2 -4
  175. data/bundler/lib/bundler/templates/Executable.bundler +8 -8
  176. data/bundler/lib/bundler/templates/Executable.standalone +2 -4
  177. data/bundler/lib/bundler/templates/Gemfile +0 -2
  178. data/bundler/lib/bundler/templates/gems.rb +0 -3
  179. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  180. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  181. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +12 -1
  182. data/bundler/lib/bundler/templates/newgem/README.md.tt +9 -14
  183. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +32 -5
  184. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  185. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  186. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  187. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +27 -0
  188. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  189. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  190. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  191. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +27 -17
  192. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  193. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  194. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  195. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  196. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  197. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  198. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
  199. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  200. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  201. data/bundler/lib/bundler/ui/shell.rb +6 -6
  202. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
  203. data/bundler/lib/bundler/vendor/.document +1 -0
  204. data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  205. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
  206. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  207. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +57 -0
  208. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +39 -74
  209. data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  210. data/bundler/lib/bundler/vendor/molinillo/LICENSE +9 -0
  211. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
  212. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  213. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -5
  214. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +37 -5
  215. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +34 -28
  216. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  217. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +12 -1
  218. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +49 -47
  219. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  220. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  221. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +82 -189
  222. data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
  223. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  224. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +9 -7
  225. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -2
  226. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +7 -3
  227. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  228. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
  229. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +10 -5
  230. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +5 -1
  231. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +28 -9
  232. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +27 -6
  233. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +5 -1
  234. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  235. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  236. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  237. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +5 -13
  238. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  239. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  240. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
  241. data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  242. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +17 -80
  243. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -1
  244. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +5 -6
  245. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +0 -1
  246. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +0 -1
  247. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  248. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -1
  249. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +1 -14
  250. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -12
  251. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  252. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +84 -0
  253. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +22 -0
  254. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +0 -1
  255. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  256. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  257. data/bundler/lib/bundler/vendored_tsort.rb +4 -0
  258. data/bundler/lib/bundler/version.rb +1 -1
  259. data/bundler/lib/bundler/worker.rb +20 -5
  260. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  261. data/bundler/lib/bundler.rb +79 -47
  262. data/hide_lib_for_update/note.txt +0 -4
  263. data/lib/rubygems/available_set.rb +7 -9
  264. data/lib/rubygems/basic_specification.rb +23 -21
  265. data/lib/rubygems/bundler_version_finder.rb +26 -53
  266. data/lib/rubygems/command.rb +48 -45
  267. data/lib/rubygems/command_manager.rb +20 -14
  268. data/lib/rubygems/commands/build_command.rb +47 -27
  269. data/lib/rubygems/commands/cert_command.rb +78 -75
  270. data/lib/rubygems/commands/check_command.rb +20 -22
  271. data/lib/rubygems/commands/cleanup_command.rb +30 -26
  272. data/lib/rubygems/commands/contents_command.rb +16 -18
  273. data/lib/rubygems/commands/dependency_command.rb +39 -51
  274. data/lib/rubygems/commands/environment_command.rb +11 -10
  275. data/lib/rubygems/commands/fetch_command.rb +33 -16
  276. data/lib/rubygems/commands/generate_index_command.rb +17 -19
  277. data/lib/rubygems/commands/help_command.rb +6 -6
  278. data/lib/rubygems/commands/info_command.rb +10 -7
  279. data/lib/rubygems/commands/install_command.rb +29 -27
  280. data/lib/rubygems/commands/list_command.rb +9 -8
  281. data/lib/rubygems/commands/lock_command.rb +5 -7
  282. data/lib/rubygems/commands/mirror_command.rb +3 -5
  283. data/lib/rubygems/commands/open_command.rb +10 -14
  284. data/lib/rubygems/commands/outdated_command.rb +5 -7
  285. data/lib/rubygems/commands/owner_command.rb +26 -16
  286. data/lib/rubygems/commands/pristine_command.rb +61 -49
  287. data/lib/rubygems/commands/push_command.rb +22 -59
  288. data/lib/rubygems/commands/query_command.rb +21 -351
  289. data/lib/rubygems/commands/rdoc_command.rb +23 -25
  290. data/lib/rubygems/commands/search_command.rb +8 -8
  291. data/lib/rubygems/commands/server_command.rb +16 -77
  292. data/lib/rubygems/commands/setup_command.rb +255 -229
  293. data/lib/rubygems/commands/signin_command.rb +9 -11
  294. data/lib/rubygems/commands/signout_command.rb +7 -9
  295. data/lib/rubygems/commands/sources_command.rb +27 -25
  296. data/lib/rubygems/commands/specification_command.rb +25 -21
  297. data/lib/rubygems/commands/stale_command.rb +3 -5
  298. data/lib/rubygems/commands/uninstall_command.rb +41 -43
  299. data/lib/rubygems/commands/unpack_command.rb +13 -15
  300. data/lib/rubygems/commands/update_command.rb +132 -74
  301. data/lib/rubygems/commands/which_command.rb +7 -9
  302. data/lib/rubygems/commands/yank_command.rb +16 -19
  303. data/lib/rubygems/compatibility.rb +4 -2
  304. data/lib/rubygems/config_file.rb +42 -26
  305. data/lib/rubygems/core_ext/kernel_gem.rb +1 -1
  306. data/lib/rubygems/core_ext/kernel_require.rb +6 -3
  307. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  308. data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
  309. data/lib/rubygems/defaults.rb +108 -32
  310. data/lib/rubygems/dependency.rb +21 -22
  311. data/lib/rubygems/dependency_installer.rb +19 -91
  312. data/lib/rubygems/dependency_list.rb +13 -15
  313. data/lib/rubygems/deprecate.rb +102 -8
  314. data/lib/rubygems/doctor.rb +22 -22
  315. data/lib/rubygems/errors.rb +6 -21
  316. data/lib/rubygems/exceptions.rb +33 -34
  317. data/lib/rubygems/ext/build_error.rb +2 -0
  318. data/lib/rubygems/ext/builder.rb +48 -54
  319. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +23 -0
  320. data/lib/rubygems/ext/cargo_builder.rb +321 -0
  321. data/lib/rubygems/ext/cmake_builder.rb +6 -9
  322. data/lib/rubygems/ext/configure_builder.rb +5 -8
  323. data/lib/rubygems/ext/ext_conf_builder.rb +42 -66
  324. data/lib/rubygems/ext/rake_builder.rb +7 -10
  325. data/lib/rubygems/ext.rb +7 -6
  326. data/lib/rubygems/gem_runner.rb +15 -26
  327. data/lib/rubygems/gemcutter_utilities.rb +153 -32
  328. data/lib/rubygems/indexer.rb +30 -49
  329. data/lib/rubygems/install_default_message.rb +2 -2
  330. data/lib/rubygems/install_message.rb +2 -2
  331. data/lib/rubygems/install_update_options.rb +73 -64
  332. data/lib/rubygems/installer.rb +194 -151
  333. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  334. data/lib/rubygems/local_remote_options.rb +22 -24
  335. data/lib/rubygems/mock_gem_ui.rb +2 -8
  336. data/lib/rubygems/name_tuple.rb +9 -14
  337. data/lib/rubygems/openssl.rb +7 -0
  338. data/lib/rubygems/optparse/.document +1 -0
  339. data/lib/rubygems/optparse/COPYING +56 -0
  340. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  341. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  342. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  343. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  344. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  345. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  346. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  347. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  348. data/lib/rubygems/optparse/lib/optparse.rb +2303 -0
  349. data/lib/rubygems/optparse.rb +3 -0
  350. data/lib/rubygems/package/digest_io.rb +0 -2
  351. data/lib/rubygems/package/file_source.rb +2 -4
  352. data/lib/rubygems/package/io_source.rb +4 -2
  353. data/lib/rubygems/package/old.rb +9 -11
  354. data/lib/rubygems/package/tar_header.rb +54 -56
  355. data/lib/rubygems/package/tar_reader/entry.rb +2 -5
  356. data/lib/rubygems/package/tar_reader.rb +1 -4
  357. data/lib/rubygems/package/tar_writer.rb +8 -18
  358. data/lib/rubygems/package.rb +101 -117
  359. data/lib/rubygems/package_task.rb +5 -11
  360. data/lib/rubygems/path_support.rb +2 -9
  361. data/lib/rubygems/platform.rb +101 -76
  362. data/lib/rubygems/psych_tree.rb +1 -3
  363. data/lib/rubygems/query_utils.rb +351 -0
  364. data/lib/rubygems/rdoc.rb +2 -14
  365. data/lib/rubygems/remote_fetcher.rb +48 -74
  366. data/lib/rubygems/request/connection_pools.rb +6 -10
  367. data/lib/rubygems/request/http_pool.rb +2 -4
  368. data/lib/rubygems/request/https_pool.rb +0 -2
  369. data/lib/rubygems/request.rb +26 -31
  370. data/lib/rubygems/request_set/gem_dependency_api.rb +23 -25
  371. data/lib/rubygems/request_set/lockfile/parser.rb +26 -28
  372. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -7
  373. data/lib/rubygems/request_set/lockfile.rb +17 -21
  374. data/lib/rubygems/request_set.rb +27 -40
  375. data/lib/rubygems/requirement.rb +28 -48
  376. data/lib/rubygems/resolver/activation_request.rb +12 -6
  377. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  378. data/lib/rubygems/resolver/api_set.rb +32 -25
  379. data/lib/rubygems/resolver/api_specification.rb +29 -15
  380. data/lib/rubygems/resolver/best_set.rb +7 -9
  381. data/lib/rubygems/resolver/composed_set.rb +3 -5
  382. data/lib/rubygems/resolver/conflict.rb +12 -14
  383. data/lib/rubygems/resolver/current_set.rb +0 -2
  384. data/lib/rubygems/resolver/dependency_request.rb +3 -5
  385. data/lib/rubygems/resolver/git_set.rb +2 -4
  386. data/lib/rubygems/resolver/git_specification.rb +6 -8
  387. data/lib/rubygems/resolver/index_set.rb +4 -6
  388. data/lib/rubygems/resolver/index_specification.rb +38 -7
  389. data/lib/rubygems/resolver/installed_specification.rb +4 -6
  390. data/lib/rubygems/resolver/installer_set.rb +66 -24
  391. data/lib/rubygems/resolver/local_specification.rb +2 -4
  392. data/lib/rubygems/resolver/lock_set.rb +6 -8
  393. data/lib/rubygems/resolver/lock_specification.rb +4 -6
  394. data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
  395. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  396. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
  397. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  398. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  399. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  400. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  401. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  402. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  403. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  404. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  405. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
  406. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +41 -8
  407. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +76 -8
  408. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  409. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
  410. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  411. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -165
  412. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  413. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  414. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  415. data/lib/rubygems/resolver/molinillo.rb +1 -1
  416. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  417. data/lib/rubygems/resolver/set.rb +0 -3
  418. data/lib/rubygems/resolver/source_set.rb +0 -2
  419. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  420. data/lib/rubygems/resolver/specification.rb +14 -4
  421. data/lib/rubygems/resolver/stats.rb +0 -2
  422. data/lib/rubygems/resolver/vendor_set.rb +1 -3
  423. data/lib/rubygems/resolver/vendor_specification.rb +3 -5
  424. data/lib/rubygems/resolver.rb +53 -51
  425. data/lib/rubygems/s3_uri_signer.rb +7 -15
  426. data/lib/rubygems/safe_yaml.rb +14 -16
  427. data/lib/rubygems/security/policies.rb +11 -11
  428. data/lib/rubygems/security/policy.rb +25 -29
  429. data/lib/rubygems/security/signer.rb +13 -16
  430. data/lib/rubygems/security/trust_dir.rb +4 -5
  431. data/lib/rubygems/security.rb +103 -69
  432. data/lib/rubygems/security_option.rb +7 -7
  433. data/lib/rubygems/source/git.rb +30 -30
  434. data/lib/rubygems/source/installed.rb +1 -3
  435. data/lib/rubygems/source/local.rb +4 -6
  436. data/lib/rubygems/source/lock.rb +0 -2
  437. data/lib/rubygems/source/specific_file.rb +1 -3
  438. data/lib/rubygems/source/vendor.rb +0 -2
  439. data/lib/rubygems/source.rb +44 -38
  440. data/lib/rubygems/source_list.rb +9 -16
  441. data/lib/rubygems/spec_fetcher.rb +49 -48
  442. data/lib/rubygems/specification.rb +338 -295
  443. data/lib/rubygems/specification_policy.rb +112 -61
  444. data/lib/rubygems/stub_specification.rb +21 -28
  445. data/lib/rubygems/text.rb +21 -20
  446. data/lib/rubygems/tsort/.document +1 -0
  447. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  448. data/lib/rubygems/tsort/lib/tsort.rb +454 -0
  449. data/lib/rubygems/tsort.rb +3 -0
  450. data/lib/rubygems/uninstaller.rb +98 -45
  451. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  452. data/lib/rubygems/uri.rb +126 -0
  453. data/lib/rubygems/uri_formatter.rb +2 -3
  454. data/lib/rubygems/user_interaction.rb +43 -54
  455. data/lib/rubygems/util/licenses.rb +115 -10
  456. data/lib/rubygems/util/list.rb +0 -2
  457. data/lib/rubygems/util.rb +18 -12
  458. data/lib/rubygems/validator.rb +6 -8
  459. data/lib/rubygems/version.rb +29 -20
  460. data/lib/rubygems/version_option.rb +11 -5
  461. data/lib/rubygems.rb +192 -289
  462. data/rubygems-update.gemspec +4 -4
  463. data/setup.rb +11 -22
  464. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  465. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  466. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  467. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  468. data/test/rubygems/encrypted_private_key.pem +26 -26
  469. data/{lib/rubygems/test_case.rb → test/rubygems/helper.rb} +380 -314
  470. data/{lib → test}/rubygems/installer_test_case.rb +38 -24
  471. data/{lib → test}/rubygems/package/tar_test_case.rb +4 -6
  472. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  473. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  474. data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
  475. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  476. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
  477. data/test/rubygems/private_ec_key.pem +9 -0
  478. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  479. data/test/rubygems/rubygems_plugin.rb +2 -4
  480. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  481. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +4 -6
  482. data/test/rubygems/test_bundled_ca.rb +43 -50
  483. data/test/rubygems/test_config.rb +5 -7
  484. data/test/rubygems/test_deprecate.rb +87 -10
  485. data/test/rubygems/test_exit.rb +11 -0
  486. data/test/rubygems/test_gem.rb +719 -639
  487. data/test/rubygems/test_gem_available_set.rb +24 -26
  488. data/test/rubygems/test_gem_bundler_version_finder.rb +37 -44
  489. data/test/rubygems/test_gem_command.rb +78 -49
  490. data/test/rubygems/test_gem_command_manager.rb +98 -35
  491. data/test/rubygems/test_gem_commands_build_command.rb +275 -57
  492. data/test/rubygems/test_gem_commands_cert_command.rb +180 -125
  493. data/test/rubygems/test_gem_commands_check_command.rb +9 -11
  494. data/test/rubygems/test_gem_commands_cleanup_command.rb +78 -69
  495. data/test/rubygems/test_gem_commands_contents_command.rb +73 -42
  496. data/test/rubygems/test_gem_commands_dependency_command.rb +38 -40
  497. data/test/rubygems/test_gem_commands_environment_command.rb +60 -38
  498. data/test/rubygems/test_gem_commands_fetch_command.rb +163 -32
  499. data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -14
  500. data/test/rubygems/test_gem_commands_help_command.rb +34 -16
  501. data/test/rubygems/test_gem_commands_info_command.rb +33 -9
  502. data/test/rubygems/test_gem_commands_install_command.rb +401 -198
  503. data/test/rubygems/test_gem_commands_list_command.rb +5 -7
  504. data/test/rubygems/test_gem_commands_lock_command.rb +11 -13
  505. data/test/rubygems/test_gem_commands_mirror.rb +3 -5
  506. data/test/rubygems/test_gem_commands_open_command.rb +16 -19
  507. data/test/rubygems/test_gem_commands_outdated_command.rb +23 -7
  508. data/test/rubygems/test_gem_commands_owner_command.rb +100 -46
  509. data/test/rubygems/test_gem_commands_pristine_command.rb +131 -99
  510. data/test/rubygems/test_gem_commands_push_command.rb +134 -66
  511. data/test/rubygems/test_gem_commands_query_command.rb +91 -91
  512. data/test/rubygems/test_gem_commands_search_command.rb +2 -4
  513. data/test/rubygems/test_gem_commands_server_command.rb +6 -50
  514. data/test/rubygems/test_gem_commands_setup_command.rb +288 -179
  515. data/test/rubygems/test_gem_commands_signin_command.rb +162 -28
  516. data/test/rubygems/test_gem_commands_signout_command.rb +3 -10
  517. data/test/rubygems/test_gem_commands_sources_command.rb +139 -32
  518. data/test/rubygems/test_gem_commands_specification_command.rb +81 -55
  519. data/test/rubygems/test_gem_commands_stale_command.rb +4 -6
  520. data/test/rubygems/test_gem_commands_uninstall_command.rb +80 -82
  521. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -34
  522. data/test/rubygems/test_gem_commands_update_command.rb +335 -88
  523. data/test/rubygems/test_gem_commands_which_command.rb +12 -14
  524. data/test/rubygems/test_gem_commands_yank_command.rb +80 -44
  525. data/test/rubygems/test_gem_config_file.rb +114 -97
  526. data/test/rubygems/test_gem_dependency.rb +87 -87
  527. data/test/rubygems/test_gem_dependency_installer.rb +277 -391
  528. data/test/rubygems/test_gem_dependency_list.rb +57 -59
  529. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -7
  530. data/test/rubygems/test_gem_doctor.rb +73 -47
  531. data/test/rubygems/test_gem_ext_builder.rb +115 -109
  532. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +1 -0
  533. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +243 -0
  534. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +10 -0
  535. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +21 -0
  536. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +10 -0
  537. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/src/lib.rs +27 -0
  538. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +1 -0
  539. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +243 -0
  540. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +10 -0
  541. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +21 -0
  542. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +8 -0
  543. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +39 -0
  544. data/test/rubygems/test_gem_ext_cargo_builder.rb +178 -0
  545. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +33 -0
  546. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +75 -0
  547. data/test/rubygems/test_gem_ext_cmake_builder.rb +31 -38
  548. data/test/rubygems/test_gem_ext_configure_builder.rb +23 -39
  549. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +66 -82
  550. data/test/rubygems/test_gem_ext_rake_builder.rb +49 -32
  551. data/test/rubygems/test_gem_gem_runner.rb +51 -8
  552. data/test/rubygems/test_gem_gemcutter_utilities.rb +87 -76
  553. data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -6
  554. data/test/rubygems/test_gem_indexer.rb +62 -64
  555. data/test/rubygems/test_gem_install_update_options.rb +31 -21
  556. data/test/rubygems/test_gem_installer.rb +798 -491
  557. data/test/rubygems/test_gem_local_remote_options.rb +11 -13
  558. data/test/rubygems/test_gem_name_tuple.rb +4 -6
  559. data/test/rubygems/test_gem_package.rb +318 -283
  560. data/test/rubygems/test_gem_package_old.rb +18 -20
  561. data/test/rubygems/test_gem_package_tar_header.rb +64 -47
  562. data/test/rubygems/test_gem_package_tar_reader.rb +8 -10
  563. data/test/rubygems/test_gem_package_tar_reader_entry.rb +18 -20
  564. data/test/rubygems/test_gem_package_tar_writer.rb +96 -100
  565. data/test/rubygems/test_gem_package_task.rb +58 -25
  566. data/test/rubygems/test_gem_path_support.rb +15 -21
  567. data/test/rubygems/test_gem_platform.rb +354 -201
  568. data/test/rubygems/test_gem_rdoc.rb +19 -21
  569. data/test/rubygems/test_gem_remote_fetcher.rb +376 -337
  570. data/test/rubygems/test_gem_request.rb +114 -86
  571. data/test/rubygems/test_gem_request_connection_pools.rb +30 -34
  572. data/test/rubygems/test_gem_request_set.rb +123 -124
  573. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +222 -226
  574. data/test/rubygems/test_gem_request_set_lockfile.rb +93 -95
  575. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +68 -70
  576. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +136 -138
  577. data/test/rubygems/test_gem_requirement.rb +133 -54
  578. data/test/rubygems/test_gem_resolver.rb +149 -117
  579. data/test/rubygems/test_gem_resolver_activation_request.rb +6 -8
  580. data/test/rubygems/test_gem_resolver_api_set.rb +79 -78
  581. data/test/rubygems/test_gem_resolver_api_specification.rb +47 -49
  582. data/test/rubygems/test_gem_resolver_best_set.rb +43 -22
  583. data/test/rubygems/test_gem_resolver_composed_set.rb +1 -3
  584. data/test/rubygems/test_gem_resolver_conflict.rb +12 -14
  585. data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -17
  586. data/test/rubygems/test_gem_resolver_git_set.rb +22 -24
  587. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -23
  588. data/test/rubygems/test_gem_resolver_index_set.rb +14 -16
  589. data/test/rubygems/test_gem_resolver_index_specification.rb +16 -18
  590. data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -7
  591. data/test/rubygems/test_gem_resolver_installer_set.rb +104 -44
  592. data/test/rubygems/test_gem_resolver_local_specification.rb +7 -9
  593. data/test/rubygems/test_gem_resolver_lock_set.rb +15 -17
  594. data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -19
  595. data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -3
  596. data/test/rubygems/test_gem_resolver_specification.rb +8 -12
  597. data/test/rubygems/test_gem_resolver_vendor_set.rb +9 -11
  598. data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -12
  599. data/test/rubygems/test_gem_security.rb +104 -78
  600. data/test/rubygems/test_gem_security_policy.rb +92 -97
  601. data/test/rubygems/test_gem_security_signer.rb +45 -47
  602. data/test/rubygems/test_gem_security_trust_dir.rb +12 -14
  603. data/test/rubygems/test_gem_silent_ui.rb +46 -42
  604. data/test/rubygems/test_gem_source.rb +53 -52
  605. data/test/rubygems/test_gem_source_fetch_problem.rb +16 -8
  606. data/test/rubygems/test_gem_source_git.rb +69 -69
  607. data/test/rubygems/test_gem_source_installed.rb +16 -18
  608. data/test/rubygems/test_gem_source_list.rb +5 -6
  609. data/test/rubygems/test_gem_source_local.rb +15 -17
  610. data/test/rubygems/test_gem_source_lock.rb +31 -33
  611. data/test/rubygems/test_gem_source_specific_file.rb +18 -20
  612. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  613. data/test/rubygems/test_gem_source_vendor.rb +13 -15
  614. data/test/rubygems/test_gem_spec_fetcher.rb +74 -67
  615. data/test/rubygems/test_gem_specification.rb +888 -1024
  616. data/test/rubygems/test_gem_stream_ui.rb +23 -23
  617. data/test/rubygems/test_gem_stub_specification.rb +39 -57
  618. data/test/rubygems/test_gem_text.rb +8 -4
  619. data/test/rubygems/test_gem_uninstaller.rb +233 -104
  620. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -5
  621. data/test/rubygems/test_gem_uri.rb +39 -0
  622. data/test/rubygems/test_gem_uri_formatter.rb +14 -16
  623. data/test/rubygems/test_gem_util.rb +37 -35
  624. data/test/rubygems/test_gem_validator.rb +10 -12
  625. data/test/rubygems/test_gem_version.rb +31 -31
  626. data/test/rubygems/test_gem_version_option.rb +16 -18
  627. data/test/rubygems/test_kernel.rb +46 -60
  628. data/test/rubygems/test_project_sanity.rb +8 -3
  629. data/test/rubygems/test_remote_fetch_error.rb +7 -9
  630. data/test/rubygems/test_require.rb +240 -167
  631. data/test/rubygems/test_rubygems.rb +74 -0
  632. data/{lib/rubygems/test_utilities.rb → test/rubygems/utilities.rb} +30 -39
  633. data/test/test_changelog_generator.rb +17 -0
  634. metadata +158 -146
  635. data/.bundle/config +0 -2
  636. data/.rubocop.yml +0 -91
  637. data/Gemfile +0 -8
  638. data/Gemfile.lock +0 -43
  639. data/Rakefile +0 -428
  640. data/bundler/CODE_OF_CONDUCT.md +0 -136
  641. data/bundler/lib/bundler/gemdeps.rb +0 -29
  642. data/bundler/lib/bundler/psyched_yaml.rb +0 -37
  643. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
  644. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  645. data/bundler/man/bundle-add.1.txt +0 -58
  646. data/bundler/man/bundle-binstubs.1.txt +0 -48
  647. data/bundler/man/bundle-cache.1.txt +0 -78
  648. data/bundler/man/bundle-check.1.txt +0 -33
  649. data/bundler/man/bundle-clean.1.txt +0 -26
  650. data/bundler/man/bundle-config.1.txt +0 -528
  651. data/bundler/man/bundle-doctor.1.txt +0 -44
  652. data/bundler/man/bundle-exec.1.txt +0 -178
  653. data/bundler/man/bundle-gem.1.txt +0 -91
  654. data/bundler/man/bundle-info.1.txt +0 -21
  655. data/bundler/man/bundle-init.1.txt +0 -34
  656. data/bundler/man/bundle-inject.1.txt +0 -32
  657. data/bundler/man/bundle-install.1.txt +0 -401
  658. data/bundler/man/bundle-list.1.txt +0 -43
  659. data/bundler/man/bundle-lock.1.txt +0 -93
  660. data/bundler/man/bundle-open.1.txt +0 -29
  661. data/bundler/man/bundle-outdated.1.txt +0 -131
  662. data/bundler/man/bundle-platform.1.txt +0 -57
  663. data/bundler/man/bundle-pristine.1.txt +0 -44
  664. data/bundler/man/bundle-remove.1.txt +0 -34
  665. data/bundler/man/bundle-show.1.txt +0 -27
  666. data/bundler/man/bundle-update.1.txt +0 -390
  667. data/bundler/man/bundle-viz.1.txt +0 -39
  668. data/bundler/man/bundle.1.txt +0 -116
  669. data/bundler/man/gemfile.5.txt +0 -649
  670. data/lib/rubygems/psych_additions.rb +0 -10
  671. data/lib/rubygems/server.rb +0 -879
  672. data/lib/rubygems/source_local.rb +0 -7
  673. data/lib/rubygems/source_specific_file.rb +0 -6
  674. data/lib/rubygems/syck_hack.rb +0 -79
  675. data/lib/rubygems/uri_parser.rb +0 -36
  676. data/lib/rubygems/uri_parsing.rb +0 -23
  677. data/lib/ubygems.rb +0 -14
  678. data/test/rubygems/bogussources.rb +0 -9
  679. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  680. data/test/rubygems/test_gem_server.rb +0 -612
  681. data/tmp/.keep +0 -0
  682. data/util/CL2notes +0 -55
  683. data/util/bisect +0 -10
  684. data/util/ci.sh +0 -62
  685. data/util/cops/deprecations.rb +0 -52
  686. data/util/create_certs.rb +0 -171
  687. data/util/create_certs.sh +0 -27
  688. data/util/create_encrypted_key.rb +0 -16
  689. data/util/generate_spdx_license_list.rb +0 -63
  690. data/util/patch_with_prs.rb +0 -77
  691. data/util/rubocop +0 -8
  692. data/util/update_bundled_ca_certificates.rb +0 -137
  693. data/util/update_changelog.rb +0 -64
  694. /data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  695. /data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  696. /data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  697. /data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  698. /data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
  699. /data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  700. /data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  701. /data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  702. /data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  703. /data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
data/lib/rubygems.rb CHANGED
@@ -1,23 +1,22 @@
1
1
  # frozen_string_literal: true
2
- # -*- ruby -*-
3
2
  #--
4
3
  # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
5
4
  # All rights reserved.
6
5
  # See LICENSE.txt for permissions.
7
6
  #++
8
7
 
9
- require 'rbconfig'
8
+ require "rbconfig"
10
9
 
11
10
  module Gem
12
- VERSION = "3.1.6".freeze
11
+ VERSION = "3.3.22".freeze
13
12
  end
14
13
 
15
14
  # Must be first since it unloads the prelude from 1.9.2
16
- require 'rubygems/compatibility'
15
+ require_relative "rubygems/compatibility"
17
16
 
18
- require 'rubygems/defaults'
19
- require 'rubygems/deprecate'
20
- require 'rubygems/errors'
17
+ require_relative "rubygems/defaults"
18
+ require_relative "rubygems/deprecate"
19
+ require_relative "rubygems/errors"
21
20
 
22
21
  ##
23
22
  # RubyGems is the Ruby standard for publishing and managing third party
@@ -43,13 +42,13 @@ require 'rubygems/errors'
43
42
  #
44
43
  # == RubyGems Plugins
45
44
  #
46
- # As of RubyGems 1.3.2, RubyGems will load plugins installed in gems or
45
+ # RubyGems will load plugins in the latest version of each installed gem or
47
46
  # $LOAD_PATH. Plugins must be named 'rubygems_plugin' (.rb, .so, etc) and
48
- # placed at the root of your gem's #require_path. Plugins are discovered via
49
- # Gem::find_files and then loaded.
47
+ # placed at the root of your gem's #require_path. Plugins are installed at a
48
+ # special location and loaded on boot.
50
49
  #
51
50
  # For an example plugin, see the {Graph gem}[https://github.com/seattlerb/graph]
52
- # which adds a `gem graph` command.
51
+ # which adds a <tt>gem graph</tt> command.
53
52
  #
54
53
  # == RubyGems Defaults, Packaging
55
54
  #
@@ -113,12 +112,16 @@ require 'rubygems/errors'
113
112
  # -The RubyGems Team
114
113
 
115
114
  module Gem
116
- RUBYGEMS_DIR = File.dirname File.expand_path(__FILE__)
115
+ RUBYGEMS_DIR = __dir__
117
116
 
118
117
  # Taint support is deprecated in Ruby 2.7.
119
118
  # This allows switching ".untaint" to ".tap(&Gem::UNTAINT)",
120
119
  # to avoid deprecation warnings in Ruby 2.7.
121
- UNTAINT = RUBY_VERSION < '2.7' ? :untaint.to_sym : proc{}
120
+ UNTAINT = RUBY_VERSION < "2.7" ? :untaint.to_sym : proc {}
121
+
122
+ # When https://bugs.ruby-lang.org/issues/17259 is available, there is no need to override Kernel#warn
123
+ KERNEL_WARN_IGNORES_INTERNAL_ENTRIES = RUBY_ENGINE == "truffleruby" ||
124
+ (RUBY_ENGINE == "ruby" && RUBY_VERSION >= "3.0")
122
125
 
123
126
  ##
124
127
  # An Array of Regexps that match windows Ruby platforms.
@@ -148,6 +151,7 @@ module Gem
148
151
  doc
149
152
  extensions
150
153
  gems
154
+ plugins
151
155
  specifications
152
156
  ].freeze
153
157
 
@@ -159,22 +163,12 @@ module Gem
159
163
  specifications/default
160
164
  ].freeze
161
165
 
162
- ##
163
- # Exception classes used in a Gem.read_binary +rescue+ statement
164
-
165
- READ_BINARY_ERRORS = [Errno::EACCES, Errno::EROFS, Errno::ENOSYS, Errno::ENOTSUP].freeze
166
-
167
- ##
168
- # Exception classes used in Gem.write_binary +rescue+ statement
169
-
170
- WRITE_BINARY_ERRORS = [Errno::ENOSYS, Errno::ENOTSUP].freeze
171
-
172
166
  @@win_platform = nil
173
167
 
174
168
  @configuration = nil
175
169
  @gemdeps = nil
176
170
  @loaded_specs = {}
177
- LOADED_SPECS_MUTEX = Mutex.new
171
+ LOADED_SPECS_MUTEX = Thread::Mutex.new
178
172
  @path_to_default_spec_map = {}
179
173
  @platforms = []
180
174
  @ruby = nil
@@ -245,9 +239,6 @@ module Gem
245
239
  # you to specify specific gem versions.
246
240
 
247
241
  def self.bin_path(name, exec_name = nil, *requirements)
248
- # TODO: fails test_self_bin_path_bin_file_gone_in_latest
249
- # Gem::Specification.find_by_name(name, *requirements).bin_file exec_name
250
-
251
242
  requirements = Gem::Requirement.default if
252
243
  requirements.empty?
253
244
 
@@ -271,9 +262,6 @@ module Gem
271
262
 
272
263
  unless spec = specs.first
273
264
  msg = "can't find gem #{dep} with executable #{exec_name}"
274
- if name == "bundler" && bundler_message = Gem::BundlerVersionFinder.missing_version_message
275
- msg = bundler_message
276
- end
277
265
  raise Gem::GemNotFoundException, msg
278
266
  end
279
267
 
@@ -305,18 +293,25 @@ module Gem
305
293
  # The mode needed to read a file as straight binary.
306
294
 
307
295
  def self.binary_mode
308
- 'rb'
296
+ "rb"
309
297
  end
310
298
 
311
299
  ##
312
300
  # The path where gem executables are to be installed.
313
301
 
314
302
  def self.bindir(install_dir=Gem.dir)
315
- return File.join install_dir, 'bin' unless
303
+ return File.join install_dir, "bin" unless
316
304
  install_dir.to_s == Gem.default_dir.to_s
317
305
  Gem.default_bindir
318
306
  end
319
307
 
308
+ ##
309
+ # The path were rubygems plugins are to be installed.
310
+
311
+ def self.plugindir(install_dir=Gem.dir)
312
+ File.join install_dir, "plugins"
313
+ end
314
+
320
315
  ##
321
316
  # Reset the +dir+ and +path+ values. The next time +dir+ or +path+
322
317
  # is requested, the values will be calculated from scratch. This is
@@ -329,13 +324,6 @@ module Gem
329
324
  Gem::Security.reset if defined?(Gem::Security)
330
325
  end
331
326
 
332
- ##
333
- # The path to standard location of the user's .gemrc file.
334
-
335
- def self.config_file
336
- @config_file ||= File.join Gem.user_home, '.gemrc'
337
- end
338
-
339
327
  ##
340
328
  # The standard configuration object for gems.
341
329
 
@@ -365,7 +353,7 @@ module Gem
365
353
  # A Zlib::Deflate.deflate wrapper
366
354
 
367
355
  def self.deflate(data)
368
- require 'zlib'
356
+ require "zlib"
369
357
  Zlib::Deflate.deflate data
370
358
  end
371
359
 
@@ -387,17 +375,17 @@ module Gem
387
375
  target = {}
388
376
  env.each_pair do |k,v|
389
377
  case k
390
- when 'GEM_HOME', 'GEM_PATH', 'GEM_SPEC_CACHE'
378
+ when "GEM_HOME", "GEM_PATH", "GEM_SPEC_CACHE"
391
379
  case v
392
380
  when nil, String
393
381
  target[k] = v
394
382
  when Array
395
383
  unless Gem::Deprecate.skip
396
- warn <<-eowarn
384
+ warn <<-EOWARN
397
385
  Array values in the parameter to `Gem.paths=` are deprecated.
398
386
  Please use a String or nil.
399
387
  An Array (#{env.inspect}) was passed in from #{caller[3]}
400
- eowarn
388
+ EOWARN
401
389
  end
402
390
  target[k] = v.join File::PATH_SEPARATOR
403
391
  end
@@ -411,8 +399,6 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
411
399
 
412
400
  ##
413
401
  # The path where gems are to be installed.
414
- #--
415
- # FIXME deprecate these once everything else has been done -ebh
416
402
 
417
403
  def self.dir
418
404
  paths.home
@@ -456,8 +442,6 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
456
442
  old_umask = File.umask
457
443
  File.umask old_umask | 002
458
444
 
459
- require 'fileutils'
460
-
461
445
  options = {}
462
446
 
463
447
  options[:mode] = mode if mode
@@ -465,7 +449,13 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
465
449
  subdirs.each do |name|
466
450
  subdir = File.join dir, name
467
451
  next if File.exist? subdir
468
- FileUtils.mkdir_p subdir, **options rescue nil
452
+
453
+ require "fileutils"
454
+
455
+ begin
456
+ FileUtils.mkdir_p subdir, **options
457
+ rescue SystemCallError
458
+ end
469
459
  end
470
460
  ensure
471
461
  File.umask old_umask
@@ -476,7 +466,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
476
466
  # distinction as extensions cannot be shared between the two.
477
467
 
478
468
  def self.extension_api_version # :nodoc:
479
- if 'no' == RbConfig::CONFIG['ENABLE_SHARED']
469
+ if "no" == RbConfig::CONFIG["ENABLE_SHARED"]
480
470
  "#{ruby_api_version}-static"
481
471
  else
482
472
  ruby_api_version
@@ -502,7 +492,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
502
492
 
503
493
  gem_specifications = @gemdeps ? Gem.loaded_specs.values : Gem::Specification.stubs
504
494
 
505
- files.concat gem_specifications.map { |spec|
495
+ files.concat gem_specifications.map {|spec|
506
496
  spec.matches_for_glob("#{glob}#{Gem.suffix_pattern}")
507
497
  }.flatten
508
498
 
@@ -517,7 +507,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
517
507
  glob_with_suffixes = "#{glob}#{Gem.suffix_pattern}"
518
508
  $LOAD_PATH.map do |load_path|
519
509
  Gem::Util.glob_files_in_dir(glob_with_suffixes, load_path)
520
- end.flatten.select { |file| File.file? file.tap(&Gem::UNTAINT) }
510
+ end.flatten.select {|file| File.file? file.tap(&Gem::UNTAINT) }
521
511
  end
522
512
 
523
513
  ##
@@ -537,7 +527,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
537
527
 
538
528
  files = find_files_from_load_path glob if check_load_path
539
529
 
540
- files.concat Gem::Specification.latest_specs(true).map { |spec|
530
+ files.concat Gem::Specification.latest_specs(true).map {|spec|
541
531
  spec.matches_for_glob("#{glob}#{Gem.suffix_pattern}")
542
532
  }.flatten
543
533
 
@@ -548,87 +538,16 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
548
538
  return files
549
539
  end
550
540
 
551
- ##
552
- # Finds the user's home directory.
553
- #--
554
- # Some comments from the ruby-talk list regarding finding the home
555
- # directory:
556
- #
557
- # I have HOME, USERPROFILE and HOMEDRIVE + HOMEPATH. Ruby seems
558
- # to be depending on HOME in those code samples. I propose that
559
- # it should fallback to USERPROFILE and HOMEDRIVE + HOMEPATH (at
560
- # least on Win32).
561
- #++
562
- #--
563
- #
564
- #++
565
-
566
- def self.find_home
567
- Dir.home.dup
568
- rescue
569
- if Gem.win_platform?
570
- File.expand_path File.join(ENV['HOMEDRIVE'] || ENV['SystemDrive'], '/')
571
- else
572
- File.expand_path "/"
573
- end
574
- end
575
-
576
- private_class_method :find_home
577
-
578
- # TODO: remove in RubyGems 4.0
579
-
580
- ##
581
- # Zlib::GzipReader wrapper that unzips +data+.
582
-
583
- def self.gunzip(data)
584
- Gem::Util.gunzip data
585
- end
586
-
587
- class << self
588
-
589
- extend Gem::Deprecate
590
- deprecate :gunzip, "Gem::Util.gunzip", 2018, 12
591
-
592
- end
593
-
594
- ##
595
- # Zlib::GzipWriter wrapper that zips +data+.
596
-
597
- def self.gzip(data)
598
- Gem::Util.gzip data
599
- end
600
-
601
- class << self
602
-
603
- extend Gem::Deprecate
604
- deprecate :gzip, "Gem::Util.gzip", 2018, 12
605
-
606
- end
607
-
608
- ##
609
- # A Zlib::Inflate#inflate wrapper
610
-
611
- def self.inflate(data)
612
- Gem::Util.inflate data
613
- end
614
-
615
- class << self
616
-
617
- extend Gem::Deprecate
618
- deprecate :inflate, "Gem::Util.inflate", 2018, 12
619
-
620
- end
621
-
622
541
  ##
623
542
  # Top level install helper method. Allows you to install gems interactively:
624
543
  #
625
544
  # % irb
626
545
  # >> Gem.install "minitest"
627
- # Fetching: minitest-3.0.1.gem (100%)
546
+ # Fetching: minitest-5.14.0.gem (100%)
628
547
  # => [#<Gem::Specification:0x1013b4528 @name="minitest", ...>]
629
548
 
630
549
  def self.install(name, version = Gem::Requirement.default, *options)
631
- require "rubygems/dependency_installer"
550
+ require_relative "rubygems/dependency_installer"
632
551
  inst = Gem::DependencyInstaller.new(*options)
633
552
  inst.install name, version
634
553
  inst.installed_gems
@@ -657,14 +576,14 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
657
576
  return i if path.instance_variable_defined?(:@gem_prelude_index)
658
577
  end
659
578
 
660
- index = $LOAD_PATH.index RbConfig::CONFIG['sitelibdir']
579
+ index = $LOAD_PATH.index RbConfig::CONFIG["sitelibdir"]
661
580
 
662
581
  index || 0
663
582
  end
664
583
 
665
584
  ##
666
- # The number of paths in the `$LOAD_PATH` from activated gems. Used to
667
- # prioritize `-I` and `ENV['RUBYLIB`]` entries during `require`.
585
+ # The number of paths in the +$LOAD_PATH+ from activated gems. Used to
586
+ # prioritize +-I+ and +ENV['RUBYLIB']+ entries during +require+.
668
587
 
669
588
  def self.activated_gem_paths
670
589
  @activated_gem_paths ||= 0
@@ -687,37 +606,11 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
687
606
 
688
607
  def self.load_yaml
689
608
  return if @yaml_loaded
690
- return unless defined?(gem)
691
-
692
- begin
693
- gem 'psych', '>= 2.0.0'
694
- rescue Gem::LoadError
695
- # It's OK if the user does not have the psych gem installed. We will
696
- # attempt to require the stdlib version
697
- end
698
-
699
- begin
700
- # Try requiring the gem version *or* stdlib version of psych.
701
- require 'psych'
702
- rescue ::LoadError
703
- # If we can't load psych, thats fine, go on.
704
- else
705
- # If 'yaml' has already been required, then we have to
706
- # be sure to switch it over to the newly loaded psych.
707
- if defined?(YAML::ENGINE) && YAML::ENGINE.yamler != "psych"
708
- YAML::ENGINE.yamler = "psych"
709
- end
710
-
711
- require 'rubygems/psych_additions'
712
- require 'rubygems/psych_tree'
713
- end
714
609
 
715
- require 'yaml'
716
- require 'rubygems/safe_yaml'
610
+ require "psych"
611
+ require_relative "rubygems/psych_tree"
717
612
 
718
- # Now that we're sure some kind of yaml library is loaded, pull
719
- # in our hack to deal with Syck's DefaultKey ugliness.
720
- require 'rubygems/syck_hack'
613
+ require_relative "rubygems/safe_yaml"
721
614
 
722
615
  @yaml_loaded = true
723
616
  end
@@ -848,9 +741,9 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
848
741
  def self.prefix
849
742
  prefix = File.dirname RUBYGEMS_DIR
850
743
 
851
- if prefix != File.expand_path(RbConfig::CONFIG['sitelibdir']) and
852
- prefix != File.expand_path(RbConfig::CONFIG['libdir']) and
853
- 'lib' == File.basename(RUBYGEMS_DIR)
744
+ if prefix != File.expand_path(RbConfig::CONFIG["sitelibdir"]) &&
745
+ prefix != File.expand_path(RbConfig::CONFIG["libdir"]) &&
746
+ "lib" == File.basename(RUBYGEMS_DIR)
854
747
  prefix
855
748
  end
856
749
  end
@@ -866,40 +759,42 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
866
759
  # Safely read a file in binary mode on all platforms.
867
760
 
868
761
  def self.read_binary(path)
869
- File.open path, 'rb+' do |f|
870
- f.flock(File::LOCK_EX)
871
- f.read
762
+ open_file(path, "rb+") do |io|
763
+ io.read
872
764
  end
873
- rescue *READ_BINARY_ERRORS
874
- File.open path, 'rb' do |f|
875
- f.read
876
- end
877
- rescue Errno::ENOLCK # NFS
878
- if Thread.main != Thread.current
879
- raise
880
- else
881
- File.open path, 'rb' do |f|
882
- f.read
883
- end
765
+ rescue Errno::EACCES, Errno::EROFS
766
+ open_file(path, "rb") do |io|
767
+ io.read
884
768
  end
885
769
  end
886
770
 
887
771
  ##
888
772
  # Safely write a file in binary mode on all platforms.
889
773
  def self.write_binary(path, data)
890
- open(path, 'wb') do |io|
891
- begin
892
- io.flock(File::LOCK_EX)
893
- rescue *WRITE_BINARY_ERRORS
894
- end
774
+ open_file(path, "wb") do |io|
895
775
  io.write data
896
776
  end
777
+ end
778
+
779
+ ##
780
+ # Open a file with given flags, and on Windows protect access with flock
781
+
782
+ def self.open_file(path, flags, &block)
783
+ File.open(path, flags) do |io|
784
+ if !java_platform? && win_platform?
785
+ begin
786
+ io.flock(File::LOCK_EX)
787
+ rescue Errno::ENOSYS, Errno::ENOTSUP
788
+ end
789
+ end
790
+ yield io
791
+ end
897
792
  rescue Errno::ENOLCK # NFS
898
793
  if Thread.main != Thread.current
899
794
  raise
900
795
  else
901
- open(path, 'wb') do |io|
902
- io.write data
796
+ File.open(path, flags) do |io|
797
+ yield io
903
798
  end
904
799
  end
905
800
  end
@@ -909,8 +804,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
909
804
 
910
805
  def self.ruby
911
806
  if @ruby.nil?
912
- @ruby = File.join(RbConfig::CONFIG['bindir'],
913
- "#{RbConfig::CONFIG['ruby_install_name']}#{RbConfig::CONFIG['EXEEXT']}")
807
+ @ruby = RbConfig.ruby
914
808
 
915
809
  @ruby = "\"#{@ruby}\"" if @ruby =~ /\s/
916
810
  end
@@ -922,13 +816,13 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
922
816
  # Returns a String containing the API compatibility version of Ruby
923
817
 
924
818
  def self.ruby_api_version
925
- @ruby_api_version ||= RbConfig::CONFIG['ruby_version'].dup
819
+ @ruby_api_version ||= RbConfig::CONFIG["ruby_version"].dup
926
820
  end
927
821
 
928
822
  def self.env_requirement(gem_name)
929
823
  @env_requirements_by_name ||= {}
930
824
  @env_requirements_by_name[gem_name] ||= begin
931
- req = ENV["GEM_REQUIREMENT_#{gem_name.upcase}"] || '>= 0'.freeze
825
+ req = ENV["GEM_REQUIREMENT_#{gem_name.upcase}"] || ">= 0".freeze
932
826
  Gem::Requirement.create(req)
933
827
  end
934
828
  end
@@ -942,7 +836,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
942
836
  fetcher = Gem::SpecFetcher.fetcher
943
837
  spec_tuples, = fetcher.spec_for_dependency dependency
944
838
 
945
- spec, = spec_tuples.first
839
+ spec, = spec_tuples.last
946
840
 
947
841
  spec
948
842
  end
@@ -951,8 +845,8 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
951
845
  # Returns the latest release version of RubyGems.
952
846
 
953
847
  def self.latest_rubygems_version
954
- latest_version_for('rubygems-update') or
955
- raise "Can't find 'rubygems-update' in any repo. Check `gem source list`."
848
+ latest_version_for("rubygems-update") ||
849
+ raise("Can't find 'rubygems-update' in any repo. Check `gem source list`.")
956
850
  end
957
851
 
958
852
  ##
@@ -960,7 +854,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
960
854
 
961
855
  def self.latest_version_for(name)
962
856
  spec = latest_spec_for name
963
- spec and spec.version
857
+ spec && spec.version
964
858
  end
965
859
 
966
860
  ##
@@ -970,9 +864,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
970
864
  return @ruby_version if defined? @ruby_version
971
865
  version = RUBY_VERSION.dup
972
866
 
973
- if defined?(RUBY_PATCHLEVEL) && RUBY_PATCHLEVEL != -1
974
- version << ".#{RUBY_PATCHLEVEL}"
975
- elsif defined?(RUBY_DESCRIPTION)
867
+ unless defined?(RUBY_PATCHLEVEL) && RUBY_PATCHLEVEL != -1
976
868
  if RUBY_ENGINE == "ruby"
977
869
  desc = RUBY_DESCRIPTION[/\Aruby #{Regexp.quote(RUBY_VERSION)}([^ ]+) /, 1]
978
870
  else
@@ -1023,21 +915,38 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1023
915
  @suffix_pattern ||= "{#{suffixes.join(',')}}"
1024
916
  end
1025
917
 
918
+ ##
919
+ # Regexp for require-able path suffixes.
920
+
1026
921
  def self.suffix_regexp
1027
922
  @suffix_regexp ||= /#{Regexp.union(suffixes)}\z/
1028
923
  end
1029
924
 
925
+ ##
926
+ # Glob pattern for require-able plugin suffixes.
927
+
928
+ def self.plugin_suffix_pattern
929
+ @plugin_suffix_pattern ||= "_plugin#{suffix_pattern}"
930
+ end
931
+
932
+ ##
933
+ # Regexp for require-able plugin suffixes.
934
+
935
+ def self.plugin_suffix_regexp
936
+ @plugin_suffix_regexp ||= /_plugin#{suffix_regexp}\z/
937
+ end
938
+
1030
939
  ##
1031
940
  # Suffixes for require-able paths.
1032
941
 
1033
942
  def self.suffixes
1034
- @suffixes ||= ['',
1035
- '.rb',
1036
- *%w(DLEXT DLEXT2).map do |key|
943
+ @suffixes ||= ["",
944
+ ".rb",
945
+ *%w[DLEXT DLEXT2].map do |key|
1037
946
  val = RbConfig::CONFIG[key]
1038
- next unless val and not val.empty?
947
+ next unless val && !val.empty?
1039
948
  ".#{val}"
1040
- end
949
+ end,
1041
950
  ].compact.uniq
1042
951
  end
1043
952
 
@@ -1061,7 +970,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1061
970
  # Lazily loads DefaultUserInteraction and returns the default UI.
1062
971
 
1063
972
  def self.ui
1064
- require 'rubygems/user_interaction'
973
+ require_relative "rubygems/user_interaction"
1065
974
 
1066
975
  Gem::DefaultUserInteraction.ui
1067
976
  end
@@ -1074,24 +983,17 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1074
983
  paths.flatten!
1075
984
  paths.compact!
1076
985
  hash = { "GEM_HOME" => home, "GEM_PATH" => paths.empty? ? home : paths.join(File::PATH_SEPARATOR) }
1077
- hash.delete_if { |_, v| v.nil? }
986
+ hash.delete_if {|_, v| v.nil? }
1078
987
  self.paths = hash
1079
988
  end
1080
989
 
1081
- ##
1082
- # The home directory for the user.
1083
-
1084
- def self.user_home
1085
- @user_home ||= find_home.tap(&Gem::UNTAINT)
1086
- end
1087
-
1088
990
  ##
1089
991
  # Is this a windows platform?
1090
992
 
1091
993
  def self.win_platform?
1092
994
  if @@win_platform.nil?
1093
- ruby_platform = RbConfig::CONFIG['host_os']
1094
- @@win_platform = !!WIN_PATTERNS.find { |r| ruby_platform =~ r }
995
+ ruby_platform = RbConfig::CONFIG["host_os"]
996
+ @@win_platform = !!WIN_PATTERNS.find {|r| ruby_platform =~ r }
1095
997
  end
1096
998
 
1097
999
  @@win_platform
@@ -1104,12 +1006,18 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1104
1006
  RUBY_PLATFORM == "java"
1105
1007
  end
1106
1008
 
1009
+ ##
1010
+ # Is this platform Solaris?
1011
+
1012
+ def self.solaris_platform?
1013
+ RUBY_PLATFORM =~ /solaris/
1014
+ end
1015
+
1107
1016
  ##
1108
1017
  # Load +plugins+ as Ruby files
1109
1018
 
1110
1019
  def self.load_plugin_files(plugins) # :nodoc:
1111
1020
  plugins.each do |plugin|
1112
-
1113
1021
  # Skip older versions of the GemCutter plugin: Its commands are in
1114
1022
  # RubyGems proper now.
1115
1023
 
@@ -1125,15 +1033,11 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1125
1033
  end
1126
1034
 
1127
1035
  ##
1128
- # Find the 'rubygems_plugin' files in the latest installed gems and load
1129
- # them
1036
+ # Find rubygems plugin files in the standard location and load them
1130
1037
 
1131
1038
  def self.load_plugins
1132
- # Remove this env var by at least 3.0
1133
- if ENV['RUBYGEMS_LOAD_ALL_PLUGINS']
1134
- load_plugin_files find_files('rubygems_plugin', false)
1135
- else
1136
- load_plugin_files find_latest_files('rubygems_plugin', false)
1039
+ Gem.path.each do |gem_path|
1040
+ load_plugin_files Gem::Util.glob_files_in_dir("*#{Gem.plugin_suffix_pattern}", plugindir(gem_path))
1137
1041
  end
1138
1042
  end
1139
1043
 
@@ -1141,19 +1045,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1141
1045
  # Find all 'rubygems_plugin' files in $LOAD_PATH and load them
1142
1046
 
1143
1047
  def self.load_env_plugins
1144
- path = "rubygems_plugin"
1145
-
1146
- files = []
1147
- glob = "#{path}#{Gem.suffix_pattern}"
1148
- $LOAD_PATH.each do |load_path|
1149
- globbed = Gem::Util.glob_files_in_dir(glob, load_path)
1150
-
1151
- globbed.each do |load_path_file|
1152
- files << load_path_file if File.file?(load_path_file.tap(&Gem::UNTAINT))
1153
- end
1154
- end
1155
-
1156
- load_plugin_files files
1048
+ load_plugin_files find_files_from_load_path("rubygems_plugin")
1157
1049
  end
1158
1050
 
1159
1051
  ##
@@ -1179,14 +1071,14 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1179
1071
  def self.use_gemdeps(path = nil)
1180
1072
  raise_exception = path
1181
1073
 
1182
- path ||= ENV['RUBYGEMS_GEMDEPS']
1074
+ path ||= ENV["RUBYGEMS_GEMDEPS"]
1183
1075
  return unless path
1184
1076
 
1185
1077
  path = path.dup
1186
1078
 
1187
1079
  if path == "-"
1188
1080
  Gem::Util.traverse_parents Dir.pwd do |directory|
1189
- dep_file = GEM_DEP_FILES.find { |f| File.file?(f) }
1081
+ dep_file = GEM_DEP_FILES.find {|f| File.file?(f) }
1190
1082
 
1191
1083
  next unless dep_file
1192
1084
 
@@ -1204,45 +1096,28 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1204
1096
  end
1205
1097
 
1206
1098
  ENV["BUNDLE_GEMFILE"] ||= File.expand_path(path)
1207
- require 'rubygems/user_interaction'
1208
- Gem::DefaultUserInteraction.use_ui(ui) do
1209
- require "bundler"
1210
- begin
1211
- Bundler.ui.silence do
1212
- @gemdeps = Bundler.setup
1099
+ require_relative "rubygems/user_interaction"
1100
+ require "bundler"
1101
+ begin
1102
+ Gem::DefaultUserInteraction.use_ui(ui) do
1103
+ begin
1104
+ Bundler.ui.silence do
1105
+ @gemdeps = Bundler.setup
1106
+ end
1107
+ ensure
1108
+ Gem::DefaultUserInteraction.ui.close
1213
1109
  end
1214
- ensure
1215
- Gem::DefaultUserInteraction.ui.close
1216
1110
  end
1217
- @gemdeps.requested_specs.map(&:to_spec).sort_by(&:name)
1218
- end
1219
-
1220
- rescue => e
1221
- case e
1222
- when Gem::LoadError, Gem::UnsatisfiableDependencyError, (defined?(Bundler::GemNotFound) ? Bundler::GemNotFound : Gem::LoadError)
1111
+ rescue Bundler::BundlerError => e
1223
1112
  warn e.message
1224
- warn "You may need to `gem install -g` to install missing gems"
1113
+ warn "You may need to `bundle install` to install missing gems"
1225
1114
  warn ""
1226
- else
1227
- raise
1228
1115
  end
1229
1116
  end
1230
1117
 
1231
- class << self
1232
-
1233
- ##
1234
- # TODO remove with RubyGems 4.0
1235
-
1236
- alias detect_gemdeps use_gemdeps # :nodoc:
1237
-
1238
- extend Gem::Deprecate
1239
- deprecate :detect_gemdeps, "Gem.use_gemdeps", 2018, 12
1240
-
1241
- end
1242
-
1243
1118
  ##
1244
1119
  # If the SOURCE_DATE_EPOCH environment variable is set, returns it's value.
1245
- # Otherwise, returns the time that `Gem.source_date_epoch_string` was
1120
+ # Otherwise, returns the time that +Gem.source_date_epoch_string+ was
1246
1121
  # first called in the same format as SOURCE_DATE_EPOCH.
1247
1122
  #
1248
1123
  # NOTE(@duckinator): The implementation is a tad weird because we want to:
@@ -1284,6 +1159,11 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1284
1159
  # methods, and then we switch over to `class << self` here. Pick one or the
1285
1160
  # other.
1286
1161
  class << self
1162
+ ##
1163
+ # RubyGems distributors (like operating system package managers) can
1164
+ # disable RubyGems update by setting this to error message printed to
1165
+ # end-users on gem update --system instead of actual update.
1166
+ attr_accessor :disable_system_update_message
1287
1167
 
1288
1168
  ##
1289
1169
  # Hash of loaded Gem::Specification keyed by name
@@ -1309,7 +1189,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1309
1189
  #
1310
1190
 
1311
1191
  def register_default_spec(spec)
1312
- extended_require_paths = spec.require_paths.map {|f| f + "/"}
1192
+ extended_require_paths = spec.require_paths.map {|f| f + "/" }
1313
1193
  new_format = extended_require_paths.any? {|path| spec.files.any? {|f| f.start_with? path } }
1314
1194
 
1315
1195
  if new_format
@@ -1323,6 +1203,8 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1323
1203
  next unless $~
1324
1204
  end
1325
1205
 
1206
+ spec.activate if already_loaded?(file)
1207
+
1326
1208
  @path_to_default_spec_map[file] = spec
1327
1209
  @path_to_default_spec_map[file.sub(suffix_regexp, "")] = spec
1328
1210
  end
@@ -1388,6 +1270,22 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1388
1270
 
1389
1271
  attr_reader :pre_uninstall_hooks
1390
1272
 
1273
+ private
1274
+
1275
+ def already_loaded?(file)
1276
+ $LOADED_FEATURES.any? do |feature_path|
1277
+ feature_path.end_with?(file) && default_gem_load_paths.any? {|load_path_entry| feature_path == "#{load_path_entry}/#{file}" }
1278
+ end
1279
+ end
1280
+
1281
+ def default_gem_load_paths
1282
+ @default_gem_load_paths ||= $LOAD_PATH[load_path_insert_index..-1].map do |lp|
1283
+ expanded = File.expand_path(lp)
1284
+ next expanded unless File.exist?(expanded)
1285
+
1286
+ File.realpath(expanded)
1287
+ end
1288
+ end
1391
1289
  end
1392
1290
 
1393
1291
  ##
@@ -1395,37 +1293,44 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1395
1293
 
1396
1294
  MARSHAL_SPEC_DIR = "quick/Marshal.#{Gem.marshal_version}/".freeze
1397
1295
 
1398
- autoload :BundlerVersionFinder, File.expand_path('rubygems/bundler_version_finder', __dir__)
1399
- autoload :ConfigFile, File.expand_path('rubygems/config_file', __dir__)
1400
- autoload :Dependency, File.expand_path('rubygems/dependency', __dir__)
1401
- autoload :DependencyList, File.expand_path('rubygems/dependency_list', __dir__)
1402
- autoload :Installer, File.expand_path('rubygems/installer', __dir__)
1403
- autoload :Licenses, File.expand_path('rubygems/util/licenses', __dir__)
1404
- autoload :NameTuple, File.expand_path('rubygems/name_tuple', __dir__)
1405
- autoload :PathSupport, File.expand_path('rubygems/path_support', __dir__)
1406
- autoload :Platform, File.expand_path('rubygems/platform', __dir__)
1407
- autoload :RequestSet, File.expand_path('rubygems/request_set', __dir__)
1408
- autoload :Requirement, File.expand_path('rubygems/requirement', __dir__)
1409
- autoload :Resolver, File.expand_path('rubygems/resolver', __dir__)
1410
- autoload :Source, File.expand_path('rubygems/source', __dir__)
1411
- autoload :SourceList, File.expand_path('rubygems/source_list', __dir__)
1412
- autoload :SpecFetcher, File.expand_path('rubygems/spec_fetcher', __dir__)
1413
- autoload :Specification, File.expand_path('rubygems/specification', __dir__)
1414
- autoload :Util, File.expand_path('rubygems/util', __dir__)
1415
- autoload :Version, File.expand_path('rubygems/version', __dir__)
1416
-
1417
- require "rubygems/specification"
1296
+ autoload :BundlerVersionFinder, File.expand_path("rubygems/bundler_version_finder", __dir__)
1297
+ autoload :ConfigFile, File.expand_path("rubygems/config_file", __dir__)
1298
+ autoload :Dependency, File.expand_path("rubygems/dependency", __dir__)
1299
+ autoload :DependencyList, File.expand_path("rubygems/dependency_list", __dir__)
1300
+ autoload :Installer, File.expand_path("rubygems/installer", __dir__)
1301
+ autoload :Licenses, File.expand_path("rubygems/util/licenses", __dir__)
1302
+ autoload :NameTuple, File.expand_path("rubygems/name_tuple", __dir__)
1303
+ autoload :PathSupport, File.expand_path("rubygems/path_support", __dir__)
1304
+ autoload :RequestSet, File.expand_path("rubygems/request_set", __dir__)
1305
+ autoload :Requirement, File.expand_path("rubygems/requirement", __dir__)
1306
+ autoload :Resolver, File.expand_path("rubygems/resolver", __dir__)
1307
+ autoload :Source, File.expand_path("rubygems/source", __dir__)
1308
+ autoload :SourceList, File.expand_path("rubygems/source_list", __dir__)
1309
+ autoload :SpecFetcher, File.expand_path("rubygems/spec_fetcher", __dir__)
1310
+ autoload :SpecificationPolicy, File.expand_path("rubygems/specification_policy", __dir__)
1311
+ autoload :Util, File.expand_path("rubygems/util", __dir__)
1312
+ autoload :Version, File.expand_path("rubygems/version", __dir__)
1418
1313
  end
1419
1314
 
1420
- require 'rubygems/exceptions'
1315
+ require_relative "rubygems/exceptions"
1316
+ require_relative "rubygems/specification"
1421
1317
 
1422
1318
  # REFACTOR: This should be pulled out into some kind of hacks file.
1423
1319
  begin
1424
1320
  ##
1425
1321
  # Defaults the operating system (or packager) wants to provide for RubyGems.
1426
1322
 
1427
- require 'rubygems/defaults/operating_system'
1323
+ require "rubygems/defaults/operating_system"
1428
1324
  rescue LoadError
1325
+ # Ignored
1326
+ rescue StandardError => e
1327
+ path = e.backtrace_locations.reverse.find {|l| l.path.end_with?("rubygems/defaults/operating_system.rb") }.path
1328
+ msg = "#{e.message}\n" \
1329
+ "Loading the #{path} file caused an error. " \
1330
+ "This file is owned by your OS, not by rubygems upstream. " \
1331
+ "Please find out which OS package this file belongs to and follow the guidelines from your OS to report " \
1332
+ "the problem and ask for help."
1333
+ raise e.class, msg
1429
1334
  end
1430
1335
 
1431
1336
  begin
@@ -1440,8 +1345,6 @@ end
1440
1345
  # Loads the default specs.
1441
1346
  Gem::Specification.load_defaults
1442
1347
 
1443
- require 'rubygems/core_ext/kernel_gem'
1444
- require 'rubygems/core_ext/kernel_require'
1445
- require 'rubygems/core_ext/kernel_warn'
1446
-
1447
- Gem.use_gemdeps
1348
+ require_relative "rubygems/core_ext/kernel_gem"
1349
+ require_relative "rubygems/core_ext/kernel_require"
1350
+ require_relative "rubygems/core_ext/kernel_warn"