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
@@ -7,17 +7,11 @@ require 'pathname'
7
7
  require 'tmpdir'
8
8
  require 'rbconfig'
9
9
 
10
- # TODO: push this up to test_case.rb once battle tested
11
-
12
- $LOAD_PATH.map! do |path|
13
- path.dup.untaint
14
- end
15
-
16
10
  class TestGem < Gem::TestCase
17
- RUBY_INSTALL_NAME = RbConfig::CONFIG['RUBY_INSTALL_NAME']
18
-
19
11
  PLUGINS_LOADED = [] # rubocop:disable Style/MutableConstant
20
12
 
13
+ PROJECT_DIR = File.expand_path('../../..', __FILE__).tap(&Gem::UNTAINT)
14
+
21
15
  def setup
22
16
  super
23
17
 
@@ -26,7 +20,7 @@ class TestGem < Gem::TestCase
26
20
  common_installer_setup
27
21
 
28
22
  ENV.delete 'RUBYGEMS_GEMDEPS'
29
- @additional = %w[a b].map { |d| File.join @tempdir, d }
23
+ @additional = %w[a b].map {|d| File.join @tempdir, d }
30
24
 
31
25
  util_remove_interrupt_command
32
26
  end
@@ -43,12 +37,12 @@ class TestGem < Gem::TestCase
43
37
 
44
38
  a1.activate
45
39
 
46
- assert_equal %w(a-1), loaded_spec_names
40
+ assert_equal %w[a-1], loaded_spec_names
47
41
  assert_equal ["b (> 0)"], unresolved_names
48
42
 
49
43
  Gem.finish_resolve
50
44
 
51
- assert_equal %w(a-1 b-2 c-2), loaded_spec_names
45
+ assert_equal %w[a-1 b-2 c-2], loaded_spec_names
52
46
  assert_equal [], unresolved_names
53
47
  end
54
48
  end
@@ -67,12 +61,12 @@ class TestGem < Gem::TestCase
67
61
 
68
62
  a1.activate
69
63
 
70
- assert_equal %w(a-1), loaded_spec_names
64
+ assert_equal %w[a-1], loaded_spec_names
71
65
  assert_equal ["b (> 0)", "d (> 0)"], unresolved_names
72
66
 
73
67
  Gem.finish_resolve
74
68
 
75
- assert_equal %w(a-1 b-1 c-1 d-2), loaded_spec_names
69
+ assert_equal %w[a-1 b-1 c-1 d-2], loaded_spec_names
76
70
  assert_equal [], unresolved_names
77
71
  end
78
72
  end
@@ -90,12 +84,12 @@ class TestGem < Gem::TestCase
90
84
  a1.activate
91
85
  c1.activate
92
86
 
93
- assert_equal %w(a-1 c-1), loaded_spec_names
87
+ assert_equal %w[a-1 c-1], loaded_spec_names
94
88
  assert_equal ["b (> 0)"], unresolved_names
95
89
 
96
90
  Gem.finish_resolve
97
91
 
98
- assert_equal %w(a-1 b-1 c-1), loaded_spec_names
92
+ assert_equal %w[a-1 b-1 c-1], loaded_spec_names
99
93
  assert_equal [], unresolved_names
100
94
  end
101
95
  end
@@ -110,7 +104,7 @@ class TestGem < Gem::TestCase
110
104
 
111
105
  installed = Gem.install 'a', '= 1', :install_dir => gemhome2
112
106
 
113
- assert_equal %w[a-1], installed.map { |spec| spec.full_name }
107
+ assert_equal %w[a-1], installed.map {|spec| spec.full_name }
114
108
 
115
109
  assert_path_exists File.join(gemhome2, 'gems', 'a-1')
116
110
  end
@@ -129,7 +123,7 @@ class TestGem < Gem::TestCase
129
123
  rescue StandardError
130
124
  Gem.install 'a', '= 1', :install_dir => gemhome2
131
125
  end
132
- assert_equal %w[a-1], installed.map { |spec| spec.full_name }
126
+ assert_equal %w[a-1], installed.map {|spec| spec.full_name }
133
127
  end
134
128
 
135
129
  def test_self_install_permissions
@@ -151,32 +145,40 @@ class TestGem < Gem::TestCase
151
145
  end
152
146
 
153
147
  def test_self_install_permissions_with_format_executable
154
- @format_executable = true
155
- assert_self_install_permissions
148
+ assert_self_install_permissions(format_executable: true)
156
149
  end
157
150
 
158
- def assert_self_install_permissions
151
+ def test_self_install_permissions_with_format_executable_and_non_standard_ruby_install_name
152
+ Gem::Installer.exec_format = nil
153
+ ruby_install_name 'ruby27' do
154
+ assert_self_install_permissions(format_executable: true)
155
+ end
156
+ ensure
157
+ Gem::Installer.exec_format = nil
158
+ end
159
+
160
+ def assert_self_install_permissions(format_executable: false)
159
161
  mask = win_platform? ? 0700 : 0777
160
162
  options = {
161
163
  :dir_mode => 0500,
162
- :prog_mode => 0510,
164
+ :prog_mode => win_platform? ? 0410 : 0510,
163
165
  :data_mode => 0640,
164
166
  :wrappers => true,
165
- :format_executable => !!(@format_executable if defined?(@format_executable))
167
+ :format_executable => format_executable,
166
168
  }
167
169
  Dir.chdir @tempdir do
168
170
  Dir.mkdir 'bin'
169
171
  Dir.mkdir 'data'
170
172
 
171
- File.write 'bin/foo.cmd', "p\n"
172
- File.chmod 0755, 'bin/foo.cmd'
173
+ File.write 'bin/foo', "#!/usr/bin/env ruby\n"
174
+ File.chmod 0755, 'bin/foo'
173
175
 
174
176
  File.write 'data/foo.txt', "blah\n"
175
177
 
176
178
  spec_fetcher do |f|
177
179
  f.gem 'foo', 1 do |s|
178
- s.executables = ['foo.cmd']
179
- s.files = %w[bin/foo.cmd data/foo.txt]
180
+ s.executables = ['foo']
181
+ s.files = %w[bin/foo data/foo.txt]
180
182
  end
181
183
  end
182
184
  Gem.install 'foo', Gem::Requirement.default, options
@@ -185,19 +187,18 @@ class TestGem < Gem::TestCase
185
187
  prog_mode = (options[:prog_mode] & mask).to_s(8)
186
188
  dir_mode = (options[:dir_mode] & mask).to_s(8)
187
189
  data_mode = (options[:data_mode] & mask).to_s(8)
188
- prog_name = 'foo.cmd'
189
- prog_name = RUBY_INSTALL_NAME.sub('ruby', 'foo.cmd') if options[:format_executable]
190
+ prog_name = 'foo'
191
+ prog_name = RbConfig::CONFIG['ruby_install_name'].sub('ruby', 'foo') if options[:format_executable]
190
192
  expected = {
191
193
  "bin/#{prog_name}" => prog_mode,
192
194
  'gems/foo-1' => dir_mode,
193
195
  'gems/foo-1/bin' => dir_mode,
194
196
  'gems/foo-1/data' => dir_mode,
195
- 'gems/foo-1/bin/foo.cmd' => prog_mode,
197
+ 'gems/foo-1/bin/foo' => prog_mode,
196
198
  'gems/foo-1/data/foo.txt' => data_mode,
197
199
  }
198
- # below is for intermittent errors on Appveyor & Travis 2019-01,
199
- # see https://github.com/rubygems/rubygems/pull/2568
200
- sleep 0.2
200
+ # add Windows script
201
+ expected["bin/#{prog_name}.bat"] = mask.to_s(8) if win_platform?
201
202
  result = {}
