rubygems-update 3.1.6 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (553) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +55 -19
  3. data/CONTRIBUTING.md +24 -10
  4. data/History.txt +362 -186
  5. data/Manifest.txt +41 -74
  6. data/POLICIES.md +2 -9
  7. data/README.md +1 -1
  8. data/Rakefile +41 -79
  9. data/bin/update_rubygems +1 -1
  10. data/bundler/CHANGELOG.md +1563 -1426
  11. data/bundler/README.md +6 -8
  12. data/bundler/UPGRADING.md +18 -32
  13. data/bundler/bundler.gemspec +3 -3
  14. data/bundler/exe/bundle +3 -0
  15. data/bundler/lib/bundler.rb +25 -7
  16. data/bundler/lib/bundler/build_metadata.rb +4 -12
  17. data/bundler/lib/bundler/cli.rb +58 -21
  18. data/bundler/lib/bundler/cli/add.rb +1 -1
  19. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  20. data/bundler/lib/bundler/cli/cache.rb +1 -7
  21. data/bundler/lib/bundler/cli/clean.rb +1 -1
  22. data/bundler/lib/bundler/cli/common.rb +14 -0
  23. data/bundler/lib/bundler/cli/console.rb +1 -1
  24. data/bundler/lib/bundler/cli/doctor.rb +1 -1
  25. data/bundler/lib/bundler/cli/exec.rb +4 -4
  26. data/bundler/lib/bundler/cli/fund.rb +36 -0
  27. data/bundler/lib/bundler/cli/gem.rb +84 -11
  28. data/bundler/lib/bundler/cli/info.rb +15 -4
  29. data/bundler/lib/bundler/cli/init.rb +2 -2
  30. data/bundler/lib/bundler/cli/inject.rb +1 -1
  31. data/bundler/lib/bundler/cli/install.rb +9 -16
  32. data/bundler/lib/bundler/cli/issue.rb +2 -2
  33. data/bundler/lib/bundler/cli/list.rb +12 -10
  34. data/bundler/lib/bundler/cli/outdated.rb +88 -67
  35. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  36. data/bundler/lib/bundler/cli/pristine.rb +5 -0
  37. data/bundler/lib/bundler/cli/show.rb +1 -1
  38. data/bundler/lib/bundler/cli/update.rb +2 -0
  39. data/bundler/lib/bundler/compact_index_client.rb +1 -1
  40. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
  41. data/bundler/lib/bundler/compact_index_client/updater.rb +5 -5
  42. data/bundler/lib/bundler/definition.rb +47 -61
  43. data/bundler/lib/bundler/dep_proxy.rb +1 -1
  44. data/bundler/lib/bundler/dependency.rb +0 -9
  45. data/bundler/lib/bundler/dsl.rb +5 -9
  46. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  47. data/bundler/lib/bundler/env.rb +1 -1
  48. data/bundler/lib/bundler/environment_preserver.rb +26 -2
  49. data/bundler/lib/bundler/errors.rb +1 -0
  50. data/bundler/lib/bundler/feature_flag.rb +0 -3
  51. data/bundler/lib/bundler/fetcher.rb +4 -3
  52. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  53. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
  54. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  55. data/bundler/lib/bundler/fetcher/index.rb +3 -4
  56. data/bundler/lib/bundler/friendly_errors.rb +22 -13
  57. data/bundler/lib/bundler/gem_helper.rb +32 -17
  58. data/bundler/lib/bundler/gem_helpers.rb +6 -1
  59. data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
  60. data/bundler/lib/bundler/graph.rb +1 -1
  61. data/bundler/lib/bundler/index.rb +6 -2
  62. data/bundler/lib/bundler/injector.rb +22 -4
  63. data/bundler/lib/bundler/inline.rb +1 -1
  64. data/bundler/lib/bundler/installer.rb +35 -32
  65. data/bundler/lib/bundler/installer/gem_installer.rb +3 -3
  66. data/bundler/lib/bundler/installer/parallel_installer.rb +10 -10
  67. data/bundler/lib/bundler/installer/standalone.rb +2 -2
  68. data/bundler/lib/bundler/lazy_specification.rb +20 -9
  69. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  70. data/bundler/lib/bundler/lockfile_parser.rb +1 -1
  71. data/bundler/lib/bundler/man/.document +1 -0
  72. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
  73. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
  74. data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
  75. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  76. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  77. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +19 -30
  78. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  79. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
  80. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
  81. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  82. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
  83. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  84. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
  85. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  86. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  87. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  88. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  89. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  90. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  91. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  92. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  93. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
  94. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  95. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
  96. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
  97. data/bundler/lib/bundler/mirror.rb +2 -2
  98. data/bundler/lib/bundler/plugin.rb +30 -5
  99. data/bundler/lib/bundler/plugin/api/source.rb +1 -1
  100. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  101. data/bundler/lib/bundler/plugin/index.rb +10 -1
  102. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  103. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  104. data/bundler/lib/bundler/plugin/source_list.rb +1 -1
  105. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  106. data/bundler/lib/bundler/remote_specification.rb +5 -2
  107. data/bundler/lib/bundler/resolver.rb +32 -10
  108. data/bundler/lib/bundler/resolver/spec_group.rb +27 -6
  109. data/bundler/lib/bundler/retry.rb +1 -1
  110. data/bundler/lib/bundler/ruby_version.rb +1 -1
  111. data/bundler/lib/bundler/rubygems_ext.rb +53 -9
  112. data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
  113. data/bundler/lib/bundler/rubygems_integration.rb +25 -54
  114. data/bundler/lib/bundler/runtime.rb +4 -14
  115. data/bundler/lib/bundler/settings.rb +49 -46
  116. data/bundler/lib/bundler/shared_helpers.rb +2 -2
  117. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  118. data/bundler/lib/bundler/source.rb +1 -1
  119. data/bundler/lib/bundler/source/git.rb +5 -5
  120. data/bundler/lib/bundler/source/git/git_proxy.rb +57 -60
  121. data/bundler/lib/bundler/source/path.rb +7 -3
  122. data/bundler/lib/bundler/source/path/installer.rb +8 -10
  123. data/bundler/lib/bundler/source/rubygems.rb +13 -16
  124. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  125. data/bundler/lib/bundler/source_list.rb +2 -2
  126. data/bundler/lib/bundler/spec_set.rb +2 -1
  127. data/bundler/lib/bundler/stub_specification.rb +17 -5
  128. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  129. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  130. data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -2
  131. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  132. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  133. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  134. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  135. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  136. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  137. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  138. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  139. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +14 -6
  140. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
  141. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  142. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  143. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  144. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  145. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  146. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  147. data/bundler/lib/bundler/ui/shell.rb +5 -5
  148. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
  149. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  150. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
  151. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  152. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  153. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  154. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +38 -40
  155. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +75 -189
  156. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  157. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  158. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  159. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  160. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  161. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  162. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  163. data/bundler/lib/bundler/version.rb +1 -1
  164. data/bundler/lib/bundler/worker.rb +1 -1
  165. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  166. data/bundler/man/bundle-add.1 +1 -1
  167. data/bundler/man/bundle-binstubs.1 +5 -3
  168. data/bundler/man/bundle-cache.1 +1 -1
  169. data/bundler/man/bundle-check.1 +1 -1
  170. data/bundler/man/bundle-clean.1 +1 -1
  171. data/bundler/man/bundle-config.1 +16 -25
  172. data/bundler/man/bundle-doctor.1 +1 -1
  173. data/bundler/man/bundle-exec.1 +1 -1
  174. data/bundler/man/bundle-gem.1 +25 -3
  175. data/bundler/man/bundle-info.1 +1 -1
  176. data/bundler/man/bundle-init.1 +1 -1
  177. data/bundler/man/bundle-inject.1 +1 -1
  178. data/bundler/man/bundle-install.1 +30 -3
  179. data/bundler/man/bundle-list.1 +7 -7
  180. data/bundler/man/bundle-lock.1 +1 -1
  181. data/bundler/man/bundle-open.1 +1 -1
  182. data/bundler/man/bundle-outdated.1 +1 -1
  183. data/bundler/man/bundle-platform.1 +1 -1
  184. data/bundler/man/bundle-pristine.1 +1 -1
  185. data/bundler/man/bundle-remove.1 +1 -1
  186. data/bundler/man/bundle-show.1 +1 -1
  187. data/bundler/man/bundle-update.1 +1 -1
  188. data/bundler/man/bundle-viz.1 +1 -1
  189. data/bundler/man/bundle.1 +1 -1
  190. data/bundler/man/gemfile.5 +4 -4
  191. data/lib/rubygems.rb +71 -150
  192. data/lib/rubygems/available_set.rb +4 -6
  193. data/lib/rubygems/basic_specification.rb +11 -9
  194. data/lib/rubygems/bundler_version_finder.rb +14 -9
  195. data/lib/rubygems/command.rb +16 -16
  196. data/lib/rubygems/command_manager.rb +5 -6
  197. data/lib/rubygems/commands/build_command.rb +40 -20
  198. data/lib/rubygems/commands/cert_command.rb +2 -10
  199. data/lib/rubygems/commands/check_command.rb +0 -2
  200. data/lib/rubygems/commands/cleanup_command.rb +11 -7
  201. data/lib/rubygems/commands/contents_command.rb +4 -6
  202. data/lib/rubygems/commands/dependency_command.rb +6 -8
  203. data/lib/rubygems/commands/environment_command.rb +1 -3
  204. data/lib/rubygems/commands/fetch_command.rb +2 -4
  205. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  206. data/lib/rubygems/commands/help_command.rb +3 -3
  207. data/lib/rubygems/commands/info_command.rb +8 -5
  208. data/lib/rubygems/commands/install_command.rb +3 -5
  209. data/lib/rubygems/commands/list_command.rb +8 -7
  210. data/lib/rubygems/commands/lock_command.rb +1 -3
  211. data/lib/rubygems/commands/mirror_command.rb +0 -2
  212. data/lib/rubygems/commands/open_command.rb +0 -4
  213. data/lib/rubygems/commands/outdated_command.rb +0 -2
  214. data/lib/rubygems/commands/owner_command.rb +9 -3
  215. data/lib/rubygems/commands/pristine_command.rb +11 -5
  216. data/lib/rubygems/commands/push_command.rb +10 -46
  217. data/lib/rubygems/commands/query_command.rb +14 -344
  218. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  219. data/lib/rubygems/commands/search_command.rb +7 -7
  220. data/lib/rubygems/commands/server_command.rb +3 -1
  221. data/lib/rubygems/commands/setup_command.rb +131 -58
  222. data/lib/rubygems/commands/signin_command.rb +0 -2
  223. data/lib/rubygems/commands/signout_command.rb +0 -2
  224. data/lib/rubygems/commands/sources_command.rb +6 -4
  225. data/lib/rubygems/commands/specification_command.rb +8 -4
  226. data/lib/rubygems/commands/stale_command.rb +1 -3
  227. data/lib/rubygems/commands/uninstall_command.rb +1 -3
  228. data/lib/rubygems/commands/unpack_command.rb +1 -3
  229. data/lib/rubygems/commands/update_command.rb +59 -14
  230. data/lib/rubygems/commands/which_command.rb +0 -2
  231. data/lib/rubygems/commands/yank_command.rb +4 -6
  232. data/lib/rubygems/config_file.rb +11 -4
  233. data/lib/rubygems/core_ext/kernel_require.rb +5 -2
  234. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  235. data/lib/rubygems/defaults.rb +101 -7
  236. data/lib/rubygems/dependency.rb +3 -8
  237. data/lib/rubygems/dependency_installer.rb +5 -78
  238. data/lib/rubygems/dependency_list.rb +7 -9
  239. data/lib/rubygems/deprecate.rb +46 -1
  240. data/lib/rubygems/doctor.rb +4 -4
  241. data/lib/rubygems/errors.rb +3 -14
  242. data/lib/rubygems/exceptions.rb +2 -33
  243. data/lib/rubygems/ext.rb +6 -6
  244. data/lib/rubygems/ext/build_error.rb +2 -0
  245. data/lib/rubygems/ext/builder.rb +14 -35
  246. data/lib/rubygems/ext/cmake_builder.rb +5 -7
  247. data/lib/rubygems/ext/configure_builder.rb +4 -6
  248. data/lib/rubygems/ext/ext_conf_builder.rb +21 -19
  249. data/lib/rubygems/ext/rake_builder.rb +3 -5
  250. data/lib/rubygems/gem_runner.rb +3 -10
  251. data/lib/rubygems/gemcutter_utilities.rb +91 -15
  252. data/lib/rubygems/indexer.rb +1 -22
  253. data/lib/rubygems/install_update_options.rb +7 -7
  254. data/lib/rubygems/installer.rb +59 -57
  255. data/lib/rubygems/installer_test_case.rb +25 -11
  256. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  257. data/lib/rubygems/local_remote_options.rb +1 -1
  258. data/lib/rubygems/mock_gem_ui.rb +0 -6
  259. data/lib/rubygems/name_tuple.rb +3 -7
  260. data/lib/rubygems/openssl.rb +7 -0
  261. data/lib/rubygems/package.rb +14 -25
  262. data/lib/rubygems/package/digest_io.rb +0 -2
  263. data/lib/rubygems/package/file_source.rb +0 -2
  264. data/lib/rubygems/package/io_source.rb +0 -2
  265. data/lib/rubygems/package/old.rb +1 -3
  266. data/lib/rubygems/package/tar_header.rb +4 -6
  267. data/lib/rubygems/package/tar_reader.rb +0 -3
  268. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  269. data/lib/rubygems/package/tar_test_case.rb +2 -4
  270. data/lib/rubygems/package/tar_writer.rb +2 -12
  271. data/lib/rubygems/package_task.rb +1 -7
  272. data/lib/rubygems/path_support.rb +1 -3
  273. data/lib/rubygems/platform.rb +21 -12
  274. data/lib/rubygems/psych_tree.rb +0 -2
  275. data/lib/rubygems/query_utils.rb +353 -0
  276. data/lib/rubygems/rdoc.rb +0 -12
  277. data/lib/rubygems/remote_fetcher.rb +10 -27
  278. data/lib/rubygems/request.rb +4 -11
  279. data/lib/rubygems/request/connection_pools.rb +1 -5
  280. data/lib/rubygems/request/http_pool.rb +0 -2
  281. data/lib/rubygems/request/https_pool.rb +0 -2
  282. data/lib/rubygems/request_set.rb +5 -7
  283. data/lib/rubygems/request_set/gem_dependency_api.rb +5 -7
  284. data/lib/rubygems/request_set/lockfile.rb +8 -12
  285. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  286. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
  287. data/lib/rubygems/requirement.rb +20 -21
  288. data/lib/rubygems/resolver.rb +8 -11
  289. data/lib/rubygems/resolver/activation_request.rb +9 -3
  290. data/lib/rubygems/resolver/api_set.rb +3 -5
  291. data/lib/rubygems/resolver/api_specification.rb +20 -7
  292. data/lib/rubygems/resolver/best_set.rb +0 -2
  293. data/lib/rubygems/resolver/composed_set.rb +3 -5
  294. data/lib/rubygems/resolver/conflict.rb +2 -4
  295. data/lib/rubygems/resolver/current_set.rb +0 -2
  296. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  297. data/lib/rubygems/resolver/git_set.rb +0 -2
  298. data/lib/rubygems/resolver/git_specification.rb +0 -2
  299. data/lib/rubygems/resolver/index_set.rb +1 -3
  300. data/lib/rubygems/resolver/index_specification.rb +11 -2
  301. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  302. data/lib/rubygems/resolver/installer_set.rb +4 -7
  303. data/lib/rubygems/resolver/local_specification.rb +0 -2
  304. data/lib/rubygems/resolver/lock_set.rb +2 -4
  305. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  306. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  307. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  308. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  309. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  310. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  311. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  312. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  313. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  314. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  315. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  316. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  317. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  318. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  319. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  320. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  321. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  322. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  323. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  324. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  325. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  326. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  327. data/lib/rubygems/resolver/set.rb +0 -2
  328. data/lib/rubygems/resolver/source_set.rb +0 -2
  329. data/lib/rubygems/resolver/spec_specification.rb +0 -2
  330. data/lib/rubygems/resolver/specification.rb +1 -3
  331. data/lib/rubygems/resolver/stats.rb +0 -2
  332. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  333. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  334. data/lib/rubygems/s3_uri_signer.rb +2 -8
  335. data/lib/rubygems/safe_yaml.rb +4 -4
  336. data/lib/rubygems/security.rb +27 -34
  337. data/lib/rubygems/security/policy.rb +4 -8
  338. data/lib/rubygems/security/signer.rb +5 -7
  339. data/lib/rubygems/security/trust_dir.rb +1 -3
  340. data/lib/rubygems/server.rb +9 -11
  341. data/lib/rubygems/source.rb +13 -7
  342. data/lib/rubygems/source/git.rb +7 -8
  343. data/lib/rubygems/source/installed.rb +0 -2
  344. data/lib/rubygems/source/local.rb +2 -4
  345. data/lib/rubygems/source/lock.rb +0 -2
  346. data/lib/rubygems/source/specific_file.rb +0 -2
  347. data/lib/rubygems/source/vendor.rb +0 -2
  348. data/lib/rubygems/source_list.rb +4 -7
  349. data/lib/rubygems/spec_fetcher.rb +19 -18
  350. data/lib/rubygems/specification.rb +101 -118
  351. data/lib/rubygems/specification_policy.rb +79 -29
  352. data/lib/rubygems/stub_specification.rb +1 -5
  353. data/lib/rubygems/syck_hack.rb +0 -2
  354. data/lib/rubygems/test_case.rb +78 -122
  355. data/lib/rubygems/test_utilities.rb +6 -14
  356. data/lib/rubygems/uninstaller.rb +35 -16
  357. data/lib/rubygems/uri_formatter.rb +2 -3
  358. data/lib/rubygems/uri_parser.rb +0 -2
  359. data/lib/rubygems/user_interaction.rb +1 -26
  360. data/lib/rubygems/util.rb +8 -2
  361. data/lib/rubygems/util/licenses.rb +4 -6
  362. data/lib/rubygems/util/list.rb +0 -2
  363. data/lib/rubygems/validator.rb +1 -3
  364. data/lib/rubygems/version.rb +4 -6
  365. data/lib/rubygems/version_option.rb +6 -0
  366. data/rubygems-update.gemspec +2 -2
  367. data/setup.rb +2 -7
  368. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  369. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  370. data/test/rubygems/rubygems_plugin.rb +0 -2
  371. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  372. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -2
  373. data/test/rubygems/test_bundled_ca.rb +41 -48
  374. data/test/rubygems/test_config.rb +0 -2
  375. data/test/rubygems/test_deprecate.rb +40 -7
  376. data/test/rubygems/test_gem.rb +82 -79
  377. data/test/rubygems/test_gem_available_set.rb +3 -5
  378. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
  379. data/test/rubygems/test_gem_command.rb +24 -7
  380. data/test/rubygems/test_gem_command_manager.rb +36 -5
  381. data/test/rubygems/test_gem_commands_build_command.rb +233 -15
  382. data/test/rubygems/test_gem_commands_cert_command.rb +4 -6
  383. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  384. data/test/rubygems/test_gem_commands_cleanup_command.rb +14 -5
  385. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  386. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  387. data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
  388. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  389. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
  390. data/test/rubygems/test_gem_commands_help_command.rb +15 -4
  391. data/test/rubygems/test_gem_commands_info_command.rb +6 -8
  392. data/test/rubygems/test_gem_commands_install_command.rb +32 -34
  393. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  394. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  395. data/test/rubygems/test_gem_commands_mirror.rb +1 -3
  396. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  397. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
  398. data/test/rubygems/test_gem_commands_owner_command.rb +59 -5
  399. data/test/rubygems/test_gem_commands_pristine_command.rb +43 -12
  400. data/test/rubygems/test_gem_commands_push_command.rb +38 -9
  401. data/test/rubygems/test_gem_commands_query_command.rb +12 -12
  402. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  403. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  404. data/test/rubygems/test_gem_commands_setup_command.rb +165 -124
  405. data/test/rubygems/test_gem_commands_signin_command.rb +33 -9
  406. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  407. data/test/rubygems/test_gem_commands_sources_command.rb +60 -2
  408. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  409. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  410. data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -3
  411. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  412. data/test/rubygems/test_gem_commands_update_command.rb +116 -7
  413. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  414. data/test/rubygems/test_gem_commands_yank_command.rb +44 -8
  415. data/test/rubygems/test_gem_config_file.rb +7 -12
  416. data/test/rubygems/test_gem_dependency.rb +0 -2
  417. data/test/rubygems/test_gem_dependency_installer.rb +90 -193
  418. data/test/rubygems/test_gem_dependency_list.rb +10 -12
  419. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  420. data/test/rubygems/test_gem_doctor.rb +28 -2
  421. data/test/rubygems/test_gem_ext_builder.rb +26 -47
  422. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -23
  423. data/test/rubygems/test_gem_ext_configure_builder.rb +4 -20
  424. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -29
  425. data/test/rubygems/test_gem_ext_rake_builder.rb +14 -24
  426. data/test/rubygems/test_gem_gem_runner.rb +44 -1
  427. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
  428. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  429. data/test/rubygems/test_gem_indexer.rb +9 -15
  430. data/test/rubygems/test_gem_install_update_options.rb +14 -4
  431. data/test/rubygems/test_gem_installer.rb +256 -59
  432. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  433. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  434. data/test/rubygems/test_gem_package.rb +38 -31
  435. data/test/rubygems/test_gem_package_old.rb +4 -6
  436. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  437. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  438. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  439. data/test/rubygems/test_gem_package_tar_writer.rb +4 -6
  440. data/test/rubygems/test_gem_package_task.rb +46 -13
  441. data/test/rubygems/test_gem_path_support.rb +0 -2
  442. data/test/rubygems/test_gem_platform.rb +63 -6
  443. data/test/rubygems/test_gem_rdoc.rb +0 -2
  444. data/test/rubygems/test_gem_remote_fetcher.rb +168 -211
  445. data/test/rubygems/test_gem_request.rb +13 -17
  446. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  447. data/test/rubygems/test_gem_request_set.rb +20 -22
  448. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
  449. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -6
  450. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
  451. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
  452. data/test/rubygems/test_gem_requirement.rb +10 -4
  453. data/test/rubygems/test_gem_resolver.rb +6 -8
  454. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  455. data/test/rubygems/test_gem_resolver_api_set.rb +11 -13
  456. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -2
  457. data/test/rubygems/test_gem_resolver_best_set.rb +2 -4
  458. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  459. data/test/rubygems/test_gem_resolver_conflict.rb +1 -3
  460. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  461. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  462. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  463. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  464. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  465. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  466. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
  467. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  468. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  469. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  470. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  471. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  472. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  473. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  474. data/test/rubygems/test_gem_security.rb +22 -24
  475. data/test/rubygems/test_gem_security_policy.rb +7 -12
  476. data/test/rubygems/test_gem_security_signer.rb +10 -12
  477. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  478. data/test/rubygems/test_gem_server.rb +10 -14
  479. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  480. data/test/rubygems/test_gem_source.rb +17 -16
  481. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  482. data/test/rubygems/test_gem_source_git.rb +12 -13
  483. data/test/rubygems/test_gem_source_installed.rb +7 -9
  484. data/test/rubygems/test_gem_source_list.rb +1 -2
  485. data/test/rubygems/test_gem_source_local.rb +8 -10
  486. data/test/rubygems/test_gem_source_lock.rb +10 -12
  487. data/test/rubygems/test_gem_source_specific_file.rb +7 -9
  488. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  489. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  490. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  491. data/test/rubygems/test_gem_specification.rb +156 -125
  492. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  493. data/test/rubygems/test_gem_stub_specification.rb +4 -6
  494. data/test/rubygems/test_gem_text.rb +1 -3
  495. data/test/rubygems/test_gem_uninstaller.rb +134 -12
  496. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  497. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  498. data/test/rubygems/test_gem_util.rb +7 -7
  499. data/test/rubygems/test_gem_validator.rb +1 -3
  500. data/test/rubygems/test_gem_version.rb +1 -3
  501. data/test/rubygems/test_gem_version_option.rb +1 -3
  502. data/test/rubygems/test_kernel.rb +10 -14
  503. data/test/rubygems/test_project_sanity.rb +7 -2
  504. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  505. data/test/rubygems/test_require.rb +191 -60
  506. metadata +60 -94
  507. data/.bundle/config +0 -2
  508. data/.rubocop.yml +0 -91
  509. data/Gemfile +0 -8
  510. data/Gemfile.lock +0 -43
  511. data/bundler/CODE_OF_CONDUCT.md +0 -136
  512. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  513. data/bundler/man/bundle-add.1.txt +0 -58
  514. data/bundler/man/bundle-binstubs.1.txt +0 -48
  515. data/bundler/man/bundle-cache.1.txt +0 -78
  516. data/bundler/man/bundle-check.1.txt +0 -33
  517. data/bundler/man/bundle-clean.1.txt +0 -26
  518. data/bundler/man/bundle-config.1.txt +0 -528
  519. data/bundler/man/bundle-doctor.1.txt +0 -44
  520. data/bundler/man/bundle-exec.1.txt +0 -178
  521. data/bundler/man/bundle-gem.1.txt +0 -91
  522. data/bundler/man/bundle-info.1.txt +0 -21
  523. data/bundler/man/bundle-init.1.txt +0 -34
  524. data/bundler/man/bundle-inject.1.txt +0 -32
  525. data/bundler/man/bundle-install.1.txt +0 -401
  526. data/bundler/man/bundle-list.1.txt +0 -43
  527. data/bundler/man/bundle-lock.1.txt +0 -93
  528. data/bundler/man/bundle-open.1.txt +0 -29
  529. data/bundler/man/bundle-outdated.1.txt +0 -131
  530. data/bundler/man/bundle-platform.1.txt +0 -57
  531. data/bundler/man/bundle-pristine.1.txt +0 -44
  532. data/bundler/man/bundle-remove.1.txt +0 -34
  533. data/bundler/man/bundle-show.1.txt +0 -27
  534. data/bundler/man/bundle-update.1.txt +0 -390
  535. data/bundler/man/bundle-viz.1.txt +0 -39
  536. data/bundler/man/bundle.1.txt +0 -116
  537. data/bundler/man/gemfile.5.txt +0 -649
  538. data/lib/rubygems/source_local.rb +0 -7
  539. data/lib/rubygems/source_specific_file.rb +0 -6
  540. data/lib/ubygems.rb +0 -14
  541. data/tmp/.keep +0 -0
  542. data/util/CL2notes +0 -55
  543. data/util/bisect +0 -10
  544. data/util/ci.sh +0 -62
  545. data/util/cops/deprecations.rb +0 -52
  546. data/util/create_certs.rb +0 -171
  547. data/util/create_certs.sh +0 -27
  548. data/util/create_encrypted_key.rb +0 -16
  549. data/util/generate_spdx_license_list.rb +0 -63
  550. data/util/patch_with_prs.rb +0 -77
  551. data/util/rubocop +0 -8
  552. data/util/update_bundled_ca_certificates.rb +0 -137
  553. data/util/update_changelog.rb +0 -64
