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,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "vendored_persistent"
4
+ require_relative "vendored_timeout"
4
5
  require "cgi"
5
6
  require "securerandom"
6
7
  require "zlib"
7
- require "rubygems/request"
8
8
 
9
9
  module Bundler
10
10
  # Handles all the fetching with the rubygems server
@@ -81,9 +81,9 @@ module Bundler
81
81
  :HTTPRequestURITooLong, :HTTPUnauthorized, :HTTPUnprocessableEntity,
82
82
  :HTTPUnsupportedMediaType, :HTTPVersionNotSupported].freeze
83
83
  FAIL_ERRORS = begin
84
- fail_errors = [AuthenticationRequiredError, BadAuthenticationError, AuthenticationForbiddenError, FallbackError]
84
+ fail_errors = [AuthenticationRequiredError, BadAuthenticationError, AuthenticationForbiddenError, FallbackError, SecurityError]
85
85
  fail_errors << Gem::Requirement::BadRequirementError
86
- fail_errors.concat(NET_ERRORS.map {|e| Net.const_get(e) })
86
+ fail_errors.concat(NET_ERRORS.map {|e| Gem::Net.const_get(e) })
87
87
  end.freeze
88
88
 
89
89
  class << self
@@ -95,6 +95,7 @@ module Bundler
95
95
  self.max_retries = Bundler.settings[:retry] # How many retries for the API call
96
96
 
97
97
  def initialize(remote)
98
+ @cis = nil
98
99
  @remote = remote
99
100
 
100
101
  Socket.do_not_reverse_lookup = true
@@ -111,14 +112,16 @@ module Bundler
111
112
  spec_file_name = "#{spec.join "-"}.gemspec"
112
113
 
113
114
  uri = Bundler::URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
114
- if uri.scheme == "file"
115
- path = Bundler.rubygems.correct_for_windows_path(uri.path)
115
+ spec = if uri.scheme == "file"
116
+ path = Gem::Util.correct_for_windows_path(uri.path)
116
117
  Bundler.safe_load_marshal Bundler.rubygems.inflate(Gem.read_binary(path))
117
118
  elsif cached_spec_path = gemspec_cached_path(spec_file_name)
118
119
  Bundler.load_gemspec(cached_spec_path)
119
120
  else
120
121
  Bundler.safe_load_marshal Bundler.rubygems.inflate(downloader.fetch(uri).body)
121
122
  end
123
+ raise MarshalError, "is #{spec.inspect}" unless spec.is_a?(Gem::Specification)
124
+ spec
122
125
  rescue MarshalError
123
126
  raise HTTPError, "Gemspec #{spec} contained invalid data.\n" \
124
127
  "Your network or your gem server is probably having issues right now."
@@ -137,7 +140,9 @@ module Bundler
137
140
 
138
141
  fetch_specs(gem_names).each do |name, version, platform, dependencies, metadata|
139
142
  spec = if dependencies
140
- EndpointSpecification.new(name, version, platform, self, dependencies, metadata)
143
+ EndpointSpecification.new(name, version, platform, self, dependencies, metadata).tap do |es|
144
+ source.checksum_store.replace(es, es.checksum)
145
+ end
141
146
  else
142
147
  RemoteSpecification.new(name, version, platform, self)
143
148
  end
@@ -200,6 +205,16 @@ module Bundler
200
205
  fetchers.first.api_fetcher?
201
206
  end
202
207
 
208
+ def gem_remote_fetcher
209
+ @gem_remote_fetcher ||= begin
210
+ require_relative "fetcher/gem_remote_fetcher"
211
+ fetcher = GemRemoteFetcher.new Gem.configuration[:http_proxy]
212
+ fetcher.headers["User-Agent"] = user_agent
213
+ fetcher.headers["X-Gemfile-Source"] = @remote.original_uri.to_s if @remote.original_uri
214
+ fetcher
215
+ end
216
+ end
217
+
203
218
  private
