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
@@ -29,7 +29,7 @@ class Gem::StubSpecification < Gem::BasicSpecification
29
29
  # in their require paths, so lets take advantage of that by pre-allocating
30
30
  # a require path list for that case.
31
31
  REQUIRE_PATH_LIST = { # :nodoc:
32
- 'lib' => ['lib'].freeze
32
+ 'lib' => ['lib'].freeze,
33
33
  }.freeze
34
34
 
35
35
  def initialize(data, extensions)
@@ -50,9 +50,9 @@ class Gem::StubSpecification < Gem::BasicSpecification
50
50
  end
51
51
 
52
52
  path_list = parts.last
53
- @require_paths = REQUIRE_PATH_LIST[path_list] || path_list.split("\0".freeze).map! { |x|
53
+ @require_paths = REQUIRE_PATH_LIST[path_list] || path_list.split("\0".freeze).map! do |x|
54
54
  REQUIRE_PATHS[x] || x
55
- }
55
+ end
56
56
  end
57
57
  end
58
58
 
@@ -68,7 +68,7 @@ class Gem::StubSpecification < Gem::BasicSpecification
68
68
 
69
69
  def initialize(filename, base_dir, gems_dir, default_gem)
70
70
  super()
71
- filename.untaint
71
+ filename.tap(&Gem::UNTAINT)
72
72
 
73
73
  self.loaded_from = filename
74
74
  @data = nil
@@ -209,5 +209,4 @@ class Gem::StubSpecification < Gem::BasicSpecification
209
209
  def stubbed?
210
210
  data.is_a? StubLine
211
211
  end
212
-
213
212
  end
@@ -1,17 +1,6 @@
1
1
  # frozen_string_literal: true
2
- # TODO: $SAFE = 1
3
2
 
4
- begin
5
- gem 'minitest', '~> 5.0'
6
- rescue NoMethodError, Gem::LoadError
7
- # for ruby tests
8
- end
9
-
10
- if defined? Gem::QuickLoader
11
- Gem::QuickLoader.load_full_rubygems_library
12
- else
13
- require 'rubygems'
14
- end
3
+ require 'rubygems'
15
4
 
16
5
  # If bundler gemspec exists, add to stubs
17
6
  bundler_gemspec = File.expand_path("../../../bundler/bundler.gemspec", __FILE__)
@@ -23,7 +12,7 @@ if File.exist?(bundler_gemspec)
23
12
  end
24
13
 
25
14
  begin
26
- gem 'minitest'
15
+ gem 'minitest', '~> 5.13'
27
16
  rescue Gem::LoadError
28
17
  end
29
18
 
@@ -37,18 +26,25 @@ begin
37
26
  rescue LoadError
38
27
  end
39
28
 
40
- # We have to load these up front because otherwise we'll try to load
41
- # them while we're testing rubygems, and thus we can't actually load them.
42
- unless Gem::Dependency.new('rdoc', '>= 3.10').matching_specs.empty?
43
- gem 'rdoc'
44
- gem 'json'
29
+ if File.exist?(bundler_gemspec)
30
+ require_relative '../../bundler/lib/bundler'
31
+ else
32
+ require 'bundler'
45
33
  end
46
34
 
47
- if Gem::USE_BUNDLER_FOR_GEMDEPS
48
- require 'bundler'
35
+ # Enable server plugin needed for bisection
36
+ if ENV["RG_BISECT_SERVER_PLUGIN"]
37
+ require ENV["RG_BISECT_SERVER_PLUGIN"]
38
+
39
+ Minitest.extensions << "server"
49
40
  end
41
+
42
+ ENV["MT_NO_PLUGINS"] = "true"
43
+
50
44
  require 'minitest/autorun'
51
45
 
46
+ ENV["JARS_SKIP"] = "true" if Gem.java_platform? # avoid unnecessary and noisy `jar-dependencies` post install hook
47
+
52
48
  require 'rubygems/deprecate'
53
49
 
54
50
  require 'fileutils'
@@ -97,16 +93,25 @@ module Gem
97
93
  end
98
94
  end
99
95
 
96
+ require "rubygems/command"
97
+
98
+ class Gem::Command
99
+ ##
100
+ # Allows resetting the hash of specific args per command. This method is
101
+ # available when requiring 'rubygems/test_case'
102
+
103
+ def self.specific_extra_args_hash=(value)
104
+ @specific_extra_args_hash = value
105
+ end
106
+ end
107
+
100
108
  ##
101
109
  # RubyGemTestCase provides a variety of methods for testing rubygems and
102
110
  # gem-related behavior in a sandbox. Through RubyGemTestCase you can install
103
111
  # and uninstall gems, fetch remote gems through a stub fetcher and be assured
104
112
  # your normal set of gems is not affected.
105
- #
106
- # Tests are always run at a safe level of 1.
107
-
108
- class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Unit::TestCase)
109
113
 
114
+ class Gem::TestCase < Minitest::Test
110
115
  extend Gem::Deprecate
111
116
 
112
117
  attr_accessor :fetcher # :nodoc:
@@ -134,12 +139,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
134
139
  assert_equal expected.sort, loaded.sort if expected
135
140
  end
136
141
 
137
- # TODO: move to minitest
138
- def assert_path_exists(path, msg = nil)
139
- msg = message(msg) { "Expected path '#{path}' to exist" }
140
- assert File.exist?(path), msg
141
- end
142
-
143
142
  def assert_directory_exists(path, msg = nil)