@@ -10,7 +10,7 @@ module Bundler
10
10
  be sure to check out these resources:
11
11
 
12
12
  1. Check out our troubleshooting guide for quick fixes to common issues:
13
- https://github.com/bundler/bundler/blob/master/doc/TROUBLESHOOTING.md
13
+ https://github.com/rubygems/rubygems/blob/master/bundler/doc/TROUBLESHOOTING.md
14
14
 
15
15
  2. Instructions for common Bundler uses can be found on the documentation
16
16
  site: https://bundler.io/
@@ -22,7 +22,7 @@ module Bundler
22
22
  still aren't working the way you expect them to, please let us know so
23
23
  that we can diagnose and help fix the problem you're having. Please
24
24
  view the Filing Issues guide for more information:
25
- https://github.com/bundler/bundler/blob/master/doc/contributing/ISSUES.md
25
+ https://github.com/rubygems/rubygems/blob/master/bundler/doc/contributing/ISSUES.md
26
26
 
27
27
  EOS
28
28
 
@@ -4,14 +4,16 @@ module Bundler
4
4
  class CLI::List
5
5
  def initialize(options)
6
6
  @options = options
7
+ @without_group = options["without-group"].map(&:to_sym)
8
+ @only_group = options["only-group"].map(&:to_sym)
7
9
  end