202
203
  Dir.chdir @gemhome do
203
204
  expected.each_key do |n|
@@ -206,13 +207,13 @@ class TestGem < Gem::TestCase
206
207
  end
207
208
  assert_equal(expected, result)
208
209
  ensure
209
- File.chmod(0755, *Dir.glob(@gemhome+'/gems/**/').map {|path| path.untaint})
210
+ File.chmod(0755, *Dir.glob(@gemhome + '/gems/**/').map {|path| path.tap(&Gem::UNTAINT) })
210
211
  end
211
212
 
212
213
  def test_require_missing
213
214
  save_loaded_features do
214
215
  assert_raises ::LoadError do
215
- require "q"
216
+ require "test_require_missing"
216
217
  end
217
218
  end
218
219
  end
@@ -259,6 +260,14 @@ class TestGem < Gem::TestCase
259
260
  assert_match 'a-2/bin/exec', Gem.bin_path('a', 'exec', '>= 0')
260
261
  end
261
262
 
263
+ def test_self_activate_bin_path_no_exec_name
264
+ e = assert_raises ArgumentError do
265
+ Gem.activate_bin_path 'a'
266
+ end
267
+
268
+ assert_equal 'you must supply exec_name', e.message
269
+ end
270
+
262
271
  def test_activate_bin_path_resolves_eagerly
263
272
  a1 = util_spec 'a', '1' do |s|
264
273
  s.executables = ['exec']
@@ -285,7 +294,75 @@ class TestGem < Gem::TestCase
285
294
  gem 'c'
286
295
  Gem.finish_resolve
287
296
 
288
- assert_equal %w(a-1 b-2 c-1), loaded_spec_names
297
+ assert_equal %w[a-1 b-2 c-1], loaded_spec_names
298
+ end
299
+
300
+ def test_activate_bin_path_does_not_error_if_a_gem_thats_not_finally_activated_has_orphaned_dependencies
301
+ a1 = util_spec 'a', '1' do |s|
302
+ s.executables = ['exec']
303
+ s.add_dependency 'b'
304
+ end
305
+
306
+ b1 = util_spec 'b', '1' do |s|
307
+ s.add_dependency 'c', '1'
308
+ end
309
+
310
+ b2 = util_spec 'b', '2' do |s|
311
+ s.add_dependency 'c', '2'
312
+ end
313
+
314
+ c2 = util_spec 'c', '2'
315
+
316
+ install_specs c2, b1, b2, a1
317
+
318
+ # c1 is missing, but not needed for activation, so we should not get any errors here
319
+
320
+ Gem.activate_bin_path("a", "exec", ">= 0")
321
+
322
+ assert_equal %w[a-1 b-2 c-2], loaded_spec_names
323
+ end
324
+
325
+ def test_activate_bin_path_raises_a_meaningful_error_if_a_gem_thats_finally_activated_has_orphaned_dependencies
326
+ a1 = util_spec 'a', '1' do |s|
327
+ s.executables = ['exec']
328
+ s.add_dependency 'b'
329
+ end
330
+
331
+ b1 = util_spec 'b', '1' do |s|
332
+ s.add_dependency 'c', '1'
333
+ end
334
+
335
+ b2 = util_spec 'b', '2' do |s|
336
+ s.add_dependency 'c', '2'
337
+ end
338
+
339
+ c1 = util_spec 'c', '1'
340
+
341
+ install_specs c1, b1, b2, a1
342
+
343
+ # c2 is missing, and b2 which has it as a dependency will be activated, so we should get an error about the orphaned dependency
344
+
345
+ e = assert_raises Gem::UnsatisfiableDependencyError do
346
+ load Gem.activate_bin_path("a", "exec", ">= 0")
347
+ end
348
+
349
+ assert_equal "Unable to resolve dependency: 'b (>= 0)' requires 'c (= 2)'", e.message
350
+ end
351
+
352
+ def test_activate_bin_path_in_debug_mode
353
+ a1 = util_spec 'a', '1' do |s|
354
+ s.executables = ['exec']
355
+ end
356
+
357
+ install_specs a1
358
+
359
+ require "open3"
360
+ output, status = Open3.capture2e(
361
+ { "GEM_HOME" => Gem.paths.home, "DEBUG_RESOLVER" => "1" },
362
+ *ruby_with_rubygems_in_load_path, "-e", "\"Gem.activate_bin_path('a', 'exec', '>= 0')\""
363
+ )
364
+
365
+ assert status.success?, output
289
366
  end
290
367
 
291
368
  def test_activate_bin_path_gives_proper_error_for_bundler
@@ -311,7 +388,7 @@ class TestGem < Gem::TestCase
311
388
  L
312
389
  end
313
390
 
314
- File.open("Gemfile", "w") { |f| f.puts('source "https://rubygems.org"') }
391
+ File.open("Gemfile", "w") {|f| f.puts('source "https://rubygems.org"') }
315
392
 
316
393
  e = assert_raises Gem::GemNotFoundException do
317
394
  load Gem.activate_bin_path("bundler", "bundle", ">= 0.a")
@@ -323,6 +400,100 @@ class TestGem < Gem::TestCase
323
400
  refute_includes e.message, "can't find gem bundler (>= 0.a) with executable bundle"
324
401
  end
325
402
 
403
+ def test_activate_bin_path_selects_exact_bundler_version_if_present
404
+ bundler_latest = util_spec 'bundler', '2.0.1' do |s|
405
+ s.executables = ['bundle']
406
+ end
407
+
408
+ bundler_previous = util_spec 'bundler', '2.0.0' do |s|
409
+ s.executables = ['bundle']
410
+ end
411
+
412
+ install_specs bundler_latest, bundler_previous
413
+
414
+ File.open("Gemfile.lock", "w") do |f|
415
+ f.write <<-L.gsub(/ {8}/, "")
416
+ GEM
417
+ remote: https://rubygems.org/
418
+ specs:
419
+
420
+ PLATFORMS
421
+ ruby
422
+
423
+ DEPENDENCIES
424
+
425
+ BUNDLED WITH
426
+ 2.0.0
427
+ L
428
+ end
429
+
430
+ File.open("Gemfile", "w") {|f| f.puts('source "https://rubygems.org"') }
431
+
432
+ load Gem.activate_bin_path("bundler", "bundle", ">= 0.a")
433
+
434
+ assert_equal %w[bundler-2.0.0], loaded_spec_names
435
+ end
436
+
437
+ def test_activate_bin_path_respects_underscore_selection_if_given
438
+ bundler_latest = util_spec 'bundler', '2.0.1' do |s|
439
+ s.executables = ['bundle']
440
+ end
441
+
442
+ bundler_previous = util_spec 'bundler', '1.17.3' do |s|
443
+ s.executables = ['bundle']
444
+ end
445
+
446
+ install_specs bundler_latest, bundler_previous
447
+
448
+ File.open("Gemfile.lock", "w") do |f|
449
+ f.write <<-L.gsub(/ {8}/, "")
450
+ GEM
451
+ remote: https://rubygems.org/
452
+ specs:
453
+
454
+ PLATFORMS
455
+ ruby
456
+
457
+ DEPENDENCIES
458
+
459
+ BUNDLED WITH
460
+ 2.0.1
461
+ L
462
+ end
463
+
464
+ File.open("Gemfile", "w") {|f| f.puts('source "https://rubygems.org"') }
465
+
466
+ load Gem.activate_bin_path("bundler", "bundle", "= 1.17.3")
467
+
468
+ assert_equal %w[bundler-1.17.3], loaded_spec_names
469
+ end
470
+
471
+ def test_activate_bin_path_gives_proper_error_for_bundler_when_underscore_selection_given
472
+ File.open("Gemfile.lock", "w") do |f|
473
+ f.write <<-L.gsub(/ {8}/, "")
474
+ GEM
475
+ remote: https://rubygems.org/
476
+ specs:
477
+
478
+ PLATFORMS
479
+ ruby
480
+
481
+ DEPENDENCIES
482
+
483
+ BUNDLED WITH
484
+ 2.1.4
485
+ L
486
+ end
487
+
488
+ File.open("Gemfile", "w") {|f| f.puts('source "https://rubygems.org"') }
489
+
490
+ e = assert_raises Gem::GemNotFoundException do
491
+ load Gem.activate_bin_path("bundler", "bundle", "= 2.2.8")
492
+ end
493
+
494
+ assert_equal "can't find gem bundler (= 2.2.8) with executable bundle", e.message
495
+ end
496
+
326
497
  def test_self_bin_path_no_exec_name
