rubygems-update 3.1.6 → 3.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (560) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +724 -502
  3. data/CODE_OF_CONDUCT.md +55 -19
  4. data/CONTRIBUTING.md +24 -10
  5. data/Manifest.txt +72 -101
  6. data/POLICIES.md +6 -12
  7. data/README.md +1 -1
  8. data/Rakefile +61 -89
  9. data/bin/update_rubygems +1 -1
  10. data/bundler/CHANGELOG.md +1643 -1426
  11. data/bundler/README.md +6 -8
  12. data/bundler/UPGRADING.md +18 -32
  13. data/bundler/bundler.gemspec +4 -4
  14. data/bundler/exe/bundle +3 -0
  15. data/bundler/lib/bundler.rb +32 -8
  16. data/bundler/lib/bundler/build_metadata.rb +4 -12
  17. data/bundler/lib/bundler/cli.rb +55 -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 +2 -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 +86 -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 +13 -11
  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 +87 -66
  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 +3 -1
  39. data/bundler/lib/bundler/compact_index_client.rb +1 -1
  40. data/bundler/lib/bundler/compact_index_client/cache.rb +6 -14
  41. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  42. data/bundler/lib/bundler/compact_index_client/updater.rb +5 -13
  43. data/bundler/lib/bundler/definition.rb +67 -82
  44. data/bundler/lib/bundler/dep_proxy.rb +16 -9
  45. data/bundler/lib/bundler/dependency.rb +3 -10
  46. data/bundler/lib/bundler/dsl.rb +5 -9
  47. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  48. data/bundler/lib/bundler/env.rb +1 -1
  49. data/bundler/lib/bundler/environment_preserver.rb +26 -2
  50. data/bundler/lib/bundler/errors.rb +1 -0
  51. data/bundler/lib/bundler/feature_flag.rb +0 -4
  52. data/bundler/lib/bundler/fetcher.rb +4 -4
  53. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  54. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
  55. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  56. data/bundler/lib/bundler/fetcher/index.rb +3 -4
  57. data/bundler/lib/bundler/friendly_errors.rb +22 -13
  58. data/bundler/lib/bundler/gem_helper.rb +35 -18
  59. data/bundler/lib/bundler/gem_helpers.rb +36 -25
  60. data/bundler/lib/bundler/gem_version_promoter.rb +4 -4
  61. data/bundler/lib/bundler/graph.rb +1 -1
  62. data/bundler/lib/bundler/index.rb +6 -2
  63. data/bundler/lib/bundler/injector.rb +22 -4
  64. data/bundler/lib/bundler/inline.rb +1 -1
  65. data/bundler/lib/bundler/installer.rb +35 -49
  66. data/bundler/lib/bundler/installer/gem_installer.rb +3 -3
  67. data/bundler/lib/bundler/installer/parallel_installer.rb +10 -10
  68. data/bundler/lib/bundler/installer/standalone.rb +16 -2
  69. data/bundler/lib/bundler/lazy_specification.rb +35 -11
  70. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  71. data/bundler/lib/bundler/lockfile_parser.rb +1 -1
  72. data/bundler/lib/bundler/man/.document +1 -0
  73. data/bundler/{man → lib/bundler/man}/bundle-add.1 +1 -1
  74. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
  75. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +5 -3
  76. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
  77. data/bundler/{man → lib/bundler/man}/bundle-cache.1 +1 -1
  78. data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
  79. data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
  80. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  81. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +1 -1
  82. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  83. data/bundler/{man → lib/bundler/man}/bundle-config.1 +18 -27
  84. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +22 -33
  85. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  86. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  87. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +1 -1
  88. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
  89. data/bundler/{man → lib/bundler/man}/bundle-gem.1 +25 -3
  90. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
  91. data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
  92. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  93. data/bundler/{man → lib/bundler/man}/bundle-init.1 +1 -1
  94. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
  95. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +1 -1
  96. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  97. data/bundler/{man → lib/bundler/man}/bundle-install.1 +30 -3
  98. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
  99. data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
  100. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  101. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  102. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  103. data/bundler/{man → lib/bundler/man}/bundle-open.1 +1 -1
  104. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  105. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
  106. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  107. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +1 -1
  108. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  109. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  110. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  111. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  112. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  113. data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
  114. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  115. data/bundler/{man → lib/bundler/man}/bundle-update.1 +1 -1
  116. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
  117. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +1 -1
  118. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  119. data/bundler/{man → lib/bundler/man}/bundle.1 +1 -1
  120. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
  121. data/bundler/{man → lib/bundler/man}/gemfile.5 +4 -4
  122. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
  123. data/bundler/{man → lib/bundler/man}/index.txt +0 -0
  124. data/bundler/lib/bundler/mirror.rb +2 -2
  125. data/bundler/lib/bundler/plugin.rb +30 -5
  126. data/bundler/lib/bundler/plugin/api/source.rb +1 -1
  127. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  128. data/bundler/lib/bundler/plugin/index.rb +10 -1
  129. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  130. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  131. data/bundler/lib/bundler/plugin/source_list.rb +1 -1
  132. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  133. data/bundler/lib/bundler/remote_specification.rb +5 -2
  134. data/bundler/lib/bundler/resolver.rb +71 -32
  135. data/bundler/lib/bundler/resolver/spec_group.rb +38 -26
  136. data/bundler/lib/bundler/retry.rb +1 -1
  137. data/bundler/lib/bundler/ruby_version.rb +1 -1
  138. data/bundler/lib/bundler/rubygems_ext.rb +69 -9
  139. data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
  140. data/bundler/lib/bundler/rubygems_integration.rb +25 -60
  141. data/bundler/lib/bundler/runtime.rb +4 -14
  142. data/bundler/lib/bundler/settings.rb +50 -47
  143. data/bundler/lib/bundler/shared_helpers.rb +2 -2
  144. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  145. data/bundler/lib/bundler/source.rb +1 -1
  146. data/bundler/lib/bundler/source/git.rb +24 -22
  147. data/bundler/lib/bundler/source/git/git_proxy.rb +82 -80
  148. data/bundler/lib/bundler/source/path.rb +7 -3
  149. data/bundler/lib/bundler/source/path/installer.rb +10 -10
  150. data/bundler/lib/bundler/source/rubygems.rb +23 -18
  151. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  152. data/bundler/lib/bundler/source_list.rb +2 -2
  153. data/bundler/lib/bundler/spec_set.rb +8 -10
  154. data/bundler/lib/bundler/stub_specification.rb +17 -7
  155. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  156. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  157. data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -2
  158. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  159. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  160. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  161. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  162. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  163. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  164. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  165. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  166. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +15 -7
  167. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  168. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  169. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  170. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  171. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  172. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  173. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  174. data/bundler/lib/bundler/ui/shell.rb +5 -5
  175. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
  176. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  177. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
  178. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
  179. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  180. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +2 -2
  181. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  182. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +11 -0
  183. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +49 -47
  184. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +82 -189
  185. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  186. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  187. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  188. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  189. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  190. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  191. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  192. data/bundler/lib/bundler/version.rb +1 -1
  193. data/bundler/lib/bundler/worker.rb +1 -1
  194. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  195. data/lib/rubygems.rb +71 -150
  196. data/lib/rubygems/available_set.rb +4 -6
  197. data/lib/rubygems/basic_specification.rb +11 -9
  198. data/lib/rubygems/bundler_version_finder.rb +14 -9
  199. data/lib/rubygems/command.rb +16 -16
  200. data/lib/rubygems/command_manager.rb +5 -6
  201. data/lib/rubygems/commands/build_command.rb +40 -20
  202. data/lib/rubygems/commands/cert_command.rb +2 -10
  203. data/lib/rubygems/commands/check_command.rb +0 -2
  204. data/lib/rubygems/commands/cleanup_command.rb +11 -7
  205. data/lib/rubygems/commands/contents_command.rb +4 -6
  206. data/lib/rubygems/commands/dependency_command.rb +6 -8
  207. data/lib/rubygems/commands/environment_command.rb +1 -3
  208. data/lib/rubygems/commands/fetch_command.rb +2 -4
  209. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  210. data/lib/rubygems/commands/help_command.rb +3 -3
  211. data/lib/rubygems/commands/info_command.rb +8 -5
  212. data/lib/rubygems/commands/install_command.rb +3 -5
  213. data/lib/rubygems/commands/list_command.rb +8 -7
  214. data/lib/rubygems/commands/lock_command.rb +1 -3
  215. data/lib/rubygems/commands/mirror_command.rb +0 -2
  216. data/lib/rubygems/commands/open_command.rb +0 -4
  217. data/lib/rubygems/commands/outdated_command.rb +0 -2
  218. data/lib/rubygems/commands/owner_command.rb +9 -4
  219. data/lib/rubygems/commands/pristine_command.rb +11 -5
  220. data/lib/rubygems/commands/push_command.rb +10 -47
  221. data/lib/rubygems/commands/query_command.rb +14 -344
  222. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  223. data/lib/rubygems/commands/search_command.rb +7 -7
  224. data/lib/rubygems/commands/server_command.rb +3 -1
  225. data/lib/rubygems/commands/setup_command.rb +101 -74
  226. data/lib/rubygems/commands/signin_command.rb +0 -2
  227. data/lib/rubygems/commands/signout_command.rb +0 -2
  228. data/lib/rubygems/commands/sources_command.rb +6 -4
  229. data/lib/rubygems/commands/specification_command.rb +8 -4
  230. data/lib/rubygems/commands/stale_command.rb +1 -3
  231. data/lib/rubygems/commands/uninstall_command.rb +1 -3
  232. data/lib/rubygems/commands/unpack_command.rb +1 -3
  233. data/lib/rubygems/commands/update_command.rb +59 -14
  234. data/lib/rubygems/commands/which_command.rb +0 -2
  235. data/lib/rubygems/commands/yank_command.rb +4 -7
  236. data/lib/rubygems/config_file.rb +11 -4
  237. data/lib/rubygems/core_ext/kernel_require.rb +5 -2
  238. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  239. data/lib/rubygems/defaults.rb +101 -7
  240. data/lib/rubygems/dependency.rb +3 -8
  241. data/lib/rubygems/dependency_installer.rb +6 -78
  242. data/lib/rubygems/dependency_list.rb +7 -9
  243. data/lib/rubygems/deprecate.rb +46 -1
  244. data/lib/rubygems/doctor.rb +4 -4
  245. data/lib/rubygems/errors.rb +3 -14
  246. data/lib/rubygems/exceptions.rb +2 -33
  247. data/lib/rubygems/ext.rb +6 -6
  248. data/lib/rubygems/ext/build_error.rb +2 -0
  249. data/lib/rubygems/ext/builder.rb +19 -39
  250. data/lib/rubygems/ext/cmake_builder.rb +6 -9
  251. data/lib/rubygems/ext/configure_builder.rb +5 -8
  252. data/lib/rubygems/ext/ext_conf_builder.rb +21 -19
  253. data/lib/rubygems/ext/rake_builder.rb +4 -6
  254. data/lib/rubygems/gem_runner.rb +3 -10
  255. data/lib/rubygems/gemcutter_utilities.rb +102 -21
  256. data/lib/rubygems/indexer.rb +1 -22
  257. data/lib/rubygems/install_update_options.rb +7 -7
  258. data/lib/rubygems/installer.rb +59 -80
  259. data/lib/rubygems/installer_test_case.rb +25 -11
  260. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  261. data/lib/rubygems/local_remote_options.rb +1 -1
  262. data/lib/rubygems/mock_gem_ui.rb +0 -6
  263. data/lib/rubygems/name_tuple.rb +3 -7
  264. data/lib/rubygems/openssl.rb +7 -0
  265. data/lib/rubygems/package.rb +14 -25
  266. data/lib/rubygems/package/digest_io.rb +0 -2
  267. data/lib/rubygems/package/file_source.rb +0 -2
  268. data/lib/rubygems/package/io_source.rb +0 -2
  269. data/lib/rubygems/package/old.rb +1 -3
  270. data/lib/rubygems/package/tar_header.rb +4 -6
  271. data/lib/rubygems/package/tar_reader.rb +0 -3
  272. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  273. data/lib/rubygems/package/tar_test_case.rb +2 -4
  274. data/lib/rubygems/package/tar_writer.rb +2 -12
  275. data/lib/rubygems/package_task.rb +1 -7
  276. data/lib/rubygems/path_support.rb +1 -3
  277. data/lib/rubygems/platform.rb +21 -16
  278. data/lib/rubygems/psych_tree.rb +0 -2
  279. data/lib/rubygems/query_utils.rb +353 -0
  280. data/lib/rubygems/rdoc.rb +0 -12
  281. data/lib/rubygems/remote_fetcher.rb +14 -29
  282. data/lib/rubygems/request.rb +4 -11
  283. data/lib/rubygems/request/connection_pools.rb +1 -5
  284. data/lib/rubygems/request/http_pool.rb +0 -2
  285. data/lib/rubygems/request/https_pool.rb +0 -2
  286. data/lib/rubygems/request_set.rb +7 -20
  287. data/lib/rubygems/request_set/gem_dependency_api.rb +5 -7
  288. data/lib/rubygems/request_set/lockfile.rb +8 -12
  289. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  290. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
  291. data/lib/rubygems/requirement.rb +21 -22
  292. data/lib/rubygems/resolver.rb +14 -12
  293. data/lib/rubygems/resolver/activation_request.rb +9 -3
  294. data/lib/rubygems/resolver/api_set.rb +30 -23
  295. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  296. data/lib/rubygems/resolver/api_specification.rb +23 -9
  297. data/lib/rubygems/resolver/best_set.rb +2 -4
  298. data/lib/rubygems/resolver/composed_set.rb +3 -5
  299. data/lib/rubygems/resolver/conflict.rb +2 -4
  300. data/lib/rubygems/resolver/current_set.rb +0 -2
  301. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  302. data/lib/rubygems/resolver/git_set.rb +0 -2
  303. data/lib/rubygems/resolver/git_specification.rb +0 -2
  304. data/lib/rubygems/resolver/index_set.rb +1 -3
  305. data/lib/rubygems/resolver/index_specification.rb +29 -2
  306. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  307. data/lib/rubygems/resolver/installer_set.rb +60 -13
  308. data/lib/rubygems/resolver/local_specification.rb +0 -2
  309. data/lib/rubygems/resolver/lock_set.rb +2 -4
  310. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  311. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  312. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  313. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  314. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  315. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  316. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  317. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  318. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  319. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  320. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  321. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  322. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  323. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +44 -11
  324. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +76 -8
  325. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  326. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  327. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  328. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  329. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  330. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  331. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  332. data/lib/rubygems/resolver/set.rb +0 -2
  333. data/lib/rubygems/resolver/source_set.rb +0 -2
  334. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  335. data/lib/rubygems/resolver/specification.rb +13 -3
  336. data/lib/rubygems/resolver/stats.rb +0 -2
  337. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  338. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  339. data/lib/rubygems/s3_uri_signer.rb +2 -8
  340. data/lib/rubygems/safe_yaml.rb +4 -4
  341. data/lib/rubygems/security.rb +27 -34
  342. data/lib/rubygems/security/policy.rb +4 -8
  343. data/lib/rubygems/security/signer.rb +5 -7
  344. data/lib/rubygems/security/trust_dir.rb +1 -3
  345. data/lib/rubygems/server.rb +15 -12
  346. data/lib/rubygems/source.rb +23 -12
  347. data/lib/rubygems/source/git.rb +7 -8
  348. data/lib/rubygems/source/installed.rb +0 -2
  349. data/lib/rubygems/source/local.rb +2 -4
  350. data/lib/rubygems/source/lock.rb +0 -2
  351. data/lib/rubygems/source/specific_file.rb +0 -2
  352. data/lib/rubygems/source/vendor.rb +0 -2
  353. data/lib/rubygems/source_list.rb +4 -7
  354. data/lib/rubygems/spec_fetcher.rb +19 -18
  355. data/lib/rubygems/specification.rb +110 -123
  356. data/lib/rubygems/specification_policy.rb +79 -29
  357. data/lib/rubygems/stub_specification.rb +1 -5
  358. data/lib/rubygems/syck_hack.rb +0 -2
  359. data/lib/rubygems/test_case.rb +93 -124
  360. data/lib/rubygems/test_utilities.rb +12 -19
  361. data/lib/rubygems/uninstaller.rb +35 -16
  362. data/lib/rubygems/uri_formatter.rb +2 -3
  363. data/lib/rubygems/uri_parser.rb +0 -2
  364. data/lib/rubygems/user_interaction.rb +1 -26
  365. data/lib/rubygems/util.rb +8 -2
  366. data/lib/rubygems/util/licenses.rb +4 -6
  367. data/lib/rubygems/util/list.rb +0 -2
  368. data/lib/rubygems/validator.rb +1 -3
  369. data/lib/rubygems/version.rb +4 -6
  370. data/lib/rubygems/version_option.rb +6 -0
  371. data/rubygems-update.gemspec +3 -3
  372. data/setup.rb +2 -7
  373. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  374. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  375. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  376. data/test/rubygems/rubygems_plugin.rb +0 -2
  377. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  378. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -2
  379. data/test/rubygems/test_bundled_ca.rb +41 -48
  380. data/test/rubygems/test_config.rb +0 -2
  381. data/test/rubygems/test_deprecate.rb +40 -7
  382. data/test/rubygems/test_gem.rb +87 -79
  383. data/test/rubygems/test_gem_available_set.rb +3 -5
  384. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
  385. data/test/rubygems/test_gem_command.rb +24 -7
  386. data/test/rubygems/test_gem_command_manager.rb +36 -5
  387. data/test/rubygems/test_gem_commands_build_command.rb +233 -15
  388. data/test/rubygems/test_gem_commands_cert_command.rb +4 -6
  389. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  390. data/test/rubygems/test_gem_commands_cleanup_command.rb +14 -5
  391. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  392. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  393. data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
  394. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  395. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
  396. data/test/rubygems/test_gem_commands_help_command.rb +15 -4
  397. data/test/rubygems/test_gem_commands_info_command.rb +6 -8
  398. data/test/rubygems/test_gem_commands_install_command.rb +163 -34
  399. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  400. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  401. data/test/rubygems/test_gem_commands_mirror.rb +1 -3
  402. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  403. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
  404. data/test/rubygems/test_gem_commands_owner_command.rb +59 -5
  405. data/test/rubygems/test_gem_commands_pristine_command.rb +43 -12
  406. data/test/rubygems/test_gem_commands_push_command.rb +77 -9
  407. data/test/rubygems/test_gem_commands_query_command.rb +12 -12
  408. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  409. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  410. data/test/rubygems/test_gem_commands_setup_command.rb +160 -135
  411. data/test/rubygems/test_gem_commands_signin_command.rb +33 -9
  412. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  413. data/test/rubygems/test_gem_commands_sources_command.rb +60 -2
  414. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  415. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  416. data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -3
  417. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  418. data/test/rubygems/test_gem_commands_update_command.rb +116 -7
  419. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  420. data/test/rubygems/test_gem_commands_yank_command.rb +44 -8
  421. data/test/rubygems/test_gem_config_file.rb +7 -12
  422. data/test/rubygems/test_gem_dependency.rb +0 -2
  423. data/test/rubygems/test_gem_dependency_installer.rb +116 -239
  424. data/test/rubygems/test_gem_dependency_list.rb +10 -12
  425. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  426. data/test/rubygems/test_gem_doctor.rb +28 -2
  427. data/test/rubygems/test_gem_ext_builder.rb +50 -47
  428. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -25
  429. data/test/rubygems/test_gem_ext_configure_builder.rb +6 -22
  430. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -29
  431. data/test/rubygems/test_gem_ext_rake_builder.rb +39 -24
  432. data/test/rubygems/test_gem_gem_runner.rb +44 -1
  433. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
  434. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  435. data/test/rubygems/test_gem_indexer.rb +9 -15
  436. data/test/rubygems/test_gem_install_update_options.rb +14 -4
  437. data/test/rubygems/test_gem_installer.rb +260 -115
  438. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  439. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  440. data/test/rubygems/test_gem_package.rb +38 -31
  441. data/test/rubygems/test_gem_package_old.rb +4 -6
  442. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  443. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  444. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  445. data/test/rubygems/test_gem_package_tar_writer.rb +4 -6
  446. data/test/rubygems/test_gem_package_task.rb +46 -13
  447. data/test/rubygems/test_gem_path_support.rb +0 -2
  448. data/test/rubygems/test_gem_platform.rb +71 -6
  449. data/test/rubygems/test_gem_rdoc.rb +0 -2
  450. data/test/rubygems/test_gem_remote_fetcher.rb +169 -212
  451. data/test/rubygems/test_gem_request.rb +13 -17
  452. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  453. data/test/rubygems/test_gem_request_set.rb +20 -22
  454. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
  455. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -6
  456. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
  457. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
  458. data/test/rubygems/test_gem_requirement.rb +43 -3
  459. data/test/rubygems/test_gem_resolver.rb +6 -8
  460. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  461. data/test/rubygems/test_gem_resolver_api_set.rb +60 -59
  462. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
  463. data/test/rubygems/test_gem_resolver_best_set.rb +27 -6
  464. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  465. data/test/rubygems/test_gem_resolver_conflict.rb +1 -3
  466. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  467. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  468. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  469. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  470. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  471. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  472. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
  473. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  474. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  475. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  476. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  477. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  478. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  479. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  480. data/test/rubygems/test_gem_security.rb +22 -24
  481. data/test/rubygems/test_gem_security_policy.rb +7 -12
  482. data/test/rubygems/test_gem_security_signer.rb +10 -12
  483. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  484. data/test/rubygems/test_gem_server.rb +10 -14
  485. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  486. data/test/rubygems/test_gem_source.rb +19 -18
  487. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  488. data/test/rubygems/test_gem_source_git.rb +12 -13
  489. data/test/rubygems/test_gem_source_installed.rb +7 -9
  490. data/test/rubygems/test_gem_source_list.rb +1 -2
  491. data/test/rubygems/test_gem_source_local.rb +8 -10
  492. data/test/rubygems/test_gem_source_lock.rb +10 -12
  493. data/test/rubygems/test_gem_source_specific_file.rb +7 -9
  494. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  495. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  496. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  497. data/test/rubygems/test_gem_specification.rb +162 -125
  498. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  499. data/test/rubygems/test_gem_stub_specification.rb +4 -6
  500. data/test/rubygems/test_gem_text.rb +1 -3
  501. data/test/rubygems/test_gem_uninstaller.rb +134 -12
  502. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  503. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  504. data/test/rubygems/test_gem_util.rb +7 -7
  505. data/test/rubygems/test_gem_validator.rb +1 -3
  506. data/test/rubygems/test_gem_version.rb +1 -3
  507. data/test/rubygems/test_gem_version_option.rb +1 -3
  508. data/test/rubygems/test_kernel.rb +10 -14
  509. data/test/rubygems/test_project_sanity.rb +7 -2
  510. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  511. data/test/rubygems/test_require.rb +191 -60
  512. data/test/test_changelog_generator.rb +17 -0
  513. metadata +79 -133
  514. data/.bundle/config +0 -2
  515. data/.rubocop.yml +0 -91
  516. data/Gemfile +0 -8
  517. data/Gemfile.lock +0 -43
  518. data/bundler/CODE_OF_CONDUCT.md +0 -136
  519. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  520. data/bundler/man/bundle-add.1.txt +0 -58
  521. data/bundler/man/bundle-binstubs.1.txt +0 -48
  522. data/bundler/man/bundle-cache.1.txt +0 -78
  523. data/bundler/man/bundle-check.1.txt +0 -33
  524. data/bundler/man/bundle-clean.1.txt +0 -26
  525. data/bundler/man/bundle-config.1.txt +0 -528
  526. data/bundler/man/bundle-doctor.1.txt +0 -44
  527. data/bundler/man/bundle-exec.1.txt +0 -178
  528. data/bundler/man/bundle-gem.1.txt +0 -91
  529. data/bundler/man/bundle-info.1.txt +0 -21
  530. data/bundler/man/bundle-init.1.txt +0 -34
  531. data/bundler/man/bundle-inject.1.txt +0 -32
  532. data/bundler/man/bundle-install.1.txt +0 -401
  533. data/bundler/man/bundle-list.1.txt +0 -43
  534. data/bundler/man/bundle-lock.1.txt +0 -93
  535. data/bundler/man/bundle-open.1.txt +0 -29
  536. data/bundler/man/bundle-outdated.1.txt +0 -131
  537. data/bundler/man/bundle-platform.1.txt +0 -57
  538. data/bundler/man/bundle-pristine.1.txt +0 -44
  539. data/bundler/man/bundle-remove.1.txt +0 -34
  540. data/bundler/man/bundle-show.1.txt +0 -27
  541. data/bundler/man/bundle-update.1.txt +0 -390
  542. data/bundler/man/bundle-viz.1.txt +0 -39
  543. data/bundler/man/bundle.1.txt +0 -116
  544. data/bundler/man/gemfile.5.txt +0 -649
  545. data/lib/rubygems/source_local.rb +0 -7
  546. data/lib/rubygems/source_specific_file.rb +0 -6
  547. data/lib/ubygems.rb +0 -14
  548. data/tmp/.keep +0 -0
  549. data/util/CL2notes +0 -55
  550. data/util/bisect +0 -10
  551. data/util/ci.sh +0 -62
  552. data/util/cops/deprecations.rb +0 -52
  553. data/util/create_certs.rb +0 -171
  554. data/util/create_certs.sh +0 -27
  555. data/util/create_encrypted_key.rb +0 -16
  556. data/util/generate_spdx_license_list.rb +0 -63
  557. data/util/patch_with_prs.rb +0 -77
  558. data/util/rubocop +0 -8
  559. data/util/update_bundled_ca_certificates.rb +0 -137
  560. 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,66 @@ 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)