8
10
 
9
11
  def run
10
- raise InvalidOption, "The `--only-group` and `--without-group` options cannot be used together" if @options["only-group"] && @options["without-group"]
12
+ raise InvalidOption, "The `--only-group` and `--without-group` options cannot be used together" if @only_group.any? && @without_group.any?
11
13
 
12
14
  raise InvalidOption, "The `--name-only` and `--paths` options cannot be used together" if @options["name-only"] && @options[:paths]
13
15
 
14
- specs = if @options["only-group"] || @options["without-group"]
16
+ specs = if @only_group.any? || @without_group.any?
15
17
  filtered_specs_by_groups
16
18
  else
17
19
  Bundler.load.specs
@@ -29,12 +31,12 @@ module Bundler
29
31
  Bundler.ui.info "Use `bundle info` to print more detailed information about a gem"
30
32
  end
31
33
 
32
- private
34
+ private
33
35
 
34
36
  def verify_group_exists(groups)
35
- raise InvalidOption, "`#{@options["without-group"]}` group could not be found." if @options["without-group"] && !groups.include?(@options["without-group"].to_sym)
36
-
37
- raise InvalidOption, "`#{@options["only-group"]}` group could not be found." if @options["only-group"] && !groups.include?(@options["only-group"].to_sym)
37
+ (@without_group + @only_group).each do |group|
38
+ raise InvalidOption, "`#{group}` group could not be found." unless groups.include?(group)
39
+ end
38
40
  end