327
498
  e = assert_raises ArgumentError do
328
499
  Gem.bin_path 'a'
@@ -410,7 +581,10 @@ class TestGem < Gem::TestCase
410
581
  fp.puts 'blah'
411
582
  end
412
583
 
413
- foo = util_spec 'foo' do |s| s.files = %w[data/foo.txt] end
584
+ foo = util_spec 'foo' do |s|
585
+ s.files = %w[data/foo.txt]
586
+ end
587
+
414
588
  install_gem foo
415
589
  end
416
590
 
@@ -446,55 +620,43 @@ class TestGem < Gem::TestCase
446
620
  end
447
621
 
448
622
  def test_default_path
449
- orig_vendordir = RbConfig::CONFIG['vendordir']
450
- RbConfig::CONFIG['vendordir'] = File.join @tempdir, 'vendor'
451
-
452
- FileUtils.rm_rf Gem.user_home
623
+ vendordir(File.join(@tempdir, 'vendor')) do
624
+ FileUtils.rm_rf Gem.user_home
453
625
 
454
- expected = [Gem.default_dir]
626
+ expected = [Gem.default_dir]
455
627
 
456
- assert_equal expected, Gem.default_path
457
- ensure
458
- RbConfig::CONFIG['vendordir'] = orig_vendordir
628
+ assert_equal expected, Gem.default_path
629
+ end
459
630
  end
460
631
 
461
632
  def test_default_path_missing_vendor
462
- orig_vendordir = RbConfig::CONFIG['vendordir']
463
- RbConfig::CONFIG.delete 'vendordir'
633
+ vendordir(nil) do
634
+ FileUtils.rm_rf Gem.user_home
464
635
 
465
- FileUtils.rm_rf Gem.user_home
636
+ expected = [Gem.default_dir]
466
637
 
467
- expected = [Gem.default_dir]
468
-
469
- assert_equal expected, Gem.default_path
470
- ensure
471
- RbConfig::CONFIG['vendordir'] = orig_vendordir
638
+ assert_equal expected, Gem.default_path
639
+ end
472
640
  end
473
641
 
474
642
  def test_default_path_user_home
475
- orig_vendordir = RbConfig::CONFIG['vendordir']
476
- RbConfig::CONFIG['vendordir'] = File.join @tempdir, 'vendor'
477
-
478
- expected = [Gem.user_dir, Gem.default_dir]
643
+ vendordir(File.join(@tempdir, 'vendor')) do
644
+ expected = [Gem.user_dir, Gem.default_dir]
479
645
 
480
- assert_equal expected, Gem.default_path
481
- ensure
482
- RbConfig::CONFIG['vendordir'] = orig_vendordir
646
+ assert_equal expected, Gem.default_path
647
+ end
483
648
  end
484
649
 
485
650
  def test_default_path_vendor_dir
486
- orig_vendordir = RbConfig::CONFIG['vendordir']
487
- RbConfig::CONFIG['vendordir'] = File.join @tempdir, 'vendor'
488
-
489
- FileUtils.mkdir_p Gem.vendor_dir
651
+ vendordir(File.join(@tempdir, 'vendor')) do
652
+ FileUtils.mkdir_p Gem.vendor_dir
490
653
 
491
- FileUtils.rm_rf Gem.user_home
654
+ FileUtils.rm_rf Gem.user_home
492
655
 
493
- expected = [Gem.default_dir, Gem.vendor_dir]
656
+ expected = [Gem.default_dir, Gem.vendor_dir]
494
657
 
495
- assert_equal expected, Gem.default_path
496
- ensure
497
- RbConfig::CONFIG['vendordir'] = orig_vendordir
658
+ assert_equal expected, Gem.default_path
659
+ end
498
660
  end
499
661
 
500
662
  def test_self_default_sources
@@ -576,7 +738,7 @@ class TestGem < Gem::TestCase
576
738
  assert_directory_exists util_cache_dir
577
739
  end
578
740
 
579
- unless win_platform? || Process.uid.zero? # only for FS that support write protection
741
+ unless win_platform? || Process.uid.zero? # only for FS that support write protection
580
742
  def test_self_ensure_gem_directories_write_protected
581
743
  gemdir = File.join @tempdir, "egd"
582
744
  FileUtils.rm_r gemdir rescue nil
@@ -608,6 +770,11 @@ class TestGem < Gem::TestCase
608
770
  ensure
609
771
  FileUtils.chmod 0600, parent
610
772
  end
773
+
774
+ def test_self_ensure_gem_directories_non_existent_paths
775
+ Gem.ensure_gem_subdirectories '/proc/0123456789/bogus' # should not raise
776
+ Gem.ensure_gem_subdirectories 'classpath:/bogus/x' # JRuby embed scenario
777
+ end
611
778
  end
612
779
 
613
780
  def test_self_extension_dir_shared
@@ -623,12 +790,12 @@ class TestGem < Gem::TestCase
623
790
  end
624
791
 
625
792
  def test_self_find_files
626
- cwd = File.expand_path("test/rubygems", @@project_dir)
793
+ cwd = File.expand_path("test/rubygems", PROJECT_DIR)
627
794
  $LOAD_PATH.unshift cwd
628
795
 
629
796
  discover_path = File.join 'lib', 'sff', 'discover.rb'
630
797
 
631
- foo1, foo2 = %w(1 2).map { |version|
798
+ foo1, foo2 = %w[1 2].map do |version|
632
799
  spec = quick_gem 'sff', version do |s|
633
800
  s.files << discover_path
634
801
  end
@@ -638,12 +805,12 @@ class TestGem < Gem::TestCase
638
805
  end
639
806
 
640
807
  spec
641
- }
808
+ end
642
809
 
643
810
  Gem.refresh
644
811
 
645
812
  expected = [
646
- File.expand_path('test/rubygems/sff/discover.rb', @@project_dir),
813
+ File.expand_path('test/rubygems/sff/discover.rb', PROJECT_DIR),
647
814
  File.join(foo2.full_gem_path, discover_path),
648
815
  File.join(foo1.full_gem_path, discover_path),
649
816
  ]
@@ -655,12 +822,12 @@ class TestGem < Gem::TestCase
655
822
  end
656
823
 
657
824
  def test_self_find_files_with_gemfile
658
- cwd = File.expand_path("test/rubygems", @@project_dir)
825
+ cwd = File.expand_path("test/rubygems", PROJECT_DIR)
659
826
  actual_load_path = $LOAD_PATH.unshift(cwd).dup
660
827
 
661
828
  discover_path = File.join 'lib', 'sff', 'discover.rb'
662
829
 
