rubygems-update 3.0.6 → 3.2.14

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 (628) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +1100 -436
  3. data/CODE_OF_CONDUCT.md +55 -19
  4. data/CONTRIBUTING.md +37 -10
  5. data/MAINTAINERS.txt +1 -6
  6. data/Manifest.txt +104 -64
  7. data/POLICIES.md +6 -12
  8. data/README.md +6 -6
  9. data/Rakefile +121 -111
  10. data/bin/gem +0 -6
  11. data/bin/update_rubygems +2 -2
  12. data/bundler/CHANGELOG.md +1788 -1251
  13. data/bundler/LICENSE.md +18 -19
  14. data/bundler/README.md +9 -10
  15. data/bundler/UPGRADING.md +215 -0
  16. data/bundler/bundler.gemspec +9 -26
  17. data/bundler/exe/bundle +22 -3
  18. data/bundler/lib/bundler.rb +233 -94
  19. data/bundler/lib/bundler/build_metadata.rb +5 -13
  20. data/bundler/lib/bundler/capistrano.rb +4 -4
  21. data/bundler/lib/bundler/cli.rb +221 -148
  22. data/bundler/lib/bundler/cli/add.rb +28 -16
  23. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  24. data/bundler/lib/bundler/cli/cache.rb +24 -17
  25. data/bundler/lib/bundler/cli/clean.rb +1 -1
  26. data/bundler/lib/bundler/cli/common.rb +25 -12
  27. data/bundler/lib/bundler/cli/config.rb +161 -86
  28. data/bundler/lib/bundler/cli/console.rb +1 -1
  29. data/bundler/lib/bundler/cli/doctor.rb +5 -5
  30. data/bundler/lib/bundler/cli/exec.rb +8 -20
  31. data/bundler/lib/bundler/cli/fund.rb +36 -0
  32. data/bundler/lib/bundler/cli/gem.rb +125 -32
  33. data/bundler/lib/bundler/cli/info.rb +29 -6
  34. data/bundler/lib/bundler/cli/init.rb +2 -2
  35. data/bundler/lib/bundler/cli/inject.rb +1 -1
  36. data/bundler/lib/bundler/cli/install.rb +27 -23
  37. data/bundler/lib/bundler/cli/issue.rb +5 -5
  38. data/bundler/lib/bundler/cli/list.rb +12 -10
  39. data/bundler/lib/bundler/cli/open.rb +10 -6
  40. data/bundler/lib/bundler/cli/outdated.rb +134 -109
  41. data/bundler/lib/bundler/cli/plugin.rb +19 -2
  42. data/bundler/lib/bundler/cli/pristine.rb +6 -1
  43. data/bundler/lib/bundler/cli/show.rb +2 -2
  44. data/bundler/lib/bundler/cli/update.rb +34 -12
  45. data/bundler/lib/bundler/compact_index_client.rb +26 -10
  46. data/bundler/lib/bundler/compact_index_client/cache.rb +6 -14
  47. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  48. data/bundler/lib/bundler/compact_index_client/updater.rb +8 -20
  49. data/bundler/lib/bundler/current_ruby.rb +9 -7
  50. data/bundler/lib/bundler/definition.rb +133 -132
  51. data/bundler/lib/bundler/dep_proxy.rb +16 -9
  52. data/bundler/lib/bundler/dependency.rb +19 -14
  53. data/bundler/lib/bundler/deployment.rb +1 -1
  54. data/bundler/lib/bundler/dsl.rb +54 -71
  55. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  56. data/bundler/lib/bundler/env.rb +9 -14
  57. data/bundler/lib/bundler/environment_preserver.rb +26 -3
  58. data/bundler/lib/bundler/errors.rb +1 -0
  59. data/bundler/lib/bundler/feature_flag.rb +19 -34
  60. data/bundler/lib/bundler/fetcher.rb +19 -16
  61. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  62. data/bundler/lib/bundler/fetcher/compact_index.rb +27 -13
  63. data/bundler/lib/bundler/fetcher/dependency.rb +1 -1
  64. data/bundler/lib/bundler/fetcher/downloader.rb +6 -3
  65. data/bundler/lib/bundler/fetcher/index.rb +8 -7
  66. data/bundler/lib/bundler/friendly_errors.rb +27 -19
  67. data/bundler/lib/bundler/gem_helper.rb +68 -37
  68. data/bundler/lib/bundler/gem_helpers.rb +38 -29
  69. data/bundler/lib/bundler/gem_tasks.rb +1 -1
  70. data/bundler/lib/bundler/gem_version_promoter.rb +5 -5
  71. data/bundler/lib/bundler/graph.rb +3 -3
  72. data/bundler/lib/bundler/index.rb +12 -7
  73. data/bundler/lib/bundler/injector.rb +32 -12
  74. data/bundler/lib/bundler/inline.rb +41 -30
  75. data/bundler/lib/bundler/installer.rb +41 -60
  76. data/bundler/lib/bundler/installer/gem_installer.rb +8 -4
  77. data/bundler/lib/bundler/installer/parallel_installer.rb +20 -26
  78. data/bundler/lib/bundler/installer/standalone.rb +18 -4
  79. data/bundler/lib/bundler/lazy_specification.rb +41 -27
  80. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  81. data/bundler/lib/bundler/lockfile_parser.rb +16 -33
  82. data/bundler/lib/bundler/{ssl_certs → man}/.document +0 -0
  83. data/bundler/lib/bundler/man/bundle-add.1 +66 -0
  84. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +7 -1
  85. data/bundler/lib/bundler/man/bundle-binstubs.1 +42 -0
  86. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
  87. data/bundler/lib/bundler/man/bundle-cache.1 +55 -0
  88. data/bundler/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +15 -15
  89. data/bundler/lib/bundler/man/bundle-check.1 +31 -0
  90. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  91. data/bundler/lib/bundler/man/bundle-clean.1 +24 -0
  92. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  93. data/bundler/lib/bundler/man/bundle-config.1 +488 -0
  94. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +59 -67
  95. data/bundler/lib/bundler/man/bundle-doctor.1 +44 -0
  96. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  97. data/bundler/lib/bundler/man/bundle-exec.1 +165 -0
  98. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +1 -1
  99. data/bundler/lib/bundler/man/bundle-gem.1 +102 -0
  100. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
  101. data/bundler/lib/bundler/man/bundle-info.1 +20 -0
  102. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  103. data/bundler/lib/bundler/man/bundle-init.1 +25 -0
  104. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +1 -1
  105. data/bundler/lib/bundler/man/bundle-inject.1 +33 -0
  106. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  107. data/bundler/lib/bundler/man/bundle-install.1 +338 -0
  108. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +34 -7
  109. data/bundler/lib/bundler/man/bundle-list.1 +50 -0
  110. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  111. data/bundler/lib/bundler/man/bundle-lock.1 +84 -0
  112. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  113. data/bundler/lib/bundler/man/bundle-open.1 +32 -0
  114. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  115. data/bundler/lib/bundler/man/bundle-outdated.1 +155 -0
  116. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  117. data/bundler/lib/bundler/man/bundle-platform.1 +61 -0
  118. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  119. data/bundler/lib/bundler/man/bundle-pristine.1 +34 -0
  120. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  121. data/bundler/lib/bundler/man/bundle-remove.1 +31 -0
  122. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  123. data/bundler/lib/bundler/man/bundle-show.1 +23 -0
  124. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  125. data/bundler/lib/bundler/man/bundle-update.1 +394 -0
  126. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +3 -3
  127. data/bundler/lib/bundler/man/bundle-viz.1 +39 -0
  128. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  129. data/bundler/lib/bundler/man/bundle.1 +136 -0
  130. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +2 -2
  131. data/bundler/lib/bundler/man/gemfile.5 +686 -0
  132. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +16 -20
  133. data/bundler/lib/bundler/man/index.txt +25 -0
  134. data/bundler/lib/bundler/match_platform.rb +1 -1
  135. data/bundler/lib/bundler/mirror.rb +5 -5
  136. data/bundler/lib/bundler/plugin.rb +75 -36
  137. data/bundler/lib/bundler/plugin/api.rb +1 -1
  138. data/bundler/lib/bundler/plugin/api/source.rb +12 -7
  139. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  140. data/bundler/lib/bundler/plugin/index.rb +24 -4
  141. data/bundler/lib/bundler/plugin/installer.rb +33 -22
  142. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  143. data/bundler/lib/bundler/plugin/source_list.rb +5 -1
  144. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  145. data/bundler/lib/bundler/remote_specification.rb +5 -4
  146. data/bundler/lib/bundler/resolver.rb +191 -87
  147. data/bundler/lib/bundler/resolver/spec_group.rb +76 -48
  148. data/bundler/lib/bundler/retry.rb +3 -3
  149. data/bundler/lib/bundler/ruby_version.rb +5 -20
  150. data/bundler/lib/bundler/rubygems_ext.rb +76 -72
  151. data/bundler/lib/bundler/rubygems_gem_installer.rb +47 -13
  152. data/bundler/lib/bundler/rubygems_integration.rb +159 -444
  153. data/bundler/lib/bundler/runtime.rb +6 -23
  154. data/bundler/lib/bundler/settings.rb +67 -93
  155. data/bundler/lib/bundler/setup.rb +11 -12
  156. data/bundler/lib/bundler/shared_helpers.rb +54 -80
  157. data/bundler/lib/bundler/similarity_detector.rb +3 -3
  158. data/bundler/lib/bundler/source.rb +12 -6
  159. data/bundler/lib/bundler/source/git.rb +47 -38
  160. data/bundler/lib/bundler/source/git/git_proxy.rb +101 -102
  161. data/bundler/lib/bundler/source/metadata.rb +7 -6
  162. data/bundler/lib/bundler/source/path.rb +20 -11
  163. data/bundler/lib/bundler/source/path/installer.rb +10 -10
  164. data/bundler/lib/bundler/source/rubygems.rb +56 -29
  165. data/bundler/lib/bundler/source/rubygems/remote.rb +3 -4
  166. data/bundler/lib/bundler/source_list.rb +32 -30
  167. data/bundler/lib/bundler/spec_set.rb +37 -25
  168. data/bundler/lib/bundler/stub_specification.rb +40 -34
  169. data/bundler/lib/bundler/templates/Executable.bundler +23 -14
  170. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  171. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  172. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +16 -2
  173. data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -5
  174. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  175. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  176. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  177. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  178. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  179. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  180. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  181. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  182. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +18 -31
  183. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  184. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  185. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  186. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  187. data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  188. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  189. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  190. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -1
  191. data/bundler/lib/bundler/ui.rb +3 -3
  192. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  193. data/bundler/lib/bundler/ui/shell.rb +7 -11
  194. data/bundler/lib/bundler/uri_credentials_filter.rb +10 -4
  195. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
  196. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
  197. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
  198. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  199. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +273 -147
  200. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +5 -6
  201. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
  202. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +36 -4
  203. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  204. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  205. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  206. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  207. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
  208. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  209. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +3 -3
  210. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +39 -11
  211. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +4 -4
  212. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  213. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +11 -0
  214. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +53 -51
  215. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
  216. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
  217. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  218. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  219. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  220. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +16 -9
  221. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +28 -13
  222. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  223. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
  224. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
  225. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +20 -9
  226. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +19 -8
  227. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
  228. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
  229. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +78 -0
  230. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  231. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
  232. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  233. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  234. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  235. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  236. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  237. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
  238. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
  239. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +21 -5
  240. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  241. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
  242. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
  243. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +65 -8
  244. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
  245. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
  246. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
  247. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  248. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  249. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  250. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +744 -0
  251. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +94 -0
  252. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  253. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1568 -0
  254. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +88 -0
  255. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  256. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  257. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +21 -0
  258. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +294 -0
  259. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  260. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +125 -0
  261. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  262. data/bundler/lib/bundler/vendored_fileutils.rb +1 -6
  263. data/bundler/lib/bundler/vendored_molinillo.rb +1 -1
  264. data/bundler/lib/bundler/vendored_persistent.rb +7 -12
  265. data/bundler/lib/bundler/vendored_thor.rb +2 -2
  266. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  267. data/bundler/lib/bundler/vendored_uri.rb +4 -0
  268. data/bundler/lib/bundler/version.rb +1 -20
  269. data/bundler/lib/bundler/version_ranges.rb +51 -5
  270. data/bundler/lib/bundler/vlad.rb +2 -2
  271. data/bundler/lib/bundler/worker.rb +2 -4
  272. data/bundler/lib/bundler/yaml_serializer.rb +3 -4
  273. data/lib/rubygems.rb +198 -222
  274. data/lib/rubygems/available_set.rb +4 -5
  275. data/lib/rubygems/basic_specification.rb +32 -19
  276. data/lib/rubygems/bundler_version_finder.rb +19 -9
  277. data/lib/rubygems/command.rb +73 -21
  278. data/lib/rubygems/command_manager.rb +5 -12
  279. data/lib/rubygems/commands/build_command.rb +51 -18
  280. data/lib/rubygems/commands/cert_command.rb +2 -11
  281. data/lib/rubygems/commands/check_command.rb +0 -2
  282. data/lib/rubygems/commands/cleanup_command.rb +17 -13
  283. data/lib/rubygems/commands/contents_command.rb +7 -9
  284. data/lib/rubygems/commands/dependency_command.rb +9 -10
  285. data/lib/rubygems/commands/environment_command.rb +1 -6
  286. data/lib/rubygems/commands/fetch_command.rb +2 -4
  287. data/lib/rubygems/commands/generate_index_command.rb +3 -2
  288. data/lib/rubygems/commands/help_command.rb +4 -4
  289. data/lib/rubygems/commands/info_command.rb +9 -4
  290. data/lib/rubygems/commands/install_command.rb +12 -54
  291. data/lib/rubygems/commands/list_command.rb +8 -7
  292. data/lib/rubygems/commands/lock_command.rb +3 -5
  293. data/lib/rubygems/commands/mirror_command.rb +0 -1
  294. data/lib/rubygems/commands/open_command.rb +1 -4
  295. data/lib/rubygems/commands/outdated_command.rb +0 -1
  296. data/lib/rubygems/commands/owner_command.rb +10 -10
  297. data/lib/rubygems/commands/pristine_command.rb +13 -9
  298. data/lib/rubygems/commands/push_command.rb +12 -51
  299. data/lib/rubygems/commands/query_command.rb +14 -330
  300. data/lib/rubygems/commands/rdoc_command.rb +0 -1
  301. data/lib/rubygems/commands/search_command.rb +7 -7
  302. data/lib/rubygems/commands/server_command.rb +3 -1
  303. data/lib/rubygems/commands/setup_command.rb +143 -101
  304. data/lib/rubygems/commands/signin_command.rb +0 -1
  305. data/lib/rubygems/commands/signout_command.rb +0 -2
  306. data/lib/rubygems/commands/sources_command.rb +22 -6
  307. data/lib/rubygems/commands/specification_command.rb +8 -3
  308. data/lib/rubygems/commands/stale_command.rb +1 -1
  309. data/lib/rubygems/commands/uninstall_command.rb +2 -3
  310. data/lib/rubygems/commands/unpack_command.rb +3 -32
  311. data/lib/rubygems/commands/update_command.rb +73 -28
  312. data/lib/rubygems/commands/which_command.rb +0 -1
  313. data/lib/rubygems/commands/yank_command.rb +10 -7
  314. data/lib/rubygems/compatibility.rb +4 -4
  315. data/lib/rubygems/config_file.rb +48 -27
  316. data/lib/rubygems/core_ext/kernel_gem.rb +7 -6
  317. data/lib/rubygems/core_ext/kernel_require.rb +44 -6
  318. data/lib/rubygems/core_ext/kernel_warn.rb +22 -13
  319. data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
  320. data/lib/rubygems/defaults.rb +110 -23
  321. data/lib/rubygems/dependency.rb +28 -14
  322. data/lib/rubygems/dependency_installer.rb +11 -166
  323. data/lib/rubygems/dependency_list.rb +17 -18
  324. data/lib/rubygems/deprecate.rb +51 -6
  325. data/lib/rubygems/doctor.rb +4 -4
  326. data/lib/rubygems/errors.rb +5 -7
  327. data/lib/rubygems/exceptions.rb +2 -24
  328. data/lib/rubygems/ext.rb +6 -6
  329. data/lib/rubygems/ext/build_error.rb +2 -0
  330. data/lib/rubygems/ext/builder.rb +45 -82
  331. data/lib/rubygems/ext/cmake_builder.rb +6 -7
  332. data/lib/rubygems/ext/configure_builder.rb +5 -8
  333. data/lib/rubygems/ext/ext_conf_builder.rb +27 -23
  334. data/lib/rubygems/ext/rake_builder.rb +4 -6
  335. data/lib/rubygems/gem_runner.rb +3 -10
  336. data/lib/rubygems/gemcutter_utilities.rb +111 -37
  337. data/lib/rubygems/indexer.rb +9 -26
  338. data/lib/rubygems/install_update_options.rb +7 -7
  339. data/lib/rubygems/installer.rb +91 -98
  340. data/lib/rubygems/installer_test_case.rb +104 -42
  341. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  342. data/lib/rubygems/local_remote_options.rb +1 -1
  343. data/lib/rubygems/mock_gem_ui.rb +1 -4
  344. data/lib/rubygems/name_tuple.rb +4 -7
  345. data/lib/rubygems/openssl.rb +7 -0
  346. data/lib/rubygems/package.rb +49 -32
  347. data/lib/rubygems/package/digest_io.rb +0 -2
  348. data/lib/rubygems/package/file_source.rb +0 -2
  349. data/lib/rubygems/package/io_source.rb +0 -2
  350. data/lib/rubygems/package/old.rb +1 -3
  351. data/lib/rubygems/package/tar_header.rb +4 -6
  352. data/lib/rubygems/package/tar_reader.rb +15 -12
  353. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  354. data/lib/rubygems/package/tar_test_case.rb +2 -4
  355. data/lib/rubygems/package/tar_writer.rb +6 -16
  356. data/lib/rubygems/package_task.rb +1 -7
  357. data/lib/rubygems/path_support.rb +2 -2
  358. data/lib/rubygems/platform.rb +22 -16
  359. data/lib/rubygems/query_utils.rb +353 -0
  360. data/lib/rubygems/rdoc.rb +0 -12
  361. data/lib/rubygems/remote_fetcher.rb +33 -59
  362. data/lib/rubygems/request.rb +11 -14
  363. data/lib/rubygems/request/connection_pools.rb +3 -7
  364. data/lib/rubygems/request/http_pool.rb +0 -1
  365. data/lib/rubygems/request_set.rb +10 -23
  366. data/lib/rubygems/request_set/gem_dependency_api.rb +9 -11
  367. data/lib/rubygems/request_set/lockfile.rb +13 -12
  368. data/lib/rubygems/request_set/lockfile/parser.rb +2 -2
  369. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -1
  370. data/lib/rubygems/requirement.rb +36 -35
  371. data/lib/rubygems/resolver.rb +20 -16
  372. data/lib/rubygems/resolver/activation_request.rb +27 -51
  373. data/lib/rubygems/resolver/api_set.rb +31 -24
  374. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  375. data/lib/rubygems/resolver/api_specification.rb +24 -10
  376. data/lib/rubygems/resolver/best_set.rb +4 -6
  377. data/lib/rubygems/resolver/composed_set.rb +3 -5
  378. data/lib/rubygems/resolver/conflict.rb +2 -9
  379. data/lib/rubygems/resolver/current_set.rb +0 -2
  380. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  381. data/lib/rubygems/resolver/git_set.rb +0 -2
  382. data/lib/rubygems/resolver/git_specification.rb +0 -2
  383. data/lib/rubygems/resolver/index_set.rb +1 -3
  384. data/lib/rubygems/resolver/index_specification.rb +32 -2
  385. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  386. data/lib/rubygems/resolver/installer_set.rb +63 -16
  387. data/lib/rubygems/resolver/local_specification.rb +0 -2
  388. data/lib/rubygems/resolver/lock_set.rb +3 -5
  389. data/lib/rubygems/resolver/lock_specification.rb +2 -4
  390. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  391. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  392. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
  393. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -6
  394. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  395. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  396. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  397. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  398. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  399. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  400. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  401. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  402. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
  403. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +76 -8
  404. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  405. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +12 -0
  406. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  407. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -165
  408. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  409. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  410. data/lib/rubygems/resolver/requirement_list.rb +0 -1
  411. data/lib/rubygems/resolver/set.rb +0 -2
  412. data/lib/rubygems/resolver/source_set.rb +0 -2
  413. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  414. data/lib/rubygems/resolver/specification.rb +13 -2
  415. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  416. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  417. data/lib/rubygems/s3_uri_signer.rb +15 -13
  418. data/lib/rubygems/safe_yaml.rb +4 -4
  419. data/lib/rubygems/security.rb +27 -34
  420. data/lib/rubygems/security/policy.rb +4 -8
  421. data/lib/rubygems/security/signer.rb +8 -9
  422. data/lib/rubygems/security/trust_dir.rb +1 -3
  423. data/lib/rubygems/server.rb +20 -16
  424. data/lib/rubygems/source.rb +30 -13
  425. data/lib/rubygems/source/git.rb +7 -8
  426. data/lib/rubygems/source/installed.rb +0 -2
  427. data/lib/rubygems/source/local.rb +2 -4
  428. data/lib/rubygems/source/lock.rb +0 -2
  429. data/lib/rubygems/source/specific_file.rb +0 -2
  430. data/lib/rubygems/source/vendor.rb +0 -2
  431. data/lib/rubygems/source_list.rb +6 -6
  432. data/lib/rubygems/spec_fetcher.rb +22 -34
  433. data/lib/rubygems/specification.rb +207 -278
  434. data/lib/rubygems/specification_policy.rb +135 -57
  435. data/{bundler/lib/bundler/ssl_certs/index.rubygems.org → lib/rubygems/ssl_certs/rubygems.org}/GlobalSignRootCA.pem +0 -0
  436. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  437. data/lib/rubygems/stub_specification.rb +4 -5
  438. data/lib/rubygems/test_case.rb +221 -341
  439. data/lib/rubygems/test_utilities.rb +22 -18
  440. data/lib/rubygems/text.rb +2 -3
  441. data/lib/rubygems/uninstaller.rb +49 -30
  442. data/lib/rubygems/uri_formatter.rb +2 -4
  443. data/lib/rubygems/uri_parser.rb +34 -0
  444. data/lib/rubygems/uri_parsing.rb +23 -0
  445. data/lib/rubygems/user_interaction.rb +3 -20
  446. data/lib/rubygems/util.rb +20 -44
  447. data/lib/rubygems/util/licenses.rb +400 -400
  448. data/lib/rubygems/validator.rb +9 -31
  449. data/lib/rubygems/version.rb +29 -21
  450. data/lib/rubygems/version_option.rb +6 -0
  451. data/rubygems-update.gemspec +4 -11
  452. data/setup.rb +2 -7
  453. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  454. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  455. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  456. data/test/rubygems/rubygems_plugin.rb +0 -2
  457. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  458. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  459. data/test/rubygems/test_bundled_ca.rb +42 -45
  460. data/test/rubygems/test_config.rb +0 -2
  461. data/test/rubygems/test_deprecate.rb +41 -5
  462. data/test/rubygems/test_gem.rb +405 -236
  463. data/test/rubygems/test_gem_available_set.rb +5 -6
  464. data/test/rubygems/test_gem_bundler_version_finder.rb +20 -2
  465. data/test/rubygems/test_gem_command.rb +144 -9
  466. data/test/rubygems/test_gem_command_manager.rb +40 -17
  467. data/test/rubygems/test_gem_commands_build_command.rb +386 -13
  468. data/test/rubygems/test_gem_commands_cert_command.rb +18 -6
  469. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  470. data/test/rubygems/test_gem_commands_cleanup_command.rb +35 -10
  471. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  472. data/test/rubygems/test_gem_commands_dependency_command.rb +1 -3
  473. data/test/rubygems/test_gem_commands_environment_command.rb +21 -33
  474. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  475. data/test/rubygems/test_gem_commands_generate_index_command.rb +32 -2
  476. data/test/rubygems/test_gem_commands_help_command.rb +16 -8
  477. data/test/rubygems/test_gem_commands_info_command.rb +6 -7
  478. data/test/rubygems/test_gem_commands_install_command.rb +368 -34
  479. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  480. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  481. data/test/rubygems/test_gem_commands_mirror.rb +1 -2
  482. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  483. data/test/rubygems/test_gem_commands_outdated_command.rb +18 -1
  484. data/test/rubygems/test_gem_commands_owner_command.rb +62 -9
  485. data/test/rubygems/test_gem_commands_pristine_command.rb +148 -16
  486. data/test/rubygems/test_gem_commands_push_command.rb +94 -21
  487. data/test/rubygems/test_gem_commands_query_command.rb +35 -10
  488. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  489. data/test/rubygems/test_gem_commands_server_command.rb +6 -4
  490. data/test/rubygems/test_gem_commands_setup_command.rb +228 -128
  491. data/test/rubygems/test_gem_commands_signin_command.rb +36 -11
  492. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  493. data/test/rubygems/test_gem_commands_sources_command.rb +193 -9
  494. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  495. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  496. data/test/rubygems/test_gem_commands_uninstall_command.rb +108 -52
  497. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  498. data/test/rubygems/test_gem_commands_update_command.rb +201 -29
  499. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  500. data/test/rubygems/test_gem_commands_yank_command.rb +86 -5
  501. data/test/rubygems/test_gem_config_file.rb +25 -13
  502. data/test/rubygems/test_gem_dependency.rb +6 -2
  503. data/test/rubygems/test_gem_dependency_installer.rb +169 -252
  504. data/test/rubygems/test_gem_dependency_list.rb +31 -26
  505. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  506. data/test/rubygems/test_gem_doctor.rb +28 -2
  507. data/test/rubygems/test_gem_ext_builder.rb +51 -44
  508. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -23
  509. data/test/rubygems/test_gem_ext_configure_builder.rb +6 -14
  510. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +21 -29
  511. data/test/rubygems/test_gem_ext_rake_builder.rb +39 -22
  512. data/test/rubygems/test_gem_gem_runner.rb +47 -2
  513. data/test/rubygems/test_gem_gemcutter_utilities.rb +16 -13
  514. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  515. data/test/rubygems/test_gem_indexer.rb +40 -55
  516. data/test/rubygems/test_gem_install_update_options.rb +45 -21
  517. data/test/rubygems/test_gem_installer.rb +661 -338
  518. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  519. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  520. data/test/rubygems/test_gem_package.rb +132 -45
  521. data/test/rubygems/test_gem_package_old.rb +56 -55
  522. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  523. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  524. data/test/rubygems/test_gem_package_tar_reader_entry.rb +6 -7
  525. data/test/rubygems/test_gem_package_tar_writer.rb +20 -12
  526. data/test/rubygems/test_gem_package_task.rb +46 -13
  527. data/test/rubygems/test_gem_path_support.rb +17 -13
  528. data/test/rubygems/test_gem_platform.rb +74 -7
  529. data/test/rubygems/test_gem_rdoc.rb +0 -1
  530. data/test/rubygems/test_gem_remote_fetcher.rb +223 -209
  531. data/test/rubygems/test_gem_request.rb +30 -19
  532. data/test/rubygems/test_gem_request_connection_pools.rb +2 -2
  533. data/test/rubygems/test_gem_request_set.rb +104 -29
  534. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +4 -6
  535. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -5
  536. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -10
  537. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -118
  538. data/test/rubygems/test_gem_requirement.rb +50 -4
  539. data/test/rubygems/test_gem_resolver.rb +73 -31
  540. data/test/rubygems/test_gem_resolver_activation_request.rb +3 -34
  541. data/test/rubygems/test_gem_resolver_api_set.rb +60 -59
  542. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
  543. data/test/rubygems/test_gem_resolver_best_set.rb +27 -6
  544. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  545. data/test/rubygems/test_gem_resolver_conflict.rb +1 -7
  546. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  547. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  548. data/test/rubygems/test_gem_resolver_git_specification.rb +1 -2
  549. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  550. data/test/rubygems/test_gem_resolver_index_specification.rb +7 -4
  551. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -3
  552. data/test/rubygems/test_gem_resolver_installer_set.rb +10 -10
  553. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  554. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  555. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  556. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  557. data/test/rubygems/test_gem_resolver_specification.rb +0 -2
  558. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  559. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  560. data/test/rubygems/test_gem_security.rb +27 -25
  561. data/test/rubygems/test_gem_security_policy.rb +7 -12
  562. data/test/rubygems/test_gem_security_signer.rb +11 -12
  563. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  564. data/test/rubygems/test_gem_server.rb +13 -12
  565. data/test/rubygems/test_gem_silent_ui.rb +0 -1
  566. data/test/rubygems/test_gem_source.rb +32 -17
  567. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -1
  568. data/test/rubygems/test_gem_source_git.rb +12 -18
  569. data/test/rubygems/test_gem_source_installed.rb +11 -13
  570. data/test/rubygems/test_gem_source_list.rb +1 -1
  571. data/test/rubygems/test_gem_source_local.rb +8 -9
  572. data/test/rubygems/test_gem_source_lock.rb +17 -19
  573. data/test/rubygems/test_gem_source_specific_file.rb +9 -10
  574. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  575. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  576. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  577. data/test/rubygems/test_gem_specification.rb +363 -245
  578. data/test/rubygems/test_gem_stream_ui.rb +3 -1
  579. data/test/rubygems/test_gem_stub_specification.rb +6 -7
  580. data/test/rubygems/test_gem_text.rb +1 -2
  581. data/test/rubygems/test_gem_uninstaller.rb +165 -22
  582. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  583. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  584. data/test/rubygems/test_gem_util.rb +17 -15
  585. data/test/rubygems/test_gem_validator.rb +4 -7
  586. data/test/rubygems/test_gem_version.rb +23 -10
  587. data/test/rubygems/test_gem_version_option.rb +1 -3
  588. data/test/rubygems/test_kernel.rb +25 -9
  589. data/test/rubygems/test_project_sanity.rb +20 -0
  590. data/test/rubygems/test_remote_fetch_error.rb +1 -2
  591. data/test/rubygems/test_require.rb +394 -56
  592. data/test/test_changelog_generator.rb +17 -0
  593. metadata +109 -155
  594. data/.rubocop.yml +0 -67
  595. data/.travis.yml +0 -38
  596. data/appveyor.yml +0 -43
  597. data/bundler/CODE_OF_CONDUCT.md +0 -42
  598. data/bundler/CONTRIBUTING.md +0 -17
  599. data/bundler/exe/bundle_ruby +0 -60
  600. data/bundler/lib/bundler/cli/package.rb +0 -49
  601. data/bundler/lib/bundler/compatibility_guard.rb +0 -14
  602. data/bundler/lib/bundler/gem_remote_fetcher.rb +0 -43
  603. data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  604. data/bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  605. data/bundler/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  606. data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  607. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  608. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  609. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  610. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  611. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  612. data/lib/rubygems/source_local.rb +0 -7
  613. data/lib/rubygems/source_specific_file.rb +0 -6
  614. data/lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  615. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  616. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  617. data/lib/ubygems.rb +0 -14
  618. data/util/CL2notes +0 -55
  619. data/util/ci +0 -82
  620. data/util/cops/deprecations.rb +0 -52
  621. data/util/create_certs.rb +0 -171
  622. data/util/create_certs.sh +0 -27
  623. data/util/create_encrypted_key.rb +0 -16
  624. data/util/generate_spdx_license_list.rb +0 -61
  625. data/util/patch_with_prs.rb +0 -77
  626. data/util/rubocop +0 -8
  627. data/util/update_bundled_ca_certificates.rb +0 -139
  628. data/util/update_changelog.rb +0 -67
