rubygems-update 3.1.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (558) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +55 -19
  3. data/CONTRIBUTING.md +25 -11
  4. data/History.txt +435 -179
  5. data/Manifest.txt +44 -77
  6. data/POLICIES.md +2 -9
  7. data/README.md +5 -5
  8. data/Rakefile +50 -83
  9. data/bin/update_rubygems +2 -2
  10. data/bundler/CHANGELOG.md +1590 -1400
  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 +56 -20
  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 +7 -16
  26. data/bundler/lib/bundler/cli/fund.rb +36 -0
  27. data/bundler/lib/bundler/cli/gem.rb +75 -11
  28. data/bundler/lib/bundler/cli/info.rb +8 -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 +12 -18
  32. data/bundler/lib/bundler/cli/issue.rb +2 -2
  33. data/bundler/lib/bundler/cli/list.rb +1 -1
  34. data/bundler/lib/bundler/cli/outdated.rb +2 -4
  35. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  36. data/bundler/lib/bundler/cli/pristine.rb +1 -1
  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 +33 -19
  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 +2 -2
  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} +0 -0
  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 +35 -25
  114. data/bundler/lib/bundler/runtime.rb +4 -14
  115. data/bundler/lib/bundler/settings.rb +49 -46
  116. data/bundler/lib/bundler/setup.rb +5 -0
  117. data/bundler/lib/bundler/shared_helpers.rb +2 -2
  118. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  119. data/bundler/lib/bundler/source.rb +1 -1
  120. data/bundler/lib/bundler/source/git.rb +1 -1
  121. data/bundler/lib/bundler/source/git/git_proxy.rb +57 -60
  122. data/bundler/lib/bundler/source/path.rb +7 -3
  123. data/bundler/lib/bundler/source/path/installer.rb +8 -10
  124. data/bundler/lib/bundler/source/rubygems.rb +13 -16
  125. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  126. data/bundler/lib/bundler/source_list.rb +2 -2
  127. data/bundler/lib/bundler/spec_set.rb +2 -1
  128. data/bundler/lib/bundler/stub_specification.rb +17 -5
  129. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  130. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +7 -2
  131. data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -2
  132. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -5
  133. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  134. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  135. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  136. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  137. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  138. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  139. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  140. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +13 -5
  141. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
  142. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  143. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  144. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  145. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  146. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  147. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  148. data/bundler/lib/bundler/ui/shell.rb +5 -5
  149. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
  150. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  151. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
  152. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  153. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  154. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  155. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +38 -40
  156. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +72 -208
  157. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  158. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  159. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  160. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  161. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  162. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  163. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  164. data/bundler/lib/bundler/version.rb +1 -1
  165. data/bundler/lib/bundler/worker.rb +1 -1
  166. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  167. data/bundler/man/bundle-add.1 +1 -1
  168. data/bundler/man/bundle-binstubs.1 +5 -3
  169. data/bundler/man/bundle-cache.1 +1 -1
  170. data/bundler/man/bundle-check.1 +1 -1
  171. data/bundler/man/bundle-clean.1 +1 -1
  172. data/bundler/man/bundle-config.1 +16 -25
  173. data/bundler/man/bundle-doctor.1 +1 -1
  174. data/bundler/man/bundle-exec.1 +1 -1
  175. data/bundler/man/bundle-gem.1 +25 -3
  176. data/bundler/man/bundle-info.1 +1 -1
  177. data/bundler/man/bundle-init.1 +1 -1
  178. data/bundler/man/bundle-inject.1 +1 -1
  179. data/bundler/man/bundle-install.1 +30 -3
  180. data/bundler/man/bundle-list.1 +1 -1
  181. data/bundler/man/bundle-lock.1 +1 -1
  182. data/bundler/man/bundle-open.1 +1 -1
  183. data/bundler/man/bundle-outdated.1 +1 -1
  184. data/bundler/man/bundle-platform.1 +1 -1
  185. data/bundler/man/bundle-pristine.1 +1 -1
  186. data/bundler/man/bundle-remove.1 +1 -1
  187. data/bundler/man/bundle-show.1 +1 -1
  188. data/bundler/man/bundle-update.1 +1 -1
  189. data/bundler/man/bundle-viz.1 +1 -1
  190. data/bundler/man/bundle.1 +1 -1
  191. data/bundler/man/gemfile.5 +4 -4
  192. data/lib/rubygems.rb +138 -187
  193. data/lib/rubygems/available_set.rb +4 -6
  194. data/lib/rubygems/basic_specification.rb +12 -10
  195. data/lib/rubygems/bundler_version_finder.rb +14 -9
  196. data/lib/rubygems/command.rb +17 -17
  197. data/lib/rubygems/command_manager.rb +5 -6
  198. data/lib/rubygems/commands/build_command.rb +40 -20
  199. data/lib/rubygems/commands/cert_command.rb +2 -10
  200. data/lib/rubygems/commands/check_command.rb +0 -2
  201. data/lib/rubygems/commands/cleanup_command.rb +11 -7
  202. data/lib/rubygems/commands/contents_command.rb +4 -6
  203. data/lib/rubygems/commands/dependency_command.rb +6 -8
  204. data/lib/rubygems/commands/environment_command.rb +1 -3
  205. data/lib/rubygems/commands/fetch_command.rb +2 -4
  206. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  207. data/lib/rubygems/commands/help_command.rb +4 -4
  208. data/lib/rubygems/commands/info_command.rb +8 -5
  209. data/lib/rubygems/commands/install_command.rb +3 -5
  210. data/lib/rubygems/commands/list_command.rb +8 -7
  211. data/lib/rubygems/commands/lock_command.rb +1 -3
  212. data/lib/rubygems/commands/mirror_command.rb +0 -2
  213. data/lib/rubygems/commands/open_command.rb +0 -4
  214. data/lib/rubygems/commands/outdated_command.rb +0 -2
  215. data/lib/rubygems/commands/owner_command.rb +9 -3
  216. data/lib/rubygems/commands/pristine_command.rb +11 -5
  217. data/lib/rubygems/commands/push_command.rb +10 -46
  218. data/lib/rubygems/commands/query_command.rb +14 -344
  219. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  220. data/lib/rubygems/commands/search_command.rb +7 -7
  221. data/lib/rubygems/commands/server_command.rb +3 -1
  222. data/lib/rubygems/commands/setup_command.rb +158 -70
  223. data/lib/rubygems/commands/signin_command.rb +0 -2
  224. data/lib/rubygems/commands/signout_command.rb +0 -2
  225. data/lib/rubygems/commands/sources_command.rb +9 -7
  226. data/lib/rubygems/commands/specification_command.rb +8 -4
  227. data/lib/rubygems/commands/stale_command.rb +1 -3
  228. data/lib/rubygems/commands/uninstall_command.rb +2 -4
  229. data/lib/rubygems/commands/unpack_command.rb +1 -3
  230. data/lib/rubygems/commands/update_command.rb +59 -14
  231. data/lib/rubygems/commands/which_command.rb +0 -2
  232. data/lib/rubygems/commands/yank_command.rb +4 -6
  233. data/lib/rubygems/config_file.rb +11 -4
  234. data/lib/rubygems/core_ext/kernel_require.rb +29 -36
  235. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  236. data/lib/rubygems/defaults.rb +101 -7
  237. data/lib/rubygems/dependency.rb +3 -8
  238. data/lib/rubygems/dependency_installer.rb +5 -78
  239. data/lib/rubygems/dependency_list.rb +7 -9
  240. data/lib/rubygems/deprecate.rb +46 -1
  241. data/lib/rubygems/doctor.rb +4 -4
  242. data/lib/rubygems/errors.rb +3 -14
  243. data/lib/rubygems/exceptions.rb +2 -33
  244. data/lib/rubygems/ext.rb +6 -6
  245. data/lib/rubygems/ext/build_error.rb +2 -0
  246. data/lib/rubygems/ext/builder.rb +16 -35
  247. data/lib/rubygems/ext/cmake_builder.rb +5 -7
  248. data/lib/rubygems/ext/configure_builder.rb +4 -6
  249. data/lib/rubygems/ext/ext_conf_builder.rb +21 -19
  250. data/lib/rubygems/ext/rake_builder.rb +3 -5
  251. data/lib/rubygems/gem_runner.rb +3 -10
  252. data/lib/rubygems/gemcutter_utilities.rb +91 -15
  253. data/lib/rubygems/indexer.rb +1 -22
  254. data/lib/rubygems/install_update_options.rb +7 -7
  255. data/lib/rubygems/installer.rb +59 -57
  256. data/lib/rubygems/installer_test_case.rb +25 -11
  257. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  258. data/lib/rubygems/local_remote_options.rb +1 -1
  259. data/lib/rubygems/mock_gem_ui.rb +0 -6
  260. data/lib/rubygems/name_tuple.rb +3 -7
  261. data/lib/rubygems/openssl.rb +7 -0
  262. data/lib/rubygems/package.rb +14 -25
  263. data/lib/rubygems/package/digest_io.rb +0 -2
  264. data/lib/rubygems/package/file_source.rb +0 -2
  265. data/lib/rubygems/package/io_source.rb +0 -2
  266. data/lib/rubygems/package/old.rb +1 -3
  267. data/lib/rubygems/package/tar_header.rb +4 -6
  268. data/lib/rubygems/package/tar_reader.rb +0 -3
  269. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  270. data/lib/rubygems/package/tar_test_case.rb +2 -4
  271. data/lib/rubygems/package/tar_writer.rb +2 -12
  272. data/lib/rubygems/package_task.rb +1 -7
  273. data/lib/rubygems/path_support.rb +1 -3
  274. data/lib/rubygems/platform.rb +21 -12
  275. data/lib/rubygems/psych_tree.rb +0 -2
  276. data/lib/rubygems/query_utils.rb +353 -0
  277. data/lib/rubygems/rdoc.rb +0 -12
  278. data/lib/rubygems/remote_fetcher.rb +10 -27
  279. data/lib/rubygems/request.rb +4 -11
  280. data/lib/rubygems/request/connection_pools.rb +1 -5
  281. data/lib/rubygems/request/http_pool.rb +0 -2
  282. data/lib/rubygems/request/https_pool.rb +0 -2
  283. data/lib/rubygems/request_set.rb +5 -7
  284. data/lib/rubygems/request_set/gem_dependency_api.rb +6 -8
  285. data/lib/rubygems/request_set/lockfile.rb +8 -12
  286. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  287. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
  288. data/lib/rubygems/requirement.rb +20 -21
  289. data/lib/rubygems/resolver.rb +8 -11
  290. data/lib/rubygems/resolver/activation_request.rb +9 -3
  291. data/lib/rubygems/resolver/api_set.rb +4 -6
  292. data/lib/rubygems/resolver/api_specification.rb +21 -8
  293. data/lib/rubygems/resolver/best_set.rb +0 -2
  294. data/lib/rubygems/resolver/composed_set.rb +3 -5
  295. data/lib/rubygems/resolver/conflict.rb +2 -4
  296. data/lib/rubygems/resolver/current_set.rb +0 -2
  297. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  298. data/lib/rubygems/resolver/git_set.rb +0 -2
  299. data/lib/rubygems/resolver/git_specification.rb +0 -2
  300. data/lib/rubygems/resolver/index_set.rb +1 -3
  301. data/lib/rubygems/resolver/index_specification.rb +11 -2
  302. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  303. data/lib/rubygems/resolver/installer_set.rb +4 -7
  304. data/lib/rubygems/resolver/local_specification.rb +0 -2
  305. data/lib/rubygems/resolver/lock_set.rb +2 -4
  306. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  307. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  308. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  309. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  310. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  311. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  312. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  313. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  314. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  315. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  316. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  317. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  318. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  319. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  320. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  321. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  322. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  323. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  324. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  325. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  326. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  327. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  328. data/lib/rubygems/resolver/set.rb +0 -2
  329. data/lib/rubygems/resolver/source_set.rb +0 -2
  330. data/lib/rubygems/resolver/spec_specification.rb +0 -2
  331. data/lib/rubygems/resolver/specification.rb +1 -3
  332. data/lib/rubygems/resolver/stats.rb +0 -2
  333. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  334. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  335. data/lib/rubygems/s3_uri_signer.rb +2 -8
  336. data/lib/rubygems/safe_yaml.rb +4 -4
  337. data/lib/rubygems/security.rb +27 -34
  338. data/lib/rubygems/security/policy.rb +4 -8
  339. data/lib/rubygems/security/signer.rb +5 -7
  340. data/lib/rubygems/security/trust_dir.rb +1 -3
  341. data/lib/rubygems/server.rb +10 -12
  342. data/lib/rubygems/source.rb +13 -7
  343. data/lib/rubygems/source/git.rb +7 -8
  344. data/lib/rubygems/source/installed.rb +0 -2
  345. data/lib/rubygems/source/local.rb +2 -4
  346. data/lib/rubygems/source/lock.rb +0 -2
  347. data/lib/rubygems/source/specific_file.rb +0 -2
  348. data/lib/rubygems/source/vendor.rb +0 -2
  349. data/lib/rubygems/source_list.rb +6 -7
  350. data/lib/rubygems/spec_fetcher.rb +19 -18
  351. data/lib/rubygems/specification.rb +113 -126
  352. data/lib/rubygems/specification_policy.rb +88 -30
  353. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  354. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  355. data/lib/rubygems/stub_specification.rb +1 -5
  356. data/lib/rubygems/syck_hack.rb +0 -2
  357. data/lib/rubygems/test_case.rb +135 -118
  358. data/lib/rubygems/test_utilities.rb +6 -14
  359. data/lib/rubygems/uninstaller.rb +35 -16
  360. data/lib/rubygems/uri_formatter.rb +2 -3
  361. data/lib/rubygems/uri_parser.rb +0 -2
  362. data/lib/rubygems/user_interaction.rb +1 -26
  363. data/lib/rubygems/util.rb +15 -3
  364. data/lib/rubygems/util/licenses.rb +4 -6
  365. data/lib/rubygems/util/list.rb +0 -2
  366. data/lib/rubygems/validator.rb +1 -3
  367. data/lib/rubygems/version.rb +5 -7
  368. data/lib/rubygems/version_option.rb +6 -0
  369. data/rubygems-update.gemspec +2 -2
  370. data/setup.rb +2 -7
  371. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  372. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  373. data/test/rubygems/rubygems_plugin.rb +0 -2
  374. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  375. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  376. data/test/rubygems/test_bundled_ca.rb +42 -45
  377. data/test/rubygems/test_config.rb +0 -2
  378. data/test/rubygems/test_deprecate.rb +40 -7
  379. data/test/rubygems/test_gem.rb +153 -106
  380. data/test/rubygems/test_gem_available_set.rb +3 -5
  381. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
  382. data/test/rubygems/test_gem_command.rb +24 -7
  383. data/test/rubygems/test_gem_command_manager.rb +36 -5
  384. data/test/rubygems/test_gem_commands_build_command.rb +250 -15
  385. data/test/rubygems/test_gem_commands_cert_command.rb +4 -6
  386. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  387. data/test/rubygems/test_gem_commands_cleanup_command.rb +14 -5
  388. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  389. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  390. data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
  391. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  392. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
  393. data/test/rubygems/test_gem_commands_help_command.rb +15 -4
  394. data/test/rubygems/test_gem_commands_info_command.rb +6 -8
  395. data/test/rubygems/test_gem_commands_install_command.rb +32 -34
  396. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  397. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  398. data/test/rubygems/test_gem_commands_mirror.rb +1 -3
  399. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  400. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
  401. data/test/rubygems/test_gem_commands_owner_command.rb +59 -5
  402. data/test/rubygems/test_gem_commands_pristine_command.rb +43 -12
  403. data/test/rubygems/test_gem_commands_push_command.rb +38 -9
  404. data/test/rubygems/test_gem_commands_query_command.rb +12 -12
  405. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  406. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  407. data/test/rubygems/test_gem_commands_setup_command.rb +211 -124
  408. data/test/rubygems/test_gem_commands_signin_command.rb +33 -9
  409. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  410. data/test/rubygems/test_gem_commands_sources_command.rb +99 -3
  411. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  412. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  413. data/test/rubygems/test_gem_commands_uninstall_command.rb +2 -3
  414. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  415. data/test/rubygems/test_gem_commands_update_command.rb +116 -7
  416. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  417. data/test/rubygems/test_gem_commands_yank_command.rb +44 -8
  418. data/test/rubygems/test_gem_config_file.rb +7 -12
  419. data/test/rubygems/test_gem_dependency.rb +0 -2
  420. data/test/rubygems/test_gem_dependency_installer.rb +90 -193
  421. data/test/rubygems/test_gem_dependency_list.rb +10 -12
  422. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  423. data/test/rubygems/test_gem_doctor.rb +28 -2
  424. data/test/rubygems/test_gem_ext_builder.rb +26 -47
  425. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -23
  426. data/test/rubygems/test_gem_ext_configure_builder.rb +4 -20
  427. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -29
  428. data/test/rubygems/test_gem_ext_rake_builder.rb +14 -24
  429. data/test/rubygems/test_gem_gem_runner.rb +44 -1
  430. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
  431. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  432. data/test/rubygems/test_gem_indexer.rb +9 -15
  433. data/test/rubygems/test_gem_install_update_options.rb +14 -4
  434. data/test/rubygems/test_gem_installer.rb +265 -81
  435. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  436. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  437. data/test/rubygems/test_gem_package.rb +41 -39
  438. data/test/rubygems/test_gem_package_old.rb +4 -6
  439. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  440. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  441. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  442. data/test/rubygems/test_gem_package_tar_writer.rb +9 -6
  443. data/test/rubygems/test_gem_package_task.rb +46 -13
  444. data/test/rubygems/test_gem_path_support.rb +0 -2
  445. data/test/rubygems/test_gem_platform.rb +63 -6
  446. data/test/rubygems/test_gem_rdoc.rb +0 -2
  447. data/test/rubygems/test_gem_remote_fetcher.rb +168 -211
  448. data/test/rubygems/test_gem_request.rb +13 -17
  449. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  450. data/test/rubygems/test_gem_request_set.rb +72 -22
  451. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
  452. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -6
  453. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
  454. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
  455. data/test/rubygems/test_gem_requirement.rb +10 -4
  456. data/test/rubygems/test_gem_resolver.rb +6 -8
  457. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  458. data/test/rubygems/test_gem_resolver_api_set.rb +11 -13
  459. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -2
  460. data/test/rubygems/test_gem_resolver_best_set.rb +2 -4
  461. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  462. data/test/rubygems/test_gem_resolver_conflict.rb +1 -3
  463. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  464. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  465. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  466. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  467. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  468. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  469. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
  470. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  471. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  472. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  473. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  474. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  475. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  476. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  477. data/test/rubygems/test_gem_security.rb +22 -24
  478. data/test/rubygems/test_gem_security_policy.rb +7 -12
  479. data/test/rubygems/test_gem_security_signer.rb +10 -12
  480. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  481. data/test/rubygems/test_gem_server.rb +10 -14
  482. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  483. data/test/rubygems/test_gem_source.rb +17 -16
  484. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  485. data/test/rubygems/test_gem_source_git.rb +12 -13
  486. data/test/rubygems/test_gem_source_installed.rb +7 -9
  487. data/test/rubygems/test_gem_source_list.rb +1 -2
  488. data/test/rubygems/test_gem_source_local.rb +8 -10
  489. data/test/rubygems/test_gem_source_lock.rb +10 -12
  490. data/test/rubygems/test_gem_source_specific_file.rb +7 -9
  491. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  492. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  493. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  494. data/test/rubygems/test_gem_specification.rb +182 -131
  495. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  496. data/test/rubygems/test_gem_stub_specification.rb +4 -7
  497. data/test/rubygems/test_gem_text.rb +1 -3
  498. data/test/rubygems/test_gem_uninstaller.rb +134 -12
  499. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  500. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  501. data/test/rubygems/test_gem_util.rb +7 -7
  502. data/test/rubygems/test_gem_validator.rb +1 -3
  503. data/test/rubygems/test_gem_version.rb +1 -3
  504. data/test/rubygems/test_gem_version_option.rb +1 -3
  505. data/test/rubygems/test_kernel.rb +25 -10
  506. data/test/rubygems/test_project_sanity.rb +7 -2
  507. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  508. data/test/rubygems/test_require.rb +291 -56
  509. metadata +66 -100
  510. data/.bundle/config +0 -2
  511. data/.rubocop.yml +0 -91
  512. data/Gemfile +0 -8
  513. data/Gemfile.lock +0 -43
  514. data/bundler/CODE_OF_CONDUCT.md +0 -136
  515. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  516. data/bundler/man/bundle-add.1.txt +0 -58
  517. data/bundler/man/bundle-binstubs.1.txt +0 -48
  518. data/bundler/man/bundle-cache.1.txt +0 -78
  519. data/bundler/man/bundle-check.1.txt +0 -33
  520. data/bundler/man/bundle-clean.1.txt +0 -26
  521. data/bundler/man/bundle-config.1.txt +0 -528
  522. data/bundler/man/bundle-doctor.1.txt +0 -44
  523. data/bundler/man/bundle-exec.1.txt +0 -178
  524. data/bundler/man/bundle-gem.1.txt +0 -91
  525. data/bundler/man/bundle-info.1.txt +0 -21
  526. data/bundler/man/bundle-init.1.txt +0 -34
  527. data/bundler/man/bundle-inject.1.txt +0 -32
  528. data/bundler/man/bundle-install.1.txt +0 -401
  529. data/bundler/man/bundle-list.1.txt +0 -44
  530. data/bundler/man/bundle-lock.1.txt +0 -93
  531. data/bundler/man/bundle-open.1.txt +0 -29
  532. data/bundler/man/bundle-outdated.1.txt +0 -131
  533. data/bundler/man/bundle-platform.1.txt +0 -57
  534. data/bundler/man/bundle-pristine.1.txt +0 -44
  535. data/bundler/man/bundle-remove.1.txt +0 -34
  536. data/bundler/man/bundle-show.1.txt +0 -27
  537. data/bundler/man/bundle-update.1.txt +0 -390
  538. data/bundler/man/bundle-viz.1.txt +0 -39
  539. data/bundler/man/bundle.1.txt +0 -116
  540. data/bundler/man/gemfile.5.txt +0 -649
  541. data/lib/rubygems/source_local.rb +0 -7
  542. data/lib/rubygems/source_specific_file.rb +0 -6
  543. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  544. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  545. data/lib/ubygems.rb +0 -14
  546. data/tmp/.keep +0 -0
  547. data/util/CL2notes +0 -55
  548. data/util/bisect +0 -10
  549. data/util/ci.sh +0 -62
  550. data/util/cops/deprecations.rb +0 -52
  551. data/util/create_certs.rb +0 -171
  552. data/util/create_certs.sh +0 -27
  553. data/util/create_encrypted_key.rb +0 -16
  554. data/util/generate_spdx_license_list.rb +0 -63
  555. data/util/patch_with_prs.rb +0 -77
  556. data/util/rubocop +0 -8
  557. data/util/update_bundled_ca_certificates.rb +0 -139
  558. data/util/update_changelog.rb +0 -67