79
+ next unless active_spec
83
80
 
84
- next if active_spec.nil?
85
- next if filter_options_patch.any? &&
86
- !update_present_via_semver_portions(current_spec, active_spec, options)
81
+ next unless filter_options_patch.empty? || update_present_via_semver_portions(current_spec, active_spec, options)
87
82
 
88
83
  gem_outdated = Gem::Version.new(active_spec.version) > Gem::Version.new(current_spec.version)
89
84
  next unless gem_outdated || (current_spec.git_version != active_spec.git_version)
90
- groups = nil
85
+
86
+ dependency = current_dependencies[current_spec.name]
87
+ groups = ""
91
88
  if dependency && !options[:parseable]
92
89
  groups = dependency.groups.join(", ")
93
90
  end
94
91
 
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]
92
+ outdated_gems << {
93
+ :active_spec => active_spec,
94
+ :current_spec => current_spec,
95
+ :dependency => dependency,
96
+ :groups => groups,
97
+ }
102
98
  end
103
99
 
104
- if outdated_gems_list.empty?
105
- display_nothing_outdated_message
106
- else
100
+ if outdated_gems.empty?
107
101
  unless options[:parseable]
108
- Bundler.ui.info(header_outdated_message)
102
+ Bundler.ui.info(nothing_outdated_message)
109
103
  end
