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
@@ -1,11 +1,9 @@
1
1
  # frozen_string_literal: true
2
- require 'rubygems/test_case'
3
- require 'rubygems'
2
+ require_relative "helper"
3
+ require "rubygems"
4
4
 
5
5
  class TestGemRequire < Gem::TestCase
6
-
7
6
  class Latch
8
-
9
7
  def initialize(count = 1)
10
8
  @count = count
11
9
  @lock = Monitor.new
@@ -24,17 +22,6 @@ class TestGemRequire < Gem::TestCase
24
22
  @cv.wait_while { @count > 0 }
25
23
  end
26
24
  end
27
-
28
- end
29
-
30
- def setup
31
- super
32
-
33
- @old_loaded_features = $LOADED_FEATURES.dup
34
- assert_raises LoadError do
35
- require 'test_gem_require_a'
36
- end
37
- $LOADED_FEATURES.replace @old_loaded_features
38
25
  end
39
26
 
40
27
  def assert_require(path)
@@ -48,26 +35,26 @@ class TestGemRequire < Gem::TestCase
48
35
  def test_respect_loaded_features_caching_like_standard_require
49
36
  dir = Dir.mktmpdir("test_require", @tempdir)
50
37
 
51
- lp1 = File.join dir, 'foo1'
52
- foo1 = File.join lp1, 'foo.rb'
38
+ lp1 = File.join dir, "foo1"
39
+ foo1 = File.join lp1, "foo.rb"
53
40
 
54
41
  FileUtils.mkdir_p lp1
55
- File.open(foo1, 'w') { |f| f.write "class Object; HELLO = 'foo1' end" }
42
+ File.open(foo1, "w") {|f| f.write "class Object; HELLO = 'foo1' end" }
56
43
 
57
44
  lp = $LOAD_PATH.dup
58
45
 
59
46
  $LOAD_PATH.unshift lp1
60
- assert_require 'foo'
47
+ assert_require "foo"
61
48
  assert_equal "foo1", ::Object::HELLO
62
49
 
63
- lp2 = File.join dir, 'foo2'
64
- foo2 = File.join lp2, 'foo.rb'
50
+ lp2 = File.join dir, "foo2"
51
+ foo2 = File.join lp2, "foo.rb"
65
52
 
66
53
  FileUtils.mkdir_p lp2
67
- File.open(foo2, 'w') { |f| f.write "class Object; HELLO = 'foo2' end" }
54
+ File.open(foo2, "w") {|f| f.write "class Object; HELLO = 'foo2' end" }
68
55
 
69
56
  $LOAD_PATH.unshift lp2
70
- refute_require 'foo'
57
+ refute_require "foo"
71
58
  assert_equal "foo1", ::Object::HELLO
72
59
  ensure
73
60
  $LOAD_PATH.replace lp
@@ -76,32 +63,29 @@ class TestGemRequire < Gem::TestCase
76
63
 
77
64
  # Providing -I on the commandline should always beat gems
78
65
  def test_dash_i_beats_gems
79
- a1 = util_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb"
80
- b1 = util_spec "b", "1", {"c" => "> 0"}, "lib/b/c.rb"
66
+ a1 = util_spec "a", "1", { "b" => "= 1" }, "lib/test_gem_require_a.rb"
67
+ b1 = util_spec "b", "1", { "c" => "> 0" }, "lib/b/c.rb"
81
68
  c1 = util_spec "c", "1", nil, "lib/c/c.rb"
82
69
  c2 = util_spec "c", "2", nil, "lib/c/c.rb"
83
70
 
84
71
  install_specs c1, c2, b1, a1
85
72
 
86
73
  dir = Dir.mktmpdir("test_require", @tempdir)
87
- dash_i_arg = File.join dir, 'lib'
74
+ dash_i_arg = File.join dir, "lib"
88
75
 
89
- c_rb = File.join dash_i_arg, 'b', 'c.rb'
76
+ c_rb = File.join dash_i_arg, "b", "c.rb"
90
77
 
91
78
  FileUtils.mkdir_p File.dirname c_rb
92
- File.open(c_rb, 'w') { |f| f.write "class Object; HELLO = 'world' end" }
93
-
94
- lp = $LOAD_PATH.dup
79
+ File.open(c_rb, "w") {|f| f.write "class Object; HELLO = 'world' end" }
95
80
 
96
81
  # Pretend to provide a commandline argument that overrides a file in gem b
97
82
  $LOAD_PATH.unshift dash_i_arg
98
83
 
99
- assert_require 'test_gem_require_a'
100
- assert_require 'b/c' # this should be required from -I
84
+ assert_require "test_gem_require_a"
85
+ assert_require "b/c" # this should be required from -I
101
86
  assert_equal "world", ::Object::HELLO