663
- foo1, _ = %w(1 2).map { |version|
830
+ foo1, _ = %w[1 2].map do |version|
664
831
  spec = quick_gem 'sff', version do |s|
665
832
  s.files << discover_path
666
833
  end
@@ -670,7 +837,7 @@ class TestGem < Gem::TestCase
670
837
  end
671
838
 
672
839
  spec
673
- }
840
+ end
674
841
  Gem.refresh
675
842
 
676
843
  write_file(File.join Dir.pwd, 'Gemfile') do |fp|
@@ -680,23 +847,23 @@ class TestGem < Gem::TestCase
680
847
  Gem.use_gemdeps(File.join Dir.pwd, 'Gemfile')
681
848
 
682
849
  expected = [
683
- File.expand_path('test/rubygems/sff/discover.rb', @@project_dir),
684
- File.join(foo1.full_gem_path, discover_path)
850
+ File.expand_path('test/rubygems/sff/discover.rb', PROJECT_DIR),
851
+ File.join(foo1.full_gem_path, discover_path),
685
852
  ].sort
686
853
 
687
854
  assert_equal expected, Gem.find_files('sff/discover').sort
688
855
  assert_equal expected, Gem.find_files('sff/**.rb').sort, '[ruby-core:31730]'
689
856
  ensure
690
- assert_equal cwd, actual_load_path.shift
857
+ assert_equal cwd, actual_load_path.shift unless Gem.java_platform?
691
858
  end
692
859
 
693
860
  def test_self_find_latest_files
694
- cwd = File.expand_path("test/rubygems", @@project_dir)
861
+ cwd = File.expand_path("test/rubygems", PROJECT_DIR)
695
862
  $LOAD_PATH.unshift cwd
696
863
 
697
864
  discover_path = File.join 'lib', 'sff', 'discover.rb'
698
865
 
699
- _, foo2 = %w(1 2).map { |version|
866
+ _, foo2 = %w[1 2].map do |version|
700
867
  spec = quick_gem 'sff', version do |s|
701
868
  s.files << discover_path
702
869
  end
@@ -706,12 +873,12 @@ class TestGem < Gem::TestCase
706
873
  end
707
874
 
708
875
  spec
709
- }
876
+ end
710
877
 
711
878
  Gem.refresh
712
879
 
713
880
  expected = [
714
- File.expand_path('test/rubygems/sff/discover.rb', @@project_dir),
881
+ File.expand_path('test/rubygems/sff/discover.rb', PROJECT_DIR),
715
882
  File.join(foo2.full_gem_path, discover_path),
716
883
  ]
717
884
 
@@ -863,12 +1030,12 @@ class TestGem < Gem::TestCase
863
1030
  end
864
1031
 
865
1032
  def test_self_prefix
866
- assert_equal @@project_dir, Gem.prefix
1033
+ assert_equal PROJECT_DIR, Gem.prefix
867
1034
  end
868
1035
 
869
1036
  def test_self_prefix_libdir
870
1037
  orig_libdir = RbConfig::CONFIG['libdir']
871
- RbConfig::CONFIG['libdir'] = @@project_dir
1038
+ RbConfig::CONFIG['libdir'] = PROJECT_DIR
872
1039
 
873
1040
  assert_nil Gem.prefix
874
1041
  ensure
@@ -877,7 +1044,7 @@ class TestGem < Gem::TestCase
877
1044
 
878
1045
  def test_self_prefix_sitelibdir
879
1046
  orig_sitelibdir = RbConfig::CONFIG['sitelibdir']
880
- RbConfig::CONFIG['sitelibdir'] = @@project_dir
1047
+ RbConfig::CONFIG['sitelibdir'] = PROJECT_DIR
881
1048
 
882
1049
  assert_nil Gem.prefix
883
1050
  ensure
@@ -936,48 +1103,26 @@ class TestGem < Gem::TestCase
936
1103
 
937
1104
  Gem.refresh
938
1105
 
939
- Gem::Specification.each{|spec| assert spec.activated? if spec == s}
1106
+ Gem::Specification.each{|spec| assert spec.activated? if spec == s }
940
1107
 
941
1108
  Gem.loaded_specs.delete(s)
942
1109
  Gem.refresh
943
1110
  end
944
1111
 
945
1112
  def test_self_ruby_escaping_spaces_in_path
946
- orig_ruby = Gem.ruby
947
- orig_bindir = RbConfig::CONFIG['bindir']
948
- orig_ruby_install_name = RbConfig::CONFIG['ruby_install_name']
949
- orig_exe_ext = RbConfig::CONFIG['EXEEXT']
950
-
951
- RbConfig::CONFIG['bindir'] = "C:/Ruby 1.8/bin"
952
- RbConfig::CONFIG['ruby_install_name'] = "ruby"
953
- RbConfig::CONFIG['EXEEXT'] = ".exe"
954
- Gem.instance_variable_set("@ruby", nil)
955
-
956
- assert_equal "\"C:/Ruby 1.8/bin/ruby.exe\"", Gem.ruby
957
- ensure
958
- Gem.instance_variable_set("@ruby", orig_ruby)
959
- RbConfig::CONFIG['bindir'] = orig_bindir
960
- RbConfig::CONFIG['ruby_install_name'] = orig_ruby_install_name
961
- RbConfig::CONFIG['EXEEXT'] = orig_exe_ext
1113
+ with_clean_path_to_ruby do
1114
+ with_rb_config_ruby("C:/Ruby 1.8/bin/ruby.exe") do
1115
+ assert_equal "\"C:/Ruby 1.8/bin/ruby.exe\"", Gem.ruby
1116
+ end
1117
+ end
962
1118
  end
963
1119
 
964
1120
  def test_self_ruby_path_without_spaces
965
- orig_ruby = Gem.ruby
966
- orig_bindir = RbConfig::CONFIG['bindir']
967
- orig_ruby_install_name = RbConfig::CONFIG['ruby_install_name']
968
- orig_exe_ext = RbConfig::CONFIG['EXEEXT']
969
-
970
- RbConfig::CONFIG['bindir'] = "C:/Ruby18/bin"
971
- RbConfig::CONFIG['ruby_install_name'] = "ruby"
972
- RbConfig::CONFIG['EXEEXT'] = ".exe"
973
- Gem.instance_variable_set("@ruby", nil)
974
-
975
- assert_equal "C:/Ruby18/bin/ruby.exe", Gem.ruby
976
- ensure
977
- Gem.instance_variable_set("@ruby", orig_ruby)
978
- RbConfig::CONFIG['bindir'] = orig_bindir
979
- RbConfig::CONFIG['ruby_install_name'] = orig_ruby_install_name
980
- RbConfig::CONFIG['EXEEXT'] = orig_exe_ext
1121
+ with_clean_path_to_ruby do
1122
+ with_rb_config_ruby("C:/Ruby18/bin/ruby.exe") do
1123
+ assert_equal "C:/Ruby18/bin/ruby.exe", Gem.ruby
1124
+ end
1125
+ end
981
1126
  end
982
1127
 
983
1128
  def test_self_ruby_api_version
@@ -1027,7 +1172,7 @@ class TestGem < Gem::TestCase
1027
1172
  util_restore_RUBY_VERSION
1028
1173
  end
1029
1174
 
1030
- def test_self_ruby_version_with_prerelease
1175
+ def test_self_ruby_version_with_svn_prerelease
1031
1176
  util_set_RUBY_VERSION '2.6.0', -1, 63539, 'ruby 2.6.0preview2 (2018-05-31 trunk 63539) [x86_64-linux]'
1032
1177
 