@@ -4,10 +4,11 @@ require 'rubygems/commands/signin_command'
4
4
  require 'rubygems/installer'
5
5
 
6
6
  class TestGemCommandsSigninCommand < Gem::TestCase
7
-
8
7
  def setup
9
8
  super
10
9
 
10
+ credential_setup
11
+
11
12
  Gem.configuration.rubygems_api_key = nil
12
13
  Gem.configuration.api_keys.clear
13
14
 
@@ -15,13 +16,13 @@ class TestGemCommandsSigninCommand < Gem::TestCase
15
16
  end
16
17
 
17
18
  def teardown
18
- credentials_path = Gem.configuration.credentials_path
19
- File.delete(credentials_path) if File.exist?(credentials_path)
19
+ credential_teardown
20
+
20
21
  super
21
22
  end
22
23
 
23
24
  def test_execute_when_not_already_signed_in
24
- sign_in_ui = util_capture() { @cmd.execute }
25
+ sign_in_ui = util_capture { @cmd.execute }
25
26
  assert_match %r{Signed in.}, sign_in_ui.output
26
27
  end
27
28
 
@@ -64,7 +65,7 @@ class TestGemCommandsSigninCommand < Gem::TestCase
64
65
  end
65
66
 
66
67
  def test_execute_with_valid_creds_set_for_default_host