144
143
  msg = message(msg) { "Expected path '#{path}' to be a directory" }
145
144
  assert_path_exists path
@@ -163,10 +162,74 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
163
162
  end
164
163
  end
165
164
 
166
- # TODO: move to minitest
167
- def refute_path_exists(path, msg = nil)
168
- msg = message(msg) { "Expected path '#{path}' to not exist" }
169
- refute File.exist?(path), msg
165
+ ##
166
+ # Sets the vendordir entry in RbConfig::CONFIG to +value+ and restores the
167
+ # original value when the block ends
168
+ #
169
+ def vendordir(value)
170
+ vendordir = RbConfig::CONFIG['vendordir']
171
+
172
+ if value
173
+ RbConfig::CONFIG['vendordir'] = value
174
+ else
175
+ RbConfig::CONFIG.delete 'vendordir'
176
+ end
177
+
178
+ yield
179
+ ensure
180
+ if vendordir
181
+ RbConfig::CONFIG['vendordir'] = vendordir
182
+ else
183
+ RbConfig::CONFIG.delete 'vendordir'
184
+ end
185
+ end
186
+
187
+ ##
188
+ # Sets the bindir entry in RbConfig::CONFIG to +value+ and restores the
189
+ # original value when the block ends
190
+ #
191
+ def bindir(value)
192
+ with_clean_path_to_ruby do
193
+ bindir = RbConfig::CONFIG['bindir']
194
+
195
+ if value
196
+ RbConfig::CONFIG['bindir'] = value
197
+ else
198
+ RbConfig::CONFIG.delete 'bindir'
199
+ end
200
+
201
+ begin
202
+ yield
203
+ ensure
204
+ if bindir
205
+ RbConfig::CONFIG['bindir'] = bindir
206
+ else
207
+ RbConfig::CONFIG.delete 'bindir'
208
+ end
209
+ end
210
+ end
211
+ end
212
+
213
+ ##
214
+ # Sets the EXEEXT entry in RbConfig::CONFIG to +value+ and restores the
215
+ # original value when the block ends
216
+ #
217
+ def exeext(value)
218
+ exeext = RbConfig::CONFIG['EXEEXT']
219
+
220
+ if value
221
+ RbConfig::CONFIG['EXEEXT'] = value
222
+ else
223
+ RbConfig::CONFIG.delete 'EXEEXT'
224
+ end
225
+
226
+ yield
227
+ ensure
228
+ if exeext
229
+ RbConfig::CONFIG['EXEEXT'] = exeext
230
+ else
231
+ RbConfig::CONFIG.delete 'EXEEXT'
232
+ end
170
233
  end
171
234
 
172
235
  def scan_make_command_lines(output)
@@ -199,22 +262,22 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
199
262
 
200
263
  def assert_contains_make_command(target, output, msg = nil)
201
264
  if output.match(/\n/)