204
219
 
205
220
  def available_fetchers
@@ -214,7 +229,7 @@ module Bundler
214
229
  end
215
230
 
216
231
  def fetchers
217
- @fetchers ||= available_fetchers.map {|f| f.new(downloader, @remote, uri) }.drop_while {|f| !f.available? }
232
+ @fetchers ||= available_fetchers.map {|f| f.new(downloader, @remote, uri, gem_remote_fetcher) }.drop_while {|f| !f.available? }
218
233
  end
219
234
 
220
235
  def fetch_specs(gem_names)
@@ -228,20 +243,7 @@ module Bundler
228
243
  end
229
244
 
230
245
  def cis
231
- env_cis = {
232
- "TRAVIS" => "travis",
233
- "CIRCLECI" => "circle",
234
- "SEMAPHORE" => "semaphore",
235
- "JENKINS_URL" => "jenkins",
236
- "BUILDBOX" => "buildbox",
237
- "GO_SERVER_URL" => "go",
238
- "SNAP_CI" => "snap",
239
- "GITLAB_CI" => "gitlab",
240
- "GITHUB_ACTIONS" => "github",
241
- "CI_NAME" => ENV["CI_NAME"],
242
- "CI" => "ci",
243
- }
244
- env_cis.find_all {|env, _| ENV[env] }.map {|_, ci| ci }
246
+ @cis ||= Bundler::CIDetector.ci_strings
245
247
  end
246
248
 
247
249
  def connection
@@ -251,7 +253,7 @@ module Bundler
251
253
  Bundler.settings[:ssl_client_cert]
252
254
  raise SSLError if needs_ssl && !defined?(OpenSSL::SSL)
253
255
 
254
- con = PersistentHTTP.new :name => "bundler", :proxy => :ENV
256
+ con = Gem::Net::HTTP::Persistent.new name: "bundler", proxy: :ENV
255
257
  if gem_proxy = Gem.configuration[:http_proxy]
256
258
  con.proxy = Bundler::URI.parse(gem_proxy) if gem_proxy != :no_proxy
257
259
  end
@@ -286,10 +288,10 @@ module Bundler
286
288
  end
287
289
 
288
290
  HTTP_ERRORS = [
289
- Timeout::Error, EOFError, SocketError, Errno::ENETDOWN, Errno::ENETUNREACH,
291
+ Gem::Timeout::Error, EOFError, SocketError, Errno::ENETDOWN, Errno::ENETUNREACH,
290
292
  Errno::EINVAL, Errno::ECONNRESET, Errno::ETIMEDOUT, Errno::EAGAIN,
291
- Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError,
292
- PersistentHTTP::Error, Zlib::BufError, Errno::EHOSTUNREACH
293
+ Gem::Net::HTTPBadResponse, Gem::Net::HTTPHeaderSyntaxError, Gem::Net::ProtocolError,
294
+ Gem::Net::HTTP::Persistent::Error, Zlib::BufError, Errno::EHOSTUNREACH
293
295
  ].freeze
294
296
 
295
297
  def bundler_cert_store
@@ -305,6 +307,7 @@ module Bundler
305
307
  end
306
308
  else
307
309
  store.set_default_paths
310
+ require "rubygems/request"
308
311
  Gem::Request.get_cert_files.each {|c| store.add_file c }
309
312
  end
310
313
  store
@@ -32,7 +32,7 @@ module Bundler
32
32
  if Bundler.ui.debug?
33
33
  Bundler.ui.trace error
34
34
  else
35
- Bundler.ui.error error.message, :wrap => true
35
+ Bundler.ui.error error.message, wrap: true
36
36
  end
37
37
  when Thor::Error
38
38
  Bundler.ui.error error.message
@@ -40,7 +40,7 @@ module Bundler
40
40
  Bundler.ui.error "\nQuitting..."