102
- assert_equal %w(a-1 b-1), loaded_spec_names
87
+ assert_equal %w[a-1 b-1], loaded_spec_names
103
88
  ensure
104
- $LOAD_PATH.replace lp
105
89
  Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
106
90
  end
107
91
 
@@ -118,53 +102,45 @@ class TestGemRequire < Gem::TestCase
118
102
 
119
103
  # Providing -I on the commandline should always beat gems
120
104
  def test_dash_i_beats_default_gems
121
- a1 = new_default_spec "a", "1", {"b" => "= 1"}, "test_gem_require_a.rb"
122
- b1 = new_default_spec "b", "1", {"c" => "> 0"}, "b/c.rb"
105
+ a1 = new_default_spec "a", "1", { "b" => "= 1" }, "test_gem_require_a.rb"
106
+ b1 = new_default_spec "b", "1", { "c" => "> 0" }, "b/c.rb"
123
107
  c1 = new_default_spec "c", "1", nil, "c/c.rb"
124
108
  c2 = new_default_spec "c", "2", nil, "c/c.rb"
125
109
 
126
- install_default_specs c1, c2, b1, a1
110
+ install_default_gems c1, c2, b1, a1
127
111
 
128
112
  dir = Dir.mktmpdir("test_require", @tempdir)
129
- dash_i_arg = File.join dir, 'lib'
113
+ dash_i_arg = File.join dir, "lib"
130
114
 
131
- c_rb = File.join dash_i_arg, 'c', 'c.rb'
115
+ c_rb = File.join dash_i_arg, "c", "c.rb"
132
116
 
133
117
  FileUtils.mkdir_p File.dirname c_rb
134
- File.open(c_rb, 'w') { |f| f.write "class Object; HELLO = 'world' end" }
118
+ File.open(c_rb, "w") {|f| f.write "class Object; HELLO = 'world' end" }
135
119
 
136
- assert_require 'test_gem_require_a'
137
-
138
- lp = $LOAD_PATH.dup
120
+ assert_require "test_gem_require_a"
139
121
 
140
122
  # Pretend to provide a commandline argument that overrides a file in gem b
141
123
  $LOAD_PATH.unshift dash_i_arg
142
124
 
143
- assert_require 'b/c'
144
- assert_require 'c/c' # this should be required from -I
125
+ assert_require "b/c"
126
+ assert_require "c/c" # this should be required from -I
145
127
  assert_equal "world", ::Object::HELLO
146
- assert_equal %w(a-1 b-1), loaded_spec_names
128
+ assert_equal %w[a-1 b-1], loaded_spec_names
147
129
  ensure
148
- $LOAD_PATH.replace lp
149
130
  Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
150
131
  end
151
132
 
152
133
  def test_dash_i_respects_default_library_extension_priority
153
- skip "extensions don't quite work on jruby" if Gem.java_platform?
134
+ pend "extensions don't quite work on jruby" if Gem.java_platform?
135
+ pend "not installed yet" unless RbConfig::TOPDIR
154
136
 
155
- dash_i_ext_arg = util_install_extension_file('a')
156
- dash_i_lib_arg = util_install_ruby_file('a')
137
+ dash_i_ext_arg = util_install_extension_file("a")
138
+ dash_i_lib_arg = util_install_ruby_file("a")
157
139
 
158
- lp = $LOAD_PATH.dup
159
-
160
- begin
161
- $LOAD_PATH.unshift dash_i_lib_arg
162
- $LOAD_PATH.unshift dash_i_ext_arg
163
- assert_require 'a'
164
- assert_match(/a\.rb$/, $LOADED_FEATURES.last)
165
- ensure
166
- $LOAD_PATH.replace lp
167
- end
140
+ $LOAD_PATH.unshift dash_i_lib_arg
141
+ $LOAD_PATH.unshift dash_i_ext_arg
142
+ assert_require "a"
143
+ assert_match(/a\.rb$/, $LOADED_FEATURES.last)
168
144
  end
169
145
 
170
146
  def test_concurrent_require
@@ -176,8 +152,8 @@ class TestGemRequire < Gem::TestCase
176
152
 
177
153
  install_specs a1, b1
178
154
 
179
- t1 = create_sync_thread{ assert_require "a#{$$}" }
180
- t2 = create_sync_thread{ assert_require "b#{$$}" }
155
+ t1 = create_sync_thread { assert_require "a#{$$}" }
156
+ t2 = create_sync_thread { assert_require "b#{$$}" }
181
157
 
182
158
  # wait until both files are waiting on the exit latch