@@ -1,14 +1,12 @@
1
1
  # frozen_string_literal: true
2
- require 'rubygems/test_case'
3
- require "rubygems/simple_gem"
4
- require 'rubygems/validator'
5
2
 
6
- class TestGemValidator < Gem::TestCase
3
+ require "rubygems/test_case"
4
+ require "rubygems/validator"
7
5
 
6
+ class TestGemValidator < Gem::TestCase
8
7
  def setup
9
8
  super
10
9
 
11
- @simple_gem = SIMPLE_GEM
12
10
  @validator = Gem::Validator.new
13
11
  end
14
12
 
@@ -28,7 +26,7 @@ class TestGemValidator < Gem::TestCase
28
26
  @spec.file_name => [
29
27
  Gem::Validator::ErrorData.new('lib/b.rb', 'Missing file'),
30
28
  Gem::Validator::ErrorData.new('lib/c.rb', 'Extra file'),
31
- ]
29
+ ],
32
30
  }
33
31
 
34
32
  assert_equal expected, alien
@@ -41,5 +39,4 @@ class TestGemValidator < Gem::TestCase
41
39
 
42
40
  assert_empty alien
43
41
  end
44
-
45
42
  end
@@ -5,7 +5,6 @@ require "rubygems/version"
5
5
  require "minitest/benchmark"
