rubygems-update 3.1.2 → 3.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (562) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +756 -489
  3. data/CODE_OF_CONDUCT.md +55 -19
  4. data/CONTRIBUTING.md +25 -11
  5. data/Manifest.txt +75 -104
  6. data/POLICIES.md +6 -12
  7. data/README.md +5 -5
  8. data/Rakefile +64 -92
  9. data/bin/update_rubygems +1 -1
  10. data/bundler/CHANGELOG.md +1636 -1422
  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 +1 -7
  21. data/bundler/lib/bundler/cli/clean.rb +1 -1
  22. data/bundler/lib/bundler/cli/common.rb +14 -0
  23. data/bundler/lib/bundler/cli/console.rb +1 -1
  24. data/bundler/lib/bundler/cli/doctor.rb +1 -1
  25. data/bundler/lib/bundler/cli/exec.rb +4 -4
  26. data/bundler/lib/bundler/cli/fund.rb +36 -0
  27. data/bundler/lib/bundler/cli/gem.rb +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 +16 -13
  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 +66 -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 -3
  52. data/bundler/lib/bundler/fetcher.rb +4 -3
  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 +33 -19
  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 +2 -2
  65. data/bundler/lib/bundler/installer.rb +35 -32
  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 +2 -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 +16 -25
  84. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +19 -30
  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 +43 -19
  135. data/bundler/lib/bundler/resolver/spec_group.rb +39 -24
  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 +26 -61
  141. data/bundler/lib/bundler/runtime.rb +4 -14
  142. data/bundler/lib/bundler/settings.rb +49 -46
  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 +23 -21
  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 -17
  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/dependency_graph.rb +34 -1
  178. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  179. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  180. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  181. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +48 -46
  182. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -208
  183. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  184. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  185. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  186. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  187. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  188. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  189. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  190. data/bundler/lib/bundler/version.rb +1 -1
  191. data/bundler/lib/bundler/worker.rb +1 -1
  192. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  193. data/lib/rubygems.rb +138 -187
  194. data/lib/rubygems/available_set.rb +4 -6
  195. data/lib/rubygems/basic_specification.rb +12 -10
  196. data/lib/rubygems/bundler_version_finder.rb +14 -9
  197. data/lib/rubygems/command.rb +17 -17
  198. data/lib/rubygems/command_manager.rb +5 -6
  199. data/lib/rubygems/commands/build_command.rb +40 -20
  200. data/lib/rubygems/commands/cert_command.rb +2 -10
  201. data/lib/rubygems/commands/check_command.rb +0 -2
  202. data/lib/rubygems/commands/cleanup_command.rb +11 -7
  203. data/lib/rubygems/commands/contents_command.rb +4 -6
  204. data/lib/rubygems/commands/dependency_command.rb +6 -8
  205. data/lib/rubygems/commands/environment_command.rb +1 -3
  206. data/lib/rubygems/commands/fetch_command.rb +2 -4
  207. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  208. data/lib/rubygems/commands/help_command.rb +4 -4
  209. data/lib/rubygems/commands/info_command.rb +8 -5
  210. data/lib/rubygems/commands/install_command.rb +3 -5
  211. data/lib/rubygems/commands/list_command.rb +8 -7
  212. data/lib/rubygems/commands/lock_command.rb +1 -3
  213. data/lib/rubygems/commands/mirror_command.rb +0 -2
  214. data/lib/rubygems/commands/open_command.rb +0 -4
  215. data/lib/rubygems/commands/outdated_command.rb +0 -2
  216. data/lib/rubygems/commands/owner_command.rb +9 -4
  217. data/lib/rubygems/commands/pristine_command.rb +11 -5
  218. data/lib/rubygems/commands/push_command.rb +10 -47
  219. data/lib/rubygems/commands/query_command.rb +14 -344
  220. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  221. data/lib/rubygems/commands/search_command.rb +7 -7
  222. data/lib/rubygems/commands/server_command.rb +3 -1
  223. data/lib/rubygems/commands/setup_command.rb +101 -74
  224. data/lib/rubygems/commands/signin_command.rb +0 -2
  225. data/lib/rubygems/commands/signout_command.rb +0 -2
  226. data/lib/rubygems/commands/sources_command.rb +9 -7
  227. data/lib/rubygems/commands/specification_command.rb +8 -4
  228. data/lib/rubygems/commands/stale_command.rb +1 -3
  229. data/lib/rubygems/commands/uninstall_command.rb +2 -4
  230. data/lib/rubygems/commands/unpack_command.rb +1 -3
  231. data/lib/rubygems/commands/update_command.rb +59 -14
  232. data/lib/rubygems/commands/which_command.rb +0 -2
  233. data/lib/rubygems/commands/yank_command.rb +4 -7
  234. data/lib/rubygems/config_file.rb +11 -4
  235. data/lib/rubygems/core_ext/kernel_require.rb +29 -36
  236. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  237. data/lib/rubygems/defaults.rb +101 -7
  238. data/lib/rubygems/dependency.rb +3 -8
  239. data/lib/rubygems/dependency_installer.rb +6 -78
  240. data/lib/rubygems/dependency_list.rb +7 -9
  241. data/lib/rubygems/deprecate.rb +46 -1
  242. data/lib/rubygems/doctor.rb +4 -4
  243. data/lib/rubygems/errors.rb +3 -14
  244. data/lib/rubygems/exceptions.rb +2 -33
  245. data/lib/rubygems/ext.rb +6 -6
  246. data/lib/rubygems/ext/build_error.rb +2 -0
  247. data/lib/rubygems/ext/builder.rb +21 -39
  248. data/lib/rubygems/ext/cmake_builder.rb +6 -9
  249. data/lib/rubygems/ext/configure_builder.rb +5 -8
  250. data/lib/rubygems/ext/ext_conf_builder.rb +21 -19
  251. data/lib/rubygems/ext/rake_builder.rb +4 -6
  252. data/lib/rubygems/gem_runner.rb +3 -10
  253. data/lib/rubygems/gemcutter_utilities.rb +102 -21
  254. data/lib/rubygems/indexer.rb +1 -22
  255. data/lib/rubygems/install_update_options.rb +7 -7
  256. data/lib/rubygems/installer.rb +59 -80
  257. data/lib/rubygems/installer_test_case.rb +25 -11
  258. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  259. data/lib/rubygems/local_remote_options.rb +1 -1
  260. data/lib/rubygems/mock_gem_ui.rb +0 -6
  261. data/lib/rubygems/name_tuple.rb +3 -7
  262. data/lib/rubygems/openssl.rb +7 -0
  263. data/lib/rubygems/package.rb +14 -25
  264. data/lib/rubygems/package/digest_io.rb +0 -2
  265. data/lib/rubygems/package/file_source.rb +0 -2
  266. data/lib/rubygems/package/io_source.rb +0 -2
  267. data/lib/rubygems/package/old.rb +1 -3
  268. data/lib/rubygems/package/tar_header.rb +4 -6
  269. data/lib/rubygems/package/tar_reader.rb +0 -3
  270. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  271. data/lib/rubygems/package/tar_test_case.rb +2 -4
  272. data/lib/rubygems/package/tar_writer.rb +2 -12
  273. data/lib/rubygems/package_task.rb +1 -7
  274. data/lib/rubygems/path_support.rb +1 -3
  275. data/lib/rubygems/platform.rb +21 -16
  276. data/lib/rubygems/psych_tree.rb +0 -2
  277. data/lib/rubygems/query_utils.rb +353 -0
  278. data/lib/rubygems/rdoc.rb +0 -12
  279. data/lib/rubygems/remote_fetcher.rb +14 -29
  280. data/lib/rubygems/request.rb +4 -11
  281. data/lib/rubygems/request/connection_pools.rb +1 -5
  282. data/lib/rubygems/request/http_pool.rb +0 -2
  283. data/lib/rubygems/request/https_pool.rb +0 -2
  284. data/lib/rubygems/request_set.rb +7 -20
  285. data/lib/rubygems/request_set/gem_dependency_api.rb +6 -8
  286. data/lib/rubygems/request_set/lockfile.rb +8 -12
  287. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  288. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
  289. data/lib/rubygems/requirement.rb +21 -22
  290. data/lib/rubygems/resolver.rb +14 -12
  291. data/lib/rubygems/resolver/activation_request.rb +9 -3
  292. data/lib/rubygems/resolver/api_set.rb +31 -24
  293. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  294. data/lib/rubygems/resolver/api_specification.rb +24 -10
  295. data/lib/rubygems/resolver/best_set.rb +2 -4
  296. data/lib/rubygems/resolver/composed_set.rb +3 -5
  297. data/lib/rubygems/resolver/conflict.rb +2 -4
  298. data/lib/rubygems/resolver/current_set.rb +0 -2
  299. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  300. data/lib/rubygems/resolver/git_set.rb +0 -2
  301. data/lib/rubygems/resolver/git_specification.rb +0 -2
  302. data/lib/rubygems/resolver/index_set.rb +1 -3
  303. data/lib/rubygems/resolver/index_specification.rb +29 -2
  304. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  305. data/lib/rubygems/resolver/installer_set.rb +60 -13
  306. data/lib/rubygems/resolver/local_specification.rb +0 -2
  307. data/lib/rubygems/resolver/lock_set.rb +2 -4
  308. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  309. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  310. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  311. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  312. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  313. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  314. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  315. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  316. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  317. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  318. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  319. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  320. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  321. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  322. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  323. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  324. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  325. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  326. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  327. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  328. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  329. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  330. data/lib/rubygems/resolver/set.rb +0 -2
  331. data/lib/rubygems/resolver/source_set.rb +0 -2
  332. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  333. data/lib/rubygems/resolver/specification.rb +13 -3
  334. data/lib/rubygems/resolver/stats.rb +0 -2
  335. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  336. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  337. data/lib/rubygems/s3_uri_signer.rb +2 -8
  338. data/lib/rubygems/safe_yaml.rb +4 -4
  339. data/lib/rubygems/security.rb +27 -34
  340. data/lib/rubygems/security/policy.rb +4 -8
  341. data/lib/rubygems/security/signer.rb +5 -7
  342. data/lib/rubygems/security/trust_dir.rb +1 -3
  343. data/lib/rubygems/server.rb +16 -13
  344. data/lib/rubygems/source.rb +23 -12
  345. data/lib/rubygems/source/git.rb +7 -8
  346. data/lib/rubygems/source/installed.rb +0 -2
  347. data/lib/rubygems/source/local.rb +2 -4
  348. data/lib/rubygems/source/lock.rb +0 -2
  349. data/lib/rubygems/source/specific_file.rb +0 -2
  350. data/lib/rubygems/source/vendor.rb +0 -2
  351. data/lib/rubygems/source_list.rb +4 -7
  352. data/lib/rubygems/spec_fetcher.rb +19 -18
  353. data/lib/rubygems/specification.rb +122 -131
  354. data/lib/rubygems/specification_policy.rb +88 -30
  355. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  356. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  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 +120 -134
  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 +15 -3
  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 +5 -7
  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 +12 -0
  379. data/test/rubygems/test_bundled_ca.rb +42 -45
  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 +156 -99
  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 +250 -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 +99 -3
  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 +2 -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 +258 -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 +41 -39
  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 +9 -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 +72 -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 +188 -131
  498. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  499. data/test/rubygems/test_gem_stub_specification.rb +4 -7
  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 +25 -10
  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 +291 -56
  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/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  548. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  549. data/lib/ubygems.rb +0 -14
  550. data/tmp/.keep +0 -0
  551. data/util/CL2notes +0 -55
  552. data/util/bisect +0 -10
  553. data/util/ci.sh +0 -62
  554. data/util/cops/deprecations.rb +0 -52
  555. data/util/create_certs.rb +0 -171
  556. data/util/create_certs.sh +0 -27
  557. data/util/create_encrypted_key.rb +0 -16
  558. data/util/generate_spdx_license_list.rb +0 -63
  559. data/util/patch_with_prs.rb +0 -77
  560. data/util/rubocop +0 -8
  561. data/util/update_bundled_ca_certificates.rb +0 -139
  562. data/util/update_changelog.rb +0 -67
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/list_command'
4
4
 