110
-
104
+ else
111
105
  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
106
+ relevant_outdated_gems = outdated_gems.group_by {|g| g[:groups] }.sort.flat_map do |groups, gems|
107
+ contains_group = groups.split(", ").include?(options[:group])
108
+ next unless options[:groups] || contains_group
120
109
 
121
- next if (!options[:groups] && !contains_group) || gems.nil?
110
+ gems
111
+ end.compact
122
112
 
123
- unless options[:parseable]
124
- Bundler.ui.info(header_group_message(groups))
113
+ if options[:parseable]
114
+ relevant_outdated_gems.each do |gems|
115
+ print_gems(gems)
125
116
  end
126
-
127
- print_gems(gems)
117
+ else
118
+ print_gems_table(relevant_outdated_gems)
128
119
  end
120
+ elsif options[:parseable]
121
+ print_gems(outdated_gems)
129
122
  else
130
- print_gems(outdated_gems_list)
123
+ print_gems_table(outdated_gems)
131
124
  end
132
125
 
133
126
  exit 1
134
127
  end
135
128
  end
136
129
 
137
- private
130
+ private
138
131
 
139
132
  def groups_text(group_text, groups)
140
133
  "#{group_text}#{groups.split(",").size > 1 ? "s" : ""} \"#{groups}\""