183
159
  FILE_ENTERED_LATCH.await
@@ -193,47 +169,47 @@ class TestGemRequire < Gem::TestCase
193
169
  end
194
170
 
195
171
  def test_require_is_not_lazy_with_exact_req
196
- a1 = util_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb"
172
+ a1 = util_spec "a", "1", { "b" => "= 1" }, "lib/test_gem_require_a.rb"
197
173
  b1 = util_spec "b", "1", nil, "lib/b/c.rb"
198
174
  b2 = util_spec "b", "2", nil, "lib/b/c.rb"
199
175
 
200
176
  install_specs b1, b2, a1
201
177
 
202
- assert_require 'test_gem_require_a'
203
- assert_equal %w(a-1 b-1), loaded_spec_names
178
+ assert_require "test_gem_require_a"
179
+ assert_equal %w[a-1 b-1], loaded_spec_names
204
180
  assert_equal unresolved_names, []
205
181
 
206
182
  assert_require "b/c"
207
- assert_equal %w(a-1 b-1), loaded_spec_names
183
+ assert_equal %w[a-1 b-1], loaded_spec_names
208
184
  end
209
185
 
210
186
  def test_require_is_lazy_with_inexact_req
211
- a1 = util_spec "a", "1", {"b" => ">= 1"}, "lib/test_gem_require_a.rb"
187
+ a1 = util_spec "a", "1", { "b" => ">= 1" }, "lib/test_gem_require_a.rb"
212
188
  b1 = util_spec "b", "1", nil, "lib/b/c.rb"
213
189
  b2 = util_spec "b", "2", nil, "lib/b/c.rb"
214
190
 
215
191
  install_specs b1, b2, a1
216
192
 
217
- assert_require 'test_gem_require_a'
218
- assert_equal %w(a-1), loaded_spec_names
193
+ assert_require "test_gem_require_a"
194
+ assert_equal %w[a-1], loaded_spec_names
219
195
  assert_equal unresolved_names, ["b (>= 1)"]
220
196
 
221
197
  assert_require "b/c"
222
- assert_equal %w(a-1 b-2), loaded_spec_names
198
+ assert_equal %w[a-1 b-2], loaded_spec_names
223
199
  end
224
200
 
225
201
  def test_require_is_not_lazy_with_one_possible
226
- a1 = util_spec "a", "1", {"b" => ">= 1"}, "lib/test_gem_require_a.rb"
202
+ a1 = util_spec "a", "1", { "b" => ">= 1" }, "lib/test_gem_require_a.rb"
227
203
  b1 = util_spec "b", "1", nil, "lib/b/c.rb"
228
204
 
229
205
  install_specs b1, a1
230
206
 
231
- assert_require 'test_gem_require_a'
232
- assert_equal %w(a-1 b-1), loaded_spec_names
207
+ assert_require "test_gem_require_a"
208
+ assert_equal %w[a-1 b-1], loaded_spec_names
233
209
  assert_equal unresolved_names, []
234
210
 
235
211
  assert_require "b/c"
236
- assert_equal %w(a-1 b-1), loaded_spec_names
212
+ assert_equal %w[a-1 b-1], loaded_spec_names
237
213
  end
238
214
 
239
215
  def test_require_can_use_a_pathname_object
@@ -241,43 +217,88 @@ class TestGemRequire < Gem::TestCase
241
217
 
242
218
  install_specs a1
243
219
 
244
- assert_require Pathname.new 'test_gem_require_a'
245
- assert_equal %w(a-1), loaded_spec_names
220
+ assert_require Pathname.new "test_gem_require_a"
221
+ assert_equal %w[a-1], loaded_spec_names
246
222
  assert_equal unresolved_names, []
247
223
  end
248
224
 
249
225
  def test_activate_via_require_respects_loaded_files
250
- skip "Not sure what's going on. If another spec creates a 'a' gem before
226
+ pend "Not sure what's going on. If another spec creates a 'a' gem before
251
227
  this test, somehow require will load the benchmark in b, and ignore that the
252
228
  stdlib one is already in $LOADED_FEATURES?. Reproducible by running the
253
229
  spaceship_specific_file test before this one" if java_platform?
254
230
 
255
- lp = $LOAD_PATH.dup
256
- lib_dir = File.expand_path(File.join(File.dirname(__FILE__), "../../lib"))
257
- if File.exist?(lib_dir)
231
+ pend "not installed yet" unless RbConfig::TOPDIR
232
+
233
+ lib_dir = File.expand_path("../lib", __dir__)
234
+ rubylibdir = File.realdirpath(RbConfig::CONFIG["rubylibdir"])
235
+ if rubylibdir == lib_dir
236
+ # testing in the ruby repository where RubyGems' lib/ == stdlib lib/
237
+ # In that case we want to move the stdlib lib/ to still be after b-2 in $LOAD_PATH
238
+ lp = $LOAD_PATH.dup
258
239
  $LOAD_PATH.delete lib_dir