5
5
  class TestGemCommandsListCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
 
@@ -30,5 +29,4 @@ class TestGemCommandsListCommand < Gem::TestCase
30
29
  assert_equal "true\n", @ui.output
31
30
  assert_equal '', @ui.error
32
31
  end
33
-
34
32
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/lock_command'
4
4
 
5
5
  class TestGemCommandsLockCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
 
@@ -64,5 +63,4 @@ gem 'd', '= 1'
64
63
 
65
64
  assert_equal 'Could not find gem c-1, try using the full name', e.message
66
65
  end
67
-
68
66
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/mirror_command'
4
4
 
5
5
  class TestGemCommandsMirrorCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
 
@@ -15,7 +14,6 @@ class TestGemCommandsMirrorCommand < Gem::TestCase
15
14
  @cmd.execute
16
15
  end
17
16
 
18
- assert_match %r%Install the rubygems-mirror%i, @ui.error
17
+ assert_match %r{Install the rubygems-mirror}i, @ui.error
19
18
  end
20
-
21
19
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/open_command'
4
4
 
5
5
  class TestGemCommandsOpenCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
 
@@ -26,7 +25,7 @@ class TestGemCommandsOpenCommand < Gem::TestCase
26
25
 
27
26
  gem 'foo', '1.0.0'
