rubygems-update 3.3.18 → 3.3.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (374) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +52 -0
  3. data/Manifest.txt +4 -0
  4. data/bin/gem +2 -2
  5. data/bin/update_rubygems +4 -4
  6. data/bundler/CHANGELOG.md +78 -0
  7. data/bundler/UPGRADING.md +11 -4
  8. data/bundler/lib/bundler/build_metadata.rb +2 -2
  9. data/bundler/lib/bundler/cli/common.rb +1 -0
  10. data/bundler/lib/bundler/cli/install.rb +5 -2
  11. data/bundler/lib/bundler/cli/outdated.rb +12 -3
  12. data/bundler/lib/bundler/cli/platform.rb +1 -1
  13. data/bundler/lib/bundler/cli.rb +5 -3
  14. data/bundler/lib/bundler/definition.rb +103 -29
  15. data/bundler/lib/bundler/dsl.rb +2 -2
  16. data/bundler/lib/bundler/endpoint_specification.rb +1 -12
  17. data/bundler/lib/bundler/fetcher.rb +6 -6
  18. data/bundler/lib/bundler/gem_helpers.rb +7 -1
  19. data/bundler/lib/bundler/gem_version_promoter.rb +4 -0
  20. data/bundler/lib/bundler/index.rb +10 -12
  21. data/bundler/lib/bundler/inline.rb +1 -1
  22. data/bundler/lib/bundler/installer/standalone.rb +1 -1
  23. data/bundler/lib/bundler/installer.rb +14 -12
  24. data/bundler/lib/bundler/lazy_specification.rb +30 -23
  25. data/bundler/lib/bundler/man/bundle-add.1 +1 -1
  26. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  27. data/bundler/lib/bundler/man/bundle-cache.1 +7 -1
  28. data/bundler/lib/bundler/man/bundle-cache.1.ronn +7 -0
  29. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  30. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  31. data/bundler/lib/bundler/man/bundle-config.1 +25 -6
  32. data/bundler/lib/bundler/man/bundle-config.1.ronn +16 -6
  33. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  34. data/bundler/lib/bundler/man/bundle-exec.1 +2 -2
  35. data/bundler/lib/bundler/man/bundle-exec.1.ronn +1 -1
  36. data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
  37. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  38. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  39. data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
  40. data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
  41. data/bundler/lib/bundler/man/bundle-install.1 +5 -1
  42. data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -0
  43. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  44. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  45. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  46. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  47. data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
  48. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  49. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  50. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  51. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  52. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  53. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  54. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  55. data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
  56. data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
  57. data/bundler/lib/bundler/man/bundle.1 +10 -9
  58. data/bundler/lib/bundler/man/bundle.1.ronn +8 -6
  59. data/bundler/lib/bundler/man/gemfile.5 +16 -10
  60. data/bundler/lib/bundler/man/gemfile.5.ronn +23 -16
  61. data/bundler/lib/bundler/man/index.txt +1 -0
  62. data/bundler/lib/bundler/match_metadata.rb +13 -0
  63. data/bundler/lib/bundler/match_remote_metadata.rb +26 -0
  64. data/bundler/lib/bundler/plugin.rb +2 -0
  65. data/bundler/lib/bundler/remote_specification.rb +6 -11
  66. data/bundler/lib/bundler/resolver/spec_group.rb +11 -8
  67. data/bundler/lib/bundler/resolver.rb +40 -18
  68. data/bundler/lib/bundler/ruby_dsl.rb +1 -1
  69. data/bundler/lib/bundler/ruby_version.rb +5 -5
  70. data/bundler/lib/bundler/rubygems_ext.rb +41 -0
  71. data/bundler/lib/bundler/rubygems_gem_installer.rb +19 -12
  72. data/bundler/lib/bundler/settings.rb +1 -0
  73. data/bundler/lib/bundler/source/metadata.rb +1 -1
  74. data/bundler/lib/bundler/source_list.rb +4 -0
  75. data/bundler/lib/bundler/spec_set.rb +38 -33
  76. data/bundler/lib/bundler/version.rb +1 -1
  77. data/bundler/lib/bundler.rb +3 -3
  78. data/lib/rubygems/available_set.rb +3 -3
  79. data/lib/rubygems/basic_specification.rb +4 -4
  80. data/lib/rubygems/command.rb +25 -25
  81. data/lib/rubygems/command_manager.rb +9 -9
  82. data/lib/rubygems/commands/build_command.rb +8 -8
  83. data/lib/rubygems/commands/cert_command.rb +33 -33
  84. data/lib/rubygems/commands/check_command.rb +20 -20
  85. data/lib/rubygems/commands/cleanup_command.rb +17 -17
  86. data/lib/rubygems/commands/contents_command.rb +13 -13
  87. data/lib/rubygems/commands/dependency_command.rb +16 -16
  88. data/lib/rubygems/commands/environment_command.rb +5 -5
  89. data/lib/rubygems/commands/fetch_command.rb +8 -8
  90. data/lib/rubygems/commands/generate_index_command.rb +17 -17
  91. data/lib/rubygems/commands/help_command.rb +3 -3
  92. data/lib/rubygems/commands/info_command.rb +3 -3
  93. data/lib/rubygems/commands/install_command.rb +20 -20
  94. data/lib/rubygems/commands/list_command.rb +3 -3
  95. data/lib/rubygems/commands/lock_command.rb +4 -4
  96. data/lib/rubygems/commands/mirror_command.rb +3 -3
  97. data/lib/rubygems/commands/open_command.rb +9 -9
  98. data/lib/rubygems/commands/outdated_command.rb +5 -5
  99. data/lib/rubygems/commands/owner_command.rb +11 -11
  100. data/lib/rubygems/commands/pristine_command.rb +36 -36
  101. data/lib/rubygems/commands/push_command.rb +8 -8
  102. data/lib/rubygems/commands/query_command.rb +8 -8
  103. data/lib/rubygems/commands/rdoc_command.rb +17 -17
  104. data/lib/rubygems/commands/search_command.rb +3 -3
  105. data/lib/rubygems/commands/server_command.rb +3 -3
  106. data/lib/rubygems/commands/setup_command.rb +96 -106
  107. data/lib/rubygems/commands/signin_command.rb +9 -9
  108. data/lib/rubygems/commands/signout_command.rb +7 -7
  109. data/lib/rubygems/commands/sources_command.rb +21 -21
  110. data/lib/rubygems/commands/specification_command.rb +13 -13
  111. data/lib/rubygems/commands/stale_command.rb +2 -2
  112. data/lib/rubygems/commands/uninstall_command.rb +40 -40
  113. data/lib/rubygems/commands/unpack_command.rb +12 -12
  114. data/lib/rubygems/commands/update_command.rb +40 -56
  115. data/lib/rubygems/commands/which_command.rb +7 -7
  116. data/lib/rubygems/commands/yank_command.rb +11 -11
  117. data/lib/rubygems/config_file.rb +21 -21
  118. data/lib/rubygems/core_ext/kernel_gem.rb +1 -1
  119. data/lib/rubygems/core_ext/kernel_require.rb +1 -1
  120. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  121. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  122. data/lib/rubygems/defaults.rb +16 -16
  123. data/lib/rubygems/dependency.rb +9 -9
  124. data/lib/rubygems/dependency_installer.rb +13 -13
  125. data/lib/rubygems/dependency_list.rb +6 -6
  126. data/lib/rubygems/doctor.rb +18 -18
  127. data/lib/rubygems/errors.rb +2 -2
  128. data/lib/rubygems/exceptions.rb +5 -5
  129. data/lib/rubygems/ext/build_error.rb +1 -1
  130. data/lib/rubygems/ext/builder.rb +16 -16
  131. data/lib/rubygems/ext/cargo_builder.rb +7 -7
  132. data/lib/rubygems/ext/cmake_builder.rb +2 -2
  133. data/lib/rubygems/ext/configure_builder.rb +1 -1
  134. data/lib/rubygems/ext/ext_conf_builder.rb +8 -8
  135. data/lib/rubygems/ext/rake_builder.rb +3 -3
  136. data/lib/rubygems/ext.rb +7 -7
  137. data/lib/rubygems/gem_runner.rb +5 -5
  138. data/lib/rubygems/gemcutter_utilities.rb +31 -28
  139. data/lib/rubygems/indexer.rb +27 -27
  140. data/lib/rubygems/install_default_message.rb +2 -2
  141. data/lib/rubygems/install_message.rb +2 -2
  142. data/lib/rubygems/install_update_options.rb +55 -55
  143. data/lib/rubygems/installer.rb +32 -40
  144. data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
  145. data/lib/rubygems/local_remote_options.rb +18 -20
  146. data/lib/rubygems/mock_gem_ui.rb +2 -2
  147. data/lib/rubygems/name_tuple.rb +4 -4
  148. data/lib/rubygems/optparse.rb +1 -1
  149. data/lib/rubygems/package/file_source.rb +2 -2
  150. data/lib/rubygems/package/old.rb +8 -8
  151. data/lib/rubygems/package/tar_header.rb +50 -50
  152. data/lib/rubygems/package/tar_reader/entry.rb +2 -2
  153. data/lib/rubygems/package/tar_reader.rb +1 -1
  154. data/lib/rubygems/package/tar_writer.rb +7 -7
  155. data/lib/rubygems/package.rb +54 -43
  156. data/lib/rubygems/package_task.rb +4 -4
  157. data/lib/rubygems/platform.rb +66 -55
  158. data/lib/rubygems/psych_tree.rb +1 -1
  159. data/lib/rubygems/query_utils.rb +33 -33
  160. data/lib/rubygems/rdoc.rb +2 -2
  161. data/lib/rubygems/remote_fetcher.rb +22 -22
  162. data/lib/rubygems/request/connection_pools.rb +4 -4
  163. data/lib/rubygems/request/http_pool.rb +1 -1
  164. data/lib/rubygems/request.rb +22 -22
  165. data/lib/rubygems/request_set/gem_dependency_api.rb +18 -18
  166. data/lib/rubygems/request_set/lockfile/parser.rb +26 -26
  167. data/lib/rubygems/request_set/lockfile/tokenizer.rb +4 -4
  168. data/lib/rubygems/request_set/lockfile.rb +5 -5
  169. data/lib/rubygems/request_set.rb +17 -17
  170. data/lib/rubygems/requirement.rb +6 -6
  171. data/lib/rubygems/resolver/activation_request.rb +3 -3
  172. data/lib/rubygems/resolver/api_set.rb +4 -4
  173. data/lib/rubygems/resolver/api_specification.rb +6 -6
  174. data/lib/rubygems/resolver/best_set.rb +5 -5
  175. data/lib/rubygems/resolver/conflict.rb +10 -10
  176. data/lib/rubygems/resolver/dependency_request.rb +2 -2
  177. data/lib/rubygems/resolver/git_set.rb +2 -2
  178. data/lib/rubygems/resolver/git_specification.rb +6 -6
  179. data/lib/rubygems/resolver/index_set.rb +3 -3
  180. data/lib/rubygems/resolver/index_specification.rb +6 -5
  181. data/lib/rubygems/resolver/installed_specification.rb +4 -4
  182. data/lib/rubygems/resolver/installer_set.rb +11 -16
  183. data/lib/rubygems/resolver/local_specification.rb +2 -2
  184. data/lib/rubygems/resolver/lock_set.rb +4 -4
  185. data/lib/rubygems/resolver/lock_specification.rb +4 -4
  186. data/lib/rubygems/resolver/molinillo.rb +1 -1
  187. data/lib/rubygems/resolver/specification.rb +1 -1
  188. data/lib/rubygems/resolver/vendor_set.rb +1 -1
  189. data/lib/rubygems/resolver/vendor_specification.rb +3 -3
  190. data/lib/rubygems/resolver.rb +39 -39
  191. data/lib/rubygems/s3_uri_signer.rb +6 -6
  192. data/lib/rubygems/safe_yaml.rb +2 -2
  193. data/lib/rubygems/security/policies.rb +11 -11
  194. data/lib/rubygems/security/policy.rb +18 -18
  195. data/lib/rubygems/security/signer.rb +5 -5
  196. data/lib/rubygems/security/trust_dir.rb +3 -3
  197. data/lib/rubygems/security.rb +28 -28
  198. data/lib/rubygems/security_option.rb +5 -5
  199. data/lib/rubygems/source/git.rb +21 -21
  200. data/lib/rubygems/source/installed.rb +1 -1
  201. data/lib/rubygems/source/local.rb +2 -2
  202. data/lib/rubygems/source/specific_file.rb +1 -1
  203. data/lib/rubygems/source.rb +16 -16
  204. data/lib/rubygems/spec_fetcher.rb +9 -9
  205. data/lib/rubygems/specification.rb +63 -62
  206. data/lib/rubygems/specification_policy.rb +15 -15
  207. data/lib/rubygems/stub_specification.rb +5 -5
  208. data/lib/rubygems/tsort.rb +1 -1
  209. data/lib/rubygems/uninstaller.rb +18 -18
  210. data/lib/rubygems/uri.rb +4 -4
  211. data/lib/rubygems/uri_formatter.rb +1 -1
  212. data/lib/rubygems/user_interaction.rb +33 -19
  213. data/lib/rubygems/util/licenses.rb +3 -3
  214. data/lib/rubygems/util.rb +10 -10
  215. data/lib/rubygems/validator.rb +5 -5
  216. data/lib/rubygems/version.rb +15 -9
  217. data/lib/rubygems/version_option.rb +3 -3
  218. data/lib/rubygems.rb +62 -61
  219. data/rubygems-update.gemspec +2 -2
  220. data/setup.rb +9 -9
  221. data/test/rubygems/helper.rb +132 -132
  222. data/test/rubygems/installer_test_case.rb +13 -13
  223. data/test/rubygems/package/tar_test_case.rb +2 -2
  224. data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
  225. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
  226. data/test/rubygems/rubygems_plugin.rb +2 -2
  227. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +4 -4
  228. data/test/rubygems/test_bundled_ca.rb +10 -10
  229. data/test/rubygems/test_config.rb +3 -3
  230. data/test/rubygems/test_deprecate.rb +3 -3
  231. data/test/rubygems/test_exit.rb +2 -2
  232. data/test/rubygems/test_gem.rb +342 -342
  233. data/test/rubygems/test_gem_available_set.rb +21 -21
  234. data/test/rubygems/test_gem_bundler_version_finder.rb +1 -1
  235. data/test/rubygems/test_gem_command.rb +44 -44
  236. data/test/rubygems/test_gem_command_manager.rb +29 -29
  237. data/test/rubygems/test_gem_commands_build_command.rb +63 -63
  238. data/test/rubygems/test_gem_commands_cert_command.rb +97 -99
  239. data/test/rubygems/test_gem_commands_check_command.rb +4 -4
  240. data/test/rubygems/test_gem_commands_cleanup_command.rb +40 -40
  241. data/test/rubygems/test_gem_commands_contents_command.rb +27 -27
  242. data/test/rubygems/test_gem_commands_dependency_command.rb +36 -36
  243. data/test/rubygems/test_gem_commands_environment_command.rb +16 -16
  244. data/test/rubygems/test_gem_commands_fetch_command.rb +37 -37
  245. data/test/rubygems/test_gem_commands_generate_index_command.rb +7 -7
  246. data/test/rubygems/test_gem_commands_help_command.rb +13 -13
  247. data/test/rubygems/test_gem_commands_info_command.rb +2 -2
  248. data/test/rubygems/test_gem_commands_install_command.rb +131 -131
  249. data/test/rubygems/test_gem_commands_list_command.rb +4 -4
  250. data/test/rubygems/test_gem_commands_lock_command.rb +10 -10
  251. data/test/rubygems/test_gem_commands_mirror.rb +2 -2
  252. data/test/rubygems/test_gem_commands_open_command.rb +4 -4
  253. data/test/rubygems/test_gem_commands_outdated_command.rb +9 -9
  254. data/test/rubygems/test_gem_commands_owner_command.rb +41 -41
  255. data/test/rubygems/test_gem_commands_pristine_command.rb +92 -92
  256. data/test/rubygems/test_gem_commands_push_command.rb +54 -54
  257. data/test/rubygems/test_gem_commands_query_command.rb +73 -73
  258. data/test/rubygems/test_gem_commands_search_command.rb +2 -2
  259. data/test/rubygems/test_gem_commands_server_command.rb +2 -2
  260. data/test/rubygems/test_gem_commands_setup_command.rb +119 -85
  261. data/test/rubygems/test_gem_commands_signin_command.rb +45 -31
  262. data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
  263. data/test/rubygems/test_gem_commands_sources_command.rb +28 -29
  264. data/test/rubygems/test_gem_commands_specification_command.rb +32 -32
  265. data/test/rubygems/test_gem_commands_stale_command.rb +4 -4
  266. data/test/rubygems/test_gem_commands_uninstall_command.rb +75 -75
  267. data/test/rubygems/test_gem_commands_unpack_command.rb +31 -31
  268. data/test/rubygems/test_gem_commands_update_command.rb +89 -89
  269. data/test/rubygems/test_gem_commands_which_command.rb +6 -6
  270. data/test/rubygems/test_gem_commands_yank_command.rb +40 -40
  271. data/test/rubygems/test_gem_config_file.rb +93 -81
  272. data/test/rubygems/test_gem_dependency.rb +73 -73
  273. data/test/rubygems/test_gem_dependency_installer.rb +165 -165
  274. data/test/rubygems/test_gem_dependency_list.rb +47 -47
  275. data/test/rubygems/test_gem_dependency_resolution_error.rb +4 -4
  276. data/test/rubygems/test_gem_doctor.rb +26 -26
  277. data/test/rubygems/test_gem_ext_builder.rb +59 -59
  278. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +6 -6
  279. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +1 -1
  280. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +8 -8
  281. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +1 -1
  282. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +6 -6
  283. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  284. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +8 -8
  285. data/test/rubygems/test_gem_ext_cargo_builder.rb +26 -26
  286. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +3 -3
  287. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +23 -23
  288. data/test/rubygems/test_gem_ext_cmake_builder.rb +15 -15
  289. data/test/rubygems/test_gem_ext_configure_builder.rb +13 -13
  290. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
  291. data/test/rubygems/test_gem_ext_rake_builder.rb +15 -15
  292. data/test/rubygems/test_gem_gem_runner.rb +7 -7
  293. data/test/rubygems/test_gem_gemcutter_utilities.rb +66 -66
  294. data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -4
  295. data/test/rubygems/test_gem_indexer.rb +48 -48
  296. data/test/rubygems/test_gem_install_update_options.rb +16 -16
  297. data/test/rubygems/test_gem_installer.rb +303 -300
  298. data/test/rubygems/test_gem_local_remote_options.rb +10 -10
  299. data/test/rubygems/test_gem_name_tuple.rb +4 -4
  300. data/test/rubygems/test_gem_package.rb +228 -206
  301. data/test/rubygems/test_gem_package_old.rb +13 -13
  302. data/test/rubygems/test_gem_package_tar_header.rb +42 -42
  303. data/test/rubygems/test_gem_package_tar_reader.rb +8 -8
  304. data/test/rubygems/test_gem_package_tar_reader_entry.rb +10 -10
  305. data/test/rubygems/test_gem_package_tar_writer.rb +76 -76
  306. data/test/rubygems/test_gem_package_task.rb +18 -18
  307. data/test/rubygems/test_gem_path_support.rb +14 -14
  308. data/test/rubygems/test_gem_platform.rb +266 -227
  309. data/test/rubygems/test_gem_rdoc.rb +14 -14
  310. data/test/rubygems/test_gem_remote_fetcher.rb +149 -149
  311. data/test/rubygems/test_gem_request.rb +55 -55
  312. data/test/rubygems/test_gem_request_connection_pools.rb +29 -29
  313. data/test/rubygems/test_gem_request_set.rb +99 -99
  314. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +204 -206
  315. data/test/rubygems/test_gem_request_set_lockfile.rb +86 -86
  316. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +56 -56
  317. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +62 -62
  318. data/test/rubygems/test_gem_requirement.rb +47 -41
  319. data/test/rubygems/test_gem_resolver.rb +133 -99
  320. data/test/rubygems/test_gem_resolver_activation_request.rb +6 -6
  321. data/test/rubygems/test_gem_resolver_api_set.rb +33 -33
  322. data/test/rubygems/test_gem_resolver_api_specification.rb +47 -47
  323. data/test/rubygems/test_gem_resolver_best_set.rb +22 -22
  324. data/test/rubygems/test_gem_resolver_composed_set.rb +1 -1
  325. data/test/rubygems/test_gem_resolver_conflict.rb +12 -12
  326. data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -15
  327. data/test/rubygems/test_gem_resolver_git_set.rb +21 -21
  328. data/test/rubygems/test_gem_resolver_git_specification.rb +21 -21
  329. data/test/rubygems/test_gem_resolver_index_set.rb +12 -12
  330. data/test/rubygems/test_gem_resolver_index_specification.rb +16 -16
  331. data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -5
  332. data/test/rubygems/test_gem_resolver_installer_set.rb +78 -34
  333. data/test/rubygems/test_gem_resolver_local_specification.rb +7 -7
  334. data/test/rubygems/test_gem_resolver_lock_set.rb +12 -12
  335. data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -17
  336. data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -1
  337. data/test/rubygems/test_gem_resolver_specification.rb +8 -8
  338. data/test/rubygems/test_gem_resolver_vendor_set.rb +6 -6
  339. data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -10
  340. data/test/rubygems/test_gem_security.rb +67 -67
  341. data/test/rubygems/test_gem_security_policy.rb +62 -62
  342. data/test/rubygems/test_gem_security_signer.rb +28 -28
  343. data/test/rubygems/test_gem_security_trust_dir.rb +4 -4
  344. data/test/rubygems/test_gem_silent_ui.rb +38 -32
  345. data/test/rubygems/test_gem_source.rb +44 -44
  346. data/test/rubygems/test_gem_source_fetch_problem.rb +9 -9
  347. data/test/rubygems/test_gem_source_git.rb +59 -59
  348. data/test/rubygems/test_gem_source_installed.rb +16 -16
  349. data/test/rubygems/test_gem_source_list.rb +5 -5
  350. data/test/rubygems/test_gem_source_local.rb +14 -14
  351. data/test/rubygems/test_gem_source_lock.rb +31 -31
  352. data/test/rubygems/test_gem_source_specific_file.rb +17 -17
  353. data/test/rubygems/test_gem_source_subpath_problem.rb +7 -7
  354. data/test/rubygems/test_gem_source_vendor.rb +13 -13
  355. data/test/rubygems/test_gem_spec_fetcher.rb +72 -72
  356. data/test/rubygems/test_gem_specification.rb +444 -436
  357. data/test/rubygems/test_gem_stream_ui.rb +19 -19
  358. data/test/rubygems/test_gem_stub_specification.rb +32 -32
  359. data/test/rubygems/test_gem_text.rb +1 -1
  360. data/test/rubygems/test_gem_uninstaller.rb +112 -112
  361. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -3
  362. data/test/rubygems/test_gem_uri.rb +4 -4
  363. data/test/rubygems/test_gem_uri_formatter.rb +14 -14
  364. data/test/rubygems/test_gem_util.rb +23 -23
  365. data/test/rubygems/test_gem_validator.rb +8 -8
  366. data/test/rubygems/test_gem_version.rb +22 -15
  367. data/test/rubygems/test_gem_version_option.rb +15 -15
  368. data/test/rubygems/test_kernel.rb +31 -31
  369. data/test/rubygems/test_project_sanity.rb +1 -1
  370. data/test/rubygems/test_remote_fetch_error.rb +6 -6
  371. data/test/rubygems/test_require.rb +43 -43
  372. data/test/rubygems/test_rubygems.rb +8 -8
  373. data/test/rubygems/utilities.rb +19 -19
  374. metadata +7 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2e4ec6bc7526731f88132fc2b50228513c227ccb3ba0e4d92ad009de6131ee99