259
240
  $LOAD_PATH.push lib_dir
241
+ load_path_changed = true
260
242
  end
261
243
 
262
- a1 = util_spec "a", "1", {"b" => ">= 1"}, "lib/test_gem_require_a.rb"
244
+ require "benchmark" # the stdlib
245
+
246
+ a1 = util_spec "a", "1", { "b" => ">= 1" }, "lib/test_gem_require_a.rb"
263
247
  b1 = util_spec "b", "1", nil, "lib/benchmark.rb"
264
248
  b2 = util_spec "b", "2", nil, "lib/benchmark.rb"
265
249
 
266
250
  install_specs b1, b2, a1
267
251
 
268
- assert_require 'test_gem_require_a'
252
+ # Activates a-1, but not b-1 and b-2
253
+ assert_require "test_gem_require_a"
254
+ assert_equal %w[a-1], loaded_spec_names
255
+ assert $LOAD_PATH.include? a1.load_paths[0]
256
+ refute $LOAD_PATH.include? b1.load_paths[0]
257
+ refute $LOAD_PATH.include? b2.load_paths[0]
258
+
269
259
  assert_equal unresolved_names, ["b (>= 1)"]
270
260
 
271
- refute require('benchmark'), "benchmark should have already been loaded"
261
+ # The require('benchmark') below will activate b-2. However, its
262
+ # lib/benchmark.rb won't ever be loaded. The reason is MRI sees that even
263
+ # though b-2 is earlier in $LOAD_PATH it already loaded a benchmark.rb file
264
+ # and that still exists in $LOAD_PATH (further down),
265
+ # and as a result #gem_original_require returns false.
266
+ refute require("benchmark"), "the benchmark stdlib should be recognized as already loaded"
267
+
268
+ assert_includes $LOAD_PATH, b2.load_paths[0]
269
+ assert_includes $LOAD_PATH, rubylibdir
270
+ message = proc {
271
+ "this test relies on the b-2 gem lib/ to be before stdlib to make sense\n" +
272
+ $LOAD_PATH.pretty_inspect
273
+ }
274
+ assert_operator $LOAD_PATH.index(b2.load_paths[0]), :<, $LOAD_PATH.index(rubylibdir), message
272
275
 
273
276
  # We detected that we should activate b-2, so we did so, but
274
- # then original_require decided "I've already got benchmark.rb" loaded.
275
- # This case is fine because our lazy loading is provided exactly
277
+ # then #gem_original_require decided "I've already got some benchmark.rb" loaded.
278
+ # This case is fine because our lazy loading provided exactly
276
279
  # the same behavior as eager loading would have.
277
280
 
278
- assert_equal %w(a-1 b-2), loaded_spec_names
281
+ assert_equal %w[a-1 b-2], loaded_spec_names
279
282
  ensure
280
- $LOAD_PATH.replace lp unless java_platform?
283
+ $LOAD_PATH.replace lp if load_path_changed
284
+ end
285
+
286
+ def test_activate_via_require_respects_loaded_default_from_default_gems
287
+ a1 = new_default_spec "a", "1", nil, "a.rb"
288
+
289
+ # simulate requiring a default gem before rubygems is loaded
290
+ Kernel.send(:gem_original_require, "a")
291
+
292
+ # simulate registering default specs on loading rubygems
293
+ install_default_gems a1
294
+
295
+ a2 = util_spec "a", "2", nil, "lib/a.rb"
296
+
297
+ install_specs a2
298
+
299
+ refute_require "a"
300
+
301
+ assert_equal %w[a-1], loaded_spec_names
281
302
  end
282
303
 
283
304
  def test_already_activated_direct_conflict
@@ -291,12 +312,12 @@ class TestGemRequire < Gem::TestCase
291
312
 
292
313
  a1.activate
293
314
  c1.activate
294
- assert_equal %w(a-1 c-1), loaded_spec_names
315
+ assert_equal %w[a-1 c-1], loaded_spec_names
295
316
  assert_equal ["b (> 0)"], unresolved_names
296
317
 
297
318
  assert require("ib")
298
319
 
299
- assert_equal %w(a-1 b-1 c-1), loaded_spec_names
320
+ assert_equal %w[a-1 b-1 c-1], loaded_spec_names
300
321
  assert_equal [], unresolved_names
301
322
  end
302
323
 
@@ -313,10 +334,10 @@ class TestGemRequire < Gem::TestCase
313
334
 