6
6
 
7
7
  class TestGemVersion < Gem::TestCase
8
-
9
8
  class V < ::Gem::Version
10
9
  end
11
10
 
@@ -148,14 +147,21 @@ class TestGemVersion < Gem::TestCase
148
147
  end
149
148
 
150
149
  def test_spaceship
151
- assert_equal( 0, v("1.0") <=> v("1.0.0"))
152
- assert_equal( 1, v("1.0") <=> v("1.0.a"))
153
- assert_equal( 1, v("1.8.2") <=> v("0.0.0"))
154
- assert_equal( 1, v("1.8.2") <=> v("1.8.2.a"))
155
- assert_equal( 1, v("1.8.2.b") <=> v("1.8.2.a"))
156
- assert_equal(-1, v("1.8.2.a") <=> v("1.8.2"))
157
- assert_equal( 1, v("1.8.2.a10") <=> v("1.8.2.a9"))
158
- assert_equal( 0, v("") <=> v("0"))
150
+ assert_equal(0, v("1.0") <=> v("1.0.0"))
151
+ assert_equal(1, v("1.0") <=> v("1.0.a"))
152
+ assert_equal(1, v("1.8.2") <=> v("0.0.0"))
153
+ assert_equal(1, v("1.8.2") <=> v("1.8.2.a"))
154
+ assert_equal(1, v("1.8.2.b") <=> v("1.8.2.a"))
155
+ assert_equal(-1, v("1.8.2.a") <=> v("1.8.2"))
156
+ assert_equal(1, v("1.8.2.a10") <=> v("1.8.2.a9"))
157
+ assert_equal(0, v("") <=> v("0"))
158
+
159
+ assert_equal(0, v("0.beta.1") <=> v("0.0.beta.1"))
160
+ assert_equal(-1, v("0.0.beta") <=> v("0.0.beta.1"))
161
+ assert_equal(-1, v("0.0.beta") <=> v("0.beta.1"))
162
+
163
+ assert_equal(-1, v("5.a") <=> v("5.0.0.rc2"))
164
+ assert_equal(1, v("5.x") <=> v("5.0.0.rc2"))
159
165
 