141
134
  end
142
135
 
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
136
  def nothing_outdated_message
160
137
  if filter_options_patch.any?
161
138
  display = filter_options_patch.map do |o|
@@ -182,12 +159,6 @@ module Bundler
182
159
  active_spec
183
160
  end
184
161
 
185
- def display_nothing_outdated_message
186
- unless options[:parseable]
187
- Bundler.ui.info(nothing_outdated_message)
188
- end
189
- end
190
-
191
162
  def print_gems(gems_list)
192
163
  gems_list.each do |gem|
193
164
  print_gem(
@@ -199,6 +170,19 @@ module Bundler
199
170
  end
200
171
  end
201
172
 
173
+ def print_gems_table(gems_list)
174
+ data = gems_list.map do |gem|
175
+ gem_column_for(
176
+ gem[:current_spec],
177
+ gem[:active_spec],
178
+ gem[:dependency],
179
+ gem[:groups],
180
+ )
181
+ end
182
+
183
+ print_indented([table_header] + data)
184
+ end
185
+
202
186
  def print_gem(current_spec, active_spec, dependency, groups)
203
187
  spec_version = "#{active_spec.version}#{active_spec.git_version}"
204
188
  spec_version += " (from #{active_spec.loaded_from})" if Bundler.ui.debug? && active_spec.loaded_from
@@ -213,7 +197,7 @@ module Bundler
213
197
 
214
198
  output_message = if options[:parseable]
215
199
  spec_outdated_info.to_s
216
- elsif options_include_groups || !groups
200
+ elsif options_include_groups || groups.empty?
217
201
  " * #{spec_outdated_info}"
218
202
  else
219
203
  " * #{spec_outdated_info} in #{groups_text("group", groups)}"
@@ -222,14 +206,22 @@ module Bundler
222
206
  Bundler.ui.info output_message.rstrip
223
207
  end
224
208
 
209
+ def gem_column_for(current_spec, active_spec, dependency, groups)
210
+ current_version = "#{current_spec.version}#{current_spec.git_version}"
211
+ spec_version = "#{active_spec.version}#{active_spec.git_version}"
212
+ dependency = dependency.requirement if dependency
213
+
214
+ ret_val = [active_spec.name, current_version, spec_version, dependency.to_s, groups.to_s]
215
+ ret_val << active_spec.loaded_from.to_s if Bundler.ui.debug?
216
+ ret_val
217
+ end
218
+
225
219
  def check_for_deployment_mode!
226
220
  return unless Bundler.frozen_bundle?
227
- suggested_command = if Bundler.settings.locations("frozen")[:global]
221
+ suggested_command = if Bundler.settings.locations("frozen").keys.&([:global, :local]).any?
228
222
  "bundle config unset frozen"
229
223
  elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
230
224
  "bundle config unset deployment"
231
- else
232
- "bundle install --no-deployment"
233
225
  end
234
226
  raise ProductionError, "You are trying to check outdated gems in " \
235
227
  "deployment mode. Run `bundle outdated` elsewhere.\n" \
@@ -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)
@@ -82,7 +82,7 @@ module Bundler
82
82
  locked_spec = locked_info[:spec]