314
335
  a1.activate
315
336
  c1.activate
316
- assert_equal %w(a-1 c-1), loaded_spec_names
337
+ assert_equal %w[a-1 c-1], loaded_spec_names
317
338
  assert_equal ["b (> 0)", "x (> 0)"], unresolved_names
318
339
 
319
- e = assert_raises(Gem::LoadError) do
340
+ e = assert_raise(Gem::LoadError) do
320
341
  require("ib")
321
342
  end
322
343
 
@@ -336,10 +357,10 @@ class TestGemRequire < Gem::TestCase
336
357
 
337
358
  a1.activate
338
359
  c1.activate
339
- assert_equal %w(a-1 c-1), loaded_spec_names
360
+ assert_equal %w[a-1 c-1], loaded_spec_names
340
361
  assert_equal ["b (> 0)"], unresolved_names
341
362
 
342
- e = assert_raises(Gem::LoadError) do
363
+ e = assert_raise(Gem::LoadError) do
343
364
  require("ib")
344
365
  end
345
366
 
@@ -357,31 +378,31 @@ class TestGemRequire < Gem::TestCase
357
378
 
358
379
  # Load default ruby gems fresh as if we've just started a ruby script.
359
380
  Gem::Specification.reset
360
- require 'rubygems'
381
+ require "rubygems"
361
382
  Gem::Specification.stubs
362
383
 
363
384
  # Remove an old default gem version directly from disk as if someone ran
364
385
  # gem cleanup.
365
- FileUtils.rm_rf(File.join @default_dir, "#{b1.full_name}")
366
- FileUtils.rm_rf(File.join @default_spec_dir, "#{b1.full_name}.gemspec")
386
+ FileUtils.rm_rf(File.join @gemhome, "#{b1.full_name}")
387
+ FileUtils.rm_rf(File.join @gemhome, "specifications", "default", "#{b1.full_name}.gemspec")
367
388
 
368
389
  # Require gems that have not been removed.
369
- assert_require 'a/b'
370
- assert_equal %w(a-1.0), loaded_spec_names
371
- assert_require 'b/d'
372
- assert_equal %w(a-1.0 b-2.0), loaded_spec_names
390
+ assert_require "a/b"
391
+ assert_equal %w[a-1.0], loaded_spec_names
392
+ assert_require "b/d"
393
+ assert_equal %w[a-1.0 b-2.0], loaded_spec_names
373
394
  end
374
395
 
375
396
  def test_require_doesnt_traverse_development_dependencies
376
397
  a = util_spec("a#{$$}", "1", nil, "lib/a#{$$}.rb")
377
398
  z = util_spec("z", "1", "w" => "> 0")
378
- w1 = util_spec("w", "1") { |s| s.add_development_dependency "non-existent" }
379
- w2 = util_spec("w", "2") { |s| s.add_development_dependency "non-existent" }
399
+ w1 = util_spec("w", "1") {|s| s.add_development_dependency "non-existent" }
400
+ w2 = util_spec("w", "2") {|s| s.add_development_dependency "non-existent" }
380
401
 
381
402
  install_specs a, w1, w2, z
382
403
 
383
404
  assert gem("z")
384
- assert_equal %w(z-1), loaded_spec_names
405
+ assert_equal %w[z-1], loaded_spec_names
385
406
  assert_equal ["w (> 0)"], unresolved_names
386
407
 
387
408
  assert require("a#{$$}")
@@ -390,15 +411,15 @@ class TestGemRequire < Gem::TestCase
390
411
  def test_default_gem_only
391
412
  default_gem_spec = new_default_spec("default", "2.0.0.0",
392
413
  nil, "default/gem.rb")
393
- install_default_specs(default_gem_spec)
414
+ install_default_gems(default_gem_spec)
394
415
  assert_require "default/gem"
395
- assert_equal %w(default-2.0.0.0), loaded_spec_names
416
+ assert_equal %w[default-2.0.0.0], loaded_spec_names
396
417
  end
397
418
 
398
419
  def test_default_gem_require_activates_just_once
399
420
  default_gem_spec = new_default_spec("default", "2.0.0.0",
400
421
  nil, "default/gem.rb")
401
- install_default_specs(default_gem_spec)
422
+ install_default_gems(default_gem_spec)
402
423
 
403
424
  assert_require "default/gem"
404
425
 
@@ -423,40 +444,90 @@ class TestGemRequire < Gem::TestCase
423
444
  end
424
445
 
425
446
  def test_realworld_default_gem