160
166
  assert_nil v("1.0") <=> "whatever"
161
167
  end
@@ -210,6 +216,13 @@ class TestGemVersion < Gem::TestCase
210
216
  assert_equal [1, 2, 3, "pre", 1], v("1.2.3-1").canonical_segments
211
217
  end
212
218
 
219
+ def test_frozen_version
220
+ v = v('1.freeze.test').freeze
221
+ assert_less_than v, v('1')
222
+ assert_version_equal v('1'), v.release
223
+ assert_version_equal v('2'), v.bump
224
+ end
225
+
213
226
  # Asserts that +version+ is a prerelease.
214
227
 
215
228
  def assert_prerelease(version)
@@ -222,7 +235,7 @@ class TestGemVersion < Gem::TestCase
222
235
  assert_equal expected, v(version).approximate_recommendation
223
236
  end
224
237
 
225
- # Assert that the "approximate" recommendation for +version+ satifies +version+.
238
+ # Assert that the "approximate" recommendation for +version+ satisfies +version+.
226
239
 
227
240
  def assert_approximate_satisfies_itself(version)
228
241
  gem_version = v(version)
@@ -4,7 +4,6 @@ require 'rubygems/command'
4
4
  require 'rubygems/version_option'
5
5
 
6
6
  class TestGemVersionOption < Gem::TestCase