1033
1178
  assert_equal Gem::Version.new('2.6.0.preview2'), Gem.ruby_version
@@ -1035,6 +1180,14 @@ class TestGem < Gem::TestCase
1035
1180
  util_restore_RUBY_VERSION
1036
1181
  end
1037
1182
 
1183
+ def test_self_ruby_version_with_git_prerelease
1184
+ util_set_RUBY_VERSION '2.7.0', -1, 'b563439274a402e33541f5695b1bfd4ac1085638', 'ruby 2.7.0preview3 (2019-11-23 master b563439274) [x86_64-linux]'
1185
+
1186
+ assert_equal Gem::Version.new('2.7.0.preview3'), Gem.ruby_version
1187
+ ensure
1188
+ util_restore_RUBY_VERSION
1189
+ end
1190
+
1038
1191
  def test_self_ruby_version_with_non_mri_implementations_with_mri_prerelase_compatibility
1039
1192
  util_set_RUBY_VERSION '2.6.0', -1, 63539, 'weirdjruby 9.2.0.0 (2.6.0preview2) 2018-05-24 81156a8 OpenJDK 64-Bit Server VM 25.171-b11 on 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11 [linux-x86_64]', 'weirdjruby', '9.2.0.0'
1040
1193
 
@@ -1043,7 +1196,7 @@ class TestGem < Gem::TestCase
1043
1196
  util_restore_RUBY_VERSION
1044
1197
  end
1045
1198
 
1046
- def test_self_ruby_version_with_trunk
1199
+ def test_self_ruby_version_with_svn_trunk
1047
1200
  util_set_RUBY_VERSION '1.9.2', -1, 23493, 'ruby 1.9.2dev (2009-05-20 trunk 23493) [x86_64-linux]'
1048
1201
 
1049
1202
  assert_equal Gem::Version.new('1.9.2.dev'), Gem.ruby_version
@@ -1051,6 +1204,14 @@ class TestGem < Gem::TestCase
1051
1204
  util_restore_RUBY_VERSION
1052
1205
  end
1053
1206
 
1207
+ def test_self_ruby_version_with_git_master
1208
+ util_set_RUBY_VERSION '2.7.0', -1, '5de284ec78220e75643f89b454ce999da0c1c195', 'ruby 2.7.0dev (2019-12-23T01:37:30Z master 5de284ec78) [x86_64-linux]'
1209
+
1210
+ assert_equal Gem::Version.new('2.7.0.dev'), Gem.ruby_version
1211
+ ensure
1212
+ util_restore_RUBY_VERSION
1213
+ end
1214
+
1054
1215
  def test_self_rubygems_version
1055
1216
  assert_equal Gem::Version.new(Gem::VERSION), Gem.rubygems_version
1056
1217
  end
@@ -1084,7 +1245,7 @@ class TestGem < Gem::TestCase
1084
1245
  def test_self_post_build
1085
1246
  assert_equal 1, Gem.post_build_hooks.length
1086
1247
 
1087
- Gem.post_build do |installer| end
1248
+ Gem.post_build {|installer| }
1088
1249
 
1089
1250
  assert_equal 2, Gem.post_build_hooks.length
1090
1251
  end
@@ -1092,7 +1253,7 @@ class TestGem < Gem::TestCase
1092
1253
  def test_self_post_install
1093
1254
  assert_equal 1, Gem.post_install_hooks.length
1094
1255
 
1095
- Gem.post_install do |installer| end
1256
+ Gem.post_install {|installer| }
1096
1257
 
1097
1258
  assert_equal 2, Gem.post_install_hooks.length
1098
1259
  end
@@ -1100,7 +1261,7 @@ class TestGem < Gem::TestCase
1100
1261
  def test_self_done_installing
1101
1262
  assert_empty Gem.done_installing_hooks
1102
1263
 
1103
- Gem.done_installing do |gems| end
1264
+ Gem.done_installing {|gems| }
1104
1265
 
1105
1266
  assert_equal 1, Gem.done_installing_hooks.length
1106
1267
  end
@@ -1108,7 +1269,7 @@ class TestGem < Gem::TestCase
1108
1269
  def test_self_post_reset
1109
1270
  assert_empty Gem.post_reset_hooks
1110
1271
 
1111
- Gem.post_reset { }
1272
+ Gem.post_reset {}
1112
1273
 
1113
1274
  assert_equal 1, Gem.post_reset_hooks.length
1114
1275
  end
@@ -1116,7 +1277,7 @@ class TestGem < Gem::TestCase
1116
1277
  def test_self_post_uninstall
1117
1278
  assert_equal 1, Gem.post_uninstall_hooks.length
1118
1279
 
1119
- Gem.post_uninstall do |installer| end
1280
+ Gem.post_uninstall {|installer| }
1120
1281
 
1121
1282
  assert_equal 2, Gem.post_uninstall_hooks.length
1122
1283
  end
@@ -1124,7 +1285,7 @@ class TestGem < Gem::TestCase
1124
1285
  def test_self_pre_install
1125
1286
  assert_equal 1, Gem.pre_install_hooks.length
1126
1287
 
1127
- Gem.pre_install do |installer| end
1288
+ Gem.pre_install {|installer| }
1128
1289
 
1129
1290
  assert_equal 2, Gem.pre_install_hooks.length
1130
1291
  end
@@ -1132,7 +1293,7 @@ class TestGem < Gem::TestCase
1132
1293
  def test_self_pre_reset
1133
1294
  assert_empty Gem.pre_reset_hooks
1134
1295
 
1135
- Gem.pre_reset { }
1296
+ Gem.pre_reset {}
1136
1297
 
1137
1298
  assert_equal 1, Gem.pre_reset_hooks.length
1138
1299
  end
@@ -1140,7 +1301,7 @@ class TestGem < Gem::TestCase
1140
1301
  def test_self_pre_uninstall
1141
1302
  assert_equal 1, Gem.pre_uninstall_hooks.length
1142
1303
 
1143
- Gem.pre_uninstall do |installer| end
1304
+ Gem.pre_uninstall {|installer| }
1144
1305
 
1145
1306
  assert_equal 2, Gem.pre_uninstall_hooks.length
1146
1307
  end
@@ -1169,7 +1330,7 @@ class TestGem < Gem::TestCase
1169
1330
 
1170
1331
  install_specs b1, b2, b3
1171
1332
 
1172
- specs1 = Gem::Specification.stubs.find_all { |s| s.name == 'b' }
1333
+ specs1 = Gem::Specification.stubs.find_all {|s| s.name == 'b' }
1173
1334
  Gem::Specification.reset
1174
1335
  specs2 = Gem::Specification.stubs_for('b')
1175
1336
  assert_equal specs1.map(&:version), specs2.map(&:version)
@@ -1192,7 +1353,8 @@ class TestGem < Gem::TestCase
1192
1353
  Gem.try_activate 'a_file'
1193
1354
  end
1194
1355
 