4
- data.tar.gz: 848ab25d5d8e63a8a13a15cbf2814fd90e13e026c7e3d3594315944fd6bb966a
3
+ metadata.gz: abfdbab5d664b8189d2ee8b68769e3530bb7ffb54b324b61b70eae773305e142
4
+ data.tar.gz: 7f2b71150cc622d254ea1287dff9dc8c6879a662a2e8452035666f020d1f1be6
5
5
  SHA512:
6
- metadata.gz: 8b6dbc2d36b694c6de2b1adea1be5319b20a81db44d633933d3254852000c4909f1354ccebd6c334fcef95f6c9ab20723e144f28784ccaeb823e026433d879f4
7
- data.tar.gz: f20de7a450239710b77454b12f1ff78ef2c88951862b3edb2458bde54b5aa4353c697de9ea0b291c37430fff6de6e388254e6c10fdaf67686a4784d67c61f35c
6
+ metadata.gz: 5e7973dc92bf831135bfae7327b8f1dd11a890693c4bbfbaf9adac050ce6c6d12c4176f74ec3f372f57a712bcb524e25569e1afde66f48b9a19b421966c61796
7
+ data.tar.gz: 993a269fd39cea74ea2c136812e691d1c9b8477470d5180d2f0a06c4819800fabded2a401b2267bbdde72731c4bbb40f14e468d05a8fc52c7b3216a49ea2df30
data/CHANGELOG.md CHANGED
@@ -1,3 +1,55 @@
1
+ # 3.3.21 / 2022-08-24
2
+
3
+ ## Enhancements:
4
+
5
+ * Support non gnu libc linux platforms. Pull request #5852 by
6
+ deivid-rodriguez
7
+ * Installs bundler 2.3.21 as a default gem.
8
+
9
+ # 3.3.20 / 2022-08-10
10
+
11
+ ## Enhancements:
12
+
13
+ * Include backtrace with crashes by default. Pull request #5811 by
14
+ deivid-rodriguez
15
+ * Don't create broken symlinks when a gem includes them, but print a
16
+ warning instead. Pull request #5801 by deivid-rodriguez
17
+ * Warn (rather than crash) when setting `nil` specification versions. Pull
18
+ request #5794 by deivid-rodriguez
19
+ * Installs bundler 2.3.20 as a default gem.
20
+
21
+ ## Bug fixes:
22
+
23
+ * Always consider installed specs for resolution, even if prereleases.
24
+ Pull request #5821 by deivid-rodriguez
25
+ * Fix `gem install` with `--platform` flag not matching simulated platform
26
+ correctly. Pull request #5820 by deivid-rodriguez
27
+ * Fix platform matching for index specs. Pull request #5795 by Ilushkanama
28
+
29
+ # 3.3.19 / 2022-07-27
30
+
31
+ ## Enhancements:
32
+
33
+ * Display mfa warnings on `gem signin`. Pull request #5590 by aellispierce
34
+ * Require fileutils more lazily when installing gems. Pull request #5738
35
+ by deivid-rodriguez
36
+ * Fix upgrading RubyGems with a customized `Gem.default_dir`. Pull request
37
+ #5728 by deivid-rodriguez
38
+ * Stop using `/dev/null` for silent ui for WASI platform. Pull request
39
+ #5703 by kateinoigakukun
40
+ * Unify loading `Gem::Requirement`. Pull request #5596 by deivid-rodriguez
41
+ * Installs bundler 2.3.19 as a default gem.
42
+
43
+ ## Bug fixes:
44
+
45
+ * Fix `ruby setup.rb` with `--destdir` writing outside of `--destdir`.
46
+ Pull request #5737 by deivid-rodriguez
47
+
48
+ ## Documentation:
49
+
50
+ * Fix wrong information about default RubyGems source. Pull request #5723
51
+ by tnir
52
+
1
53
  # 3.3.18 / 2022-07-14