7
-
8
7
  def setup
9
8
  super
10
9
 
@@ -57,7 +56,7 @@ class TestGemVersionOption < Gem::TestCase
57
56
  @cmd.handle_options %w[--platform ruby]
58
57
 
59
58
  expected = [
60
- Gem::Platform::RUBY
59
+ Gem::Platform::RUBY,
61
60
  ]
62
61
 
63
62
  assert_equal expected, Gem.platforms
@@ -162,5 +161,4 @@ class TestGemVersionOption < Gem::TestCase
162
161
 
163
162
  assert_equal expected, @cmd.options
164
163
  end
165
-
166
164
  end
@@ -2,7 +2,6 @@
2
2
  require 'rubygems/test_case'
3
3
 
4
4
  class TestKernel < Gem::TestCase
5
-
6
5
  def setup
7
6
  super
8
7
 
@@ -19,7 +18,7 @@ class TestKernel < Gem::TestCase
19
18
 
20
19
  def test_gem
21
20
  assert gem('a', '= 1'), "Should load"
22
- assert $:.any? { |p| %r{a-1/lib} =~ p }
21
+ assert $:.any? {|p| %r{a-1/lib} =~ p }
23
22
  end
24
23
 
25
24
  def test_gem_default
@@ -49,13 +48,13 @@ class TestKernel < Gem::TestCase
49
48
  def test_gem_redundant
50
49
  assert gem('a', '= 1'), "Should load"
51
50
  refute gem('a', '= 1'), "Should not load"
52
- assert_equal 1, $:.select { |p| %r{a-1/lib} =~ p }.size
51
+ assert_equal 1, $:.select {|p| %r{a-1/lib} =~ p }.size
53
52
  end
54
53
 
55
54
  def test_gem_overlapping
56
55
  assert gem('a', '= 1'), "Should load"
57
56
  refute gem('a', '>= 1'), "Should not load"
58
- assert_equal 1, $:.select { |p| %r{a-1/lib} =~ p }.size
57
+ assert_equal 1, $:.select {|p| %r{a-1/lib} =~ p }.size
59
58
  end
60
59
 
61
60
  def test_gem_prerelease
@@ -82,13 +81,30 @@ class TestKernel < Gem::TestCase
82
81
  assert_match(/activated a-1/, ex.message)
83
82
  assert_equal 'a', ex.name
84
83
 
85
- assert $:.any? { |p| %r{a-1/lib} =~ p }
86
- refute $:.any? { |p| %r{a-2/lib} =~ p }
84
+ assert $:.any? {|p| %r{a-1/lib} =~ p }
85
+ refute $:.any? {|p| %r{a-2/lib} =~ p }
87
86
  end
88
87
 
89
88
  def test_gem_not_adding_bin
90
89
  assert gem('a', '= 1'), "Should load"
91
- refute $:.any? { |p| %r{a-1/bin} =~ p }
90
+ refute $:.any? {|p| %r{a-1/bin} =~ p }
91
+ end
92
+
93
+ def test_gem_failing_inside_require_doesnt_cause_double_exceptions
94
+ File.write("activate.rb", "gem('a', '= 999')\n")
95
+
96
+ require "open3"
97
+
98
+ output, _ = Open3.capture2e(
99
+ { "GEM_HOME" => Gem.paths.home },
100
+ *ruby_with_rubygems_in_load_path,
101
+ "-r",
102
+ "./activate.rb"
103
+ )
104
+
105
+ load_errors = output.split("\n").select {|line| line.include?("Could not find") }
106
+
107
+ assert_equal 1, load_errors.size
92
108
  end
93
109
 
94
110
  def test_gem_bundler
@@ -96,7 +112,7 @@ class TestKernel < Gem::TestCase
96
112
  quick_gem 'bundler', '2.a'
97
113
 
98
114
  assert gem('bundler')
99
- assert $:.any? { |p| %r{bundler-1/lib} =~ p }
115
+ assert $:.any? {|p| %r{bundler-1/lib} =~ p }
100
116
  end
101
117
 
102
118
  def test_gem_bundler_missing_bundler_version
@@ -117,7 +133,7 @@ class TestKernel < Gem::TestCase
117
133
  quick_gem 'bundler', '2.a'
118
134
 
119
135
  assert gem('bundler', '>= 0.a')
120
- assert $:.any? { |p| %r{bundler-1/lib} =~ p }
136
+ assert $:.any? {|p| %r{bundler-1/lib} =~ p }
121
137
  end
122
138
  end
123
139
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rubygems/test_case"
4
+ require "open3"
5
+
6
+ class TestProjectSanity < Gem::TestCase
7
+ def test_manifest_is_up_to_date
8
+ skip unless File.exist?(File.expand_path("../../../Rakefile", __FILE__))
9
+
10
+ _, status = Open3.capture2e("rake check_manifest")
11
+
12
+ assert status.success?, "Expected Manifest.txt to be up to date, but it's not. Run `rake update_manifest` to sync it."
13
+ end
14
+
15
+ def test_require_rubygems_package
16
+ err, status = Open3.capture2e(*ruby_with_rubygems_in_load_path, "--disable-gems", "-e", "'require \"rubygems/package\"'")
17
+
18
+ assert status.success?, err
19
+ end
20
+ end
@@ -2,10 +2,9 @@
2
2
  require 'rubygems/test_case'
3
3
 
4
4
  class TestRemoteFetchError < Gem::TestCase
5
-
6
5
  def test_password_redacted
7
6
  error = Gem::RemoteFetcher::FetchError.new('There was an error fetching', 'https://user:secret@gemsource.org')
8
- refute_match error.to_s, 'secret'
7
+ refute_match 'secret', error.to_s
9
8
  end
10
9
 
11
10
  def test_invalid_url
@@ -38,6 +38,39 @@ class TestGemRequire < Gem::TestCase
38
38
  assert require(path), "'#{path}' was already required"
39
39
  end
40
40
 
41
+ def refute_require(path)
42
+ refute require(path), "'#{path}' was not yet required"
43
+ end
44
+
45
+ def test_respect_loaded_features_caching_like_standard_require
46
+ dir = Dir.mktmpdir("test_require", @tempdir)
47
+
48
+ lp1 = File.join dir, 'foo1'
49
+ foo1 = File.join lp1, 'foo.rb'
50
+
51
+ FileUtils.mkdir_p lp1
52
+ File.open(foo1, 'w') {|f| f.write "class Object; HELLO = 'foo1' end" }
53
+
54
+ lp = $LOAD_PATH.dup
55
+
56
+ $LOAD_PATH.unshift lp1
57
+ assert_require 'foo'
58
+ assert_equal "foo1", ::Object::HELLO
59
+
60
+ lp2 = File.join dir, 'foo2'
61
+ foo2 = File.join lp2, 'foo.rb'
62
+
63
+ FileUtils.mkdir_p lp2
64
+ File.open(foo2, 'w') {|f| f.write "class Object; HELLO = 'foo2' end" }
65
+
66
+ $LOAD_PATH.unshift lp2
67
+ refute_require 'foo'
68
+ assert_equal "foo1", ::Object::HELLO
69
+ ensure
70
+ $LOAD_PATH.replace lp
71
+ Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
72
+ end
73
+
41
74
  # Providing -I on the commandline should always beat gems
42
75
  def test_dash_i_beats_gems
43
76
  a1 = util_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb"
@@ -53,7 +86,7 @@ class TestGemRequire < Gem::TestCase
53
86
  c_rb = File.join dash_i_arg, 'b', 'c.rb'
54
87
 
55
88
  FileUtils.mkdir_p File.dirname c_rb
56
- File.open(c_rb, 'w') { |f| f.write "class Object; HELLO = 'world' end" }
89
+ File.open(c_rb, 'w') {|f| f.write "class Object; HELLO = 'world' end" }
57
90
 
58
91
  lp = $LOAD_PATH.dup
59
92
 
@@ -63,6 +96,7 @@ class TestGemRequire < Gem::TestCase
63
96
  assert_require 'test_gem_require_a'
64
97
  assert_require 'b/c' # this should be required from -I
65
98
  assert_equal "world", ::Object::HELLO
99
+ assert_equal %w[a-1 b-1], loaded_spec_names
66
100
  ensure
67
101
  $LOAD_PATH.replace lp
68
102
  Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
@@ -79,17 +113,69 @@ class TestGemRequire < Gem::TestCase
79
113
  end
80
114
  end
81
115
 