426
- testing_ruby_repo = !ENV["GEM_COMMAND"].nil?
427
- skip "this test can't work under ruby-core setup" if testing_ruby_repo || java_platform?
447
+ omit "this test can't work under ruby-core setup" if ruby_repo?
428
448
 
429
449
  cmd = <<-RUBY
430
450
  $stderr = $stdout
431
451
  require "json"
432
452
  puts Gem.loaded_specs["json"]
433
453
  RUBY
434
- output = Gem::Util.popen(Gem.ruby, "-e", cmd).strip
454
+ output = Gem::Util.popen(*ruby_with_rubygems_in_load_path, "-e", cmd).strip
455
+ assert $?.success?
435
456
  refute_empty output
436
457
  end
437
458
 
459
+ def test_realworld_upgraded_default_gem
460
+ omit "this test can't work under ruby-core setup" if ruby_repo?
461
+
462
+ newer_json = util_spec("json", "999.99.9", nil, ["lib/json.rb"])
463
+ install_gem newer_json
464
+
465
+ path = "#{@tempdir}/test_realworld_upgraded_default_gem.rb"
466
+ code = <<-RUBY
467
+ $stderr = $stdout
468
+ require "json"
469
+ puts Gem.loaded_specs["json"].version
470
+ puts $LOADED_FEATURES
471
+ RUBY
472
+ File.write(path, code)
473
+
474
+ output = Gem::Util.popen({ "GEM_HOME" => @gemhome }, *ruby_with_rubygems_in_load_path, path).strip
475
+ assert $?.success?
476
+ refute_empty output
477
+ assert_equal "999.99.9", output.lines[0].chomp
478
+ # Make sure only files from the newer json gem are loaded, and no files from the default json gem
479
+ assert_equal ["#{@gemhome}/gems/json-999.99.9/lib/json.rb"], output.lines.grep(%r{/gems/json-}).map(&:chomp)
480
+ end
481
+
438
482
  def test_default_gem_and_normal_gem
439
483
  default_gem_spec = new_default_spec("default", "2.0.0.0",
440
484
  nil, "default/gem.rb")
441
- install_default_specs(default_gem_spec)
485
+ install_default_gems(default_gem_spec)
442
486
  normal_gem_spec = util_spec("default", "3.0", nil,
443
487
  "lib/default/gem.rb")
444
488
  install_specs(normal_gem_spec)
445
489
  assert_require "default/gem"
446
- assert_equal %w(default-3.0), loaded_spec_names
490
+ assert_equal %w[default-3.0], loaded_spec_names
491
+ end
492
+
493
+ def test_normal_gems_with_overridden_load_error_message
494
+ normal_gem_spec = util_spec("normal", "3.0", nil, "lib/normal/gem.rb")
495
+
496
+ install_specs(normal_gem_spec)
497
+
498
+ File.write("require_with_overridden_load_error_message.rb", <<-RUBY)
499
+ LoadError.class_eval do
500
+ def message
501
+ "Overridden message"
502
+ end
503
+ end
504
+
505
+ require 'normal/gem'
506
+ RUBY
507
+
508
+ require "open3"
509
+
510
+ output, exit_status = Open3.capture2e(
511
+ { "GEM_HOME" => Gem.paths.home },
512
+ *ruby_with_rubygems_in_load_path,
513
+ "-r",
514
+ "./require_with_overridden_load_error_message.rb"
515
+ )
516
+
517
+ assert exit_status.success?, "Require failed due to #{output}"
447
518
  end
448
519
 
449
520
  def test_default_gem_prerelease
450
521
  default_gem_spec = new_default_spec("default", "2.0.0",
451
522
  nil, "default/gem.rb")
452
- install_default_specs(default_gem_spec)
523
+ install_default_gems(default_gem_spec)
453
524
 
454
525
  normal_gem_higher_prerelease_spec = util_spec("default", "3.0.0.rc2", nil,
455
526
  "lib/default/gem.rb")
456
- install_default_specs(normal_gem_higher_prerelease_spec)
527
+ install_default_gems(normal_gem_higher_prerelease_spec)
457
528
 
458
529
  assert_require "default/gem"
459
- assert_equal %w(default-3.0.0.rc2), loaded_spec_names
530
+ assert_equal %w[default-3.0.0.rc2], loaded_spec_names
460
531
  end
461
532
 
462
533
  def loaded_spec_names
@@ -470,23 +541,19 @@ class TestGemRequire < Gem::TestCase
470
541
  def test_try_activate_error_unlocks_require_monitor
471
542
  silence_warnings do
472
543
  class << ::Gem
473
-
474
544
  alias old_try_activate try_activate
475
- def try_activate(*); raise 'raised from try_activate'; end
476
-
545
+ def try_activate(*); raise "raised from try_activate"; end
477
546
  end