2
54
 
3
55
  ## Enhancements:
data/Manifest.txt CHANGED
@@ -127,6 +127,8 @@ bundler/lib/bundler/man/bundle-outdated.1
127
127
  bundler/lib/bundler/man/bundle-outdated.1.ronn
128
128
  bundler/lib/bundler/man/bundle-platform.1
129
129
  bundler/lib/bundler/man/bundle-platform.1.ronn
130
+ bundler/lib/bundler/man/bundle-plugin.1
131
+ bundler/lib/bundler/man/bundle-plugin.1.ronn
130
132
  bundler/lib/bundler/man/bundle-pristine.1
131
133
  bundler/lib/bundler/man/bundle-pristine.1.ronn
132
134
  bundler/lib/bundler/man/bundle-remove.1
@@ -142,7 +144,9 @@ bundler/lib/bundler/man/bundle.1.ronn
142
144
  bundler/lib/bundler/man/gemfile.5
143
145
  bundler/lib/bundler/man/gemfile.5.ronn
144
146
  bundler/lib/bundler/man/index.txt
147
+ bundler/lib/bundler/match_metadata.rb
145
148
  bundler/lib/bundler/match_platform.rb
149
+ bundler/lib/bundler/match_remote_metadata.rb
146
150
  bundler/lib/bundler/mirror.rb