116
+ # Providing -I on the commandline should always beat gems
117
+ def test_dash_i_beats_default_gems
118
+ a1 = new_default_spec "a", "1", {"b" => "= 1"}, "test_gem_require_a.rb"
119
+ b1 = new_default_spec "b", "1", {"c" => "> 0"}, "b/c.rb"
120
+ c1 = new_default_spec "c", "1", nil, "c/c.rb"
121
+ c2 = new_default_spec "c", "2", nil, "c/c.rb"
122
+
123
+ install_default_gems c1, c2, b1, a1
124
+
125
+ dir = Dir.mktmpdir("test_require", @tempdir)
126
+ dash_i_arg = File.join dir, 'lib'
127
+
128
+ c_rb = File.join dash_i_arg, 'c', 'c.rb'
129
+
130
+ FileUtils.mkdir_p File.dirname c_rb
131
+ File.open(c_rb, 'w') {|f| f.write "class Object; HELLO = 'world' end" }
132
+
133
+ assert_require 'test_gem_require_a'
134
+
135
+ lp = $LOAD_PATH.dup
136
+
137
+ # Pretend to provide a commandline argument that overrides a file in gem b
138
+ $LOAD_PATH.unshift dash_i_arg
139
+
140
+ assert_require 'b/c'
141
+ assert_require 'c/c' # this should be required from -I
142
+ assert_equal "world", ::Object::HELLO
143
+ assert_equal %w[a-1 b-1], loaded_spec_names
144
+ ensure
145
+ $LOAD_PATH.replace lp
146
+ Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
147
+ end
148
+
149
+ def test_dash_i_respects_default_library_extension_priority
150
+ skip "extensions don't quite work on jruby" if Gem.java_platform?
151
+ skip "not installed yet" unless RbConfig::TOPDIR
152
+
153
+ dash_i_ext_arg = util_install_extension_file('a')
154
+ dash_i_lib_arg = util_install_ruby_file('a')
155
+
156
+ lp = $LOAD_PATH.dup
157
+
158
+ begin
159
+ $LOAD_PATH.unshift dash_i_lib_arg
160
+ $LOAD_PATH.unshift dash_i_ext_arg
161
+ assert_require 'a'
162
+ assert_match(/a\.rb$/, $LOADED_FEATURES.last)
163
+ ensure
164
+ $LOAD_PATH.replace lp
165
+ end
166
+ end
167
+
82
168
  def test_concurrent_require
83
169
  Object.const_set :FILE_ENTERED_LATCH, Latch.new(2)
84
170
  Object.const_set :FILE_EXIT_LATCH, Latch.new(1)
85
171
 
86
- a1 = util_spec "a", "1", nil, "lib/a.rb"
87
- b1 = util_spec "b", "1", nil, "lib/b.rb"
172
+ a1 = util_spec "a#{$$}", "1", nil, "lib/a#{$$}.rb"
173
+ b1 = util_spec "b#{$$}", "1", nil, "lib/b#{$$}.rb"
88
174
 
89
175
  install_specs a1, b1
90
176
 
91
- t1 = create_sync_thread{ assert_require 'a' }
92
- t2 = create_sync_thread{ assert_require 'b' }
177
+ t1 = create_sync_thread{ assert_require "a#{$$}" }
178
+ t2 = create_sync_thread{ assert_require "b#{$$}" }
93
179
 
94
180
  # wait until both files are waiting on the exit latch
95
181
  FILE_ENTERED_LATCH.await
@@ -112,11 +198,11 @@ class TestGemRequire < Gem::TestCase
112
198
  install_specs b1, b2, a1
113
199
 
114
200
  assert_require 'test_gem_require_a'
115
- assert_equal %w(a-1 b-1), loaded_spec_names
201
+ assert_equal %w[a-1 b-1], loaded_spec_names
116
202
  assert_equal unresolved_names, []
117
203
 
118
204
  assert_require "b/c"
119
- assert_equal %w(a-1 b-1), loaded_spec_names
205
+ assert_equal %w[a-1 b-1], loaded_spec_names
120
206
  end
121
207
 
122
208
  def test_require_is_lazy_with_inexact_req
@@ -127,11 +213,11 @@ class TestGemRequire < Gem::TestCase
127
213
  install_specs b1, b2, a1
128
214
 
129
215
  assert_require 'test_gem_require_a'
130
- assert_equal %w(a-1), loaded_spec_names
216
+ assert_equal %w[a-1], loaded_spec_names
131
217
  assert_equal unresolved_names, ["b (>= 1)"]
132
218
 
133
219
  assert_require "b/c"
134
- assert_equal %w(a-1 b-2), loaded_spec_names
220
+ assert_equal %w[a-1 b-2], loaded_spec_names
135
221
  end
136
222
 
137
223
  def test_require_is_not_lazy_with_one_possible
@@ -141,11 +227,11 @@ class TestGemRequire < Gem::TestCase
141
227
  install_specs b1, a1
142
228
 
143
229
  assert_require 'test_gem_require_a'
144
- assert_equal %w(a-1 b-1), loaded_spec_names
230
+ assert_equal %w[a-1 b-1], loaded_spec_names
145
231
  assert_equal unresolved_names, []
146
232
 
147
233
  assert_require "b/c"
148
- assert_equal %w(a-1 b-1), loaded_spec_names
234
+ assert_equal %w[a-1 b-1], loaded_spec_names
149
235
  end
150
236
 
151
237
  def test_require_can_use_a_pathname_object
@@ -154,28 +240,87 @@ class TestGemRequire < Gem::TestCase
154
240
  install_specs a1
155
241
 
156
242
  assert_require Pathname.new 'test_gem_require_a'
157
- assert_equal %w(a-1), loaded_spec_names
243
+ assert_equal %w[a-1], loaded_spec_names
158
244
  assert_equal unresolved_names, []
159
245
  end
160
246
 
161
247
  def test_activate_via_require_respects_loaded_files
248
+ skip "Not sure what's going on. If another spec creates a 'a' gem before
249
+ this test, somehow require will load the benchmark in b, and ignore that the
250
+ stdlib one is already in $LOADED_FEATURES?. Reproducible by running the
251
+ spaceship_specific_file test before this one" if java_platform?
252
+
253
+ skip "not installed yet" unless RbConfig::TOPDIR
254
+
255
+ lib_dir = File.expand_path("../../lib", File.dirname(__FILE__))
256
+ rubylibdir = File.realdirpath(RbConfig::CONFIG["rubylibdir"])
257
+ if rubylibdir == lib_dir
258
+ # testing in the ruby repository where RubyGems' lib/ == stdlib lib/
259
+ # In that case we want to move the stdlib lib/ to still be after b-2 in $LOAD_PATH
260
+ lp = $LOAD_PATH.dup
261
+ $LOAD_PATH.delete lib_dir
262
+ $LOAD_PATH.push lib_dir
263
+ load_path_changed = true
264
+ end
265
+
266
+ require 'benchmark' # the stdlib
267
+
162
268
  a1 = util_spec "a", "1", {"b" => ">= 1"}, "lib/test_gem_require_a.rb"
163
269
  b1 = util_spec "b", "1", nil, "lib/benchmark.rb"
164
270
  b2 = util_spec "b", "2", nil, "lib/benchmark.rb"
165
271
 
166
272
  install_specs b1, b2, a1
167
273
 
168
- require 'test_gem_require_a'
274
+ # Activates a-1, but not b-1 and b-2
275
+ assert_require 'test_gem_require_a'
276
+ assert_equal %w[a-1], loaded_spec_names
277
+ assert $LOAD_PATH.include? a1.load_paths[0]
278
+ refute $LOAD_PATH.include? b1.load_paths[0]
279
+ refute $LOAD_PATH.include? b2.load_paths[0]
280
+
169
281
  assert_equal unresolved_names, ["b (>= 1)"]
170
282
 
171
- refute require('benchmark'), "benchmark should have already been loaded"
283
+ # The require('benchmark') below will activate b-2. However, its
284
+ # lib/benchmark.rb won't ever be loaded. The reason is MRI sees that even
285
+ # though b-2 is earlier in $LOAD_PATH it already loaded a benchmark.rb file
286
+ # and that still exists in $LOAD_PATH (further down),
287
+ # and as a result #gem_original_require returns false.
288
+ refute require('benchmark'), "the benchmark stdlib should be recognized as already loaded"
289
+
290
+ assert_includes $LOAD_PATH, b2.load_paths[0]
291
+ assert_includes $LOAD_PATH, rubylibdir
292
+ message = proc {
293
+ "this test relies on the b-2 gem lib/ to be before stdlib to make sense\n" +
294
+ $LOAD_PATH.pretty_inspect
295
+ }
296
+ assert_operator $LOAD_PATH.index(b2.load_paths[0]), :<, $LOAD_PATH.index(rubylibdir), message
172
297
 
173
298
  # We detected that we should activate b-2, so we did so, but
174
- # then original_require decided "I've already got benchmark.rb" loaded.
175
- # This case is fine because our lazy loading is provided exactly
299
+ # then #gem_original_require decided "I've already got some benchmark.rb" loaded.
300
+ # This case is fine because our lazy loading provided exactly
176
301
  # the same behavior as eager loading would have.
177
302
 