39
41
 
40
42
  def filtered_specs_by_groups
@@ -44,10 +46,10 @@ module Bundler
44
46
  verify_group_exists(groups)
45
47
 
46
48
  show_groups =
47
- if @options["without-group"]
48
- groups.reject {|g| g == @options["without-group"].to_sym }
49
- elsif @options["only-group"]
50
- groups.select {|g| g == @options["only-group"].to_sym }
49
+ if @without_group.any?
50
+ groups.reject {|g| @without_group.include?(g) }
51
+ elsif @only_group.any?
52
+ groups.select {|g| @only_group.include?(g) }
51
53
  else
52
54
  groups
53
55
  end.map(&:to_sym)
@@ -3,18 +3,16 @@
3
3
  module Bundler
4
4
  class CLI::Outdated
5
5
  attr_reader :options, :gems, :options_include_groups, :filter_options_patch, :sources, :strict
6
- attr_accessor :outdated_gems_by_groups, :outdated_gems_list
6
+ attr_accessor :outdated_gems
7
7
 
8
8
  def initialize(options, gems)
9
9
  @options = options
10
10
  @gems = gems
11
11
  @sources = Array(options[:source])
12
12
 
13
- @filter_options_patch = options.keys &
14
- %w[filter-major filter-minor filter-patch]
13
+ @filter_options_patch = options.keys & %w[filter-major filter-minor filter-patch]
15
14
 
