rubygems-update 3.4.22 → 3.5.1

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