41
41
  Bundler.ui.trace error
42
42
  when Gem::InvalidSpecificationException
43
- Bundler.ui.error error.message, :wrap => true
43
+ Bundler.ui.error error.message, wrap: true
44
44
  when SystemExit
45
45
  when *[defined?(Java::JavaLang::OutOfMemoryError) && Java::JavaLang::OutOfMemoryError].compact
46
46
  Bundler.ui.error "\nYour JVM has run out of memory, and Bundler cannot continue. " \
@@ -61,7 +61,7 @@ module Bundler
61
61
  end
62
62
 
63
63
  def request_issue_report_for(e)
64
- Bundler.ui.error <<-EOS.gsub(/^ {8}/, ""), nil, nil
64
+ Bundler.ui.error <<~EOS, nil, nil
65
65
  --- ERROR REPORT TEMPLATE -------------------------------------------------------
66
66
 
67
67
  ```
@@ -75,7 +75,7 @@ module Bundler
75
75
 
76
76
  Bundler.ui.error "Unfortunately, an unexpected error occurred, and Bundler cannot continue."
77
77
 
78
- Bundler.ui.error <<-EOS.gsub(/^ {8}/, ""), nil, :yellow
78
+ Bundler.ui.error <<~EOS, nil, :yellow
79
79
 
80
80
  First, try this link to see if there are any existing issue reports for this error:
81
81
  #{issues_url(e)}
@@ -93,7 +93,7 @@ module Bundler
93
93
  end
94
94
 
95
95
  def serialized_exception_for(e)
96
- <<-EOS.gsub(/^ {8}/, "")
96
+ <<~EOS
97
97
  #{e.class}: #{e.message}
98
98
  #{e.backtrace&.join("\n ")&.chomp}
99
99
  EOS
@@ -215,7 +215,7 @@ module Bundler
215
215
  def sh_with_status(cmd, &block)
216
216
  Bundler.ui.debug(cmd)
217
217
  SharedHelpers.chdir(base) do
218
- outbuf = IO.popen(cmd, :err => [:child, :out], &:read)
218
+ outbuf = IO.popen(cmd, err: [:child, :out], &:read)
219
219
  status = $?
220
220
  block&.call(outbuf) if status.success?
221
221
  [outbuf, status]
@@ -34,6 +34,11 @@ module Bundler
34
34
  end
35
35
  module_function :local_platform
36
36
 
37
+ def generic_local_platform_is_ruby?
38
+ generic_local_platform == Gem::Platform::RUBY
39
+ end
40
+ module_function :generic_local_platform_is_ruby?
41
+
37
42
  def platform_specificity_match(spec_platform, user_platform)
38
43
  spec_platform = Gem::Platform.new(spec_platform)
39
44
 
@@ -114,8 +119,6 @@ module Bundler
114
119
 
115
120
  def same_deps(spec, exemplary_spec)
116
121
  same_runtime_deps = spec.dependencies.sort == exemplary_spec.dependencies.sort
117
- return same_runtime_deps unless spec.is_a?(Gem::Specification) && exemplary_spec.is_a?(Gem::Specification)
118
-
119
122
  same_metadata_deps = spec.required_ruby_version == exemplary_spec.required_ruby_version && spec.required_rubygems_version == exemplary_spec.required_rubygems_version
120
123
  same_runtime_deps && same_metadata_deps
121
124
  end
@@ -84,7 +84,7 @@ module Bundler
84
84
  else
85
85
  raise ArgumentError, "2nd argument is invalid"
86
86
  end
87
- label.nil? ? {} : { :label => label }
87
+ label.nil? ? {} : { label: label }
88
88
  end
89
89
 
90
90
  def spec_for_dependency(dependency)
@@ -103,7 +103,7 @@ module Bundler
103
103
  end
104
104
 
105
105
  def g
106
- @g ||= ::GraphViz.digraph(@graph_name, :concentrate => true, :normalize => true, :nodesep => 0.55) do |g|
106
+ @g ||= ::GraphViz.digraph(@graph_name, concentrate: true, normalize: true, nodesep: 0.55) do |g|
107
107
  g.edge[:weight] = 2
108
108
  g.edge[:fontname] = g.node[:fontname] = "Arial, Helvetica, SansSerif"
109
109
  g.edge[:fontsize] = 12
@@ -114,10 +114,10 @@ module Bundler
114
114
  @groups.each do |group|
115
115
  g.add_nodes(
116
116
  group, {
117
- :style => "filled",
118
- :fillcolor => "#B9B9D5",
119
- :shape => "box3d",
120
- :fontsize => 16,
117
+ style: "filled",
118
+ fillcolor: "#B9B9D5",
119
+ shape: "box3d",
120
+ fontsize: 16,
121
121
  }.merge(@node_options[group])
122
122
  )
123
123
  end
@@ -125,8 +125,8 @@ module Bundler
125
125
  @relations.each do |parent, children|
126
126
  children.each do |child|
127
127
  if @groups.include?(parent)
128
- g.add_nodes(child, { :style => "filled", :fillcolor => "#B9B9D5" }.merge(@node_options[child]))
129
- g.add_edges(parent, child, { :constraint => false }.merge(@edge_options["#{parent}_#{child}"]))
128
+ g.add_nodes(child, { style: "filled", fillcolor: "#B9B9D5" }.merge(@node_options[child]))
129
+ g.add_edges(parent, child, { constraint: false }.merge(@edge_options["#{parent}_#{child}"]))
130
130
  else
131
131
  g.add_nodes(child, @node_options[child])
132
132
  g.add_edges(parent, child, @edge_options["#{parent}_#{child}"])
@@ -135,7 +135,7 @@ module Bundler
135
135
  end
136
136
 
137
137
  if @output_format.to_s == "debug"
138
- $stdout.puts g.output :none => String
138
+ $stdout.puts g.output none: String
139
139
  Bundler.ui.info "debugging bundle viz..."
140
140
  else
141
141
  begin
@@ -145,8 +145,7 @@ module Bundler
145
145
  end
146
146
 
147
147
  # Whether all the specs in self are in other
148
- # TODO: rename to #include?
149
- def ==(other)
148
+ def subset?(other)
150
149
  all? do |spec|
151
150
  other_spec = other[spec].first
152
151
  other_spec && dependencies_eql?(spec, other_spec) && spec.source == other_spec.source
@@ -29,7 +29,7 @@ module Bundler
29
29
  end
30
30
 
31
31
  # temporarily unfreeze
32
- Bundler.settings.temporary(:deployment => false, :frozen => false) do
32
+ Bundler.settings.temporary(deployment: false, frozen: false) do
33
33
  # evaluate the Gemfile we have now
34
34
  builder = Dsl.new
35
35
  builder.eval_gemfile(gemfile_path)
@@ -48,14 +48,14 @@ def gemfile(install = false, options = {}, &gemfile)
48
48
  builder.instance_eval(&gemfile)
49
49
  builder.check_primary_source_safety
50
50
 
51
- Bundler.settings.temporary(:deployment => false, :frozen => false) do
51
+ Bundler.settings.temporary(deployment: false, frozen: false) do
52
52
  definition = builder.to_definition(nil, true)
53
53
  def definition.lock(*); end
54
54
  definition.validate_runtime!
55
55
 
56
56
  if install || definition.missing_specs?
57
- Bundler.settings.temporary(:inline => true, :no_install => false) do
58
- installer = Bundler::Installer.install(Bundler.root, definition, :system => true)
57
+ Bundler.settings.temporary(inline: true, no_install: false) do
58
+ installer = Bundler::Installer.install(Bundler.root, definition, system: true)
59
59
  installer.post_install_messages.each do |name, message|
60
60
  Bundler.ui.info "Post-install message from #{name}:\n#{message}"
61
61
  end
@@ -53,10 +53,10 @@ module Bundler
53
53
  def install
54
54
  spec.source.install(
55
55
  spec,
56
- :force => force,
57
- :ensure_builtin_gems_cached => standalone,
58
- :build_args => Array(spec_settings),
59
- :previous_spec => previous_spec,
56
+ force: force,
57
+ ensure_builtin_gems_cached: standalone,
58
+ build_args: Array(spec_settings),
59
+ previous_spec: previous_spec,
60
60
  )
61
61
  end
62
62
 
@@ -77,7 +77,7 @@ module Bundler
77
77
  if Bundler.settings[:bin] && standalone
78
78
  installer.generate_standalone_bundler_executable_stubs(spec)
79
79
  elsif Bundler.settings[:bin]
80
- installer.generate_bundler_executable_stubs(spec, :force => true)
80
+ installer.generate_bundler_executable_stubs(spec, force: true)
81
81
  end
82
82
  end
83
83
  end
@@ -42,8 +42,7 @@ module Bundler
42
42
 
43
43
  # Checks installed dependencies against spec's dependencies to make
44
44
  # sure needed dependencies have been installed.
45
- def dependencies_installed?(all_specs)
46
- installed_specs = all_specs.select(&:installed?).map(&:name)
45
+ def dependencies_installed?(installed_specs)
47
46
  dependencies.all? {|d| installed_specs.include? d.name }
48
47
  end
49
48
 
@@ -63,20 +62,23 @@ module Bundler
63
62
  end
64
63
  end
65
64
 
66
- def self.call(*args)
67
- new(*args).call
65
+ def self.call(*args, **kwargs)
66
+ new(*args, **kwargs).call
68
67
  end
69
68
 
70
69
  attr_reader :size
71
70
 
72
- def initialize(installer, all_specs, size, standalone, force)
71
+ def initialize(installer, all_specs, size, standalone, force, skip: nil)
73
72
  @installer = installer
74
73
  @size = size
75
74
  @standalone = standalone
76
75
  @force = force
77
76
  @specs = all_specs.map {|s| SpecInstallation.new(s) }
77
+ @specs.each do |spec_install|
78
+ spec_install.state = :installed if skip.include?(spec_install.name)
79
+ end if skip
78
80
  @spec_set = all_specs
79
- @rake = @specs.find {|s| s.name == "rake" }
81
+ @rake = @specs.find {|s| s.name == "rake" unless s.installed? }
80
82
  end
81
83
 
82
84
  def call
@@ -183,8 +185,14 @@ module Bundler
183
185
  # previously installed specifications. We continue until all specs
184
186
  # are installed.
185
187
  def enqueue_specs
186
- @specs.select(&:ready_to_enqueue?).each do |spec|
187
- if spec.dependencies_installed? @specs
188
+ installed_specs = {}
189
+ @specs.each do |spec|
190
+ next unless spec.installed?
191
+ installed_specs[spec.name] = true
192
+ end
193
+
194
+ @specs.each do |spec|
195
+ if spec.ready_to_enqueue? && spec.dependencies_installed?(installed_specs)
188
196
  spec.state = :enqueued
189
197
  worker_pool.enq spec
190
198
  end
@@ -56,7 +56,7 @@ module Bundler
56
56
  if spec.source.instance_of?(Source::Path) && spec.source.path.absolute?
57
57
  full_path
58
58
  else
59
- SharedHelpers.relative_path_to(full_path, :from => Bundler.root.join(bundler_path))
59
+ SharedHelpers.relative_path_to(full_path, from: Bundler.root.join(bundler_path))
60
60
  end
61
61
  rescue TypeError
62
62
  error_message = "#{spec.name} #{spec.version} has an invalid gemspec"
@@ -101,8 +101,7 @@ module Bundler
101
101
  if Gem.respond_to?(:discover_gems_on_require=)
102
102
  Gem.discover_gems_on_require = false
103
103
  else
104
- kernel = (class << ::Kernel; self; end)
105
- [kernel, ::Kernel].each do |k|
104
+ [::Kernel.singleton_class, ::Kernel].each do |k|
106
105
  if k.private_method_defined?(:gem_original_require)
107
106
  private_require = k.private_method_defined?(:require)
108
107
  k.send(:remove_method, :require)
@@ -136,12 +136,12 @@ module Bundler
136
136
 
137
137
  mode = Gem.win_platform? ? "wb:UTF-8" : "w"
138
138
  require "erb"
139
- content = ERB.new(template, :trim_mode => "-").result(binding)
139
+ content = ERB.new(template, trim_mode: "-").result(binding)
140
140
 
141
- File.write(binstub_path, content, :mode => mode, :perm => 0o777 & ~File.umask)
141
+ File.write(binstub_path, content, mode: mode, perm: 0o777 & ~File.umask)
142
142
  if Gem.win_platform? || options[:all_platforms]
143
143
  prefix = "@ruby -x \"%~f0\" %*\n@exit /b %ERRORLEVEL%\n\n"
144
- File.write("#{binstub_path}.cmd", prefix + content, :mode => mode)
144
+ File.write("#{binstub_path}.cmd", prefix + content, mode: mode)
145
145
  end
146
146
  end
147
147
 
@@ -179,12 +179,12 @@ module Bundler
179
179
 
180
180
  mode = Gem.win_platform? ? "wb:UTF-8" : "w"
181
181
  require "erb"
182
- content = ERB.new(template, :trim_mode => "-").result(binding)
182
+ content = ERB.new(template, trim_mode: "-").result(binding)
183
183
 
184
- File.write("#{bin_path}/#{executable}", content, :mode => mode, :perm => 0o755)
184
+ File.write("#{bin_path}/#{executable}", content, mode: mode, perm: 0o755)
185
185
  if Gem.win_platform? || options[:all_platforms]
186
186
  prefix = "@ruby -x \"%~f0\" %*\n@exit /b %ERRORLEVEL%\n\n"
187
- File.write("#{bin_path}/#{executable}.cmd", prefix + content, :mode => mode)
187
+ File.write("#{bin_path}/#{executable}.cmd", prefix + content, mode: mode)
188
188
  end
189
189
  end
190
190
  end
@@ -214,7 +214,7 @@ module Bundler
214
214
  end
215
215
 
216
216
  def load_plugins
217
- Bundler.rubygems.load_plugins
217
+ Gem.load_plugins
218
218
 
219
219
  requested_path_gems = @definition.requested_specs.select {|s| s.source.is_a?(Source::Path) }
220
220
  path_plugin_files = requested_path_gems.map do |spec|
@@ -223,8 +223,8 @@ module Bundler
223
223
  error_message = "#{spec.name} #{spec.version} has an invalid gemspec"
224
224
  raise Gem::InvalidSpecificationException, error_message
225
225
  end.flatten
226
- Bundler.rubygems.load_plugin_files(path_plugin_files)
227
- Bundler.rubygems.load_env_plugins
226
+ Gem.load_plugin_files(path_plugin_files)
227
+ Gem.load_env_plugins
228
228
  end
229
229
 
230
230
  def ensure_specs_are_compatible!
@@ -7,13 +7,23 @@ module Bundler
7
7
  include MatchPlatform
8
8
  include ForcePlatform
9
9
 
10
- attr_reader :name, :version, :dependencies, :platform
11
- attr_accessor :source, :remote, :force_ruby_platform
10
+ attr_reader :name, :version, :platform
11
+ attr_accessor :source, :remote, :force_ruby_platform, :dependencies, :required_ruby_version, :required_rubygems_version
12
+
13
+ def self.from_spec(s)
14
+ lazy_spec = new(s.name, s.version, s.platform, s.source)
15
+ lazy_spec.dependencies = s.dependencies
16
+ lazy_spec.required_ruby_version = s.required_ruby_version
17
+ lazy_spec.required_rubygems_version = s.required_rubygems_version
18
+ lazy_spec
19
+ end
12
20
 
13
21
  def initialize(name, version, platform, source = nil)
14
22
  @name = name
15
23
  @version = version
16
24
  @dependencies = []
25
+ @required_ruby_version = Gem::Requirement.default
26
+ @required_rubygems_version = Gem::Requirement.default
17
27
  @platform = platform || Gem::Platform::RUBY
18
28
  @source = source
19
29
  @force_ruby_platform = default_force_ruby_platform
@@ -27,6 +37,14 @@ module Bundler
27
37
  end
28
38
  end
29
39
 
40
+ def lock_name
41
+ @lock_name ||= name_tuple.lock_name
42
+ end
43
+
44
+ def name_tuple
45
+ Gem::NameTuple.new(@name, @version, @platform)
46
+ end
47
+
30
48
  def ==(other)
31
49
  full_name == other.full_name
32
50
  end
@@ -61,12 +79,7 @@ module Bundler
61
79
 
62
80
  def to_lock
63
81
  out = String.new
64
-
65
- if platform == Gem::Platform::RUBY
66
- out << " #{name} (#{version})\n"
67
- else
68
- out << " #{name} (#{version}-#{platform})\n"
69
- end
82
+ out << " #{lock_name}\n"
70
83
 
71
84
  dependencies.sort_by(&:to_s).uniq.each do |dep|
72
85
  next if dep.type == :development
@@ -89,7 +102,7 @@ module Bundler
89
102
 
90
103
  installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform)
91
104
 
92
- specification = __materialize__(installable_candidates, :fallback_to_non_installable => false)
105
+ specification = __materialize__(installable_candidates, fallback_to_non_installable: false)
93
106
  return specification unless specification.nil?
94
107
 
95
108
  if target_platform != platform
@@ -109,9 +122,7 @@ module Bundler
109
122
  # bad gem.
110
123
  def __materialize__(candidates, fallback_to_non_installable: Bundler.frozen_bundle?)
111
124
  search = candidates.reverse.find do |spec|
112
- spec.is_a?(StubSpecification) ||
113
- (spec.matches_current_ruby? &&
114
- spec.matches_current_rubygems?)
125
+ spec.is_a?(StubSpecification) || spec.matches_current_metadata?
115
126
  end
116
127
  if search.nil? && fallback_to_non_installable
117
128
  search = candidates.last
@@ -122,11 +133,7 @@ module Bundler
122
133
  end
123
134
 
124
135
  def to_s
125
- @to_s ||= if platform == Gem::Platform::RUBY
126
- "#{name} (#{version})"
127
- else
128
- "#{name} (#{version}-#{platform})"
129
- end
136
+ lock_name
130
137
  end
131
138
 
132
139
  def git_version
@@ -19,6 +19,7 @@ module Bundler
19
19
  add_sources
20
20
  add_platforms
21
21
  add_dependencies
22
+ add_checksums
22
23
  add_locked_ruby_version
23
24
  add_bundled_with
24
25
 
@@ -65,6 +66,14 @@ module Bundler
65
66
  end
66
67
  end
67
68
 
69
+ def add_checksums
70
+ return unless definition.locked_checksums
71
+ checksums = definition.resolve.map do |spec|
72
+ spec.source.checksum_store.to_lock(spec)
73
+ end
74
+ add_section("CHECKSUMS", checksums)
75
+ end
76
+
68
77
  def add_locked_ruby_version
69
78
  return unless locked_ruby_version = definition.locked_ruby_version
70
79
  add_section("RUBY VERSION", locked_ruby_version.to_s)