478
547
  end
479
548
 
480
- require 'does_not_exist_for_try_activate_test'
549
+ require "does_not_exist_for_try_activate_test"
481
550
  rescue RuntimeError => e
482
551
  assert_match(/raised from try_activate/, e.message)
483
552
  assert Kernel::RUBYGEMS_ACTIVATION_MONITOR.try_enter, "require monitor was not unlocked when try_activate raised"
484
553
  ensure
485
554
  silence_warnings do
486
555
  class << ::Gem
487
-
488
556
  alias try_activate old_try_activate
489
-
490
557
  end
491
558
  end
492
559
  Kernel::RUBYGEMS_ACTIVATION_MONITOR.exit
@@ -495,14 +562,14 @@ class TestGemRequire < Gem::TestCase
495
562
  def test_require_when_gem_defined
496
563
  default_gem_spec = new_default_spec("default", "2.0.0.0",
497
564
  nil, "default/gem.rb")
498
- install_default_specs(default_gem_spec)
565
+ install_default_gems(default_gem_spec)
499
566
  c = Class.new do
500
567
  def self.gem(*args)
501
568
  raise "received #gem with #{args.inspect}"
502
569
  end
503
570
  end
504
571
  assert c.send(:require, "default/gem")
505
- assert_equal %w(default-2.0.0.0), loaded_spec_names
572
+ assert_equal %w[default-2.0.0.0], loaded_spec_names
506
573
  end
507
574
 
508
575
  def test_require_default_when_gem_defined
@@ -514,89 +581,96 @@ class TestGemRequire < Gem::TestCase
514
581
  end
515
582
  end
516
583
  assert c.send(:require, "a#{$$}")
517
- assert_equal %W(a#{$$}-1), loaded_spec_names
584
+ assert_equal %W[a#{$$}-1], loaded_spec_names
518
585
  end
519
586
 
520
587
  def test_require_bundler
521
- b1 = util_spec('bundler', '1', nil, "lib/bundler/setup.rb")
522
- b2a = util_spec('bundler', '2.a', nil, "lib/bundler/setup.rb")
588
+ b1 = util_spec("bundler", "1", nil, "lib/bundler/setup.rb")
589
+ b2a = util_spec("bundler", "2.a", nil, "lib/bundler/setup.rb")
523
590
  install_specs b1, b2a
524
591
 
525
592
  require "rubygems/bundler_version_finder"
526
593
  $:.clear
527
- assert_require 'bundler/setup'
594
+ assert_require "bundler/setup"
528
595
  assert_equal %w[bundler-2.a], loaded_spec_names
529
596
  assert_empty unresolved_names
530
597
  end
531
598
 
532
- def test_require_bundler_missing_bundler_version
533
- Gem::BundlerVersionFinder.stub(:bundler_version_with_reason, ["55", "reason"]) do
534
- b1 = util_spec('bundler', '1.999999999', nil, "lib/bundler/setup.rb")
535
- b2a = util_spec('bundler', '2.a', nil, "lib/bundler/setup.rb")
536
- install_specs b1, b2a
537
-
538
- e = assert_raises Gem::MissingSpecVersionError do
539
- gem('bundler')
540
- end
541
- assert_match "Could not find 'bundler' (55) required by reason.", e.message
542
- end
543
- end
544
-
545
- def test_require_bundler_with_bundler_version
546
- Gem::BundlerVersionFinder.stub(:bundler_version_with_reason, ["1", "reason"]) do
547
- b1 = util_spec('bundler', '1.999999999', nil, "lib/bundler/setup.rb")
548
- b2 = util_spec('bundler', '2', nil, "lib/bundler/setup.rb")
549
- install_specs b1, b2
550
-
551
- $:.clear
552
- assert_require 'bundler/setup'
553
- assert_equal %w[bundler-1.999999999], loaded_spec_names
554
- end
555
- end
556
-
557
599
  # uplevel is 2.5+ only
558
600
  if RUBY_VERSION >= "2.5"
559
601
  ["", "Kernel."].each do |prefix|
560
602
  define_method "test_no_kernel_require_in_#{prefix.tr(".", "_")}warn_with_uplevel" do
561
- lib = File.realpath("../../../lib", __FILE__)
562
603
  Dir.mktmpdir("warn_test") do |dir|
563
604
  File.write(dir + "/sub.rb", "#{prefix}warn 'uplevel', 'test', uplevel: 1\n")
564
605
  File.write(dir + "/main.rb", "require 'sub'\n")
565
606
  _, err = capture_subprocess_io do
566
- system(@@ruby, "-w", "--disable=gems", "-I", lib, "-C", dir, "-I.", "main.rb")
607
+ system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "-I", dir, "main.rb")
567
608
  end
568
609
  assert_match(/main\.rb:1: warning: uplevel\ntest\n$/, err)
569
610
  _, err = capture_subprocess_io do
570
- system(@@ruby, "-w", "--enable=gems", "-I", lib, "-C", dir, "-I.", "main.rb")
611
+ system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "-I", dir, "main.rb")
571
612
  end