178
- assert_equal %w(a-1 b-2), loaded_spec_names
303
+ assert_equal %w[a-1 b-2], loaded_spec_names
304
+ ensure
305
+ $LOAD_PATH.replace lp if load_path_changed
306
+ end
307
+
308
+ def test_activate_via_require_respects_loaded_default_from_default_gems
309
+ a1 = new_default_spec "a", "1", nil, "a.rb"
310
+
311
+ # simulate requiring a default gem before rubygems is loaded
312
+ Kernel.send(:gem_original_require, "a")
313
+
314
+ # simulate registering default specs on loading rubygems
315
+ install_default_gems a1
316
+
317
+ a2 = util_spec "a", "2", nil, "lib/a.rb"
318
+
319
+ install_specs a2
320
+
321
+ refute_require 'a'
322
+
323
+ assert_equal %w[a-1], loaded_spec_names
179
324
  end
180
325
 
181
326
  def test_already_activated_direct_conflict
@@ -189,12 +334,12 @@ class TestGemRequire < Gem::TestCase
189
334
 
190
335
  a1.activate
191
336
  c1.activate
192
- assert_equal %w(a-1 c-1), loaded_spec_names
337
+ assert_equal %w[a-1 c-1], loaded_spec_names
193
338
  assert_equal ["b (> 0)"], unresolved_names
194
339
 
195
340
  assert require("ib")
196
341
 
197
- assert_equal %w(a-1 b-1 c-1), loaded_spec_names
342
+ assert_equal %w[a-1 b-1 c-1], loaded_spec_names
198
343
  assert_equal [], unresolved_names
199
344
  end
200
345
 
@@ -211,7 +356,7 @@ class TestGemRequire < Gem::TestCase
211
356
 
212
357
  a1.activate
213
358
  c1.activate
214
- assert_equal %w(a-1 c-1), loaded_spec_names
359
+ assert_equal %w[a-1 c-1], loaded_spec_names
215
360
  assert_equal ["b (> 0)", "x (> 0)"], unresolved_names
216
361
 
217
362
  e = assert_raises(Gem::LoadError) do
@@ -234,7 +379,7 @@ class TestGemRequire < Gem::TestCase
234
379
 
235
380
  a1.activate
236
381
  c1.activate
237
- assert_equal %w(a-1 c-1), loaded_spec_names
382
+ assert_equal %w[a-1 c-1], loaded_spec_names
238
383
  assert_equal ["b (> 0)"], unresolved_names
239
384
 
240
385
  e = assert_raises(Gem::LoadError) do
@@ -260,64 +405,153 @@ class TestGemRequire < Gem::TestCase
260
405
 
261
406
  # Remove an old default gem version directly from disk as if someone ran
262
407
  # gem cleanup.
263
- FileUtils.rm_rf(File.join @default_dir, "#{b1.full_name}")
264
- FileUtils.rm_rf(File.join @default_spec_dir, "#{b1.full_name}.gemspec")
408
+ FileUtils.rm_rf(File.join @gemhome, "#{b1.full_name}")
409
+ FileUtils.rm_rf(File.join @gemhome, "specifications", "default", "#{b1.full_name}.gemspec")
265
410
 
266
411
  # Require gems that have not been removed.
267
412
  assert_require 'a/b'
268
- assert_equal %w(a-1.0), loaded_spec_names
413
+ assert_equal %w[a-1.0], loaded_spec_names
269
414
  assert_require 'b/d'
270
- assert_equal %w(a-1.0 b-2.0), loaded_spec_names
415
+ assert_equal %w[a-1.0 b-2.0], loaded_spec_names
271
416
  end
272
417
 
273
418
  def test_require_doesnt_traverse_development_dependencies
274
- a = util_spec("a", "1", nil, "lib/a.rb")
419
+ a = util_spec("a#{$$}", "1", nil, "lib/a#{$$}.rb")
275
420
  z = util_spec("z", "1", "w" => "> 0")
276
- w1 = util_spec("w", "1") { |s| s.add_development_dependency "non-existent" }
277
- w2 = util_spec("w", "2") { |s| s.add_development_dependency "non-existent" }
421
+ w1 = util_spec("w", "1") {|s| s.add_development_dependency "non-existent" }
422
+ w2 = util_spec("w", "2") {|s| s.add_development_dependency "non-existent" }
278
423
 
279
424
  install_specs a, w1, w2, z
280
425
 
281
426
  assert gem("z")
282
- assert_equal %w(z-1), loaded_spec_names
427
+ assert_equal %w[z-1], loaded_spec_names
283
428
  assert_equal ["w (> 0)"], unresolved_names
284
429
 
285
- assert require("a")
430
+ assert require("a#{$$}")
286
431
  end
287
432
 
288
433
  def test_default_gem_only
289
434
  default_gem_spec = new_default_spec("default", "2.0.0.0",
290
435
  nil, "default/gem.rb")
291
- install_default_specs(default_gem_spec)
436
+ install_default_gems(default_gem_spec)
292
437
  assert_require "default/gem"
293
- assert_equal %w(default-2.0.0.0), loaded_spec_names
438
+ assert_equal %w[default-2.0.0.0], loaded_spec_names
294
439
  end
295
440
 
296
- def test_realworld_default_gem
297
- begin
298
- gem 'json'
299
- rescue Gem::MissingSpecError
300
- skip "default gems are only available after ruby installation"
441
+ def test_default_gem_require_activates_just_once
442
+ default_gem_spec = new_default_spec("default", "2.0.0.0",
443
+ nil, "default/gem.rb")
444
+ install_default_gems(default_gem_spec)
445
+
446
+ assert_require "default/gem"
447
+
448
+ times_called = 0
449
+
450
+ Kernel.stub(:gem, ->(name, requirement) { times_called += 1 }) do
451
+ refute_require "default/gem"
301
452
  end
302
453
 
454
+ assert_equal 0, times_called
455
+ end
456
+
457
+ def test_second_gem_require_does_not_resolve_path_manually_before_going_through_standard_require
458
+ a1 = util_spec "a", "1", nil, "lib/test_gem_require_a.rb"
459
+ install_gem a1
460
+
461
+ assert_require "test_gem_require_a"
462
+
463
+ stub(:gem_original_require, ->(path) { assert_equal "test_gem_require_a", path }) do
464
+ require "test_gem_require_a"
465
+ end
466
+ end
467
+
468
+ def test_realworld_default_gem
469
+ testing_ruby_repo = !ENV["GEM_COMMAND"].nil?
470
+ skip "this test can't work under ruby-core setup" if testing_ruby_repo || java_platform?
471
+
303
472
  cmd = <<-RUBY
304
473
  $stderr = $stdout
305
474
  require "json"
306
- puts Gem.loaded_specs["json"].default_gem?
475
+ puts Gem.loaded_specs["json"]
307
476
  RUBY
308
- output = Gem::Util.popen(Gem.ruby, "-e", cmd).strip
309
- assert_equal "true", output
477
+ output = Gem::Util.popen(*ruby_with_rubygems_in_load_path, "-e", cmd).strip
478
+ assert $?.success?
479
+ refute_empty output
480
+ end
481
+
482
+ def test_realworld_upgraded_default_gem
483
+ testing_ruby_repo = !ENV["GEM_COMMAND"].nil?
484
+ skip "this test can't work under ruby-core setup" if testing_ruby_repo
485
+
486
+ newer_json = util_spec("json", "999.99.9", nil, ["lib/json.rb"])
487
+ install_gem newer_json
488
+
489
+ path = "#{@tempdir}/test_realworld_upgraded_default_gem.rb"
490
+ code = <<-RUBY
491
+ $stderr = $stdout
492
+ require "json"
493
+ puts Gem.loaded_specs["json"].version
494
+ puts $LOADED_FEATURES
495
+ RUBY
496
+ File.write(path, code)
497
+
498
+ output = Gem::Util.popen({ 'GEM_HOME' => @gemhome }, *ruby_with_rubygems_in_load_path, path).strip
499
+ assert $?.success?
500
+ refute_empty output
501
+ assert_equal "999.99.9", output.lines[0].chomp
502
+ # Make sure only files from the newer json gem are loaded, and no files from the default json gem
503
+ assert_equal ["#{@gemhome}/gems/json-999.99.9/lib/json.rb"], output.lines.grep(%r{/gems/json-}).map(&:chomp)
310
504
  end
311
505
 
312
506
  def test_default_gem_and_normal_gem
313
507
  default_gem_spec = new_default_spec("default", "2.0.0.0",
314
508
  nil, "default/gem.rb")
315
- install_default_specs(default_gem_spec)
509
+ install_default_gems(default_gem_spec)
316
510
  normal_gem_spec = util_spec("default", "3.0", nil,
317
511
  "lib/default/gem.rb")
318
512
  install_specs(normal_gem_spec)
319
513
  assert_require "default/gem"