67
- util_capture {@cmd.execute}
68
+ util_capture { @cmd.execute }
68
69
 
69
70
  api_key = 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903'
70
71
  credentials = YAML.load_file Gem.configuration.credentials_path
@@ -72,14 +73,38 @@ class TestGemCommandsSigninCommand < Gem::TestCase
72
73
  assert_equal api_key, credentials[:rubygems_api_key]
73
74
  end
74
75
 
76
+ def test_excute_with_key_name_and_scope
77
+ email = 'you@example.com'
78
+ password = 'secret'
79
+ api_key = '1234'
80
+ fetcher = Gem::RemoteFetcher.fetcher
81
+
82
+ key_name_ui = Gem::MockGemUi.new "#{email}\n#{password}\ntest-key\n\ny\n\n\n\n\n\n"
83
+ util_capture(key_name_ui, nil, api_key, fetcher) { @cmd.execute }
84
+
85
+ user = ENV["USER"] || ENV["USERNAME"]
86
+
87
+ assert_match "API Key name [#{Socket.gethostname}-#{user}", key_name_ui.output
88
+ assert_match "index_rubygems [y/N]", key_name_ui.output
89
+ assert_match "push_rubygem [y/N]", key_name_ui.output
90
+ assert_match "yank_rubygem [y/N]", key_name_ui.output
91
+ assert_match "add_owner [y/N]", key_name_ui.output
92
+ assert_match "remove_owner [y/N]", key_name_ui.output
93
+ assert_match "access_webhooks [y/N]", key_name_ui.output
94
+ assert_match "show_dashboard [y/N]", key_name_ui.output
95
+ assert_equal "name=test-key&push_rubygem=true", fetcher.last_request.body
96
+
97
+ credentials = YAML.load_file Gem.configuration.credentials_path
98
+ assert_equal api_key, credentials[:rubygems_api_key]
99
+ end
100
+
75
101
  # Utility method to capture IO/UI within the block passed