572
613
  assert_match(/main\.rb:1: warning: uplevel\ntest\n$/, err)
573
614
  end
574
615
  end
575
616
 
576
617
  define_method "test_no_other_behavioral_changes_with_#{prefix.tr(".", "_")}warn" do
577
- lib = File.realpath("../../../lib", __FILE__)
578
618
  Dir.mktmpdir("warn_test") do |dir|
579
619
  File.write(dir + "/main.rb", "#{prefix}warn({x:1}, {y:2}, [])\n")
580
620
  _, err = capture_subprocess_io do
581
- system(@@ruby, "-w", "--disable=gems", "-I", lib, "-C", dir, "main.rb")
621
+ system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "main.rb")
582
622
  end
583
623
  assert_match(/{:x=>1}\n{:y=>2}\n$/, err)
584
624
  _, err = capture_subprocess_io do
585
- system(@@ruby, "-w", "--enable=gems", "-I", lib, "-C", dir, "main.rb")
625
+ system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "main.rb")
586
626
  end
587
627
  assert_match(/{:x=>1}\n{:y=>2}\n$/, err)
588
628
  end
589
629
  end
590
630
  end
591
- end
592
631
 
593
- def silence_warnings
594
- old_verbose, $VERBOSE = $VERBOSE, false
595
- yield
596
- ensure
597
- $VERBOSE = old_verbose
632
+ def test_no_crash_when_overriding_warn_with_warning_module
633
+ Dir.mktmpdir("warn_test") do |dir|
634
+ File.write(dir + "/main.rb", "module Warning; def warn(str); super; end; end; warn 'Foo Bar'")
635
+ _, err = capture_subprocess_io do
636
+ system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "main.rb")
637
+ end
638
+ assert_match(/Foo Bar\n$/, err)
639
+ _, err = capture_subprocess_io do
640
+ system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "main.rb")
641
+ end
642
+ assert_match(/Foo Bar\n$/, err)
643
+ end
644
+ end
645
+
646
+ def test_expected_backtrace_location_when_inheriting_from_basic_object_and_including_kernel
647
+ Dir.mktmpdir("warn_test") do |dir|
648
+ File.write(dir + "/main.rb", "\nrequire 'sub'\n")
649
+ File.write(dir + "/sub.rb", <<-'RUBY')
650
+ require 'rubygems'
651
+ class C < BasicObject
652
+ include ::Kernel
653
+ def deprecated
654
+ warn "This is a deprecated method", uplevel: 2
655
+ end
656
+ end
657
+ C.new.deprecated
658
+ RUBY
659
+
660
+ _, err = capture_subprocess_io do
661
+ system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "-I", dir, "main.rb")
662
+ end
663
+ assert_match(/main\.rb:2: warning: This is a deprecated method$/, err)
664
+ _, err = capture_subprocess_io do
665
+ system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "-I", dir, "main.rb")
666
+ end
667
+ assert_match(/main\.rb:2: warning: This is a deprecated method$/, err)
668
+ end
669
+ end
598
670
  end
599
671
 
672
+ private
673
+
600
674
  def util_install_extension_file(name)
601
675
  spec = quick_gem name
602
676
  util_build_gem spec
@@ -621,12 +695,12 @@ class TestGemRequire < Gem::TestCase
621
695
  spec.files += ["extconf.rb", "depend", "#{name}.c"]
622
696
 
623
697
  so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}")
624
- refute_path_exists so
698
+ assert_path_not_exist so
625
699
 
626
700
  path = Gem::Package.build spec
627
701
  installer = Gem::Installer.at path
628
702
  installer.install
629
- assert_path_exists so
703
+ assert_path_exist so
630
704
 
631
705
  spec.gem_dir
632
706
  end
@@ -638,9 +712,8 @@ class TestGemRequire < Gem::TestCase
638
712
  a_rb = File.join dash_i_lib_arg, "#{name}.rb"
639
713
 
640
714
  FileUtils.mkdir_p File.dirname a_rb
641
- File.open(a_rb, 'w') { |f| f.write "# #{name}.rb" }
715
+ File.open(a_rb, "w") {|f| f.write "# #{name}.rb" }
642
716
 
643
717
  dash_i_lib_arg
644
718
  end
645
-
646
719
  end