202
- msg = message(msg) {
203
- 'Expected output containing make command "%s": %s' % [
265
+ msg = message(msg) do
266
+ "Expected output containing make command \"%s\", but was \n\nBEGIN_OF_OUTPUT\n%sEND_OF_OUTPUT" % [
204
267
  ('%s %s' % [make_command, target]).rstrip,
205
- output.inspect
268
+ output,
206
269
  ]
207
- }
270
+ end
208
271
  else
209
- msg = message(msg) {
272
+ msg = message(msg) do
210
273
  'Expected make command "%s": %s' % [
211
274
  ('%s %s' % [make_command, target]).rstrip,
212
- output.inspect
275
+ output,
213
276
  ]
214
- }
277
+ end
215
278
  end
216
279
 
217
- assert scan_make_command_lines(output).any? { |line|
280
+ assert scan_make_command_lines(output).any? {|line|
218
281
  make = parse_make_command_line(line)
219
282
 
220
283
  if make[:targets].include?(target)
@@ -228,13 +291,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
228
291
 
229
292
  include Gem::DefaultUserInteraction
230
293
 
231
- undef_method :default_test if instance_methods.include? 'default_test' or
232
- instance_methods.include? :default_test
233
-
234
- @@project_dir = Dir.pwd.untaint unless defined?(@@project_dir)
235
-
236
- @@initial_reset = false
237
-
238
294
  ##
239
295
  # #setup prepares a sandboxed location to install gems. All installs are
240
296
  # directed to a temporary directory. All install plugins are removed.
@@ -242,73 +298,39 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
242
298
  # If the +RUBY+ environment variable is set the given path is used for
243
299
  # Gem::ruby. The local platform is set to <tt>i386-mswin32</tt> for Windows
244
300
  # or <tt>i686-darwin8.10.1</tt> otherwise.
245
- #
246
- # If the +KEEP_FILES+ environment variable is set the files will not be
247
- # removed from <tt>/tmp/test_rubygems_#{$$}.#{Time.now.to_i}</tt>.
248
301
 
249
302
  def setup
250
- super
303
+ @orig_env = ENV.to_hash
304
+ @tmp = File.expand_path("tmp")
251
305
 
252
- @orig_gem_home = ENV['GEM_HOME']
253
- @orig_gem_path = ENV['GEM_PATH']
254
- @orig_gem_vendor = ENV['GEM_VENDOR']
255
- @orig_gem_spec_cache = ENV['GEM_SPEC_CACHE']
256
- @orig_rubygems_gemdeps = ENV['RUBYGEMS_GEMDEPS']
257
- @orig_bundle_gemfile = ENV['BUNDLE_GEMFILE']
258
- @orig_rubygems_host = ENV['RUBYGEMS_HOST']
259
- ENV.keys.find_all { |k| k.start_with?('GEM_REQUIREMENT_') }.each do |k|
260
- ENV.delete k
261
- end
262
- @orig_gem_env_requirements = ENV.to_hash
306
+ FileUtils.mkdir_p @tmp
263
307
 
264
308
  ENV['GEM_VENDOR'] = nil
265
309
  ENV['GEMRC'] = nil
310
+ ENV['XDG_CACHE_HOME'] = nil
311
+ ENV['XDG_CONFIG_HOME'] = nil
312
+ ENV['XDG_DATA_HOME'] = nil
266
313
  ENV['SOURCE_DATE_EPOCH'] = nil
314
+ ENV['BUNDLER_VERSION'] = nil
267
315
 
268
316
  @current_dir = Dir.pwd
269
317
  @fetcher = nil
270
318
 
271
- if Gem::USE_BUNDLER_FOR_GEMDEPS
272
- Bundler.ui = Bundler::UI::Silent.new
273
- end
274
319
  @back_ui = Gem::DefaultUserInteraction.ui
275
320
  @ui = Gem::MockGemUi.new
276
321
  # This needs to be a new instance since we call use_ui(@ui) when we want to
277
322
  # capture output
278
323
  Gem::DefaultUserInteraction.ui = Gem::MockGemUi.new
279
324
 
280
- tmpdir = File.expand_path Dir.tmpdir
281
- tmpdir.untaint
282
-
283
- if ENV['KEEP_FILES']
284
- @tempdir = File.join(tmpdir, "test_rubygems_#{$$}.#{Time.now.to_i}")
285
- else
286
- @tempdir = File.join(tmpdir, "test_rubygems_#{$$}")
287
- end
288
- @tempdir.untaint
289
-
290
- FileUtils.mkdir_p @tempdir
325
+ @tempdir = Dir.mktmpdir("test_rubygems_", @tmp)
326
+ @tempdir.tap(&Gem::UNTAINT)
291
327
 
292
- # This makes the tempdir consistent on OS X.
293
- # File.expand_path Dir.tmpdir #=> "/var/..."
294
- # Dir.chdir Dir.tmpdir do File.expand_path '.' end #=> "/private/var/..."
295
- # TODO use File#realpath above instead of #expand_path once 1.8 support is
296
- # dropped.
297
- Dir.chdir @tempdir do
298
- @tempdir = File.expand_path '.'
299
- @tempdir.untaint
300
- end
328
+ ENV["TMPDIR"] = @tempdir
301
329
 
302
- # This makes the tempdir consistent on Windows.
303
- # Dir.tmpdir may return short path name, but Dir[Dir.tmpdir] returns long
304
- # path name. https://bugs.ruby-lang.org/issues/10819
305
- # File.expand_path or File.realpath doesn't convert path name to long path
306
- # name. Only Dir[] (= Dir.glob) works.
307
- # Short and long path name is specific to Windows filesystem.
308
- if win_platform?
309
- @tempdir = Dir[@tempdir][0]
310
- @tempdir.untaint
311
- end
330
+ @orig_SYSTEM_WIDE_CONFIG_FILE = Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE
331
+ Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
332
+ Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
333
+ File.join(@tempdir, 'system-gemrc')
312
334
 
313
335
  @gemhome = File.join @tempdir, 'gemhome'
314
336
  @userhome = File.join @tempdir, 'userhome'
@@ -320,15 +342,16 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
320
342
  ruby
321
343
  end
322
344
 
323
- @git = ENV['GIT'] || 'git'
345
+ @git = ENV['GIT'] || (win_platform? ? 'git.exe' : 'git')
324
346
 
325
347
  Gem.ensure_gem_subdirectories @gemhome
348
+ Gem.ensure_default_gem_subdirectories @gemhome
326
349
 
327
350
  @orig_LOAD_PATH = $LOAD_PATH.dup
328
- $LOAD_PATH.map! { |s|
329
- expand_path = File.expand_path(s)
351
+ $LOAD_PATH.map! do |s|
352
+ expand_path = File.realpath(s) rescue File.expand_path(s)
330
353
  if expand_path != s
331
- expand_path.untaint
354
+ expand_path.tap(&Gem::UNTAINT)
332
355
  if s.instance_variable_defined?(:@gem_prelude_index)
333
356
  expand_path.instance_variable_set(:@gem_prelude_index, expand_path)
334
357
  end
@@ -336,48 +359,41 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
336
359
  s = expand_path
337
360
  end
338
361
  s
339
- }
362
+ end
340
363
 
341
364
  Dir.chdir @tempdir
342
365
 
343
- @orig_ENV_HOME = ENV['HOME']
344
366
  ENV['HOME'] = @userhome
367
+ Gem.instance_variable_set :@config_file, nil
345
368
  Gem.instance_variable_set :@user_home, nil
369
+ Gem.instance_variable_set :@config_home, nil
370
+ Gem.instance_variable_set :@data_home, nil
346
371
  Gem.instance_variable_set :@gemdeps, nil
347
372
  Gem.instance_variable_set :@env_requirements_by_name, nil
348
373
  Gem.send :remove_instance_variable, :@ruby_version if
349
374
  Gem.instance_variables.include? :@ruby_version
350
375
 
351
- FileUtils.mkdir_p @gemhome
352
376
  FileUtils.mkdir_p @userhome
353
377
 
354
- @orig_gem_private_key_passphrase = ENV['GEM_PRIVATE_KEY_PASSPHRASE']
355
378
  ENV['GEM_PRIVATE_KEY_PASSPHRASE'] = PRIVATE_KEY_PASSPHRASE
356
379
 
357
- @default_dir = File.join @tempdir, 'default'
358
- @default_spec_dir = File.join @default_dir, "specifications", "default"
359
- Gem.instance_variable_set :@default_dir, @default_dir
360
- FileUtils.mkdir_p @default_spec_dir
361
-
362
- # We use Gem::Specification.reset the first time only so that if there
363
- # are unresolved deps that leak into the whole test suite, they're at least
364
- # reported once.
365
- if @@initial_reset
366
- Gem::Specification.unresolved_deps.clear # done to avoid cross-test warnings
380
+ if Gem.java_platform?
381
+ @orig_default_gem_home = RbConfig::CONFIG['default_gem_home']
382
+ RbConfig::CONFIG['default_gem_home'] = @gemhome
367
383
  else
368
- @@initial_reset = true
369
- Gem::Specification.reset
384
+ Gem.instance_variable_set(:@default_dir, @gemhome)
370
385
  end
371
- Gem.use_paths(@gemhome)
372
386
 
373
- Gem::Security.reset
387
+ @orig_bindir = RbConfig::CONFIG["bindir"]
388
+ RbConfig::CONFIG["bindir"] = File.join @gemhome, "bin"
389
+
390
+ Gem::Specification.unresolved_deps.clear
391
+ Gem.use_paths(@gemhome)
374
392
 
375
393
  Gem.loaded_specs.clear
394
+ Gem.instance_variable_set(:@activated_gem_paths, 0)
376
395
  Gem.clear_default_specs
377
- Gem::Specification.unresolved_deps.clear
378
- if Gem::USE_BUNDLER_FOR_GEMDEPS
379
- Bundler.reset!
380
- end
396
+ Bundler.reset!
381
397
 
382
398
  Gem.configuration.verbose = true
383
399
  Gem.configuration.update_sources = true
@@ -390,8 +406,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
390
406
 
391
407
  Gem.searcher = nil
392
408
  Gem::SpecFetcher.fetcher = nil
393
- @orig_BASERUBY = RbConfig::CONFIG['BASERUBY']
394
- RbConfig::CONFIG['BASERUBY'] = RbConfig::CONFIG['ruby_install_name']
395
409
 
396
410
  @orig_arch = RbConfig::CONFIG['arch']
397
411
 
@@ -412,28 +426,20 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
412
426
 
413
427
  ##
414
428
  # #teardown restores the process to its original state and removes the
415
- # tempdir unless the +KEEP_FILES+ environment variable was set.
429
+ # tempdir
416
430
 
417
431
  def teardown
418
432
  $LOAD_PATH.replace @orig_LOAD_PATH if @orig_LOAD_PATH
419
433
  if @orig_LOADED_FEATURES
420
434
  if @orig_LOAD_PATH
421
- paths = @orig_LOAD_PATH.map {|path| File.join(File.expand_path(path), "/")}
422
435
  ($LOADED_FEATURES - @orig_LOADED_FEATURES).each do |feat|
423
- unless paths.any? {|path| feat.start_with?(path)}
424
- $LOADED_FEATURES.delete(feat)
425
- end
436
+ $LOADED_FEATURES.delete(feat) if feat.start_with?(@tmp)
426
437
  end
427
438
  else
428
439
  $LOADED_FEATURES.replace @orig_LOADED_FEATURES
429
440
  end
430
441
  end
431
442
 
432
- if @orig_BASERUBY
433
- RbConfig::CONFIG['BASERUBY'] = @orig_BASERUBY
434
- else
435
- RbConfig::CONFIG.delete('BASERUBY')
436
- end
437
443
  RbConfig::CONFIG['arch'] = @orig_arch
438
444
 
439
445
  if defined? Gem::RemoteFetcher
@@ -442,33 +448,24 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
442
448
 
443
449
  Dir.chdir @current_dir
444
450
 
445
- FileUtils.rm_rf @tempdir unless ENV['KEEP_FILES']
451
+ FileUtils.rm_rf @tempdir
446
452
 
447
- ENV.clear
448
- @orig_gem_env_requirements.each do |k,v|
449
- ENV[k] = v
450
- end
453
+ ENV.replace(@orig_env)
451
454
 
452
- ENV['GEM_HOME'] = @orig_gem_home
453
- ENV['GEM_PATH'] = @orig_gem_path
454
- ENV['GEM_VENDOR'] = @orig_gem_vendor
455
- ENV['GEM_SPEC_CACHE'] = @orig_gem_spec_cache
456
- ENV['RUBYGEMS_GEMDEPS'] = @orig_rubygems_gemdeps
457
- ENV['BUNDLE_GEMFILE'] = @orig_bundle_gemfile
458
- ENV['RUBYGEMS_HOST'] = @orig_rubygems_host
455
+ Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
456
+ Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
457
+ @orig_SYSTEM_WIDE_CONFIG_FILE
459
458
 
460
459
  Gem.ruby = @orig_ruby if @orig_ruby
461
460
 
462
- if @orig_ENV_HOME
463
- ENV['HOME'] = @orig_ENV_HOME
461
+ RbConfig::CONFIG['bindir'] = @orig_bindir
462
+
463
+ if Gem.java_platform?
464
+ RbConfig::CONFIG['default_gem_home'] = @orig_default_gem_home
464
465
  else
465
- ENV.delete 'HOME'
466
+ Gem.instance_variable_set :@default_dir, nil
466
467
  end
467
468
 
468
- Gem.instance_variable_set :@default_dir, nil
469
-
470
- ENV['GEM_PRIVATE_KEY_PASSPHRASE'] = @orig_gem_private_key_passphrase
471
-
472
469
  Gem::Specification._clear_load_cache
473
470
  Gem::Specification.unresolved_deps.clear
474
471
  Gem::refresh
@@ -480,6 +477,17 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
480
477
  @back_ui.close
481
478
  end
482
479
 
480
+ def credential_setup
481
+ @temp_cred = File.join(@userhome, '.gem', 'credentials')
482
+ FileUtils.mkdir_p File.dirname(@temp_cred)
483
+ File.write @temp_cred, ':rubygems_api_key: 701229f217cdf23b1344c7b4b54ca97'
484
+ File.chmod 0600, @temp_cred
485
+ end
486
+
487
+ def credential_teardown
488
+ FileUtils.rm_rf @temp_cred
489
+ end
490
+
483
491
  def common_installer_setup
484
492
  common_installer_teardown
485
493
 
@@ -568,7 +576,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
568
576
  end
569
577
 
570
578
  def in_path?(executable) # :nodoc:
571
- return true if %r%\A([A-Z]:|/)% =~ executable and File.exist? executable
579
+ return true if %r{\A([A-Z]:|/)} =~ executable and File.exist? executable
572
580
 
573
581
  ENV['PATH'].split(File::PATH_SEPARATOR).any? do |directory|
574
582
  File.exist? File.join directory, executable
@@ -581,7 +589,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
581
589
  def install_gem(spec, options = {})
582
590
  require 'rubygems/installer'
583
591
 
584
- gem = File.join @tempdir, "gems", "#{spec.full_name}.gem"
592
+ gem = spec.cache_file
585
593
 
586
594
  unless File.exist? gem
587
595
  use_ui Gem::MockGemUi.new do
@@ -590,7 +598,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
590
598
  end
591
599
  end
592
600
 
593
- gem = File.join(@tempdir, File.basename(spec.cache_file)).untaint
601
+ gem = File.join(@tempdir, File.basename(gem)).tap(&Gem::UNTAINT)
594
602
  end
595
603
 
596
604
  Gem::Installer.at(gem, options.merge({:wrappers => true})).install
@@ -608,23 +616,11 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
608
616
  def uninstall_gem(spec)
609
617
  require 'rubygems/uninstaller'
610
618
 
611
- Class.new(Gem::Uninstaller) {
619
+ Class.new(Gem::Uninstaller) do
612
620
  def ask_if_ok(spec)
613
621
  true
614
622
  end
615
- }.new(spec.name, :executables => true, :user_install => true).uninstall
616
- end
617
-
618
- ##
619
- # creates a temporary directory with hax
620
- # TODO: deprecate and remove
621
-
622
- def create_tmpdir
623
- tmpdir = nil
624
- Dir.chdir Dir.tmpdir do tmpdir = Dir.pwd end # HACK OSX /private/tmp
625
- tmpdir = File.join tmpdir, "test_rubygems_#{$$}"
626
- FileUtils.mkdir_p tmpdir
627
- return tmpdir
623
+ end.new(spec.name, :executables => true, :user_install => true).uninstall
628
624
  end
629
625
 
630
626
  ##
@@ -641,7 +637,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
641
637
  # Reads a Marshal file at +path+
642
638
 
643
639
  def read_cache(path)
644
- File.open path.dup.untaint, 'rb' do |io|
640
+ File.open path.dup.tap(&Gem::UNTAINT), 'rb' do |io|
645
641
  Marshal.load io.read
646
642
  end
647
643
  end
@@ -698,28 +694,17 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
698
694
  yield(s) if block_given?
699
695
  end
700
696
 
701
- Gem::Specification.map # HACK: force specs to (re-)load before we write
702
-
703
697
  written_path = write_file spec.spec_file do |io|
704
698
  io.write spec.to_ruby_for_cache
705
699
  end
706
700
 
707
- spec.loaded_from = spec.loaded_from = written_path
701
+ spec.loaded_from = written_path
708
702
 
709
703
  Gem::Specification.reset
710
704
 
711
705
  return spec
712
706
  end
713
707
 
714
- ##
715
- # TODO: remove in RubyGems 4.0
716
-
717
- def quick_spec(name, version = '2') # :nodoc:
718
- util_spec name, version
719
- end
720
- deprecate :quick_spec, :util_spec, 2018, 12
721
-
722
-
723
708
  ##
724
709
  # Builds a gem from +spec+ and places it in <tt>File.join @gemhome,
725
710
  # 'cache'</tt>. Automatically creates files based on +spec.files+
@@ -732,7 +717,10 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
732
717
  spec.files.each do |file|
733
718
  next if File.exist? file
734
719
  FileUtils.mkdir_p File.dirname(file)
735
- File.open file, 'w' do |fp| fp.puts "# #{file}" end
720
+
721
+ File.open file, 'w' do |fp|
722
+ fp.puts "# #{file}"
723
+ end
736
724
  end
737
725
 
738
726
  use_ui Gem::MockGemUi.new do
@@ -760,17 +748,12 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
760
748
  Gem::Specification.reset
761
749
  end
762
750
 
763
- def util_clear_default_gems
764
- FileUtils.rm_rf @default_spec_dir
765
- FileUtils.mkdir @default_spec_dir
766
- end
767
-
768
751
  ##
769
752
  # Install the provided specs
770
753
 
771
754
  def install_specs(*specs)
772
755
  specs.each do |spec|
773
- Gem::Installer.for_spec(spec).install
756
+ Gem::Installer.for_spec(spec, :force => true).install
774
757
  end
775
758
 
776
759
  Gem.searcher = nil
@@ -780,19 +763,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
780
763
  # Installs the provided default specs including writing the spec file
781
764
 
782
765
  def install_default_gems(*specs)
783
- install_default_specs(*specs)
784
-
785
- specs.each do |spec|
786
- File.open spec.loaded_from, 'w' do |io|
787
- io.write spec.to_ruby_for_cache
788
- end
789
- end
790
- end
791
-
792
- ##
793
- # Install the provided default specs
794
-
795
- def install_default_specs(*specs)
796
766
  specs.each do |spec|
797
767
  installer = Gem::Installer.for_spec(spec, :install_as_default => true)
798
768
  installer.install
@@ -814,63 +784,19 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
814
784
  ensure
815
785
  prefix = File.dirname(__FILE__) + "/"
816
786
  new_features = ($LOADED_FEATURES - old_loaded_features)
817
- old_loaded_features.concat(new_features.select {|f| f.rindex(prefix, 0)})
787
+ old_loaded_features.concat(new_features.select {|f| f.rindex(prefix, 0) })
818
788
  $LOADED_FEATURES.replace old_loaded_features
819
789
  end
820
790
 
821
- ##
822
- # new_spec is deprecated as it is never used.
823
- #
824
- # TODO: remove in RubyGems 4.0
825
-
826
- def new_spec(name, version, deps = nil, *files) # :nodoc:
827
- require 'rubygems/specification'
828
-
829
- spec = Gem::Specification.new do |s|
830
- s.platform = Gem::Platform::RUBY
831
- s.name = name
832
- s.version = version
833
- s.author = 'A User'
834
- s.email = 'example@example.com'
835
- s.homepage = 'http://example.com'
836
- s.summary = "this is a summary"
837
- s.description = "This is a test description"
838
-
839
- Array(deps).each do |n, req|
840
- s.add_dependency n, (req || '>= 0')
841
- end
842
-
843
- s.files.push(*files) unless files.empty?
844
-
845
- yield s if block_given?
846
- end
847
-
848
- spec.loaded_from = spec.spec_file
849
-
850
- unless files.empty?
851
- write_file spec.spec_file do |io|
852
- io.write spec.to_ruby_for_cache
853
- end
854
-
855
- util_build_gem spec
856
-
857
- cache_file = File.join @tempdir, 'gems', "#{spec.full_name}.gem"
858
- FileUtils.mkdir_p File.dirname cache_file
859
- FileUtils.mv spec.cache_file, cache_file
860
- FileUtils.rm spec.spec_file
861
- end
862
-
863
- spec
864
- end
865
- deprecate :new_spec, :none, 2018, 12
866
-
867
791
  def new_default_spec(name, version, deps = nil, *files)
868
792
  spec = util_spec name, version, deps
869
793
 
870
- spec.loaded_from = File.join(@default_spec_dir, spec.spec_name)
794
+ spec.loaded_from = File.join(@gemhome, "specifications", "default", spec.spec_name)
871
795
  spec.files = files
872
796
 
873
797
  lib_dir = File.join(@tempdir, "default_gems", "lib")
798
+ lib_dir.instance_variable_set(:@gem_prelude_index, lib_dir)
799
+ Gem.instance_variable_set(:@default_gem_load_paths, [*Gem.send(:default_gem_load_paths), lib_dir])
874
800
  $LOAD_PATH.unshift(lib_dir)
875
801
  files.each do |file|
876
802
  rb_path = File.join(lib_dir, file)
@@ -906,9 +832,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
906
832
  end
907
833
 
908
834
  if deps
909
- # Since Hash#each is unordered in 1.8, sort the keys and iterate that
910
- # way so the tests are deterministic on all implementations.
911
- deps.keys.sort.each do |n|
835
+ deps.keys.each do |n|
912
836
  spec.add_dependency n, (deps[n] || '>= 0')
913
837
  end
914
838
  end
@@ -920,14 +844,9 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
920
844
 
921
845
  util_build_gem spec
922
846
 
923
- cache_file = File.join @tempdir, 'gems', "#{spec.full_name}.gem"
924
- FileUtils.mkdir_p File.dirname cache_file
925
- FileUtils.mv spec.cache_file, cache_file
926
847
  FileUtils.rm spec.spec_file
927
848
  end
928
849
 
929
- Gem::Specification.reset
930
-
931
850
  return spec
932
851
  end
933
852
 
@@ -940,10 +859,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
940
859
  def util_gem(name, version, deps = nil, &block)
941
860
  if deps
942
861
  block = proc do |s|
943
- # Since Hash#each is unordered in 1.8, sort
944
- # the keys and iterate that way so the tests are
945
- # deterministic on all implementations.
946
- deps.keys.sort.each do |n|
862
+ deps.keys.each do |n|
947
863
  s.add_dependency n, (deps[n] || '>= 0')
948
864
  end
949
865
  end
@@ -1028,7 +944,7 @@ Also, a list:
1028
944
  s.add_dependency 'x', '>= 1'
1029
945
  end
1030
946
 
1031
- @pl1 = quick_gem 'pl', '1' do |s| # l for legacy
947
+ @pl1 = quick_gem 'pl', '1' do |s| # l for legacy
1032
948
  s.files = %w[lib/code.rb]
1033
949
  s.require_paths = %w[lib]
1034
950
  s.platform = Gem::Platform.new 'i386-linux'
@@ -1073,31 +989,6 @@ Also, a list:
1073
989
  platform
1074
990
  end
1075
991
 
1076
- ##
1077
- # Sets up a fake fetcher using the gems from #util_make_gems. Optionally
1078
- # additional +prerelease+ gems may be included.
1079
- #
1080
- # Gems created by this method may be fetched using Gem::RemoteFetcher.
1081
-
1082
- def util_setup_fake_fetcher(prerelease = false)
1083
- require 'zlib'
1084
- require 'socket'
1085
- require 'rubygems/remote_fetcher'
1086
-
1087
- @fetcher = Gem::FakeFetcher.new
1088
-
1089
- util_make_gems(prerelease)
1090
- Gem::Specification.reset
1091
-
1092
- @all_gems = [@a1, @a2, @a3a, @a_evil9, @b2, @c1_2].sort
1093
- @all_gem_names = @all_gems.map { |gem| gem.full_name }
1094
-
1095
- gem_names = [@a1.full_name, @a2.full_name, @a3a.full_name, @b2.full_name]
1096
- @gem_names = gem_names.sort.join("\n")
1097
-
1098
- Gem::RemoteFetcher.fetcher = @fetcher
1099
- end
1100
-
1101
992
  ##
1102
993
  # Add +spec+ to +@fetcher+ serving the data in the file +path+.
1103
994
  # +repo+ indicates which repo to make +spec+ appear to be in.
@@ -1109,7 +1000,6 @@ Also, a list:
1109
1000
 
1110
1001
  ##
1111
1002
  # Sets up Gem::SpecFetcher to return information from the gems in +specs+.
1112
- # Best used with +@all_gems+ from #util_setup_fake_fetcher.
1113
1003
 
1114
1004
  def util_setup_spec_fetcher(*specs)
1115
1005
  all_specs = Gem::Specification.to_a + specs
@@ -1117,7 +1007,7 @@ Also, a list:
1117
1007
 
1118
1008
  spec_fetcher = Gem::SpecFetcher.fetcher
1119
1009
 
1120
- prerelease, all = all_specs.partition { |spec| spec.version.prerelease? }
1010
+ prerelease, all = all_specs.partition {|spec| spec.version.prerelease? }
1121
1011
  latest = Gem::Specification._latest_specs all_specs
1122
1012
 
1123
1013
  spec_fetcher.specs[@uri] = []
@@ -1139,7 +1029,7 @@ Also, a list:
1139
1029
  unless Gem::RemoteFetcher === @fetcher
1140
1030
  v = Gem.marshal_version
1141
1031
 
1142
- specs = all.map { |spec| spec.name_tuple }
1032
+ specs = all.map {|spec| spec.name_tuple }
1143
1033
  s_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic specs
1144
1034
 
1145
1035
  latest_specs = latest.map do |spec|
@@ -1148,7 +1038,7 @@ Also, a list:
1148
1038
 
1149
1039
  l_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic latest_specs
1150
1040
 
1151
- prerelease_specs = prerelease.map { |spec| spec.name_tuple }
1041
+ prerelease_specs = prerelease.map {|spec| spec.name_tuple }
1152
1042
  p_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic prerelease_specs
1153
1043
 
1154
1044
  @fetcher.data["#{@gem_repo}specs.#{v}.gz"] = s_zip
@@ -1176,8 +1066,7 @@ Also, a list:
1176
1066
  end
1177
1067
 
1178
1068
  def util_set_RUBY_VERSION(version, patchlevel = nil, revision = nil, description = nil, engine = "ruby", engine_version = nil)
1179
- if Gem.instance_variables.include? :@ruby_version or
1180
- Gem.instance_variables.include? '@ruby_version'
1069
+ if Gem.instance_variables.include? :@ruby_version
1181
1070
  Gem.send :remove_instance_variable, :@ruby_version
1182
1071
  end
1183
1072
 
@@ -1236,6 +1125,20 @@ Also, a list:
1236
1125
  Gem.win_platform?
1237
1126
  end
1238
1127
 
1128
+ ##
1129
+ # Is this test being run on a Java platform?
1130
+
1131
+ def self.java_platform?
1132
+ Gem.java_platform?
1133
+ end
1134
+
1135
+ ##
1136
+ # Is this test being run on a Java platform?
1137
+
1138
+ def java_platform?
1139
+ Gem.java_platform?
1140
+ end
1141
+
1239
1142
  ##
1240
1143
  # Returns whether or not we're on a version of Ruby built with VC++ (or
1241
1144
  # Borland) versus Cygwin, Mingw, etc.
@@ -1306,7 +1209,7 @@ Also, a list:
1306
1209
 
1307
1210
  def build_rake_in(good=true)
1308
1211
  gem_ruby = Gem.ruby
1309
- Gem.ruby = @@ruby
1212
+ Gem.ruby = self.class.rubybin
1310
1213
  env_rake = ENV["rake"]
1311
1214
  rake = (good ? @@good_rake : @@bad_rake)
1312
1215
  ENV["rake"] = rake
@@ -1340,24 +1243,37 @@ Also, a list:
1340
1243
  end
1341
1244
 
1342
1245
  begin
1343
- require "rbconfig"
1344
- File.join(RbConfig::CONFIG["bindir"],
1345
- RbConfig::CONFIG["ruby_install_name"] +
1346
- RbConfig::CONFIG["EXEEXT"])
1246
+ Gem.ruby
1347
1247
  rescue LoadError
1348
1248
  "ruby"
1349
1249
  end
1350
1250
  end
1351
1251
 
1252
+ def ruby_with_rubygems_in_load_path
1253
+ [Gem.ruby, "-I", File.expand_path("..", __dir__)]
1254
+ end
1255
+
1256
+ def with_clean_path_to_ruby
1257
+ orig_ruby = Gem.ruby
1258
+
1259
+ Gem.instance_variable_set :@ruby, nil
1260
+
1261
+ yield
1262
+ ensure
1263
+ Gem.instance_variable_set :@ruby, orig_ruby
1264
+ end
1265
+
1352
1266
  class << self
1353
1267
  # :nodoc:
1354
1268
  ##
1355
1269
  # Return the join path, with escaping backticks, dollars, and
1356
1270
  # double-quotes. Unlike `shellescape`, equal-sign is not escaped.
1271
+
1357
1272
  private
1273
+
1358
1274
  def escape_path(*path)
1359
1275
  path = File.join(*path)
1360
- if %r'\A[-+:/=@,.\w]+\z' =~ path
1276
+ if %r{\A[-+:/=@,.\w]+\z} =~ path
1361
1277
  path
1362
1278
  else
1363
1279
  "\"#{path.gsub(/[`$"]/, '\\&')}\""