76
102
 
77
- def util_capture(ui_stub = nil, host = nil, api_key = nil)
103
+ def util_capture(ui_stub = nil, host = nil, api_key = nil, fetcher = Gem::FakeFetcher.new)
78
104
  api_key ||= 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903'
79
105
  response = [api_key, 200, 'OK']
80
106
  email = 'you@example.com'
81
107
  password = 'secret'
82
- fetcher = Gem::FakeFetcher.new
83
108
 
84
109
  # Set the expected response for the Web-API supplied
85
110
  ENV['RUBYGEMS_HOST'] = host || Gem::DEFAULT_HOST
@@ -87,7 +112,7 @@ class TestGemCommandsSigninCommand < Gem::TestCase
87
112
  fetcher.data[data_key] = response
88
113
  Gem::RemoteFetcher.fetcher = fetcher
89
114
 
90
- sign_in_ui = ui_stub || Gem::MockGemUi.new("#{email}\n#{password}\n")
115
+ sign_in_ui = ui_stub || Gem::MockGemUi.new("#{email}\n#{password}\n\n\n\n\n\n\n\n\n")
91
116
 
92
117
  use_ui sign_in_ui do
93
118
  yield
@@ -95,5 +120,4 @@ class TestGemCommandsSigninCommand < Gem::TestCase
95
120
 
