rubygems-update 3.0.3 → 3.4.7

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