1195
- assert_match %r%Could not find 'b' %, e.message
1356
+ assert_match %r{Could not find 'b' }, e.message
1357
+ assert_match %r{at: #{a.spec_file}}, e.message
1196
1358
  end
1197
1359
 
1198
1360
  def test_self_try_activate_missing_prerelease
@@ -1212,7 +1374,7 @@ class TestGem < Gem::TestCase
1212
1374
  Gem.try_activate 'a_file'
1213
1375
  end
1214
1376
 
1215
- assert_match %r%Could not find 'b' \(= 1.0rc1\)%, e.message
1377
+ assert_match %r{Could not find 'b' \(= 1.0rc1\)}, e.message
1216
1378
  end
1217
1379
 
1218
1380
  def test_self_try_activate_missing_extensions
@@ -1231,10 +1393,12 @@ class TestGem < Gem::TestCase
1231
1393
  refute Gem.try_activate 'nonexistent'
1232
1394
  end
1233
1395
 
1234
- expected = "Ignoring ext-1 because its extensions are not built. " +
1235
- "Try: gem pristine ext --version 1\n"
1396
+ unless Gem.java_platform?
1397
+ expected = "Ignoring ext-1 because its extensions are not built. " +
1398
+ "Try: gem pristine ext --version 1\n"
1236
1399
 
1237
- assert_equal expected, err
1400
+ assert_equal expected, err
1401
+ end
1238
1402
  end
1239
1403
 
1240
1404
  def test_self_use_paths_with_nils
@@ -1290,6 +1454,8 @@ class TestGem < Gem::TestCase
1290
1454
  parts = [@userhome, '.gem', Gem.ruby_engine]
1291
1455
  parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty?
1292
1456
 
1457
+ FileUtils.mkdir_p File.join(parts)
1458
+
1293
1459
  assert_equal File.join(parts), Gem.user_dir
1294
1460
  end
1295
1461
 
@@ -1302,7 +1468,6 @@ class TestGem < Gem::TestCase
1302
1468
  end
1303
1469
 
1304
1470
  def test_self_needs
1305
- util_clear_gems
1306
1471
  a = util_spec "a", "1"
1307
1472
  b = util_spec "b", "1", "c" => nil
1308
1473
  c = util_spec "c", "2"
@@ -1314,18 +1479,17 @@ class TestGem < Gem::TestCase
1314
1479
  r.gem "b", "= 1"
1315
1480
  end
1316
1481
 
1317
- activated = Gem::Specification.map { |x| x.full_name }
1482
+ activated = Gem::Specification.map {|x| x.full_name }
1318
1483
 
1319
- assert_equal %w!a-1 b-1 c-2!, activated.sort
1484
+ assert_equal %w[a-1 b-1 c-2], activated.sort
1320
1485
  end
1321
1486
 
1322
1487
  def test_self_needs_picks_up_unresolved_deps
1323
1488
  save_loaded_features do
1324
- util_clear_gems
1325
1489
  a = util_spec "a", "1"
1326
1490
  b = util_spec "b", "1", "c" => nil
1327
1491
  c = util_spec "c", "2"
1328
- d = util_spec "d", "1", {'e' => '= 1'}, "lib/d.rb"
1492
+ d = util_spec "d", "1", {'e' => '= 1'}, "lib/d#{$$}.rb"
1329
1493
  e = util_spec "e", "1"
1330
1494
 
1331
1495
  install_specs a, c, b, e, d
@@ -1334,10 +1498,10 @@ class TestGem < Gem::TestCase
1334
1498
  r.gem "a"
1335
1499
  r.gem "b", "= 1"
1336
1500
 
1337
- require 'd'
1501
+ require "d#{$$}"
1338
1502
  end
1339
1503
 
1340
- assert_equal %w!a-1 b-1 c-2 d-1 e-1!, loaded_spec_names
1504
+ assert_equal %w[a-1 b-1 c-2 d-1 e-1], loaded_spec_names
1341
1505
  end
1342
1506
  end
1343
1507
 
@@ -1363,11 +1527,13 @@ class TestGem < Gem::TestCase
1363
1527
  end
1364
1528
 
1365
1529
  def test_self_vendor_dir
1366
- expected =
1367
- File.join RbConfig::CONFIG['vendordir'], 'gems',
1368
- RbConfig::CONFIG['ruby_version']
1530
+ vendordir(File.join(@tempdir, 'vendor')) do
1531
+ expected =
1532
+ File.join RbConfig::CONFIG['vendordir'], 'gems',
1533
+ RbConfig::CONFIG['ruby_version']
1369
1534
 
1370
- assert_equal expected, Gem.vendor_dir
1535
+ assert_equal expected, Gem.vendor_dir
1536
+ end
1371
1537
  end
1372
1538
 
1373
1539
  def test_self_vendor_dir_ENV_GEM_VENDOR
@@ -1378,12 +1544,9 @@ class TestGem < Gem::TestCase
1378
1544
  end
1379
1545
 
1380
1546
  def test_self_vendor_dir_missing
1381
- orig_vendordir = RbConfig::CONFIG['vendordir']
1382
- RbConfig::CONFIG.delete 'vendordir'
1383
-
1384
- assert_nil Gem.vendor_dir
1385
- ensure
1386
- RbConfig::CONFIG['vendordir'] = orig_vendordir
1547
+ vendordir(nil) do
1548
+ assert_nil Gem.vendor_dir
1549
+ end
1387
1550
  end
1388
1551
 
1389
1552
  def test_load_plugins
@@ -1408,7 +1571,6 @@ class TestGem < Gem::TestCase
1408
1571
  install_gem foo2
1409
1572
  end
1410
1573
 
1411
- Gem.searcher = nil
1412
1574
  Gem::Specification.reset
1413
1575
 
1414
1576
  gem 'foo'
@@ -1438,8 +1600,8 @@ class TestGem < Gem::TestCase
1438
1600
  def test_gem_path_ordering
1439
1601
  refute_equal Gem.dir, Gem.user_dir
1440
1602
 
1441
- write_file File.join(@tempdir, 'lib', "g.rb") { |fp| fp.puts "" }
1442
- write_file File.join(@tempdir, 'lib', 'm.rb') { |fp| fp.puts "" }
1603
+ write_file File.join(@tempdir, 'lib', "g.rb") {|fp| fp.puts "" }
1604
+ write_file File.join(@tempdir, 'lib', 'm.rb') {|fp| fp.puts "" }
1443
1605
 
1444
1606
  g = util_spec 'g', '1', nil, "lib/g.rb"
1445
1607
  m = util_spec 'm', '1', nil, "lib/m.rb"
@@ -1453,7 +1615,7 @@ class TestGem < Gem::TestCase
1453
1615
 
1454
1616
  tests = [
1455
1617
  [:dir0, [ Gem.dir, Gem.user_dir], m0],
1456
- [:dir1, [ Gem.user_dir, Gem.dir], m1]
1618
+ [:dir1, [ Gem.user_dir, Gem.dir], m1],
1457
1619
  ]
1458
1620
 
1459
1621
  tests.each do |_name, _paths, expected|
@@ -1494,8 +1656,8 @@ class TestGem < Gem::TestCase
1494
1656
  end
1495
1657
 
1496
1658
  def test_gem_path_ordering_short
1497
- write_file File.join(@tempdir, 'lib', "g.rb") { |fp| fp.puts "" }
1498
- write_file File.join(@tempdir, 'lib', 'm.rb') { |fp| fp.puts "" }
1659
+ write_file File.join(@tempdir, 'lib', "g.rb") {|fp| fp.puts "" }
1660
+ write_file File.join(@tempdir, 'lib', 'm.rb') {|fp| fp.puts "" }
1499
1661
 
1500
1662
  g = util_spec 'g', '1', nil, "lib/g.rb"
1501
1663
  m = util_spec 'm', '1', nil, "lib/m.rb"
@@ -1513,8 +1675,6 @@ class TestGem < Gem::TestCase
1513
1675
  end
1514
1676
 
1515
1677
  def test_auto_activation_of_specific_gemdeps_file
1516
- util_clear_gems
1517
-
1518
1678
  a = util_spec "a", "1", nil, "lib/a.rb"
1519
1679
  b = util_spec "b", "1", nil, "lib/b.rb"
1520
1680
  c = util_spec "c", "1", nil, "lib/c.rb"
@@ -1533,12 +1693,10 @@ class TestGem < Gem::TestCase
1533
1693
 
1534
1694
  Gem.use_gemdeps
1535
1695
 
1536
- assert_equal add_bundler_full_name(%W(a-1 b-1 c-1)), loaded_spec_names
1696
+ assert_equal add_bundler_full_name(%W[a-1 b-1 c-1]), loaded_spec_names
1537
1697
  end
1538
1698
 
1539
1699
  def test_auto_activation_of_used_gemdeps_file
1540
- util_clear_gems
1541
-
1542
1700
  a = util_spec "a", "1", nil, "lib/a.rb"
1543
1701
  b = util_spec "b", "1", nil, "lib/b.rb"
1544
1702
  c = util_spec "c", "1", nil, "lib/c.rb"
@@ -1555,26 +1713,21 @@ class TestGem < Gem::TestCase
1555
1713
 
1556
1714
  ENV['RUBYGEMS_GEMDEPS'] = "-"
1557
1715
 
1558
- expected_specs = [a, b, (Gem::USE_BUNDLER_FOR_GEMDEPS || nil) && util_spec("bundler", Bundler::VERSION), c].compact
1559
- assert_equal expected_specs, Gem.use_gemdeps.sort_by { |s| s.name }
1716
+ expected_specs = [a, b, util_spec("bundler", Bundler::VERSION), c].compact
1717
+ assert_equal expected_specs, Gem.use_gemdeps.sort_by {|s| s.name }
1560
1718
  end
1561
1719
 
1562
- LIB_PATH = File.expand_path "../../../lib".dup.untaint, __FILE__.dup.untaint
1563
-
1564
- if Gem::USE_BUNDLER_FOR_GEMDEPS
1565
- BUNDLER_LIB_PATH = File.expand_path $LOAD_PATH.find {|lp| File.file?(File.join(lp, "bundler.rb")) }.dup.untaint
1566
- BUNDLER_FULL_NAME = "bundler-#{Bundler::VERSION}".freeze
1567
- end
1720
+ BUNDLER_LIB_PATH = File.expand_path $LOAD_PATH.find {|lp| File.file?(File.join(lp, "bundler.rb")) }
1721
+ BUNDLER_FULL_NAME = "bundler-#{Bundler::VERSION}".freeze
1568
1722
 
1569
1723
  def add_bundler_full_name(names)
1570
- return names unless Gem::USE_BUNDLER_FOR_GEMDEPS
1571
1724
  names << BUNDLER_FULL_NAME
1572
1725
  names.sort!
1573
1726
  names
1574
1727
  end
1575
1728
 
1576
1729
  def test_looks_for_gemdeps_files_automatically_on_start
1577
- util_clear_gems
1730
+ skip "Requiring bundler messes things up" if Gem.java_platform?
1578
1731
 
1579
1732
  a = util_spec "a", "1", nil, "lib/a.rb"
1580
1733
  b = util_spec "b", "1", nil, "lib/b.rb"
@@ -1591,8 +1744,8 @@ class TestGem < Gem::TestCase
1591
1744
  ENV['RUBYGEMS_GEMDEPS'] = "-"
1592
1745
 
1593
1746
  path = File.join @tempdir, "gem.deps.rb"
1594
- cmd = [Gem.ruby.dup.untaint, "-I#{LIB_PATH.untaint}",
1595
- "-I#{BUNDLER_LIB_PATH.untaint}", "-rrubygems"]
1747
+ cmd = [*ruby_with_rubygems_in_load_path,
1748
+ "-I#{BUNDLER_LIB_PATH}"]
1596
1749
  cmd << "-eputs Gem.loaded_specs.values.map(&:full_name).sort"
1597
1750
 
1598
1751
  File.open path, "w" do |f|
@@ -1607,10 +1760,10 @@ class TestGem < Gem::TestCase
1607
1760
  out = IO.popen(cmd, &:read).split(/\n/)
1608
1761
 
1609
1762
  assert_equal ["b-1", "c-1"], out - out0
1610
- end if Gem::USE_BUNDLER_FOR_GEMDEPS
1763
+ end
1611
1764
 
1612
1765
  def test_looks_for_gemdeps_files_automatically_on_start_in_parent_dir
1613
- util_clear_gems
1766
+ skip "Requiring bundler messes things up" if Gem.java_platform?
1614
1767
 
1615
1768
  a = util_spec "a", "1", nil, "lib/a.rb"
1616
1769
  b = util_spec "b", "1", nil, "lib/b.rb"
@@ -1629,8 +1782,8 @@ class TestGem < Gem::TestCase
1629
1782
  Dir.mkdir "sub1"
1630
1783
 
1631
1784
  path = File.join @tempdir, "gem.deps.rb"
1632
- cmd = [Gem.ruby.dup.untaint, "-Csub1", "-I#{LIB_PATH.untaint}",
1633
- "-I#{BUNDLER_LIB_PATH.untaint}", "-rrubygems"]
1785
+ cmd = [*ruby_with_rubygems_in_load_path, "-Csub1",
1786
+ "-I#{BUNDLER_LIB_PATH}"]
1634
1787
  cmd << "-eputs Gem.loaded_specs.values.map(&:full_name).sort"
1635
1788
 
1636
1789
  File.open path, "w" do |f|
@@ -1647,7 +1800,7 @@ class TestGem < Gem::TestCase
1647
1800
  Dir.rmdir "sub1"
1648
1801
 
1649
1802
  assert_equal ["b-1", "c-1"], out - out0
1650
- end if Gem::USE_BUNDLER_FOR_GEMDEPS
1803
+ end
1651
1804
 
1652
1805
  def test_register_default_spec
1653
1806
  Gem.clear_default_specs
@@ -1677,39 +1830,24 @@ class TestGem < Gem::TestCase
1677
1830
  assert_nil Gem.find_unresolved_default_spec("README")
1678
1831
  end
1679
1832
 
1680
- def test_default_gems_use_full_paths
1681
- begin
1682
- if defined?(RUBY_ENGINE)
1683
- engine = RUBY_ENGINE
1684
- Object.send :remove_const, :RUBY_ENGINE
1685
- end
1686
- Object.const_set :RUBY_ENGINE, 'ruby'
1833
+ def test_register_default_spec_old_style_with_folder_starting_with_lib
1834
+ Gem.clear_default_specs
1687
1835
 
1688
- refute Gem.default_gems_use_full_paths?
1689
- ensure
1690
- Object.send :remove_const, :RUBY_ENGINE
1691
- Object.const_set :RUBY_ENGINE, engine if engine
1836
+ old_style = Gem::Specification.new do |spec|
1837
+ spec.files = ["libexec/bundle", "foo.rb", "bar.rb"]
1692
1838
  end
1693
1839
 
1694
- begin
1695
- if defined?(RUBY_ENGINE)
1696
- engine = RUBY_ENGINE
1697
- Object.send :remove_const, :RUBY_ENGINE
1698
- end
1699
- Object.const_set :RUBY_ENGINE, 'jruby'
1700
- assert Gem.default_gems_use_full_paths?
1701
- ensure
1702
- Object.send :remove_const, :RUBY_ENGINE
1703
- Object.const_set :RUBY_ENGINE, engine if engine
1704
- end
1840
+ Gem.register_default_spec old_style
1841
+
1842
+ assert_equal old_style, Gem.find_unresolved_default_spec("foo.rb")
1705
1843
  end
1706
1844
 
1707
1845
  def test_use_gemdeps
1708
- gem_deps_file = 'gem.deps.rb'.untaint
1846
+ gem_deps_file = 'gem.deps.rb'.tap(&Gem::UNTAINT)
1709
1847
  spec = util_spec 'a', 1
1710
1848
  install_specs spec
1711
1849
 
1712
- spec = Gem::Specification.find { |s| s == spec }
1850
+ spec = Gem::Specification.find {|s| s == spec }
1713
1851
  refute spec.activated?
1714
1852
 
1715
1853
  File.open gem_deps_file, 'w' do |io|
@@ -1720,7 +1858,7 @@ class TestGem < Gem::TestCase
1720
1858
 
1721
1859
  Gem.use_gemdeps gem_deps_file
1722
1860
 
1723
- assert_equal add_bundler_full_name(%W(a-1)), loaded_spec_names
1861
+ assert_equal add_bundler_full_name(%W[a-1]), loaded_spec_names
1724
1862
  refute_nil Gem.gemdeps
1725
1863
  end
1726
1864
 
@@ -1770,7 +1908,7 @@ class TestGem < Gem::TestCase
1770
1908
 
1771
1909
  spec = util_spec 'a', 1
1772
1910
  install_specs spec
1773
- spec = Gem::Specification.find { |s| s == spec }
1911
+ spec = Gem::Specification.find {|s| s == spec }
1774
1912
 
1775
1913
  refute spec.activated?
1776
1914
 
@@ -1780,7 +1918,7 @@ class TestGem < Gem::TestCase
1780
1918
 
1781
1919
  Gem.use_gemdeps
1782
1920
 
1783
- assert_equal add_bundler_full_name(%W(a-1)), loaded_spec_names
1921
+ assert_equal add_bundler_full_name(%W[a-1]), loaded_spec_names
1784
1922
  ensure
1785
1923
  ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
1786
1924
  end
@@ -1820,33 +1958,21 @@ class TestGem < Gem::TestCase
1820
1958
  io.write 'gem "a"'
1821
1959
  end
1822
1960
 
1823
- platform = Bundler::GemHelpers.generic_local_platform
1824
- if platform == Gem::Platform::RUBY
1825
- platform = ''
1826
- else
1827
- platform = " #{platform}"
1828
- end
1829
- expected =
1830
- if Gem::USE_BUNDLER_FOR_GEMDEPS
1831
- <<-EXPECTED
1832
- Could not find gem 'a#{platform}' in any of the gem sources listed in your Gemfile.
1961
+ expected = <<-EXPECTED
1962
+ Could not find gem 'a' in locally installed gems.
1963
+ The source does not contain any versions of 'a'
1833
1964
  You may need to `gem install -g` to install missing gems
1834
1965
 
1835
- EXPECTED
1836
- else
1837
- <<-EXPECTED
1838
- Unable to resolve dependency: user requested 'a (>= 0)'
1839
- You may need to `gem install -g` to install missing gems
1966
+ EXPECTED
1840
1967
 
1841
- EXPECTED
1968
+ Gem::Deprecate.skip_during do
1969
+ assert_output nil, expected do
1970
+ Gem.use_gemdeps
1842
1971
  end
1843
-
1844
- assert_output nil, expected do
1845
- Gem.use_gemdeps
1846
1972
  end
1847
1973
  ensure
1848
1974
  ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
1849
- end if Gem::USE_BUNDLER_FOR_GEMDEPS
1975
+ end
1850
1976
 
1851
1977
  def test_use_gemdeps_specific
1852
1978
  rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], 'x'