16
- @outdated_gems_by_groups = {}
17
- @outdated_gems_list = []
15
+ @outdated_gems = []
18
16
 
19
17
  @options_include_groups = [:group, :groups].any? do |v|
20
18
  options.keys.include?(v.to_s)
@@ -22,8 +20,7 @@ module Bundler
22
20
 
23
21
  # the patch level options imply strict is also true. It wouldn't make
24
22
  # sense otherwise.
25
- @strict = options["filter-strict"] ||
26
- Bundler::CLI::Common.patch_level_options(options).any?
23
+ @strict = options["filter-strict"] || Bundler::CLI::Common.patch_level_options(options).any?
27
24
  end
28
25
 
29
26
  def run
@@ -76,86 +73,64 @@ module Bundler
76
73
  end
77
74
 
78
75
  specs.sort_by(&:name).each do |current_spec|
79
- next if !gems.empty? && !gems.include?(current_spec.name)
76
+ next unless gems.empty? || gems.include?(current_spec.name)
80
77
 
81
- dependency = current_dependencies[current_spec.name]
82
78
  active_spec = retrieve_active_spec(definition, current_spec)
83
-
84
- next if active_spec.nil?
85
- next if filter_options_patch.any? &&
86
- !update_present_via_semver_portions(current_spec, active_spec, options)
79
+ next unless filter_options_patch.empty? || update_present_via_semver_portions(current_spec, active_spec, options)
87
80
 
88
81
  gem_outdated = Gem::Version.new(active_spec.version) > Gem::Version.new(current_spec.version)
89
82
  next unless gem_outdated || (current_spec.git_version != active_spec.git_version)
90
- groups = nil
83
+
84
+ dependency = current_dependencies[current_spec.name]
85
+ groups = ""
91
86
  if dependency && !options[:parseable]
92
87
  groups = dependency.groups.join(", ")
93
88
  end
94
89
 
95
- outdated_gems_list << { :active_spec => active_spec,
96
- :current_spec => current_spec,
97
- :dependency => dependency,
98
- :groups => groups }
99
-
100
- outdated_gems_by_groups[groups] ||= []
101
- outdated_gems_by_groups[groups] << outdated_gems_list[-1]
90
+ outdated_gems << {
91
+ :active_spec => active_spec,
92
+ :current_spec => current_spec,
93
+ :dependency => dependency,
94
+ :groups => groups,
95
+ }
102
96
  end
103
97
 
104
- if outdated_gems_list.empty?
105
- display_nothing_outdated_message
106
- else
98
+ if outdated_gems.empty?
107
99
  unless options[:parseable]
108
- Bundler.ui.info(header_outdated_message)
100
+ Bundler.ui.info(nothing_outdated_message)
109
101
  end
110
-
102
+ else
111
103
  if options_include_groups