@@ -1365,7 +1281,6 @@ Also, a list:
1365
1281
  end
1366
1282
  end
1367
1283
 
1368
- @@ruby = rubybin
1369
1284
  @@good_rake = "#{rubybin} #{escape_path(TEST_PATH, 'good_rake.rb')}"
1370
1285
  @@bad_rake = "#{rubybin} #{escape_path(TEST_PATH, 'bad_rake.rb')}"
1371
1286
 
@@ -1481,7 +1396,6 @@ Also, a list:
1481
1396
  # It is available by requiring Gem::TestCase.
1482
1397
 
1483
1398
  class StaticSet < Gem::Resolver::Set
1484
-
1485
1399
  ##
1486
1400
  # A StaticSet ignores remote because it has a fixed set of gems.
1487
1401
 
@@ -1518,7 +1432,7 @@ Also, a list:
1518
1432
  # Finds all gems matching +dep+ in this set.
1519
1433
 
1520
1434
  def find_all(dep)
1521
- @specs.find_all { |s| dep.match? s, @prerelease }
1435
+ @specs.find_all {|s| dep.match? s, @prerelease }
1522
1436
  end
1523
1437
 
1524
1438
  ##
@@ -1584,7 +1498,7 @@ Also, a list:
1584
1498
  # :stopdoc:
1585
1499
  # only available in RubyGems tests
1586
1500
 
1587
- PRIVATE_KEY_PASSPHRASE = 'Foo bar'.freeze
1501
+ PRIVATE_KEY_PASSPHRASE = 'Foo bar'.freeze
1588
1502
 
1589
1503
  begin
1590
1504
  PRIVATE_KEY = load_key 'private'
@@ -1602,41 +1516,7 @@ Also, a list:
1602
1516
  PRIVATE_KEY = nil
1603
1517
  PUBLIC_KEY = nil
1604
1518
  PUBLIC_CERT = nil
1605
- end if defined?(OpenSSL::SSL)
1606
-
1607
- end
1608
-
1609
- # require dependencies that are not discoverable once GEM_HOME and GEM_PATH
1610
- # are wiped
1611
- begin
1612
- gem 'rake'
1613
- rescue Gem::LoadError
1614
- end
1615
-
1616
- begin
1617
- require 'rake/packagetask'
1618
- rescue LoadError
1619
- end
1620
-
1621
- begin
1622
- gem 'rdoc'
1623
- require 'rdoc'
1624
-
1625
- require 'rubygems/rdoc'
1626
- rescue LoadError, Gem::LoadError
1627
- end
1628
-
1629
- begin
1630
- gem 'builder'
1631
- require 'builder/xchar'
1632
- rescue LoadError, Gem::LoadError
1519
+ end if Gem::HAVE_OPENSSL
1633
1520
  end
1634
1521
 
1635
1522
  require 'rubygems/test_utilities'
1636
- tmpdirs = []
1637
- tmpdirs << (ENV['GEM_HOME'] = Dir.mktmpdir("home"))
1638
- tmpdirs << (ENV['GEM_PATH'] = Dir.mktmpdir("path"))
1639
- pid = $$
1640
- END {tmpdirs.each {|dir| Dir.rmdir(dir)} if $$ == pid}
1641
- Gem.clear_paths
1642
- Gem.loaded_specs.clear