96
121
  sign_in_ui
97
122
  end
98
-
99
123
  end
@@ -5,17 +5,11 @@ require 'rubygems/commands/signout_command'
5
5
  require 'rubygems/installer'
6
6
 
7
7
  class TestGemCommandsSignoutCommand < Gem::TestCase
8
-
9
8
  def setup
10
9
  super
11
10
  @cmd = Gem::Commands::SignoutCommand.new
12
11
  end
13
12
 
14
- def teardown
15
- super
16
- File.delete Gem.configuration.credentials_path if File.exist?(Gem.configuration.credentials_path)
17
- end
18
-
19
13
  def test_execute_when_user_is_signed_in
20
14
  FileUtils.mkdir_p File.dirname(Gem.configuration.credentials_path)
21
15
  FileUtils::touch Gem.configuration.credentials_path
@@ -33,5 +27,4 @@ class TestGemCommandsSignoutCommand < Gem::TestCase
33
27
 
34
28
  assert_match %r{You are not currently signed in}, @sign_out_ui.error
35
29
  end
36
-
37
30
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/sources_command'
4
4
 
5
5
  class TestGemCommandsSourcesCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
 
@@ -108,6 +107,36 @@ class TestGemCommandsSourcesCommand < Gem::TestCase
108
107
  assert_empty ui.error
109
108
  end
110
109
 