112
- ordered_groups = outdated_gems_by_groups.keys.compact.sort
113
- ordered_groups.insert(0, nil).each do |groups|
114
- gems = outdated_gems_by_groups[groups]
115
- contains_group = if groups
116
- groups.split(", ").include?(options[:group])
117
- else
118
- options[:group] == "group"
119
- end
104
+ relevant_outdated_gems = outdated_gems.group_by {|g| g[:groups] }.sort.flat_map do |groups, gems|
105
+ contains_group = groups.split(", ").include?(options[:group])
106
+ next unless options[:groups] || contains_group
120
107
 
121
- next if (!options[:groups] && !contains_group) || gems.nil?
108
+ gems
109
+ end.compact
122
110
 
123
- unless options[:parseable]
124
- Bundler.ui.info(header_group_message(groups))
111
+ if options[:parseable]
112
+ relevant_outdated_gems.each do |gems|
113
+ print_gems(gems)
125
114
  end
126
-
127
- print_gems(gems)
115
+ else
116
+ print_gems_table(relevant_outdated_gems)
128
117
  end
118
+ elsif options[:parseable]
119
+ print_gems(outdated_gems)
129
120
  else
130
- print_gems(outdated_gems_list)
121
+ print_gems_table(outdated_gems)
131
122
  end
132
123
 
133
124
  exit 1
134
125
  end
135
126
  end
136
127
 
137
- private
128
+ private
138
129
 
139
130
  def groups_text(group_text, groups)
140
131
  "#{group_text}#{groups.split(",").size > 1 ? "s" : ""} \"#{groups}\""
141
132
  end
142
133
 
143
- def header_outdated_message
144
- if options[:pre]
145
- "Outdated gems included in the bundle (including pre-releases):"
146
- else
147
- "Outdated gems included in the bundle:"
148
- end
149
- end
150
-
151
- def header_group_message(groups)
152
- if groups
153
- "===== #{groups_text("Group", groups)} ====="
154
- else
155
- "===== Without group ====="
156
- end
157
- end
158
-
159
134
  def nothing_outdated_message
160
135
  if filter_options_patch.any?
161
136
  display = filter_options_patch.map do |o|
@@ -182,12 +157,6 @@ module Bundler
182
157
  active_spec
183
158
  end
184
159
 
185
- def display_nothing_outdated_message
186
- unless options[:parseable]
187
- Bundler.ui.info(nothing_outdated_message)
188
- end
189
- end
190
-
191
160
  def print_gems(gems_list)
192
161
  gems_list.each do |gem|