@@ -1854,7 +1980,7 @@ You may need to `gem install -g` to install missing gems
1854
1980
  spec = util_spec 'a', 1
1855
1981
  install_specs spec
1856
1982
 
1857
- spec = Gem::Specification.find { |s| s == spec }
1983
+ spec = Gem::Specification.find {|s| s == spec }
1858
1984
  refute spec.activated?
1859
1985
 
1860
1986
  File.open 'x', 'w' do |io|
@@ -1863,7 +1989,7 @@ You may need to `gem install -g` to install missing gems
1863
1989
 
1864
1990
  Gem.use_gemdeps
1865
1991
 
1866
- assert_equal add_bundler_full_name(%W(a-1)), loaded_spec_names
1992
+ assert_equal add_bundler_full_name(%W[a-1]), loaded_spec_names
1867
1993
  ensure
1868
1994
  ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
1869
1995
  end
@@ -1882,22 +2008,65 @@ You may need to `gem install -g` to install missing gems
1882
2008
  assert platform_defaults.is_a? Hash
1883
2009
  end
1884
2010
 
2011
+ # Ensure that `Gem.source_date_epoch` is consistent even if
2012
+ # $SOURCE_DATE_EPOCH has not been set.
2013
+ def test_default_source_date_epoch_doesnt_change
2014
+ old_epoch = ENV['SOURCE_DATE_EPOCH']
2015
+ ENV['SOURCE_DATE_EPOCH'] = nil
2016
+
2017
+ # Unfortunately, there is no real way to test this aside from waiting
2018
+ # enough for `Time.now.to_i` to change -- which is a whole second.
2019
+ #
2020
+ # Fortunately, we only need to do this once.
2021
+ a = Gem.source_date_epoch
2022
+ sleep 1
2023
+ b = Gem.source_date_epoch
2024
+ assert_equal a, b
2025
+ ensure
2026
+ ENV['SOURCE_DATE_EPOCH'] = old_epoch
2027
+ end
2028
+
1885
2029
  def ruby_install_name(name)