28
27
  spec = gem 'foo', '1.0.1'
29
- mock = MiniTest::Mock.new
28
+ mock = Minitest::Mock.new
30
29
  mock.expect(:call, true, [spec.full_gem_path])
31
30
 
32
31
  Dir.stub(:chdir, mock) do
@@ -51,7 +50,7 @@ class TestGemCommandsOpenCommand < Gem::TestCase
51
50
  end
52
51
  end
53
52
 
54
- assert_match %r|Unable to find gem 'foo'|, @ui.output
53
+ assert_match %r{Unable to find gem 'foo'}, @ui.output
55
54
  assert_equal "", @ui.error
56
55
  end
57
56
 
@@ -64,7 +63,7 @@ class TestGemCommandsOpenCommand < Gem::TestCase
64
63
  end
65
64
  end
66
65
 
67
- assert_match %r|Unable to find gem 'foo'|, @ui.output
66
+ assert_match %r{Unable to find gem 'foo'}, @ui.output
68
67
  assert_equal "", @ui.error
69
68
  end
70
69
 
@@ -93,8 +92,7 @@ class TestGemCommandsOpenCommand < Gem::TestCase
93
92
  end
94
93
  end
95
94
 
96
- assert_match %r|'foo' is a default gem and can't be opened\.| , @ui.output
95
+ assert_match %r{'foo' is a default gem and can't be opened\.} , @ui.output
97
96
  assert_equal "", @ui.error
98
97
  end
99
-
100
98
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/outdated_command'
4
4
 
5
5
  class TestGemCommandsOutdatedCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
 
@@ -29,5 +28,4 @@ class TestGemCommandsOutdatedCommand < Gem::TestCase
29
28
  assert_equal "foo (0.2 < 2.0)\n", @ui.output
30
29
  assert_equal "", @ui.error
31
30
  end
32
-
33
31
  end
@@ -3,10 +3,11 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/owner_command'
4
4
 
5
5
  class TestGemCommandsOwnerCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
 
9
+ credential_setup
10
+
10
11
  ENV["RUBYGEMS_HOST"] = nil
11
12
  @stub_ui = Gem::MockGemUi.new
12
13
  @stub_fetcher = Gem::FakeFetcher.new
@@ -17,6 +18,12 @@ class TestGemCommandsOwnerCommand < Gem::TestCase
17
18
  @cmd = Gem::Commands::OwnerCommand.new
18
19
  end
19
20
 
21
+ def teardown
22
+ credential_teardown
23
+
24
+ super
25
+ end
26
+
20
27
  def test_show_owners
21
28
  response = <<EOF
22
29
  ---
@@ -119,7 +126,7 @@ EOF
119
126
  end
120
127
  Gem.configuration.load_api_keys
121
128
 
122
- @cmd.handle_options %w(-k other)
129
+ @cmd.handle_options %w[-k other]
123
130
  @cmd.show_owners('freewill')
124
131
 
125
132
  assert_equal '701229f217cdf23b1344c7b4b54ca97', @stub_fetcher.last_request['Authorization']
@@ -177,7 +184,7 @@ EOF
177
184
  end
178
185
  Gem.configuration.load_api_keys
179
186
 
180
- @cmd.handle_options %w(-k other)
187
+ @cmd.handle_options %w[-k other]
181
188
  @cmd.add_owners('freewill', ['user-new1@example.com'])
182
189
 
183
190
  assert_equal '701229f217cdf23b1344c7b4b54ca97', @stub_fetcher.last_request['Authorization']
@@ -217,7 +224,7 @@ EOF
217
224
  end
218
225
  Gem.configuration.load_api_keys
219
226
 
220
- @cmd.handle_options %w(-k other)
227
+ @cmd.handle_options %w[-k other]
221
228
  @cmd.remove_owners('freewill', ['user-remove1@example.com'])
222
229
 
223
230
  assert_equal '701229f217cdf23b1344c7b4b54ca97', @stub_fetcher.last_request['Authorization']
@@ -240,7 +247,7 @@ EOF
240
247
 
241
248
  @stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [
242
249
  [response_fail, 401, 'Unauthorized'],
243
- [response_success, 200, 'OK']
250
+ [response_success, 200, 'OK'],
244
251
  ]
245
252
 
246
253
  @otp_ui = Gem::MockGemUi.new "111111\n"
@@ -269,4 +276,51 @@ EOF
269
276
  assert_equal '111111', @stub_fetcher.last_request['OTP']
270
277
  end
271
278
 
279
+ def test_remove_owners_unathorized_api_key
280
+ response_forbidden = "The API key doesn't have access"
281
+ response_success = "Owner removed successfully."
282
+
283
+ @stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [
284
+ [response_forbidden, 403, 'Forbidden'],
285
+ [response_success, 200, "OK"],
286
+ ]
287
+ @stub_fetcher.data["#{Gem.host}/api/v1/api_key"] = ["", 200, "OK"]
288
+ @cmd.instance_variable_set :@scope, :remove_owner
289
+
290
+ @stub_ui = Gem::MockGemUi.new "some@mail.com\npass\n"
291
+ use_ui @stub_ui do
292
+ @cmd.remove_owners("freewill", ["some@example"])
293
+ end
294
+
295
+ access_notice = "The existing key doesn't have access of remove_owner on RubyGems.org. Please sign in to update access."
296
+ assert_match access_notice, @stub_ui.output
297
+ assert_match "Email:", @stub_ui.output
298
+ assert_match "Password:", @stub_ui.output
299
+ assert_match "Added remove_owner scope to the existing API key", @stub_ui.output
300
+ assert_match response_success, @stub_ui.output
301
+ end
302
+
303
+ def test_add_owners_unathorized_api_key
304
+ response_forbidden = "The API key doesn't have access"
305
+ response_success = "Owner added successfully."
306
+
307
+ @stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [
308
+ [response_forbidden, 403, 'Forbidden'],
309
+ [response_success, 200, "OK"],
310
+ ]
311
+ @stub_fetcher.data["#{Gem.host}/api/v1/api_key"] = ["", 200, "OK"]
312
+ @cmd.instance_variable_set :@scope, :add_owner
313
+
314
+ @stub_ui = Gem::MockGemUi.new "some@mail.com\npass\n"
315
+ use_ui @stub_ui do
316
+ @cmd.add_owners("freewill", ["some@example"])
317
+ end
318
+
319
+ access_notice = "The existing key doesn't have access of add_owner on RubyGems.org. Please sign in to update access."
320
+ assert_match access_notice, @stub_ui.output
321
+ assert_match "Email:", @stub_ui.output
322
+ assert_match "Password:", @stub_ui.output
323
+ assert_match "Added add_owner scope to the existing API key", @stub_ui.output
324
+ assert_match response_success, @stub_ui.output
325
+ end
272
326
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/pristine_command'
4
4
 
5
5
  class TestGemCommandsPristineCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
  common_installer_setup
@@ -160,11 +159,9 @@ class TestGemCommandsPristineCommand < Gem::TestCase
160
159
 
161
160
  ruby_exec = sprintf Gem.default_exec_format, 'ruby'
162
161
 
163
- if win_platform?
164
- assert_match %r%\A#!\s*#{ruby_exec}%, File.read(gem_exec)
165
- else
166
- assert_match %r%\A#!\s*/usr/bin/env #{ruby_exec}%, File.read(gem_exec)
167
- end
162
+ bin_env = win_platform? ? "" : %w[/usr/bin/env /bin/env].find {|f| File.executable?(f) } + " "
163
+
164
+ assert_match %r{\A#!\s*#{bin_env}#{ruby_exec}}, File.read(gem_exec)
168
165
  end
169
166
 
170
167
  def test_execute_extensions_explicit
@@ -215,7 +212,6 @@ class TestGemCommandsPristineCommand < Gem::TestCase
215
212
  io.write "# extconf.rb\nrequire 'mkmf'; create_makefile 'a'"
216
213
  end
217
214
 
218
- util_build_gem a
219
215
  install_gem a
220
216
 
221
217
  @cmd.options[:args] = %w[a]
@@ -249,7 +245,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
249
245
  RUBY
250
246
  end
251
247
 
252
- build_args = %w!--with-awesome=true --sweet!
248
+ build_args = %w[--with-awesome=true --sweet]
253
249
 
254
250
  install_gem a, :build_args => build_args
255
251
 
@@ -458,7 +454,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
458
454
  end
459
455
  end
460
456
 
461
- assert_match %r|at least one gem name|, e.message
457
+ assert_match %r{at least one gem name}, e.message
462
458
  end
463
459
 
464
460
  def test_execute_only_executables
@@ -491,6 +487,42 @@ class TestGemCommandsPristineCommand < Gem::TestCase
491
487
  refute File.exist? gem_lib
492
488
  end
493
489
 
490
+ def test_execute_only_plugins
491
+ a = util_spec 'a' do |s|
492
+ s.executables = %w[foo]
493
+ s.files = %w[bin/foo lib/a.rb lib/rubygems_plugin.rb]
494
+ end
495
+ write_file File.join(@tempdir, 'lib', 'a.rb') do |fp|
496
+ fp.puts "puts __FILE__"
497
+ end
498
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |fp|
499
+ fp.puts "puts __FILE__"
500
+ end
501
+ write_file File.join(@tempdir, 'bin', 'foo') do |fp|
502
+ fp.puts "#!/usr/bin/ruby"
503
+ end
504
+
505
+ install_gem a
506
+
507
+ gem_lib = File.join @gemhome, 'gems', a.full_name, 'lib', 'a.rb'
508
+ gem_plugin = File.join @gemhome, 'plugins', 'a_plugin.rb'
509
+ gem_exec = File.join @gemhome, 'bin', 'foo'
510
+
511
+ FileUtils.rm gem_exec
512
+ FileUtils.rm gem_plugin
513
+ FileUtils.rm gem_lib
514
+
515
+ @cmd.handle_options %w[--all --only-plugins]
516
+
517
+ use_ui @ui do
518
+ @cmd.execute
519
+ end
520
+
521
+ refute File.exist? gem_exec
522
+ assert File.exist? gem_plugin
523
+ refute File.exist? gem_lib
524
+ end
525
+
494
526
  def test_execute_bindir
495
527
  a = util_spec 'a' do |s|
496
528
  s.name = "test_gem"
@@ -536,7 +568,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
536
568
  assert_equal([
537
569
  "Restoring gems to pristine condition...",
538
570
  "Cached gem for a-2 not found, attempting to fetch...",
539
- "Skipped a-2, it was not found from cache and remote sources"
571
+ "Skipped a-2, it was not found from cache and remote sources",
540
572
  ], @ui.output.split("\n"))
541
573
 
542
574
  assert_empty @ui.error
@@ -545,7 +577,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
545
577
  def test_execute_default_gem
546
578
  default_gem_spec = new_default_spec("default", "2.0.0.0",
547
579
  nil, "default/gem.rb")
548
- install_default_specs(default_gem_spec)
580
+ install_default_gems(default_gem_spec)
549
581
 
550
582
  @cmd.options[:args] = %w[default]
551
583
 
@@ -623,5 +655,4 @@ class TestGemCommandsPristineCommand < Gem::TestCase
623
655
  assert @cmd.options[:extensions]
624
656
  assert @cmd.options[:extensions_set]
625
657
  end
626
-
627
658
  end
@@ -3,9 +3,11 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/push_command'
4
4
 
5
5
  class TestGemCommandsPushCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
8
+
9
+ credential_setup
10
+
9
11
  ENV["RUBYGEMS_HOST"] = nil
10
12
  Gem.host = Gem::DEFAULT_HOST
11
13
  Gem.configuration.disable_default_gem_server = false
@@ -37,6 +39,8 @@ class TestGemCommandsPushCommand < Gem::TestCase
37
39
  end
38
40
 
39
41
  def teardown
42
+ credential_teardown
43
+
40
44
  super
41
45
 
42
46
  singleton_gem_class.class_eval do
@@ -148,7 +152,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
148
152
 
149
153
  keys = {
150
154
  :rubygems_api_key => 'KEY',
151
- @host => @api_key
155
+ @host => @api_key,
152
156
  }
153
157
 
154
158
  FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path
@@ -183,7 +187,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
183
187
 
184
188
  keys = {
185
189
  :rubygems_api_key => 'KEY',
186
- @host => @api_key
190
+ @host => @api_key,
187
191
  }
188
192
 
189
193
  FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path
@@ -246,7 +250,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
246
250
  spec.metadata['allowed_push_host'] = "https://privategemserver.example"
247
251
  end
248
252
 
249
- response = %{ERROR: "#{@host}" is not allowed by the gemspec, which only allows "https://privategemserver.example"}
253
+ response = %(ERROR: "#{@host}" is not allowed by the gemspec, which only allows "https://privategemserver.example")
250
254
 
251
255
  assert_raises Gem::MockGemUi::TermError do
252
256
  send_battery
@@ -267,7 +271,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
267
271
 
268
272
  keys = {
269
273
  :rubygems_api_key => 'KEY',
270
- @host => @api_key
274
+ @host => @api_key,
271
275
  }
272
276
 
273
277
  FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path
@@ -298,7 +302,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
298
302
  api_key = "PRIVKEY"
299
303
 
300
304
  keys = {
301
- host => api_key
305
+ host => api_key,
302
306
  }
303
307
 
304
308
  FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path
@@ -355,7 +359,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
355
359
  end
356
360
  Gem.configuration.load_api_keys
357
361
 
358
- @cmd.handle_options %w(-k other)
362
+ @cmd.handle_options %w[-k other]
359
363
  @cmd.instance_variable_set :@host, @host
360
364
  @cmd.send_gem(@path)
361
365
 
@@ -369,7 +373,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
369
373
 
370
374
  @fetcher.data["#{Gem.host}/api/v1/gems"] = [
371
375
  [response_fail, 401, 'Unauthorized'],
372
- [response_success, 200, 'OK']
376
+ [response_success, 200, 'OK'],
373
377
  ]
374
378
 
375
379
  @otp_ui = Gem::MockGemUi.new "111111\n"
@@ -400,10 +404,74 @@ class TestGemCommandsPushCommand < Gem::TestCase
400
404
  assert_equal '111111', @fetcher.last_request['OTP']
401
405
  end
402
406
 
407
+ def test_sending_gem_unathorized_api_key_with_mfa_enabled
408
+ response_mfa_enabled = "You have enabled multifactor authentication but your request doesn't have the correct OTP code. Please check it and retry."
409
+ response_forbidden = "The API key doesn't have access"
410
+ response_success = 'Successfully registered gem: freewill (1.0.0)'
411
+
412
+ @fetcher.data["#{@host}/api/v1/gems"] = [
413
+ [response_mfa_enabled, 401, 'Unauthorized'],
414
+ [response_forbidden, 403, 'Forbidden'],
415
+ [response_success, 200, "OK"],
416
+ ]
417
+
418
+ @fetcher.data["#{@host}/api/v1/api_key"] = ["", 200, "OK"]
419
+ @cmd.instance_variable_set :@host, @host
420
+ @cmd.instance_variable_set :@scope, :push_rubygem
421
+
422
+ @ui = Gem::MockGemUi.new "11111\nsome@mail.com\npass\n"
423
+ use_ui @ui do
424
+ @cmd.send_gem(@path)
425
+ end
426
+
427
+ mfa_notice = "You have enabled multi-factor authentication. Please enter OTP code."
428
+ access_notice = "The existing key doesn't have access of push_rubygem on https://rubygems.example. Please sign in to update access."
429
+ assert_match mfa_notice, @ui.output
430
+ assert_match access_notice, @ui.output
431
+ assert_match "Email:", @ui.output
432
+ assert_match "Password:", @ui.output
433
+ assert_match "Added push_rubygem scope to the existing API key", @ui.output
434
+ assert_match response_success, @ui.output
435
+ assert_equal '11111', @fetcher.last_request['OTP']
436
+ end
437
+
438
+ def test_sending_gem_with_no_local_creds
439
+ Gem.configuration.rubygems_api_key = nil
440
+
441
+ response_mfa_enabled = "You have enabled multifactor authentication but your request doesn't have the correct OTP code. Please check it and retry."
442
+ response_success = 'Successfully registered gem: freewill (1.0.0)'
443
+
444
+ @fetcher.data["#{@host}/api/v1/gems"] = [
445
+ [response_success, 200, "OK"],
446
+ ]
447
+
448
+ @fetcher.data["#{@host}/api/v1/api_key"] = [
449
+ [response_mfa_enabled, 401, 'Unauthorized'],
450
+ ["", 200, "OK"],
451
+ ]
452
+
453
+ @cmd.instance_variable_set :@scope, :push_rubygem
454
+ @cmd.options[:args] = [@path]
455
+ @cmd.options[:host] = @host
456
+
457
+ @ui = Gem::MockGemUi.new "some@mail.com\npass\n11111\n"
458
+ use_ui @ui do
459
+ @cmd.execute
460
+ end
461
+
462
+ mfa_notice = "You have enabled multi-factor authentication. Please enter OTP code."
463
+ assert_match mfa_notice, @ui.output
464
+ assert_match "Enter your https://rubygems.example credentials.", @ui.output
465
+ assert_match "Email:", @ui.output
466
+ assert_match "Password:", @ui.output
467
+ assert_match "Signed in with API key:", @ui.output
468
+ assert_match response_success, @ui.output
469
+ assert_equal '11111', @fetcher.last_request['OTP']
470
+ end
471
+
403
472
  private
404
473
 
405
474
  def singleton_gem_class
406
475
  class << Gem; self; end
407
476
  end
408
-
409
477
  end