193
162
  print_gem(
@@ -199,6 +168,19 @@ module Bundler
199
168
  end
200
169
  end
201
170
 
171
+ def print_gems_table(gems_list)
172
+ data = gems_list.map do |gem|
173
+ gem_column_for(
174
+ gem[:current_spec],
175
+ gem[:active_spec],
176
+ gem[:dependency],
177
+ gem[:groups],
178
+ )
179
+ end
180
+
181
+ print_indented([table_header] + data)
182
+ end
183
+
202
184
  def print_gem(current_spec, active_spec, dependency, groups)
203
185
  spec_version = "#{active_spec.version}#{active_spec.git_version}"
204
186
  spec_version += " (from #{active_spec.loaded_from})" if Bundler.ui.debug? && active_spec.loaded_from
@@ -213,7 +195,7 @@ module Bundler
213
195
 
214
196
  output_message = if options[:parseable]
215
197
  spec_outdated_info.to_s
216
- elsif options_include_groups || !groups
198
+ elsif options_include_groups || groups.empty?
217
199
  " * #{spec_outdated_info}"
218
200
  else
219
201
  " * #{spec_outdated_info} in #{groups_text("group", groups)}"
@@ -222,14 +204,22 @@ module Bundler
222
204
  Bundler.ui.info output_message.rstrip
223
205
  end
224
206
 
207
+ def gem_column_for(current_spec, active_spec, dependency, groups)
208
+ current_version = "#{current_spec.version}#{current_spec.git_version}"
209
+ spec_version = "#{active_spec.version}#{active_spec.git_version}"
210
+ dependency = dependency.requirement if dependency
211
+
212
+ ret_val = [active_spec.name, current_version, spec_version, dependency.to_s, groups.to_s]
213
+ ret_val << active_spec.loaded_from.to_s if Bundler.ui.debug?
214
+ ret_val
215
+ end
216
+
225
217
  def check_for_deployment_mode!
226
218
  return unless Bundler.frozen_bundle?
227
- suggested_command = if Bundler.settings.locations("frozen")[:global]
219
+ suggested_command = if Bundler.settings.locations("frozen").keys.&([:global, :local]).any?
228
220
  "bundle config unset frozen"
229
221
  elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
230
222
  "bundle config unset deployment"
231
- else
232
- "bundle install --no-deployment"
233
223
  end
234
224
  raise ProductionError, "You are trying to check outdated gems in " \
235
225
  "deployment mode. Run `bundle outdated` elsewhere.\n" \
@@ -239,6 +229,8 @@ module Bundler
239
229
  end
240
230
 
241
231
  def update_present_via_semver_portions(current_spec, active_spec, options)
232
+ return false if active_spec.nil?
233
+
242
234
  current_major = current_spec.version.segments.first
243
235
  active_major = active_spec.version.segments.first
244
236
 
@@ -266,5 +258,34 @@ module Bundler
266
258
  version_section = spec.version.segments[version_portion_index, 1]
267
259
  version_section.to_a[0].to_i
268
260
  end
261
+
262
+ def print_indented(matrix)
263
+ header = matrix[0]
264
+ data = matrix[1..-1]
265
+
266
+ column_sizes = Array.new(header.size) do |index|
267
+ matrix.max_by {|row| row[index].length }[index].length
268
+ end
269
+
270
+ Bundler.ui.info justify(header, column_sizes)
271
+
272
+ data.sort_by! {|row| row[0] }
273
+
274
+ data.each do |row|
275
+ Bundler.ui.info justify(row, column_sizes)
276
+ end
277
+ end
278
+
279
+ def table_header
280
+ header = ["Gem", "Current", "Latest", "Requested", "Groups"]
281
+ header << "Path" if Bundler.ui.debug?
282
+ header
283
+ end
284
+
285
+ def justify(row, sizes)
286
+ row.each_with_index.map do |element, index|
287
+ element.ljust(sizes[index])
288
+ end.join(" ").strip + "\n"
289
+ end
269
290
  end
270
291
  end
@@ -23,6 +23,16 @@ module Bundler
23
23
  Bundler::Plugin.install(plugins, options)
24
24
  end
25
25
 
26
+ desc "uninstall PLUGINS", "Uninstall the plugins"
27
+ long_desc <<-D
28
+ Uninstall given list of plugins. To uninstall all the plugins, use -all option.
29
+ D
30
+ method_option "all", :type => :boolean, :default => nil, :banner =>
31
+ "Uninstall all the installed plugins. If no plugin is installed, then it does nothing."
32
+ def uninstall(*plugins)
33
+ Bundler::Plugin.uninstall(plugins, options)
34
+ end
35
+
26
36
  desc "list", "List the installed plugins and available commands"
27
37
  def list
28
38
  Bundler::Plugin.list
@@ -29,6 +29,11 @@ module Bundler
29
29
 
30
30
  FileUtils.rm_rf spec.full_gem_path
31
31
  when Source::Git
32
+ if source.local?
33
+ Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is locally overridden.")
34
+ next
35
+ end
36
+
32
37
  source.remote!
33
38
  if extension_cache_path = source.extension_cache_path(spec)
34
39
  FileUtils.rm_rf extension_cache_path
@@ -53,7 +53,7 @@ module Bundler
53
53
  end
54
54
  end
55
55
 
56
- private
56
+ private
57
57
 
58
58
  def fetch_latest_specs
59
59
  definition = Bundler.definition(true)
@@ -106,6 +106,8 @@ module Bundler
106
106
  Bundler.ui.confirm "Bundle updated!"
107
107
  Bundler::CLI::Common.output_without_groups_message(:update)
108
108
  Bundler::CLI::Common.output_post_install_messages installer.post_install_messages
109
+
110
+ Bundler::CLI::Common.output_fund_metadata_summary
109
111
  end
110
112
  end
111
113
  end
@@ -87,7 +87,7 @@ module Bundler
87
87
  @parsed_checksums = true
88
88
  end
89
89
 
90
- private
90
+ private
91
91
 
92
92
  def update(local_path, remote_path)
93
93
  Bundler::CompactIndexClient.debug { "update(#{local_path}, #{remote_path})" }
@@ -83,7 +83,7 @@ module Bundler
83
83
  gem_line ? parse_gem(gem_line) : nil
84
84
  end
85
85
 
86
- private
86
+ private
87
87
 
88
88
  def lines(path)
89
89
  return [] unless path.file?
@@ -22,13 +22,13 @@ module Bundler
22
22
 
23
23
  def initialize(fetcher)
24
24
  @fetcher = fetcher
25
- require "tmpdir"
25
+ require_relative "../vendored_tmpdir"
26
26
  end
27
27
 
28
28
  def update(local_path, remote_path, retrying = nil)
29
29
  headers = {}
30
30
 
31
- Dir.mktmpdir("bundler-compact-index-") do |local_temp_dir|
31
+ Bundler::Dir.mktmpdir("bundler-compact-index-") do |local_temp_dir|
32
32
  local_temp_path = Pathname.new(local_temp_dir).join(local_path.basename)
33
33
 
34
34
  # first try to fetch any new bytes on the existing file
@@ -66,8 +66,8 @@ module Bundler
66
66
  end
67
67
  end
68
68
 
69
- response_etag = (response["ETag"] || "").gsub(%r{\AW/}, "")
70
- if etag_for(local_temp_path) == response_etag
69
+ etag = (response["ETag"] || "").gsub(%r{\AW/}, "")
70
+ if etag.length.zero? || etag_for(local_temp_path) == etag
71
71
  SharedHelpers.filesystem_access(local_path) do
72
72
  FileUtils.mv(local_temp_path, local_path)
73
73
  end
@@ -75,7 +75,7 @@ module Bundler
75
75
  end
76
76
 
77
77
  if retrying
78
- raise MisMatchedChecksumError.new(remote_path, response_etag, etag_for(local_temp_path))
78
+ raise MisMatchedChecksumError.new(remote_path, etag, etag_for(local_temp_path))
79
79
  end
80
80
 
81
81
  update(local_path, remote_path, :retrying)
@@ -77,12 +77,17 @@ module Bundler
77
77
  @locked_bundler_version = nil
78
78
  @locked_ruby_version = nil
79
79
  @locked_specs_incomplete_for_platform = false
80
+ @new_platform = nil
80
81
 
81
82
  if lockfile && File.exist?(lockfile)
82
83
  @lockfile_contents = Bundler.read_file(lockfile)
83
84
  @locked_gems = LockfileParser.new(@lockfile_contents)
84
85
  @locked_platforms = @locked_gems.platforms
85
- @platforms = @locked_platforms.dup
86
+ if Bundler.settings[:force_ruby_platform]
87
+ @platforms = [Gem::Platform::RUBY]
88
+ else
89
+ @platforms = @locked_platforms.dup
90
+ end
86
91
  @locked_bundler_version = @locked_gems.bundler_version
87
92
  @locked_ruby_version = @locked_gems.ruby_version
88
93
 
@@ -194,10 +199,6 @@ module Bundler
194
199
  @locked_specs - specs
195
200
  end
196
201
 
197
- def new_platform?
198
- @new_platform
199
- end
200
-
201
202
  def missing_specs
202
203
  missing = []
203
204
  resolve.materialize(requested_dependencies, missing)
@@ -227,16 +228,29 @@ module Bundler
227
228
  end
228
229
  end
229
230
 
231
+ def requested_dependencies
232
+ groups = requested_groups
233
+ groups.map!(&:to_sym)
234
+ dependencies_for(groups)
235
+ end
236
+
230
237
  def current_dependencies
231
- dependencies.select(&:should_include?)
238
+ dependencies.select do |d|
239
+ d.should_include? && !d.gem_platforms(@platforms).empty?
240
+ end
232
241
  end
233
242
 
234
243
  def specs_for(groups)
235
- deps = dependencies.select {|d| (d.groups & groups).any? }
236
- deps.delete_if {|d| !d.should_include? }
244
+ deps = dependencies_for(groups)
237
245
  specs.for(expand_dependencies(deps))
238
246
  end
239
247
 
248
+ def dependencies_for(groups)
249
+ current_dependencies.reject do |d|
250
+ (d.groups & groups).empty?
251
+ end
252
+ end
253
+
240
254
  # Resolve all the dependencies specified in Gemfile. It ensures that
241
255
  # dependencies that have been already resolved via locked file and are fresh
242
256
  # are reused when resolving dependencies
@@ -312,10 +326,6 @@ module Bundler
312
326
  sources.rubygems_sources.any? {|s| s.remotes.any? }
313
327
  end
314
328
 
315
- def has_local_dependencies?
316
- !sources.path_sources.empty? || !sources.git_sources.empty?
317
- end
318
-
319
329
  def spec_git_paths
320
330
  sources.git_sources.map {|s| File.realpath(s.path) if File.exist?(s.path) }.compact
321
331
  end
@@ -396,12 +406,10 @@ module Bundler
396
406
  "updated #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} to version control."
397
407
 
398
408
  unless explicit_flag
399
- suggested_command = if Bundler.settings.locations("frozen")[:global]
409
+ suggested_command = if Bundler.settings.locations("frozen").keys.&([:global, :local]).any?
400
410
  "bundle config unset frozen"
401
411
  elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
402
412
  "bundle config unset deployment"
403
- else
404
- "bundle install --no-deployment"
405
413
  end
406
414
  msg << "\n\nIf this is a development machine, remove the #{Bundler.default_gemfile} " \
407
415
  "freeze \nby running `#{suggested_command}`."
@@ -450,9 +458,9 @@ module Bundler
450
458
  @locked_deps.each {|name, d| both_sources[name][1] = d.source }
451
459
 
452
460
  both_sources.each do |name, (dep, lock_source)|
453
- next unless (dep.nil? && !lock_source.nil?) || (!dep.nil? && !lock_source.nil? && !lock_source.can_lock?(dep))
461
+ next if lock_source.nil? || (dep && lock_source.can_lock?(dep))
454
462
  gemfile_source_name = (dep && dep.source) || "no specified source"
455
- lockfile_source_name = lock_source || "no specified source"
463
+ lockfile_source_name = lock_source
456
464
  changed << "* #{name} from `#{gemfile_source_name}` to `#{lockfile_source_name}`"
457
465
  end
458
466
 
@@ -518,10 +526,6 @@ module Bundler
518
526
  raise InvalidOption, "Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join ", "}"
519
527
  end
520
528
 
521
- def add_current_platform
522
- current_platforms.each {|platform| add_platform(platform) }
523
- end
524
-
525
529
  def find_resolved_spec(current_spec)
526
530
  specs.find_by_name_and_platform(current_spec.name, current_spec.platform)
527
531
  end
@@ -541,14 +545,14 @@ module Bundler
541
545
  @unlocking
542
546
  end
543
547
 
544
- private
548
+ private
549
+
550
+ def add_current_platform
551
+ current_platforms.each {|platform| add_platform(platform) }
552
+ end
545
553
 
546
554
  def current_platforms
547
- current_platform = Bundler.local_platform
548
- [].tap do |platforms|
549
- platforms << current_platform if Bundler.feature_flag.specific_platform?
550
- platforms << generic(current_platform)
551
- end
555
+ [local_platform, generic_local_platform].uniq
552
556
  end
553
557
 
554
558
  def change_reason
@@ -706,9 +710,6 @@ module Bundler
706
710
  elsif dep.source
707
711
  dep.source = sources.get(dep.source)
708
712
  end
709
- if dep.source.is_a?(Source::Gemspec)
710
- dep.platforms.concat(@platforms.map {|p| Dependency::REVERSE_PLATFORM_MAP[p] }.flatten(1)).uniq!
711
- end
712
713
  end
713
714
 
714
715
  changes = false
@@ -818,7 +819,7 @@ module Bundler
818
819
  end
819
820
 
820
821
  resolve = SpecSet.new(converged)
821
- @locked_specs_incomplete_for_platform = !resolve.for(expand_dependencies(deps), @unlock[:gems], true, true)
822
+ @locked_specs_incomplete_for_platform = !resolve.for(expand_dependencies(requested_dependencies & deps), @unlock[:gems], true, true)
822
823
  resolve = resolve.for(expand_dependencies(deps, true), @unlock[:gems], false, false, false)
823
824
  diff = nil
824
825
 
@@ -856,11 +857,7 @@ module Bundler
856
857
 
857
858
  def metadata_dependencies
858
859
  @metadata_dependencies ||= begin
859
- ruby_versions = concat_ruby_version_requirements(@ruby_version)
860
- if ruby_versions.empty? || !@ruby_version.exact?
861
- concat_ruby_version_requirements(RubyVersion.system)
862
- concat_ruby_version_requirements(locked_ruby_version_object) unless @unlock[:ruby]
863
- end
860
+ ruby_versions = ruby_version_requirements(@ruby_version)
864
861
  [
865
862
  Dependency.new("Ruby\0", ruby_versions),
866
863
  Dependency.new("RubyGems\0", Gem::VERSION),
@@ -868,49 +865,37 @@ module Bundler
868
865
  end
869
866
  end
870
867
 
871
- def concat_ruby_version_requirements(ruby_version, ruby_versions = [])
872
- return ruby_versions unless ruby_version
868
+ def ruby_version_requirements(ruby_version)
869
+ return [] unless ruby_version
873
870
  if ruby_version.patchlevel
874
- ruby_versions << ruby_version.to_gem_version_with_patchlevel
871
+ [ruby_version.to_gem_version_with_patchlevel]
875
872
  else
876
- ruby_versions.concat(ruby_version.versions.map do |version|
873
+ ruby_version.versions.map do |version|
877
874
  requirement = Gem::Requirement.new(version)
878
875
  if requirement.exact?
879
876
  "~> #{version}.0"
880
877
  else
881
878
  requirement
882
879
  end
883
- end)
880
+ end
884
881
  end
885
882
  end
886
883
 
887
884
  def expand_dependencies(dependencies, remote = false)
888
- sorted_platforms = Resolver.sort_platforms(@platforms)
889
885
  deps = []
890
886
  dependencies.each do |dep|
891
887
  dep = Dependency.new(dep, ">= 0") unless dep.respond_to?(:name)
892
- next if !remote && !dep.current_platform?
893
- platforms = dep.gem_platforms(sorted_platforms)
894
- if platforms.empty? && !Bundler.settings[:disable_platform_warnings]
895
- mapped_platforms = dep.expanded_platforms
896
- Bundler.ui.warn \
897
- "The dependency #{dep} will be unused by any of the platforms Bundler is installing for. " \
898
- "Bundler is installing for #{@platforms.join ", "} but the dependency " \
899
- "is only for #{mapped_platforms.join ", "}. " \
900
- "To add those platforms to the bundle, " \
901
- "run `bundle lock --add-platform #{mapped_platforms.join " "}`."
902
- end
903
- platforms.each do |p|
904
- deps << DepProxy.new(dep, p) if remote || p == generic_local_platform
905
- end
888
+ next unless remote || dep.current_platform?
889
+ target_platforms = dep.gem_platforms(remote ? Resolver.sort_platforms(@platforms) : [generic_local_platform])
890
+ deps += expand_dependency_with_platforms(dep, target_platforms)
906
891
  end
907
892
  deps
908
893
  end
909
894
 
910
- def requested_dependencies
911
- groups = requested_groups
912
- groups.map!(&:to_sym)
913
- dependencies.reject {|d| !d.should_include? || (d.groups & groups).empty? }
895
+ def expand_dependency_with_platforms(dep, platforms)
896
+ platforms.map do |p|
897
+ DepProxy.new(dep, p)
898
+ end
914
899
  end
915
900
 
916
901
  def source_requirements
@@ -985,8 +970,9 @@ module Bundler
985
970
  @locked_gems.specs.reduce({}) do |requirements, locked_spec|
986
971
  name = locked_spec.name
987
972
  dependency = dependencies_by_name[name]
973
+ next requirements unless dependency
988
974
  next requirements if @locked_gems.dependencies[name] != dependency
989
- next requirements if dependency && dependency.source.is_a?(Source::Path)
975
+ next requirements if dependency.source.is_a?(Source::Path)
990
976
  dep = Gem::Dependency.new(name, ">= #{locked_spec.version}")
991
977
  requirements[name] = DepProxy.new(dep, locked_spec.platform)
992
978
  requirements