83
83
  new_spec = Bundler.definition.specs[name].first
84
84
  unless new_spec
85
- if Bundler.rubygems.platforms.none? {|p| locked_spec.match_platform(p) }
85
+ unless locked_spec.match_platform(Bundler.local_platform)
86
86
  Bundler.ui.warn "Bundler attempted to update #{name} but it was not considered because it is for a different platform from the current one"
87
87
  end
88
88
 
@@ -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})" }
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "gem_parser"
4
+
3
5
  module Bundler
4
6
  class CompactIndexClient
5
7
  class Cache
@@ -83,7 +85,7 @@ module Bundler
83
85
  gem_line ? parse_gem(gem_line) : nil
84
86
  end
85
87
 
86
- private
88
+ private
87
89
 
88
90
  def lines(path)
89
91
  return [] unless path.file?
@@ -92,19 +94,9 @@ module Bundler
92
94
  header ? lines[header + 1..-1] : lines
93
95
  end
94
96
 
95
- def parse_gem(string)
96
- version_and_platform, rest = string.split(" ", 2)
97
- version, platform = version_and_platform.split("-", 2)
98
- dependencies, requirements = rest.split("|", 2).map {|s| s.split(",") } if rest
99
- dependencies = dependencies ? dependencies.map {|d| parse_dependency(d) } : []
100
- requirements = requirements ? requirements.map {|r| parse_dependency(r) } : []
101
- [version, platform, dependencies, requirements]
102
- end
103
-
104
- def parse_dependency(string)
105
- dependency = string.split(":")
106
- dependency[-1] = dependency[-1].split("&") if dependency.size > 1
107
- dependency
97
+ def parse_gem(line)
98
+ @dependency_parser ||= GemParser.new
99
+ @dependency_parser.parse(line)
108
100
  end
109
101
 
110
102
  def info_roots
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CompactIndexClient
5
+ if defined?(Gem::Resolver::APISet::GemParser)
6
+ GemParser = Gem::Resolver::APISet::GemParser
7
+ else
8
+ class GemParser
9
+ def parse(line)
10
+ version_and_platform, rest = line.split(" ", 2)
11
+ version, platform = version_and_platform.split("-", 2)
12
+ dependencies, requirements = rest.split("|", 2).map {|s| s.split(",") } if rest
13
+ dependencies = dependencies ? dependencies.map {|d| parse_dependency(d) } : []
14
+ requirements = requirements ? requirements.map {|d| parse_dependency(d) } : []
15
+ [version, platform, dependencies, requirements]
16
+ end
17
+
18
+ private
19
+
20
+ def parse_dependency(string)
21
+ dependency = string.split(":")
22
+ dependency[-1] = dependency[-1].split("&") if dependency.size > 1
23
+ dependency
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end