320
- assert_equal %w(default-3.0), loaded_spec_names
514
+ assert_equal %w[default-3.0], loaded_spec_names
515
+ end
516
+
517
+ def test_normal_gems_with_overridden_load_error_message
518
+ normal_gem_spec = util_spec("normal", "3.0", nil, "lib/normal/gem.rb")
519
+
520
+ install_specs(normal_gem_spec)
521
+
522
+ File.write("require_with_overridden_load_error_message.rb", <<-RUBY)
523
+ LoadError.class_eval do
524
+ def message
525
+ "Overridden message"
526
+ end
527
+ end
528
+
529
+ require 'normal/gem'
530
+ RUBY
531
+
532
+ require "open3"
533
+
534
+ output, exit_status = Open3.capture2e(
535
+ { "GEM_HOME" => Gem.paths.home },
536
+ *ruby_with_rubygems_in_load_path,
537
+ "-r",
538
+ "./require_with_overridden_load_error_message.rb"
539
+ )
540
+
541
+ assert exit_status.success?, "Require failed due to #{output}"
542
+ end
543
+
544
+ def test_default_gem_prerelease
545
+ default_gem_spec = new_default_spec("default", "2.0.0",
546
+ nil, "default/gem.rb")
547
+ install_default_gems(default_gem_spec)
548
+
549
+ normal_gem_higher_prerelease_spec = util_spec("default", "3.0.0.rc2", nil,
550
+ "lib/default/gem.rb")
551
+ install_default_gems(normal_gem_higher_prerelease_spec)
552
+
553
+ assert_require "default/gem"
554
+ assert_equal %w[default-3.0.0.rc2], loaded_spec_names
321
555
  end
322
556
 
323
557
  def loaded_spec_names
@@ -352,29 +586,28 @@ class TestGemRequire < Gem::TestCase
352
586
  def test_require_when_gem_defined
353
587
  default_gem_spec = new_default_spec("default", "2.0.0.0",
354
588
  nil, "default/gem.rb")
355
- install_default_specs(default_gem_spec)
589
+ install_default_gems(default_gem_spec)
356
590
  c = Class.new do
357
591
  def self.gem(*args)
358
592
  raise "received #gem with #{args.inspect}"
359
593
  end
360
594
  end
361
595
  assert c.send(:require, "default/gem")
362
- assert_equal %w(default-2.0.0.0), loaded_spec_names
596
+ assert_equal %w[default-2.0.0.0], loaded_spec_names
363
597
  end
364
598
 
365
599
  def test_require_default_when_gem_defined
366
- a = util_spec("a", "1", nil, "lib/a.rb")
600
+ a = util_spec("a#{$$}", "1", nil, "lib/a#{$$}.rb")
367
601
  install_specs a
368
602
  c = Class.new do
369
603
  def self.gem(*args)
370
604
  raise "received #gem with #{args.inspect}"
371
605
  end
372
606
  end
373
- assert c.send(:require, "a")
374
- assert_equal %w(a-1), loaded_spec_names
607
+ assert c.send(:require, "a#{$$}")
608
+ assert_equal %W[a#{$$}-1], loaded_spec_names
375
609
  end
376
610
 
377
-
378
611
  def test_require_bundler
379
612
  b1 = util_spec('bundler', '1', nil, "lib/bundler/setup.rb")
380
613
  b2a = util_spec('bundler', '2.a', nil, "lib/bundler/setup.rb")
@@ -412,28 +645,133 @@ class TestGemRequire < Gem::TestCase
412
645
  end
413
646
  end
414
647
 
648
+ # uplevel is 2.5+ only
415
649
  if RUBY_VERSION >= "2.5"
416
- def test_no_kernel_require_in_warn_with_uplevel
417
- lib = File.realpath("../../../lib", __FILE__)
650
+ ["", "Kernel."].each do |prefix|
651
+ define_method "test_no_kernel_require_in_#{prefix.tr(".", "_")}warn_with_uplevel" do
652
+ Dir.mktmpdir("warn_test") do |dir|
653
+ File.write(dir + "/sub.rb", "#{prefix}warn 'uplevel', 'test', uplevel: 1\n")
654
+ File.write(dir + "/main.rb", "require 'sub'\n")
655
+ _, err = capture_subprocess_io do
656
+ system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "-I", dir, "main.rb")
657
+ end
658
+ assert_match(/main\.rb:1: warning: uplevel\ntest\n$/, err)
659
+ _, err = capture_subprocess_io do
660
+ system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "-I", dir, "main.rb")
661
+ end
662
+ assert_match(/main\.rb:1: warning: uplevel\ntest\n$/, err)
663
+ end
664
+ end
665
+
666
+ define_method "test_no_other_behavioral_changes_with_#{prefix.tr(".", "_")}warn" do
667
+ Dir.mktmpdir("warn_test") do |dir|
668
+ File.write(dir + "/main.rb", "#{prefix}warn({x:1}, {y:2}, [])\n")
669
+ _, err = capture_subprocess_io do
670
+ system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "main.rb")
671
+ end
672
+ assert_match(/{:x=>1}\n{:y=>2}\n$/, err)
673
+ _, err = capture_subprocess_io do
674
+ system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "main.rb")
675
+ end
676
+ assert_match(/{:x=>1}\n{:y=>2}\n$/, err)
677
+ end
678
+ end
679
+ end
680
+
681
+ def test_no_crash_when_overriding_warn_with_warning_module
682
+ skip "https://github.com/oracle/truffleruby/issues/2109" if RUBY_ENGINE == "truffleruby"
683
+
684
+ Dir.mktmpdir("warn_test") do |dir|
685
+ File.write(dir + "/main.rb", "module Warning; def warn(str); super; end; end; warn 'Foo Bar'")
686
+ _, err = capture_subprocess_io do
687
+ system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "main.rb")
688
+ end
689
+ assert_match(/Foo Bar\n$/, err)
690
+ _, err = capture_subprocess_io do
691
+ system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "main.rb")
692
+ end
693
+ assert_match(/Foo Bar\n$/, err)
694
+ end
695
+ end
696
+
697
+ def test_expected_backtrace_location_when_inheriting_from_basic_object_and_including_kernel
418
698
  Dir.mktmpdir("warn_test") do |dir|
419
- File.write(dir + "/sub.rb", "warn 'uplevel', 'test', uplevel: 1\n")
420
- File.write(dir + "/main.rb", "require 'sub'\n")
699
+ File.write(dir + "/main.rb", "\nrequire 'sub'\n")
700
+ File.write(dir + "/sub.rb", <<-'RUBY')
701
+ require 'rubygems'
702
+ class C < BasicObject
703
+ include ::Kernel
704
+ def deprecated
705
+ warn "This is a deprecated method", uplevel: 2
706
+ end
707
+ end
708
+ C.new.deprecated
709
+ RUBY
710
+
421
711
  _, err = capture_subprocess_io do
422
- system(@@ruby, "-w", "-rpp", "--disable=gems", "-I", lib, "-C", dir, "-I.", "main.rb")
712
+ system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "-I", dir, "main.rb")
423
713
  end
424
- assert_equal "main.rb:1: warning: uplevel\ntest\n", err
714
+ assert_match(/main\.rb:2: warning: This is a deprecated method$/, err)
425
715
  _, err = capture_subprocess_io do
426
- system(@@ruby, "-w", "-rpp", "--enable=gems", "-I", lib, "-C", dir, "-I.", "main.rb")
716
+ system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "-I", dir, "main.rb")
427
717
  end
428
- assert_equal "main.rb:1: warning: uplevel\ntest\n", err
718
+ assert_match(/main\.rb:2: warning: This is a deprecated method$/, err)
429
719
  end
430
720
  end
431
721
  end
432
722
 
723
+ private
724
+
433
725
  def silence_warnings
434
726
  old_verbose, $VERBOSE = $VERBOSE, false
435
727
  yield
436
728
  ensure
437
729
  $VERBOSE = old_verbose
438
730
  end
731
+
732
+ def util_install_extension_file(name)
733
+ spec = quick_gem name
734
+ util_build_gem spec
735
+
736
+ spec.extensions << "extconf.rb"
737
+ write_file File.join(@tempdir, "extconf.rb") do |io|
738
+ io.write <<-RUBY
739
+ require "mkmf"
740
+ CONFIG['LDSHARED'] = '$(TOUCH) $@ ||'
741
+ create_makefile("#{name}")
742
+ RUBY
743
+ end
744
+
745
+ write_file File.join(@tempdir, "#{name}.c") do |io|
746
+ io.write <<-C
747
+ void Init_#{name}() { }
748
+ C
749
+ end
750
+
751
+ write_file File.join(@tempdir, "depend")
752
+
753
+ spec.files += ["extconf.rb", "depend", "#{name}.c"]
754
+
755
+ so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}")
756
+ refute_path_exists so
757
+
758
+ path = Gem::Package.build spec
759
+ installer = Gem::Installer.at path
760
+ installer.install
761
+ assert_path_exists so
762
+
763
+ spec.gem_dir
764
+ end
765
+
766
+ def util_install_ruby_file(name)
767
+ dir_lib = Dir.mktmpdir("test_require_lib", @tempdir)
768
+ dash_i_lib_arg = File.join dir_lib
769
+
770
+ a_rb = File.join dash_i_lib_arg, "#{name}.rb"
771
+
772
+ FileUtils.mkdir_p File.dirname a_rb
773
+ File.open(a_rb, 'w') {|f| f.write "# #{name}.rb" }
774
+
775
+ dash_i_lib_arg
776
+ end
439
777
  end