110
+ def test_execute_add_allow_typo_squatting_source_forced
111
+ rubygems_org = "https://rubyems.org"
112
+
113
+ spec_fetcher do |fetcher|
114
+ fetcher.spec("a", 1)
115
+ end
116
+
117
+ specs = Gem::Specification.map do |spec|
118
+ [spec.name, spec.version, spec.original_platform]
119
+ end
120
+
121
+ specs_dump_gz = StringIO.new
122
+ Zlib::GzipWriter.wrap(specs_dump_gz) do |io|
123
+ Marshal.dump(specs, io)
124
+ end
125
+
126
+ @fetcher.data["#{rubygems_org}/specs.#{@marshal_version}.gz"] = specs_dump_gz.string
127
+ @cmd.handle_options %W[--force --add #{rubygems_org}]
128
+
129
+ @cmd.execute
130
+
131
+ expected = "https://rubyems.org added to sources\n"
132
+ assert_equal expected, ui.output
133
+
134
+ source = Gem::Source.new(rubygems_org)
135
+ assert Gem.sources.include?(source)
136
+
137
+ assert_empty ui.error
138
+ end
139
+
111
140
  def test_execute_add_deny_typo_squatting_source
112
141
  rubygems_org = "https://rubyems.org"
113
142
 
@@ -247,7 +276,7 @@ source http://gems.example.com/ already present in the cache
247
276
  end
248
277
 
249
278
  def test_execute_add_http_rubygems_org
250
- http_rubygems_org = 'http://rubygems.org'
279
+ http_rubygems_org = 'http://rubygems.org/'
251
280
 
252
281
  spec_fetcher do |fetcher|
253
282
  fetcher.spec 'a', 1
@@ -284,6 +313,74 @@ source http://gems.example.com/ already present in the cache
284
313
  assert_empty @ui.error
285
314
  end
286
315
 
316
+ def test_execute_add_http_rubygems_org_forced
317
+ rubygems_org = "http://rubygems.org"
318
+
319
+ spec_fetcher do |fetcher|
320
+ fetcher.spec("a", 1)
321
+ end
322
+
323
+ specs = Gem::Specification.map do |spec|
324
+ [spec.name, spec.version, spec.original_platform]
325
+ end
326
+
327
+ specs_dump_gz = StringIO.new
328
+ Zlib::GzipWriter.wrap(specs_dump_gz) do |io|
329
+ Marshal.dump(specs, io)
330
+ end
331
+
332
+ @fetcher.data["#{rubygems_org}/specs.#{@marshal_version}.gz"] = specs_dump_gz.string
333
+ @cmd.handle_options %W[--force --add #{rubygems_org}]
334
+
335
+ @cmd.execute
336
+
337
+ expected = "http://rubygems.org added to sources\n"
338
+ assert_equal expected, ui.output
339
+
340
+ source = Gem::Source.new(rubygems_org)
341
+ assert Gem.sources.include?(source)
342
+
343
+ assert_empty ui.error
344
+ end
345
+
346
+ def test_execute_add_https_rubygems_org
347
+ https_rubygems_org = 'https://rubygems.org/'
348
+
349
+ spec_fetcher do |fetcher|
350
+ fetcher.spec 'a', 1
351
+ end
352
+
353
+ specs = Gem::Specification.map do |spec|
354
+ [spec.name, spec.version, spec.original_platform]
355
+ end
356
+
357
+ specs_dump_gz = StringIO.new
358
+ Zlib::GzipWriter.wrap specs_dump_gz do |io|
359
+ Marshal.dump specs, io
360
+ end
361
+
362
+ @fetcher.data["#{https_rubygems_org}/specs.#{@marshal_version}.gz"] =
363
+ specs_dump_gz.string
364
+
365
+ @cmd.handle_options %W[--add #{https_rubygems_org}]
366
+
367
+ ui = Gem::MockGemUi.new "n"
368
+
369
+ use_ui ui do
370
+ assert_raises Gem::MockGemUi::TermError do
371
+ @cmd.execute
372
+ end
373
+ end
374
+
375
+ assert_equal [@gem_repo], Gem.sources
376
+
377
+ expected = <<-EXPECTED
378
+ EXPECTED
379
+
380
+ assert_equal expected, @ui.output
381
+ assert_empty @ui.error
382
+ end
383
+
287
384
  def test_execute_add_bad_uri
288
385
  @cmd.handle_options %w[--add beta-gems.example.com]
289
386
 
@@ -384,5 +481,4 @@ beta-gems.example.com is not a URI
384
481
  assert_equal "source cache successfully updated\n", @ui.output
385
482
  assert_equal '', @ui.error
386
483
  end
387
-
388
484
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/specification_command'
4
4
 
5
5
  class TestGemCommandsSpecificationCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
 
@@ -21,8 +20,8 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
21
20
  @cmd.execute
22
21
  end
23
22
 
24
- assert_match %r|Gem::Specification|, @ui.output
25
- assert_match %r|name: foo|, @ui.output
23
+ assert_match %r{Gem::Specification}, @ui.output
24
+ assert_match %r{name: foo}, @ui.output
26
25
  assert_equal '', @ui.error
27
26
  end
28
27
 
@@ -37,10 +36,10 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
37
36
  @cmd.execute
38
37
  end
39
38
 
40
- assert_match %r|Gem::Specification|, @ui.output
41
- assert_match %r|name: foo|, @ui.output
42
- assert_match %r|version: 0.0.1|, @ui.output
43
- assert_match %r|version: 0.0.2|, @ui.output
39
+ assert_match %r{Gem::Specification}, @ui.output
40
+ assert_match %r{name: foo}, @ui.output
41
+ assert_match %r{version: 0.0.1}, @ui.output
42
+ assert_match %r{version: 0.0.2}, @ui.output
44
43
  assert_equal '', @ui.error
45
44
  end
46
45
 
@@ -99,8 +98,8 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
99
98
  @cmd.execute
100
99
  end
101
100
 
102
- assert_match %r|Gem::Specification|, @ui.output
103
- assert_match %r|name: foo|, @ui.output
101
+ assert_match %r{Gem::Specification}, @ui.output
102
+ assert_match %r{name: foo}, @ui.output
104
103
  assert_equal '', @ui.error
105
104
  end
106
105
 
@@ -131,8 +130,8 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
131
130
  @cmd.execute
132
131
  end
133
132
 
134
- assert_match %r|Gem::Specification|, @ui.output
135
- assert_match %r|name: foo|, @ui.output
133
+ assert_match %r{Gem::Specification}, @ui.output
134
+ assert_match %r{name: foo}, @ui.output
136
135
  assert_equal '', @ui.error
137
136
  end
138
137
 
@@ -164,8 +163,8 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
164
163
  @cmd.execute
165
164
  end
166
165
 
167
- assert_match %r|\A--- !ruby/object:Gem::Specification|, @ui.output
168
- assert_match %r|name: foo|, @ui.output
166
+ assert_match %r{\A--- !ruby/object:Gem::Specification}, @ui.output
167
+ assert_match %r{name: foo}, @ui.output
169
168
  end
170
169
 
171
170
  def test_execute_remote_with_version
@@ -187,6 +186,34 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
187
186
  assert_equal Gem::Version.new("1"), spec.version
188
187
  end
189
188
 
189
+ def test_execute_remote_with_version_and_platform
190
+ original_platforms = Gem.platforms.dup
191
+
192
+ spec_fetcher do |fetcher|
193
+ fetcher.spec 'foo', "1"
194
+ fetcher.spec 'foo', "1" do |s|
195
+ s.platform = 'x86_64-linux'
196
+ end
197
+ end
198
+
199
+ @cmd.options[:args] = %w[foo]
200
+ @cmd.options[:version] = "1"
201
+ @cmd.options[:domain] = :remote
202
+ @cmd.options[:added_platform] = true
203
+ Gem.platforms = [Gem::Platform::RUBY, Gem::Platform.new("x86_64-linux")]
204
+
205
+ use_ui @ui do
206
+ @cmd.execute
207
+ end
208
+
209
+ spec = Gem::Specification.from_yaml @ui.output
210
+
211
+ assert_equal Gem::Version.new("1"), spec.version
212
+ assert_equal Gem::Platform.new("x86_64-linux"), spec.platform
213
+ ensure
214
+ Gem.platforms = original_platforms
215
+ end
216
+
190
217
  def test_execute_remote_without_prerelease
191
218
  spec_fetcher do |fetcher|
192
219
  fetcher.spec 'foo', '2.0.0'
@@ -200,8 +227,8 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
200
227
  @cmd.execute
201
228
  end
202
229
 
203
- assert_match %r|\A--- !ruby/object:Gem::Specification|, @ui.output
204
- assert_match %r|name: foo|, @ui.output
230
+ assert_match %r{\A--- !ruby/object:Gem::Specification}, @ui.output
231
+ assert_match %r{name: foo}, @ui.output
205
232
 
206
233
  spec = YAML.load @ui.output
207
234
 
@@ -222,8 +249,8 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
222
249
  @cmd.execute
223
250
  end
224
251
 
225
- assert_match %r|\A--- !ruby/object:Gem::Specification|, @ui.output
226
- assert_match %r|name: foo|, @ui.output
252
+ assert_match %r{\A--- !ruby/object:Gem::Specification}, @ui.output
253
+ assert_match %r{name: foo}, @ui.output
227
254
 
228
255
  spec = YAML.load @ui.output
229
256
 
@@ -242,9 +269,8 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
242
269
  @cmd.execute
243
270
  end
244
271
 
245
- assert_match %r|Gem::Specification.new|, @ui.output
246
- assert_match %r|s.name = "foo"|, @ui.output
272
+ assert_match %r{Gem::Specification.new}, @ui.output
273
+ assert_match %r{s.name = "foo"}, @ui.output
247
274
  assert_equal '', @ui.error
248
275
  end
249
-
250
276
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/stale_command'
4
4
 
5
5
  class TestGemCommandsStaleCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
  @stub_ui = Gem::MockGemUi.new
@@ -40,5 +39,4 @@ class TestGemCommandsStaleCommand < Gem::TestCase
40
39
  assert_equal("#{foo_bar.name}-#{foo_bar.version}", lines[0].split.first)
41
40
  assert_equal("#{bar_baz.name}-#{bar_baz.version}", lines[1].split.first)
42
41
  end
43
-
44
42
  end
@@ -3,7 +3,6 @@ require 'rubygems/installer_test_case'
3
3
  require 'rubygems/commands/uninstall_command'
4
4
 
5
5
  class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
6
-
7
6
  def setup
8
7
  super
9
8
  @cmd = Gem::Commands::UninstallCommand.new
@@ -361,6 +360,7 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
361
360
  end
362
361
 
363
362
  assert_equal %w[default-1], Gem::Specification.all_names.sort
363
+ assert_equal "INFO: Uninstalled all gems in #{@gemhome}", @ui.output.split("\n").last
364
364
  end
365
365
 
366
366
  def test_execute_outside_gem_home
@@ -486,7 +486,7 @@ WARNING: Use your OS package manager to uninstall vendor gems
486
486
  end
487
487
 
488
488
  assert_empty @ui.output
489
- assert_match %r!Error: unable to successfully uninstall '#{@spec.name}'!, @ui.error
489
+ assert_match %r{Error: unable to successfully uninstall '#{@spec.name}'}, @ui.error
490
490
  end
491
491
 
492
492
  private
@@ -501,5 +501,4 @@ WARNING: Use your OS package manager to uninstall vendor gems
501
501
  end
502
502
  end
503
503
  end
504
-
505
504
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/unpack_command'
4
4
 
5
5
  class TestGemCommandsUnpackCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
 
@@ -221,5 +220,4 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
221
220
 
222
221
  assert @cmd.options[:spec]
223
222
  end
224
-
225
223
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/update_command'
4
4
 
5
5
  class TestGemCommandsUpdateCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
  common_installer_setup
@@ -159,6 +158,64 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
159
158
  assert_empty out
160
159
  end
161
160
 
161
+ def test_execute_system_specific_older_than_minimum_supported_rubygems
162
+ spec_fetcher do |fetcher|
163
+ fetcher.download 'rubygems-update', "2.5.1" do |s|
164
+ s.files = %w[setup.rb]
165
+ end
166
+ end
167
+
168
+ @cmd.options[:args] = []
169
+ @cmd.options[:system] = "2.5.1"
170
+
171
+ assert_raises Gem::MockGemUi::TermError do
172
+ use_ui @ui do
173
+ @cmd.execute
174
+ end
175
+ end
176
+
177
+ assert_empty @ui.output
178
+ assert_equal "ERROR: rubygems 2.5.1 is not supported. The oldest supported version is 2.5.2\n", @ui.error
179
+ end
180
+
181
+ def test_execute_system_specific_older_than_3_2_removes_plugins_dir
182
+ spec_fetcher do |fetcher|
183
+ fetcher.download 'rubygems-update', 3.1 do |s|
184
+ s.files = %w[setup.rb]
185
+ end
186
+ end
187
+
188
+ @cmd.options[:args] = []
189
+ @cmd.options[:system] = "3.1"
190
+
191
+ FileUtils.mkdir_p Gem.plugindir
192
+ write_file File.join(Gem.plugindir, 'a_plugin.rb')
193
+
194
+ @cmd.execute
195
+
196
+ refute_path_exists Gem.plugindir, "Plugins folder not removed when updating rubygems to pre-3.2"
197
+ end
198
+
199
+ def test_execute_system_specific_newer_than_or_equal_to_3_2_leaves_plugins_dir_alone
200
+ spec_fetcher do |fetcher|
201
+ fetcher.download 'rubygems-update', "3.2.a" do |s|
202
+ s.files = %w[setup.rb]
203
+ end
204
+ end
205
+
206
+ @cmd.options[:args] = []
207
+ @cmd.options[:system] = "3.2.a"
208
+
209
+ FileUtils.mkdir_p Gem.plugindir
210
+ plugin_file = File.join(Gem.plugindir, 'a_plugin.rb')
211
+ write_file plugin_file
212
+
213
+ @cmd.execute
214
+
215
+ assert_path_exists Gem.plugindir, "Plugin folder removed when updating rubygems to post-3.2"
216
+ assert_path_exists plugin_file, "Plugin removed when updating rubygems to post-3.2"
217
+ end
218
+
162
219
  def test_execute_system_specifically_to_latest_version
163
220
  spec_fetcher do |fetcher|
164
221
  fetcher.download 'rubygems-update', 8 do |s|
@@ -200,6 +257,53 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
200
257
  @ui.error
201
258
  end
202
259
 
260
+ def test_execute_system_with_disabled_update
261
+ old_disable_system_update_message = Gem.disable_system_update_message
262
+ Gem.disable_system_update_message = "Please use package manager instead."
263
+
264
+ @cmd.options[:args] = []
265
+ @cmd.options[:system] = true
266
+
267
+ assert_raises Gem::MockGemUi::TermError do
268
+ use_ui @ui do
269
+ @cmd.execute
270
+ end
271
+ end
272
+
273
+ assert_empty @ui.output
274
+ assert_equal "ERROR: Please use package manager instead.\n", @ui.error
275
+ ensure
276
+ Gem.disable_system_update_message = old_disable_system_update_message
277
+ end
278
+
279
+ # The other style of `gem update --system` tests don't actually run
280
+ # setup.rb, so we just check that setup.rb gets the `--silent` flag.
281
+ def test_execute_system_silent_passed_to_setuprb
282
+ @cmd.options[:args] = []
283
+ @cmd.options[:system] = true
284
+ @cmd.options[:silent] = true
285
+
286
+ assert_equal true, @cmd.update_rubygems_arguments.include?('--silent')
287
+ end
288
+
289
+ def test_execute_system_silent
290
+ spec_fetcher do |fetcher|
291
+ fetcher.download 'rubygems-update', 9 do |s|
292
+ s.files = %w[setup.rb]
293
+ end
294
+ end
295
+
296
+ @cmd.options[:args] = []
297
+ @cmd.options[:system] = true
298
+ @cmd.options[:silent] = true
299
+
300
+ use_ui @ui do
301
+ @cmd.execute
302
+ end
303
+
304
+ assert_empty @ui.output
305
+ end
306
+
203
307
  # before:
204
308
  # a1 -> c1.2
205
309
  # after:
@@ -359,10 +463,10 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
359
463
  end
360
464
 
361
465
  def test_execute_user_install
362
- spec_fetcher do |fetcher|
363
- fetcher.download 'a', 2
364
- fetcher.spec 'a', 1
365
- end
466
+ a = util_spec "a", 1
467
+ b = util_spec "b", 1
468
+ install_gem_user(a)
469
+ install_gem(b)
366
470
 
367
471
  @cmd.handle_options %w[--user-install]
368
472
 
@@ -373,7 +477,13 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
373
477
  installer = @cmd.installer
374
478
  user_install = installer.instance_variable_get :@user_install
375
479
 
376
- assert user_install, 'user_install must be set on the installer'
480
+ assert user_install, "user_install must be set on the installer"
481
+
482
+ out = @ui.output.split "\n"
483
+ assert_equal "Updating installed gems", out.shift
484
+ assert_equal "Updating a", out.shift
485
+ assert_equal "Gems updated: a", out.shift
486
+ assert_empty out
377
487
  end
378
488
 
379
489
  def test_fetch_remote_gems
@@ -584,5 +694,4 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
584
694
  assert_equal " a-2", out.shift
585
695
  assert_empty out
586
696
  end
587
-
588
697
  end