1886
- orig_RUBY_INSTALL_NAME = RbConfig::CONFIG['ruby_install_name']
1887
- RbConfig::CONFIG['ruby_install_name'] = name
2030
+ with_clean_path_to_ruby do
2031
+ orig_RUBY_INSTALL_NAME = RbConfig::CONFIG['ruby_install_name']
2032
+ RbConfig::CONFIG['ruby_install_name'] = name
2033
+
2034
+ begin
2035
+ yield
2036
+ ensure
2037
+ if orig_RUBY_INSTALL_NAME
2038
+ RbConfig::CONFIG['ruby_install_name'] = orig_RUBY_INSTALL_NAME
2039
+ else
2040
+ RbConfig::CONFIG.delete 'ruby_install_name'
2041
+ end
2042
+ end
2043
+ end
2044
+ end
2045
+
2046
+ def with_rb_config_ruby(path)
2047
+ rb_config_singleton_class = class << RbConfig; self; end
2048
+ orig_path = RbConfig.ruby
2049
+
2050
+ redefine_method(rb_config_singleton_class, :ruby, path)
1888
2051
 
1889
2052
  yield
1890
2053
  ensure
1891
- if orig_RUBY_INSTALL_NAME
1892
- RbConfig::CONFIG['ruby_install_name'] = orig_RUBY_INSTALL_NAME
2054
+ redefine_method(rb_config_singleton_class, :ruby, orig_path)
2055
+ end
2056
+
2057
+ def redefine_method(base, method, new_result)
2058
+ if RUBY_VERSION >= "2.5"
2059
+ base.alias_method(method, method)
2060
+ base.define_method(method) { new_result }
1893
2061
  else
1894
- RbConfig::CONFIG.delete 'ruby_install_name'
2062
+ base.send(:alias_method, method, method)
2063
+ base.send(:define_method, method) { new_result }
1895
2064
  end
1896
2065
  end
1897
2066
 
1898
2067
  def with_plugin(path)
1899
2068
  test_plugin_path = File.expand_path("test/rubygems/plugin/#{path}",
1900
- @@project_dir)
2069
+ PROJECT_DIR)
1901
2070
 
1902
2071
  # A single test plugin should get loaded once only, in order to preserve
1903
2072
  # sane test semantics.