147
151
  bundler/lib/bundler/plugin.rb
148
152
  bundler/lib/bundler/plugin/api.rb
data/bin/gem CHANGED
@@ -5,8 +5,8 @@
5
5
  # See LICENSE.txt for permissions.
6
6
  #++
7
7
 
8
- require 'rubygems'
9
- require 'rubygems/gem_runner'
8
+ require "rubygems"
9
+ require "rubygems/gem_runner"
10
10
 
11
11
  args = ARGV.clone
12
12
 
data/bin/update_rubygems CHANGED
@@ -5,9 +5,9 @@
5
5
  # See LICENSE.txt for permissions.
6
6
  #++
7
7
 
8
- require 'rubygems'
8
+ require "rubygems"
9
9
 
10
- if ARGV.include? '-h' or ARGV.include? '--help'
10
+ if ARGV.include?("-h") || ARGV.include?("--help")
11
11
  $stderr.puts "rubygems_update [options]"
12
12
  $stderr.puts
13
13
  $stderr.puts "This will install the latest version of RubyGems."
@@ -17,7 +17,7 @@ if ARGV.include? '-h' or ARGV.include? '--help'
17
17
  end
18
18
 
19
19
  unless ARGV.grep(/--version=([\d\.]*)/).empty?
20
- exec Gem.ruby, '-S', $PROGRAM_NAME, "_#{$1}_"
20
+ exec Gem.ruby, "-S", $PROGRAM_NAME, "_#{$1}_"
21
21
  end
22
22
 
23
23
  update_dir = $LOAD_PATH.find {|dir| dir =~ /rubygems-update/ }
@@ -32,5 +32,5 @@ else
32
32
  update_dir = File.dirname(update_dir)
33
33
  Dir.chdir update_dir
34
34
  ENV["GEM_PREV_VER"] = Gem::VERSION
35
- abort unless system(Gem.ruby, 'setup.rb', *ARGV)
35
+ abort unless system(Gem.ruby, "setup.rb", *ARGV)
36
36
  end
data/bundler/CHANGELOG.md CHANGED
@@ -1,3 +1,81 @@
1
+ # 2.3.21 (August 24, 2022)
2
+
3
+ ## Enhancements:
4
+
5
+ - Backport non gnu libc linux support from RubyGems [#4488](https://github.com/rubygems/rubygems/pull/4488)
6
+ - Improve `Bundler.rm_rf` error message [#5861](https://github.com/rubygems/rubygems/pull/5861)
7
+ - Disallow both `--branch` and `--ref` at the same time in bundle-plugin [#5855](https://github.com/rubygems/rubygems/pull/5855)
8
+ - Restore previous performance of private RubyGems servers [#5826](https://github.com/rubygems/rubygems/pull/5826)
9
+
10
+ ## Bug fixes:
11
+
12
+ - Fix conservative update downgrading top level gems [#5847](https://github.com/rubygems/rubygems/pull/5847)
13
+ - Fix edge case where `bundler/inline` unintentionally skips install [#5848](https://github.com/rubygems/rubygems/pull/5848)
14
+ - Fix `bundle platform` crash when there's a lockfile with no Ruby locked [#5850](https://github.com/rubygems/rubygems/pull/5850)
15
+ - Fix crash when incomplete locked specifications are found in transitive dependencies [#5840](https://github.com/rubygems/rubygems/pull/5840)
16
+ - Fix Ruby platform incorrectly removed on `bundle update` [#5832](https://github.com/rubygems/rubygems/pull/5832)
17
+
18
+ ## Documentation:
19
+
20
+ - Explain cancelled CLI deprecations clearly [#5864](https://github.com/rubygems/rubygems/pull/5864)
21
+ - Improve `bundle config` command synopsis [#5854](https://github.com/rubygems/rubygems/pull/5854)
22
+ - Introduce bundle-plugin(1) man [#5853](https://github.com/rubygems/rubygems/pull/5853)
23
+
24
+ # 2.3.20 (August 10, 2022)
25
+
26
+ ## Enhancements:
27
+
28
+ - Consistently ignore patchlevel when reporting `bundle platform --ruby` [#5793](https://github.com/rubygems/rubygems/pull/5793)
29
+ - Make `--standalone` play nice with `--local` [#5762](https://github.com/rubygems/rubygems/pull/5762)
30
+ - Implement `bundle install --prefer-local` [#5761](https://github.com/rubygems/rubygems/pull/5761)
31
+
32
+ ## Bug fixes:
33
+
34
+ - Fix regression where yanked gems are now unintentionally updated when other gems are unlocked [#5812](https://github.com/rubygems/rubygems/pull/5812)
35
+ - Automatically remove "ruby" from lockfile if incomplete [#5807](https://github.com/rubygems/rubygems/pull/5807)
36
+ - Fix `bundle outdated --strict` showing too many outdated gems [#5798](https://github.com/rubygems/rubygems/pull/5798)
37
+ - Don't discard candidates matching Ruby metadata [#5784](https://github.com/rubygems/rubygems/pull/5784)
38
+ - Fix `bundle outdated` crash in debug mode [#5796](https://github.com/rubygems/rubygems/pull/5796)
39
+ - Fix `ruby` DSL requirement matching for head and prerelease rubies [#5766](https://github.com/rubygems/rubygems/pull/5766)
40
+
41
+ ## Documentation:
42
+
43
+ - Update Bundler support policies to match what we do these days [#5813](https://github.com/rubygems/rubygems/pull/5813)
44
+ - Fix arguments for bundle-config(1) docs [#5804](https://github.com/rubygems/rubygems/pull/5804)
45
+ - Improve `bundle platform` man page [#5788](https://github.com/rubygems/rubygems/pull/5788)
46
+ - Remove `bundle cache` from deprecated commands list, and consistently link to `bundle cache` in man pages [#5783](https://github.com/rubygems/rubygems/pull/5783)
47
+ - Add package/pack aliases to man pages for cache [#5785](https://github.com/rubygems/rubygems/pull/5785)
48
+ - Add deprecation notice of bundle console [#5775](https://github.com/rubygems/rubygems/pull/5775)
49
+
50
+ # 2.3.19 (July 27, 2022)
51
+
52
+ ## Enhancements:
53
+
54
+ - Add `Bundler.settings[:only]` to install gems of the specified groups [#5759](https://github.com/rubygems/rubygems/pull/5759)
55
+ - Add `ignore_funding_requests` config flag [#5767](https://github.com/rubygems/rubygems/pull/5767)
56
+ - Prevent random crash when autoloading `Pathname` [#5769](https://github.com/rubygems/rubygems/pull/5769)
57
+ - Don't corrupt lockfile when user moves a gem that's already in the lockfile to an incorrect source by mistake [#5070](https://github.com/rubygems/rubygems/pull/5070)
58
+ - Reconcile error/warning message for multiple global sources with documentation [#5741](https://github.com/rubygems/rubygems/pull/5741)
59
+ - Improve error message when gems cannot be found to include the source for each gem [#5729](https://github.com/rubygems/rubygems/pull/5729)
60
+
61
+ ## Bug fixes:
62
+
63
+ - Fix yet another TruffleRuby platform selection regression [#5746](https://github.com/rubygems/rubygems/pull/5746)
64
+ - Show a proper error if extension dir is not writable [#5726](https://github.com/rubygems/rubygems/pull/5726)
65
+
66
+ ## Performance:
67
+
68
+ - Lazily check incomplete lockfile to improve performance [#5546](https://github.com/rubygems/rubygems/pull/5546)
69
+
70
+ ## Documentation:
71
+
72
+ - Add deprecation notice of bundle inject [#5776](https://github.com/rubygems/rubygems/pull/5776)
73
+ - Add deprecation notice of `bundle viz` to man pages [#5765](https://github.com/rubygems/rubygems/pull/5765)
74
+ - Update command example in `bundle exec` man page [#5754](https://github.com/rubygems/rubygems/pull/5754)
75
+ - Remove bundle show from obsolete commands [#5753](https://github.com/rubygems/rubygems/pull/5753)
76
+ - Improve global source(s) documentation [#5732](https://github.com/rubygems/rubygems/pull/5732)
77
+ - Use https protocol for URLs for config mirror in bundler man [#5722](https://github.com/rubygems/rubygems/pull/5722)
78
+
1
79
  # 2.3.18 (July 14, 2022)
2
80
 
3
81
  ## Enhancements:
data/bundler/UPGRADING.md CHANGED
@@ -25,7 +25,7 @@ I'll be dividing the deprecations into four groups: CLI deprecations, Helper
25
25
  deprecations, DSL deprecations, and misc deprecations. Let's dive into each of
26
26
  them.
27
27
 
28
- #### CLI deprecations
28
+ ### CLI deprecations
29
29
 
30
30
  The CLI defines a set of commands and options that can be used by our users to
31
31
  create command lines that bundler can understand. There's a number of changes
@@ -82,7 +82,6 @@ in the upcoming 3 version.
82
82
  in favor of a `bin/console` script created by `bundle gem` on gem generation
83
83
  that users can tweak to their needs.
84
84
 
85
- * ~The `bundle update` command will no longer update all gems, you'll need to pass `--all` to it.~ (postponed)
86
85
 
87
86
  * The `bundle install` command will no longer accept a `--binstubs` flag.
88
87
 
@@ -94,7 +93,6 @@ in the upcoming 3 version.
94
93
  likely unused files into source control. Because of this, binstubs now must
95
94
  be created and checked into version control individually.
96
95
 
97
- * ~The `bundle config` command has a new subcommand-based interface.~ (postponed)
98
96
 
99
97
  * The `bundle inject` command is deprecated and replaced with `bundle add`.
100
98
 
@@ -103,7 +101,16 @@ in the upcoming 3 version.
103
101
  exactly the same in `bundle add`, so it should be easy to migrate to the new
104
102
  command.
105
103
 
106
- #### Helper deprecations
104
+ #### Cancelled CLI deprecations
105
+
106
+ These deprecations have been initally announced before, but the deprecations
107
+ were cancelled before the release of Bundler 2.1.0 in [rubygems/bundler#7475](https://github.com/rubygems/bundler/pull/7475).
108
+
109
+ * ~The `bundle update` command will no longer update all gems, you'll need to pass `--all` to it.~ (postponed)
110
+
111
+ * ~The `bundle config` command will no longer accept old subcommand-based interface before Bundler 2.1.~ (postponed)
112
+
113
+ ### Helper deprecations
107
114
 
108
115
  * `Bundler.clean_env`, `Bundler.with_clean_env`, `Bundler.clean_system`, and `Bundler.clean_exec` are deprecated.
109
116
 
@@ -4,8 +4,8 @@ module Bundler
4
4
  # Represents metadata from when the Bundler gem was built.
5
5
  module BuildMetadata
6
6
  # begin ivars
7
- @built_at = "2022-07-14".freeze
8
- @git_commit_sha = "fc31b7f7d9".freeze
7
+ @built_at = "2022-08-24".freeze
8
+ @git_commit_sha = "d54be5fdd8".freeze
9
9
  @release = true
10
10
  # end ivars
11
11
 
@@ -15,6 +15,7 @@ module Bundler
15
15
  end
16
16
 
17
17
  def self.output_fund_metadata_summary
18
+ return if Bundler.settings["ignore_funding_requests"]
18
19
  definition = Bundler.definition
19
20
  current_dependencies = definition.requested_dependencies
20
21
  current_specs = definition.specs
@@ -147,8 +147,11 @@ module Bundler
147
147
  def normalize_settings
148
148
  Bundler.settings.set_command_option :path, nil if options[:system]
149
149
  Bundler.settings.set_command_option_if_given :path, options[:path]
150
- Bundler.settings.temporary(:path_relative_to_cwd => false) do
151
- Bundler.settings.set_command_option :path, "bundle" if options["standalone"] && Bundler.settings[:path].nil?
150
+
151
+ if options["standalone"] && Bundler.settings[:path].nil? && !options["local"]
152
+ Bundler.settings.temporary(:path_relative_to_cwd => false) do
153
+ Bundler.settings.set_command_option :path, "bundle"
154
+ end
152
155
  end
153
156
 
154
157
  bin_option = options["binstubs"]
@@ -46,7 +46,7 @@ module Bundler
46
46
 
47
47
  Bundler::CLI::Common.configure_gem_version_promoter(
48
48
  Bundler.definition,
49
- options
49
+ options.merge(:strict => @strict)
50
50
  )
51
51
 
52
52
  definition_resolution = proc do
@@ -129,6 +129,12 @@ module Bundler
129
129
 
130
130
  private
131
131
 
132
+ def loaded_from_for(spec)
133
+ return unless spec.respond_to?(:loaded_from)
134
+
135
+ spec.loaded_from
136
+ end
137
+
132
138
  def groups_text(group_text, groups)
133
139
  "#{group_text}#{groups.split(",").size > 1 ? "s" : ""} \"#{groups}\""
134
140
  end
@@ -184,7 +190,10 @@ module Bundler
184
190
 
185
191
  def print_gem(current_spec, active_spec, dependency, groups)
186
192
  spec_version = "#{active_spec.version}#{active_spec.git_version}"
187
- spec_version += " (from #{active_spec.loaded_from})" if Bundler.ui.debug? && active_spec.loaded_from
193
+ if Bundler.ui.debug?
194
+ loaded_from = loaded_from_for(active_spec)
195
+ spec_version += " (from #{loaded_from})" if loaded_from
196
+ end
188
197
  current_version = "#{current_spec.version}#{current_spec.git_version}"
189
198
 
190
199
  if dependency && dependency.specific?
@@ -211,7 +220,7 @@ module Bundler
211
220
  dependency = dependency.requirement if dependency
212
221
 
213
222
  ret_val = [active_spec.name, current_version, spec_version, dependency.to_s, groups.to_s]
214
- ret_val << active_spec.loaded_from.to_s if Bundler.ui.debug?
223
+ ret_val << loaded_from_for(active_spec).to_s if Bundler.ui.debug?
215
224
  ret_val
216
225
  end
217
226
 
@@ -9,7 +9,7 @@ module Bundler
9
9
 
10
10
  def run
11
11
  platforms, ruby_version = Bundler.ui.silence do
12
- locked_ruby_version = Bundler.locked_gems && Bundler.locked_gems.ruby_version
12
+ locked_ruby_version = Bundler.locked_gems && Bundler.locked_gems.ruby_version&.gsub(/p\d+\Z/, "")
13
13
  gemfile_ruby_version = Bundler.definition.ruby_version && Bundler.definition.ruby_version.single_version_string
14
14
  [Bundler.definition.platforms.map {|p| "* #{p}" },
15
15
  locked_ruby_version || gemfile_ruby_version]
@@ -218,6 +218,8 @@ module Bundler
218
218
  "Specify the number of jobs to run in parallel"
219
219
  method_option "local", :type => :boolean, :banner =>
220
220
  "Do not attempt to fetch gems remotely and use the gem cache instead"
221
+ method_option "prefer-local", :type => :boolean, :banner =>
222
+ "Only attempt to fetch gems remotely if not present locally, even if newer versions are available remotely"
221
223
  method_option "no-cache", :type => :boolean, :banner =>
222
224
  "Don't update the existing gem cache."
223
225
  method_option "redownload", :type => :boolean, :aliases => "--force", :banner =>
@@ -236,7 +238,7 @@ module Bundler
236
238
  "Install to the system location ($BUNDLE_PATH or $GEM_HOME) even if the bundle was previously installed somewhere else for this application"
237
239
  method_option "trust-policy", :alias => "P", :type => :string, :banner =>
238
240
  "Gem trust policy (like gem install -P). Must be one of " +
239
- Bundler.rubygems.security_policy_keys.join("|")
241
+ Bundler.rubygems.security_policy_keys.join("|")
240
242
  method_option "without", :type => :array, :banner =>
241
243
  "Exclude gems that are part of the specified named group."
242
244
  method_option "with", :type => :array, :banner =>
@@ -399,9 +401,9 @@ module Bundler
399
401
  "Do not attempt to fetch gems remotely and use the gem cache instead"
400
402
  method_option "pre", :type => :boolean, :banner => "Check for newer pre-release gems"
401
403
  method_option "source", :type => :array, :banner => "Check against a specific source"
402
- method_option "filter-strict", :type => :boolean, :banner =>
404
+ method_option "filter-strict", :type => :boolean, :aliases => "--strict", :banner =>
403
405
  "Only list newer versions allowed by your Gemfile requirements"
404
- method_option "strict", :type => :boolean, :aliases => "--update-strict", :banner =>
406
+ method_option "update-strict", :type => :boolean, :banner =>
405
407
  "Strict conservative resolution, do not allow any gem to be updated past latest --patch | --minor | --major"
406
408
  method_option "minor", :type => :boolean, :banner => "Prefer updating only to next minor version"
407
409
  method_option "major", :type => :boolean, :banner => "Prefer updating to next major version (default)"
@@ -70,6 +70,7 @@ module Bundler
70
70
  @unlock = unlock
71
71
  @optional_groups = optional_groups
72
72
  @remote = false
73
+ @prefer_local = false
73
74
  @specs = nil
74
75
  @ruby_version = ruby_version
75
76
  @gemfiles = gemfiles
@@ -138,14 +139,12 @@ module Bundler
138
139
  @unlock[:gems] ||= @dependencies.map(&:name)
139
140
  else
140
141
  eager_unlock = expand_dependencies(@unlock[:gems] || [], true)
141
- @unlock[:gems] = @locked_specs.for(eager_unlock, false, false).map(&:name)
142
+ @unlock[:gems] = @locked_specs.for(eager_unlock, false, platforms).map(&:name)
142
143
  end
143
144
 
144
145
  @dependency_changes = converge_dependencies
145
146
  @local_changes = converge_locals
146
147
 
147
- @locked_specs_incomplete_for_platform = !@locked_specs.for(requested_dependencies & expand_dependencies(locked_dependencies), true, true)
148
-
149
148
  @requires = compute_requires
150
149
  end
151
150
 
@@ -170,6 +169,13 @@ module Bundler
170
169
  resolve
171
170
  end
172
171
 
172
+ def resolve_prefering_local!
173
+ @prefer_local = true
174
+ @remote = true
175
+ sources.remote!
176
+ resolve
177
+ end
178
+
173
179
  def resolve_with_cache!
174
180
  sources.cached!
175
181
  resolve
@@ -210,6 +216,7 @@ module Bundler
210
216
  true
211
217
  rescue BundlerError => e
212
218
  @resolve = nil
219
+ @resolver = nil
213
220
  @specs = nil
214
221
  @gem_version_promoter = nil
215
222
 
@@ -279,11 +286,8 @@ module Bundler
279
286
  end
280
287
  end
281
288
  else
282
- last_resolve = converge_locked_specs
283
- # Run a resolve against the locally available gems
284
289
  Bundler.ui.debug("Found changes from the lockfile, re-resolving dependencies because #{change_reason}")
285
- expanded_dependencies = expand_dependencies(dependencies + metadata_dependencies, true)
286
- Resolver.resolve(expanded_dependencies, source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms)
290
+ resolver.start(expanded_dependencies)
287
291
  end
288
292
  end
289
293
 
@@ -468,7 +472,7 @@ module Bundler
468
472
  private :sources
469
473
 
470
474
  def nothing_changed?
471
- !@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes && !@locked_specs_incomplete_for_platform
475
+ !@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes
472
476
  end
473
477
 
474
478
  def unlocking?
@@ -477,8 +481,22 @@ module Bundler
477
481
 
478
482
  private
479
483
 
484
+ def resolver
485
+ @resolver ||= begin
486
+ last_resolve = converge_locked_specs
487
+ Resolver.new(source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms)
488
+ end
489
+ end
490
+
491
+ def expanded_dependencies
492
+ @expanded_dependencies ||= begin
493
+ remove_ruby_from_platforms_if_necessary!(dependencies)
494
+ expand_dependencies(dependencies + metadata_dependencies, true)
495
+ end
496
+ end
497
+
480
498
  def filter_specs(specs, deps)
481
- SpecSet.new(specs).for(expand_dependencies(deps, true), false, false)
499
+ SpecSet.new(specs).for(expand_dependencies(deps, true), false, platforms)
482
500
  end
483
501
 
484
502
  def materialize(dependencies)
@@ -495,14 +513,25 @@ module Bundler
495
513
  "removed in order to install."
496
514
  end
497
515
 
498
- raise GemNotFound, "Could not find #{missing_specs.map(&:full_name).join(", ")} in any of the sources"
516
+ missing_specs_list = missing_specs.group_by(&:source).map do |source, missing_specs_for_source|
517
+ "#{missing_specs_for_source.map(&:full_name).join(", ")} in #{source}"
518
+ end
519
+
520
+ raise GemNotFound, "Could not find #{missing_specs_list.join(" nor ")}"
499
521
  end
500
522
 
501
- unless specs["bundler"].any?
502
- bundler = sources.metadata_source.specs.search(Gem::Dependency.new("bundler", VERSION)).last
503
- specs["bundler"] = bundler
523
+ loop do
524
+ incomplete_specs = specs.incomplete_specs
525
+ break if incomplete_specs.empty?
526
+
527
+ Bundler.ui.debug("The lockfile does not have all gems needed for the current platform though, Bundler will still re-resolve dependencies")
528
+ @resolve = resolver.start(expanded_dependencies, :exclude_specs => incomplete_specs)
529
+ specs = resolve.materialize(dependencies)
504
530
  end
505
531
 
532
+ bundler = sources.metadata_source.specs.search(Gem::Dependency.new("bundler", VERSION)).last
533
+ specs["bundler"] = bundler
534
+
506
535
  specs
507
536
  end
508
537
 
@@ -510,6 +539,19 @@ module Bundler
510
539
  @remote && sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
511
540
  end
512
541
 
542
+ def pin_locally_available_names(source_requirements)
543
+ source_requirements.each_with_object({}) do |(name, original_source), new_source_requirements|
544
+ local_source = original_source.dup
545
+ local_source.local_only!
546
+
547
+ new_source_requirements[name] = if local_source.specs.search(name).any?
548
+ local_source
549
+ else
550
+ original_source
551
+ end
552
+ end
553
+ end
554
+
513
555
  def current_ruby_platform_locked?
514
556
  return false unless generic_local_platform == Gem::Platform::RUBY
515
557
  return false if Bundler.settings[:force_ruby_platform] && !@platforms.include?(Gem::Platform::RUBY)
@@ -545,7 +587,6 @@ module Bundler
545
587
  [@new_platform, "you added a new platform to your gemfile"],
546
588
  [@path_changes, "the gemspecs for path gems changed"],
547
589
  [@local_changes, "the gemspecs for git local gems changed"],
548
- [@locked_specs_incomplete_for_platform, "the lockfile does not have all gems needed for the current platform"],
549
590
  ].select(&:first).map(&:last).join(", ")
550
591
  end
551
592
 
@@ -678,7 +719,9 @@ module Bundler
678
719
  # commonly happen if the Gemfile has changed since the lockfile was last
679
720
  # generated
680
721
  def converge_locked_specs
681
- resolve = converge_specs(@locked_specs)
722
+ converged = converge_specs(@locked_specs)
723
+
724
+ resolve = SpecSet.new(converged.reject {|s| @unlock[:gems].include?(s.name) })
682
725
 
683
726
  diff = nil
684
727
 
@@ -702,16 +745,24 @@ module Bundler
702
745
  specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) }
703
746
  end
704
747
 
748
+ @specs_that_changed_sources = []
749
+
705
750
  specs.each do |s|
706
- # Replace the locked dependency's source with the equivalent source from the Gemfile
707
751
  dep = @dependencies.find {|d| s.satisfies?(d) }
708
752
 
709
- s.source = (dep && dep.source) || sources.get(s.source) || sources.default_source
753
+ # Replace the locked dependency's source with the equivalent source from the Gemfile
754
+ s.source = if dep && dep.source
755
+ gemfile_source = dep.source
756
+ lockfile_source = s.source
710
757
 
711
- next if @unlock[:sources].include?(s.source.name)
758
+ @specs_that_changed_sources << s if gemfile_source != lockfile_source
759
+
760
+ gemfile_source
761
+ else
762
+ sources.get_with_fallback(s.source)
763
+ end
712
764
 
713
- # If the spec is from a path source and it doesn't exist anymore
714
- # then we unlock it.
765
+ next if @unlock[:sources].include?(s.source.name)
715
766
 
716
767
  # Path sources have special logic
717
768
  if s.source.instance_of?(Source::Path) || s.source.instance_of?(Source::Gemspec)
@@ -721,7 +772,7 @@ module Bundler
721
772
  # if we won't need the source (according to the lockfile),
722
773
  # don't error if the path/git source isn't available
723
774
  next if specs.
724
- for(requested_dependencies, false, true).
775
+ for(requested_dependencies, false).
725
776
  none? {|locked_spec| locked_spec.source == s.source }
726
777
 
727
778
  raise
@@ -743,12 +794,12 @@ module Bundler
743
794
  end
744
795
  end
745
796
 
746
- SpecSet.new(filter_specs(converged, deps).reject {|s| @unlock[:gems].include?(s.name) })
797
+ filter_specs(converged, deps)
747
798
  end
748
799
 
749
800
  def metadata_dependencies
750
801
  @metadata_dependencies ||= [
751
- Dependency.new("Ruby\0", RubyVersion.system.gem_version),
802
+ Dependency.new("Ruby\0", Gem.ruby_version),
752
803
  Dependency.new("RubyGems\0", Gem::VERSION),
753
804
  ]
754
805
  end
@@ -775,7 +826,9 @@ module Bundler
775
826
  # specs will be available later when the resolver knows where to
776
827
  # look for that gemspec (or its dependencies)
777
828
  source_requirements = if precompute_source_requirements_for_indirect_dependencies?
778
- { :default => sources.default_source }.merge(source_map.all_requirements)
829
+ all_requirements = source_map.all_requirements
830
+ all_requirements = pin_locally_available_names(all_requirements) if @prefer_local
831
+ { :default => sources.default_source }.merge(all_requirements)
779
832
  else
780
833
  { :default => Source::RubygemsAggregate.new(sources, source_map) }.merge(source_map.direct_requirements)
781
834
  end
@@ -785,11 +838,22 @@ module Bundler
785
838
  end
786
839
  source_requirements[:default_bundler] = source_requirements["bundler"] || sources.default_source
787
840
  source_requirements["bundler"] = sources.metadata_source # needs to come last to override
841
+ verify_changed_sources!
788
842
  source_requirements
789
843
  end
790
844
 
845
+ def verify_changed_sources!
846
+ @specs_that_changed_sources.each do |s|
847
+ if s.source.specs.search(s.name).empty?
848
+ raise GemNotFound, "Could not find gem '#{s.name}' in #{s.source}"
849
+ end
850
+ end
851
+ end
852
+
791
853
  def requested_groups
792
- groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
854
+ values = groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
855
+ values &= Bundler.settings[:only] unless Bundler.settings[:only].empty?
856
+ values
793
857
  end
794
858
 
795
859
  def lockfiles_equal?(current, proposed, preserve_unknown_sections)
@@ -819,10 +883,20 @@ module Bundler
819
883
  def additional_base_requirements_for_resolve
820
884
  return [] unless @locked_gems && unlocking? && !sources.expired_sources?(@locked_gems.sources)
821
885
  converge_specs(@originally_locked_specs).map do |locked_spec|
822
- name = locked_spec.name
823
- dep = Dependency.new(name, ">= #{locked_spec.version}")
824
- DepProxy.get_proxy(dep, locked_spec.platform)
825
- end
886
+ Dependency.new(locked_spec.name, ">= #{locked_spec.version}")
887
+ end.uniq
888
+ end
889
+
890
+ def remove_ruby_from_platforms_if_necessary!(dependencies)
891
+ return if Bundler.frozen_bundle? ||
892
+ Bundler.local_platform == Gem::Platform::RUBY ||
893
+ !platforms.include?(Gem::Platform::RUBY) ||
894
+ (@new_platform && platforms.last == Gem::Platform::RUBY) ||
895
+ !@originally_locked_specs.incomplete_ruby_specs?(expand_dependencies(dependencies))
896
+
897
+ remove_platform(Gem::Platform::RUBY)
898
+ add_current_platform
899
+ resolver.platforms = @platforms
826
900
  end
827
901
 
828
902
  def source_map
@@ -465,12 +465,12 @@ module Bundler
465
465
 
466
466
  def multiple_global_source_warning
467
467
  if Bundler.feature_flag.bundler_3_mode?
468
- msg = "This Gemfile contains multiple primary sources. " \
468
+ msg = "This Gemfile contains multiple global sources. " \
469
469
  "Each source after the first must include a block to indicate which gems " \
470
470
  "should come from that source"
471
471
  raise GemfileEvalError, msg
472
472
  else
473
- Bundler::SharedHelpers.major_deprecation 2, "Your Gemfile contains multiple primary sources. " \
473
+ Bundler::SharedHelpers.major_deprecation 2, "Your Gemfile contains multiple global sources. " \
474
474
  "Using `source` more than once without a block is a security risk, and " \
475
475
  "may result in installing unexpected gems. To resolve this warning, use " \
476
476
  "a block to indicate which gems should come from the secondary source."