rubygems-update 3.1.6 → 3.3.22

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 (703) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +1452 -514
  3. data/CODE_OF_CONDUCT.md +55 -19
  4. data/CONTRIBUTING.md +74 -27
  5. data/Manifest.txt +154 -117
  6. data/POLICIES.md +27 -19
  7. data/README.md +10 -8
  8. data/UPGRADING.md +5 -81
  9. data/bin/gem +3 -8
  10. data/bin/update_rubygems +5 -5
  11. data/bundler/CHANGELOG.md +2358 -1430
  12. data/bundler/README.md +7 -9
  13. data/bundler/UPGRADING.md +27 -34
  14. data/bundler/bundler.gemspec +8 -11
  15. data/bundler/exe/bundle +10 -8
  16. data/bundler/exe/bundler +1 -1
  17. data/bundler/lib/bundler/.document +1 -0
  18. data/bundler/lib/bundler/build_metadata.rb +4 -12
  19. data/bundler/lib/bundler/cli/add.rb +1 -1
  20. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  21. data/bundler/lib/bundler/cli/cache.rb +3 -8
  22. data/bundler/lib/bundler/cli/check.rb +4 -2
  23. data/bundler/lib/bundler/cli/clean.rb +1 -1
  24. data/bundler/lib/bundler/cli/common.rb +31 -3
  25. data/bundler/lib/bundler/cli/config.rb +10 -1
  26. data/bundler/lib/bundler/cli/console.rb +1 -1
  27. data/bundler/lib/bundler/cli/doctor.rb +25 -6
  28. data/bundler/lib/bundler/cli/exec.rb +5 -10
  29. data/bundler/lib/bundler/cli/fund.rb +36 -0
  30. data/bundler/lib/bundler/cli/gem.rb +219 -28
  31. data/bundler/lib/bundler/cli/info.rb +38 -6
  32. data/bundler/lib/bundler/cli/init.rb +3 -3
  33. data/bundler/lib/bundler/cli/inject.rb +1 -1
  34. data/bundler/lib/bundler/cli/install.rb +25 -54
  35. data/bundler/lib/bundler/cli/issue.rb +5 -4
  36. data/bundler/lib/bundler/cli/list.rb +19 -11
  37. data/bundler/lib/bundler/cli/lock.rb +5 -1
  38. data/bundler/lib/bundler/cli/open.rb +1 -2
  39. data/bundler/lib/bundler/cli/outdated.rb +105 -76
  40. data/bundler/lib/bundler/cli/platform.rb +2 -2
  41. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  42. data/bundler/lib/bundler/cli/pristine.rb +5 -0
  43. data/bundler/lib/bundler/cli/remove.rb +1 -2
  44. data/bundler/lib/bundler/cli/show.rb +2 -2
  45. data/bundler/lib/bundler/cli/update.rb +20 -9
  46. data/bundler/lib/bundler/cli.rb +106 -83
  47. data/bundler/lib/bundler/compact_index_client/cache.rb +6 -23
  48. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  49. data/bundler/lib/bundler/compact_index_client/updater.rb +29 -25
  50. data/bundler/lib/bundler/compact_index_client.rb +3 -9
  51. data/bundler/lib/bundler/current_ruby.rb +17 -6
  52. data/bundler/lib/bundler/definition.rb +297 -396
  53. data/bundler/lib/bundler/dep_proxy.rb +16 -9
  54. data/bundler/lib/bundler/dependency.rb +22 -77
  55. data/bundler/lib/bundler/digest.rb +71 -0
  56. data/bundler/lib/bundler/dsl.rb +76 -83
  57. data/bundler/lib/bundler/endpoint_specification.rb +16 -14
  58. data/bundler/lib/bundler/env.rb +2 -2
  59. data/bundler/lib/bundler/environment_preserver.rb +29 -2
  60. data/bundler/lib/bundler/errors.rb +30 -3
  61. data/bundler/lib/bundler/feature_flag.rb +0 -9
  62. data/bundler/lib/bundler/fetcher/base.rb +7 -9
  63. data/bundler/lib/bundler/fetcher/compact_index.rb +11 -16
  64. data/bundler/lib/bundler/fetcher/downloader.rb +10 -7
  65. data/bundler/lib/bundler/fetcher/index.rb +2 -30
  66. data/bundler/lib/bundler/fetcher.rb +24 -25
  67. data/bundler/lib/bundler/friendly_errors.rb +46 -47
  68. data/bundler/lib/bundler/gem_helper.rb +53 -31
  69. data/bundler/lib/bundler/gem_helpers.rb +43 -24
  70. data/bundler/lib/bundler/gem_version_promoter.rb +10 -20
  71. data/bundler/lib/bundler/graph.rb +1 -1
  72. data/bundler/lib/bundler/index.rb +19 -25
  73. data/bundler/lib/bundler/injector.rb +38 -6
  74. data/bundler/lib/bundler/inline.rb +4 -13
  75. data/bundler/lib/bundler/installer/gem_installer.rb +19 -24
  76. data/bundler/lib/bundler/installer/parallel_installer.rb +46 -25
  77. data/bundler/lib/bundler/installer/standalone.rb +58 -11
  78. data/bundler/lib/bundler/installer.rb +51 -81
  79. data/bundler/lib/bundler/lazy_specification.rb +79 -36
  80. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  81. data/bundler/lib/bundler/lockfile_parser.rb +19 -44
  82. data/bundler/lib/bundler/man/.document +1 -0
  83. data/bundler/{man → lib/bundler/man}/bundle-add.1 +21 -5
  84. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +16 -4
  85. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +5 -3
  86. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
  87. data/bundler/{man → lib/bundler/man}/bundle-cache.1 +7 -1
  88. data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +7 -0
  89. data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
  90. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +1 -1
  91. data/bundler/{man → lib/bundler/man}/bundle-config.1 +65 -47
  92. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +74 -65
  93. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  94. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  95. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  96. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +2 -2
  97. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +1 -1
  98. data/bundler/{man → lib/bundler/man}/bundle-gem.1 +38 -3
  99. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +46 -7
  100. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  101. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  102. data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
  103. data/bundler/{man → lib/bundler/man}/bundle-init.1 +1 -1
  104. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +5 -2
  105. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +3 -1
  106. data/bundler/{man → lib/bundler/man}/bundle-install.1 +35 -4
  107. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +33 -5
  108. data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
  109. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  110. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  111. data/bundler/{man → lib/bundler/man}/bundle-open.1 +1 -1
  112. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +3 -10
  113. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +1 -10
  114. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +16 -6
  115. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
  116. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  117. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  118. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  119. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  120. data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
  121. data/bundler/{man → lib/bundler/man}/bundle-update.1 +5 -5
  122. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +5 -4
  123. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  124. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  125. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +4 -1
  126. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +2 -0
  127. data/bundler/{man → lib/bundler/man}/bundle.1 +15 -10
  128. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +12 -7
  129. data/bundler/{man → lib/bundler/man}/gemfile.5 +106 -80
  130. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +94 -83
  131. data/bundler/{man → lib/bundler/man}/index.txt +4 -0
  132. data/bundler/lib/bundler/match_metadata.rb +13 -0
  133. data/bundler/lib/bundler/match_platform.rb +0 -1
  134. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  135. data/bundler/lib/bundler/mirror.rb +2 -2
  136. data/bundler/lib/bundler/plugin/api/source.rb +25 -9
  137. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  138. data/bundler/lib/bundler/plugin/index.rb +13 -1
  139. data/bundler/lib/bundler/plugin/installer/git.rb +0 -4
  140. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -5
  141. data/bundler/lib/bundler/plugin/installer.rb +11 -11
  142. data/bundler/lib/bundler/plugin/source_list.rb +5 -1
  143. data/bundler/lib/bundler/plugin.rb +58 -11
  144. data/bundler/lib/bundler/process_lock.rb +1 -1
  145. data/bundler/lib/bundler/remote_specification.rb +11 -6
  146. data/bundler/lib/bundler/resolver/base.rb +50 -0
  147. data/bundler/lib/bundler/resolver/spec_group.rb +64 -57
  148. data/bundler/lib/bundler/resolver.rb +234 -230
  149. data/bundler/lib/bundler/retry.rb +2 -2
  150. data/bundler/lib/bundler/ruby_dsl.rb +1 -1
  151. data/bundler/lib/bundler/ruby_version.rb +6 -19
  152. data/bundler/lib/bundler/rubygems_ext.rb +194 -33
  153. data/bundler/lib/bundler/rubygems_gem_installer.rb +87 -16
  154. data/bundler/lib/bundler/rubygems_integration.rb +71 -153
  155. data/bundler/lib/bundler/runtime.rb +22 -26
  156. data/bundler/lib/bundler/self_manager.rb +168 -0
  157. data/bundler/lib/bundler/settings.rb +145 -66
  158. data/bundler/lib/bundler/setup.rb +2 -2
  159. data/bundler/lib/bundler/shared_helpers.rb +17 -32
  160. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  161. data/bundler/lib/bundler/source/git/git_proxy.rb +88 -84
  162. data/bundler/lib/bundler/source/git.rb +50 -32
  163. data/bundler/lib/bundler/source/metadata.rb +3 -7
  164. data/bundler/lib/bundler/source/path/installer.rb +10 -10
  165. data/bundler/lib/bundler/source/path.rb +10 -4
  166. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  167. data/bundler/lib/bundler/source/rubygems.rb +201 -179
  168. data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
  169. data/bundler/lib/bundler/source.rb +25 -5
  170. data/bundler/lib/bundler/source_list.rb +105 -63
  171. data/bundler/lib/bundler/source_map.rb +71 -0
  172. data/bundler/lib/bundler/spec_set.rb +62 -57
  173. data/bundler/lib/bundler/stub_specification.rb +30 -10
  174. data/bundler/lib/bundler/templates/Executable +2 -4
  175. data/bundler/lib/bundler/templates/Executable.bundler +8 -8
  176. data/bundler/lib/bundler/templates/Executable.standalone +2 -4
  177. data/bundler/lib/bundler/templates/Gemfile +0 -2
  178. data/bundler/lib/bundler/templates/gems.rb +0 -3
  179. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  180. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  181. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +12 -1
  182. data/bundler/lib/bundler/templates/newgem/README.md.tt +9 -14
  183. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +32 -5
  184. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  185. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  186. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  187. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +27 -0
  188. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  189. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  190. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  191. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +27 -17
  192. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  193. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  194. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  195. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  196. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  197. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  198. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
  199. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  200. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  201. data/bundler/lib/bundler/ui/shell.rb +6 -6
  202. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
  203. data/bundler/lib/bundler/vendor/.document +1 -0
  204. data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  205. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
  206. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  207. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +57 -0
  208. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +39 -74
  209. data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  210. data/bundler/lib/bundler/vendor/molinillo/LICENSE +9 -0
  211. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
  212. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  213. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -5
  214. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +37 -5
  215. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +34 -28
  216. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  217. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +12 -1
  218. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +49 -47
  219. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  220. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  221. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +82 -189
  222. data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
  223. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  224. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +9 -7
  225. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -2
  226. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +7 -3
  227. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  228. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
  229. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +10 -5
  230. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +5 -1
  231. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +28 -9
  232. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +27 -6
  233. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +5 -1
  234. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  235. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  236. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  237. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +5 -13
  238. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  239. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  240. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
  241. data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  242. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +17 -80
  243. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -1
  244. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +5 -6
  245. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +0 -1
  246. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +0 -1
  247. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  248. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -1
  249. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +1 -14
  250. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -12
  251. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  252. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +84 -0
  253. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +22 -0
  254. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +0 -1
  255. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  256. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  257. data/bundler/lib/bundler/vendored_tsort.rb +4 -0
  258. data/bundler/lib/bundler/version.rb +1 -1
  259. data/bundler/lib/bundler/worker.rb +20 -5
  260. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  261. data/bundler/lib/bundler.rb +79 -47
  262. data/hide_lib_for_update/note.txt +0 -4
  263. data/lib/rubygems/available_set.rb +7 -9
  264. data/lib/rubygems/basic_specification.rb +23 -21
  265. data/lib/rubygems/bundler_version_finder.rb +26 -53
  266. data/lib/rubygems/command.rb +48 -45
  267. data/lib/rubygems/command_manager.rb +20 -14
  268. data/lib/rubygems/commands/build_command.rb +47 -27
  269. data/lib/rubygems/commands/cert_command.rb +78 -75
  270. data/lib/rubygems/commands/check_command.rb +20 -22
  271. data/lib/rubygems/commands/cleanup_command.rb +30 -26
  272. data/lib/rubygems/commands/contents_command.rb +16 -18
  273. data/lib/rubygems/commands/dependency_command.rb +39 -51
  274. data/lib/rubygems/commands/environment_command.rb +11 -10
  275. data/lib/rubygems/commands/fetch_command.rb +33 -16
  276. data/lib/rubygems/commands/generate_index_command.rb +17 -19
  277. data/lib/rubygems/commands/help_command.rb +6 -6
  278. data/lib/rubygems/commands/info_command.rb +10 -7
  279. data/lib/rubygems/commands/install_command.rb +29 -27
  280. data/lib/rubygems/commands/list_command.rb +9 -8
  281. data/lib/rubygems/commands/lock_command.rb +5 -7
  282. data/lib/rubygems/commands/mirror_command.rb +3 -5
  283. data/lib/rubygems/commands/open_command.rb +10 -14
  284. data/lib/rubygems/commands/outdated_command.rb +5 -7
  285. data/lib/rubygems/commands/owner_command.rb +26 -16
  286. data/lib/rubygems/commands/pristine_command.rb +61 -49
  287. data/lib/rubygems/commands/push_command.rb +22 -59
  288. data/lib/rubygems/commands/query_command.rb +21 -351
  289. data/lib/rubygems/commands/rdoc_command.rb +23 -25
  290. data/lib/rubygems/commands/search_command.rb +8 -8
  291. data/lib/rubygems/commands/server_command.rb +16 -77
  292. data/lib/rubygems/commands/setup_command.rb +255 -229
  293. data/lib/rubygems/commands/signin_command.rb +9 -11
  294. data/lib/rubygems/commands/signout_command.rb +7 -9
  295. data/lib/rubygems/commands/sources_command.rb +27 -25
  296. data/lib/rubygems/commands/specification_command.rb +25 -21
  297. data/lib/rubygems/commands/stale_command.rb +3 -5
  298. data/lib/rubygems/commands/uninstall_command.rb +41 -43
  299. data/lib/rubygems/commands/unpack_command.rb +13 -15
  300. data/lib/rubygems/commands/update_command.rb +132 -74
  301. data/lib/rubygems/commands/which_command.rb +7 -9
  302. data/lib/rubygems/commands/yank_command.rb +16 -19
  303. data/lib/rubygems/compatibility.rb +4 -2
  304. data/lib/rubygems/config_file.rb +42 -26
  305. data/lib/rubygems/core_ext/kernel_gem.rb +1 -1
  306. data/lib/rubygems/core_ext/kernel_require.rb +6 -3
  307. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  308. data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
  309. data/lib/rubygems/defaults.rb +108 -32
  310. data/lib/rubygems/dependency.rb +21 -22
  311. data/lib/rubygems/dependency_installer.rb +19 -91
  312. data/lib/rubygems/dependency_list.rb +13 -15
  313. data/lib/rubygems/deprecate.rb +102 -8
  314. data/lib/rubygems/doctor.rb +22 -22
  315. data/lib/rubygems/errors.rb +6 -21
  316. data/lib/rubygems/exceptions.rb +33 -34
  317. data/lib/rubygems/ext/build_error.rb +2 -0
  318. data/lib/rubygems/ext/builder.rb +48 -54
  319. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +23 -0
  320. data/lib/rubygems/ext/cargo_builder.rb +321 -0
  321. data/lib/rubygems/ext/cmake_builder.rb +6 -9
  322. data/lib/rubygems/ext/configure_builder.rb +5 -8
  323. data/lib/rubygems/ext/ext_conf_builder.rb +42 -66
  324. data/lib/rubygems/ext/rake_builder.rb +7 -10
  325. data/lib/rubygems/ext.rb +7 -6
  326. data/lib/rubygems/gem_runner.rb +15 -26
  327. data/lib/rubygems/gemcutter_utilities.rb +153 -32
  328. data/lib/rubygems/indexer.rb +30 -49
  329. data/lib/rubygems/install_default_message.rb +2 -2
  330. data/lib/rubygems/install_message.rb +2 -2
  331. data/lib/rubygems/install_update_options.rb +73 -64
  332. data/lib/rubygems/installer.rb +194 -151
  333. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  334. data/lib/rubygems/local_remote_options.rb +22 -24
  335. data/lib/rubygems/mock_gem_ui.rb +2 -8
  336. data/lib/rubygems/name_tuple.rb +9 -14
  337. data/lib/rubygems/openssl.rb +7 -0
  338. data/lib/rubygems/optparse/.document +1 -0
  339. data/lib/rubygems/optparse/COPYING +56 -0
  340. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  341. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  342. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  343. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  344. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  345. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  346. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  347. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  348. data/lib/rubygems/optparse/lib/optparse.rb +2303 -0
  349. data/lib/rubygems/optparse.rb +3 -0
  350. data/lib/rubygems/package/digest_io.rb +0 -2
  351. data/lib/rubygems/package/file_source.rb +2 -4
  352. data/lib/rubygems/package/io_source.rb +4 -2
  353. data/lib/rubygems/package/old.rb +9 -11
  354. data/lib/rubygems/package/tar_header.rb +54 -56
  355. data/lib/rubygems/package/tar_reader/entry.rb +2 -5
  356. data/lib/rubygems/package/tar_reader.rb +1 -4
  357. data/lib/rubygems/package/tar_writer.rb +8 -18
  358. data/lib/rubygems/package.rb +101 -117
  359. data/lib/rubygems/package_task.rb +5 -11
  360. data/lib/rubygems/path_support.rb +2 -9
  361. data/lib/rubygems/platform.rb +101 -76
  362. data/lib/rubygems/psych_tree.rb +1 -3
  363. data/lib/rubygems/query_utils.rb +351 -0
  364. data/lib/rubygems/rdoc.rb +2 -14
  365. data/lib/rubygems/remote_fetcher.rb +48 -74
  366. data/lib/rubygems/request/connection_pools.rb +6 -10
  367. data/lib/rubygems/request/http_pool.rb +2 -4
  368. data/lib/rubygems/request/https_pool.rb +0 -2
  369. data/lib/rubygems/request.rb +26 -31
  370. data/lib/rubygems/request_set/gem_dependency_api.rb +23 -25
  371. data/lib/rubygems/request_set/lockfile/parser.rb +26 -28
  372. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -7
  373. data/lib/rubygems/request_set/lockfile.rb +17 -21
  374. data/lib/rubygems/request_set.rb +27 -40
  375. data/lib/rubygems/requirement.rb +28 -48
  376. data/lib/rubygems/resolver/activation_request.rb +12 -6
  377. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  378. data/lib/rubygems/resolver/api_set.rb +32 -25
  379. data/lib/rubygems/resolver/api_specification.rb +29 -15
  380. data/lib/rubygems/resolver/best_set.rb +7 -9
  381. data/lib/rubygems/resolver/composed_set.rb +3 -5
  382. data/lib/rubygems/resolver/conflict.rb +12 -14
  383. data/lib/rubygems/resolver/current_set.rb +0 -2
  384. data/lib/rubygems/resolver/dependency_request.rb +3 -5
  385. data/lib/rubygems/resolver/git_set.rb +2 -4
  386. data/lib/rubygems/resolver/git_specification.rb +6 -8
  387. data/lib/rubygems/resolver/index_set.rb +4 -6
  388. data/lib/rubygems/resolver/index_specification.rb +38 -7
  389. data/lib/rubygems/resolver/installed_specification.rb +4 -6
  390. data/lib/rubygems/resolver/installer_set.rb +66 -24
  391. data/lib/rubygems/resolver/local_specification.rb +2 -4
  392. data/lib/rubygems/resolver/lock_set.rb +6 -8
  393. data/lib/rubygems/resolver/lock_specification.rb +4 -6
  394. data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
  395. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  396. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
  397. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  398. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  399. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  400. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  401. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  402. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  403. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  404. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  405. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
  406. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +41 -8
  407. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +76 -8
  408. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  409. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
  410. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  411. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -165
  412. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  413. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  414. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  415. data/lib/rubygems/resolver/molinillo.rb +1 -1
  416. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  417. data/lib/rubygems/resolver/set.rb +0 -3
  418. data/lib/rubygems/resolver/source_set.rb +0 -2
  419. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  420. data/lib/rubygems/resolver/specification.rb +14 -4
  421. data/lib/rubygems/resolver/stats.rb +0 -2
  422. data/lib/rubygems/resolver/vendor_set.rb +1 -3
  423. data/lib/rubygems/resolver/vendor_specification.rb +3 -5
  424. data/lib/rubygems/resolver.rb +53 -51
  425. data/lib/rubygems/s3_uri_signer.rb +7 -15
  426. data/lib/rubygems/safe_yaml.rb +14 -16
  427. data/lib/rubygems/security/policies.rb +11 -11
  428. data/lib/rubygems/security/policy.rb +25 -29
  429. data/lib/rubygems/security/signer.rb +13 -16
  430. data/lib/rubygems/security/trust_dir.rb +4 -5
  431. data/lib/rubygems/security.rb +103 -69
  432. data/lib/rubygems/security_option.rb +7 -7
  433. data/lib/rubygems/source/git.rb +30 -30
  434. data/lib/rubygems/source/installed.rb +1 -3
  435. data/lib/rubygems/source/local.rb +4 -6
  436. data/lib/rubygems/source/lock.rb +0 -2
  437. data/lib/rubygems/source/specific_file.rb +1 -3
  438. data/lib/rubygems/source/vendor.rb +0 -2
  439. data/lib/rubygems/source.rb +44 -38
  440. data/lib/rubygems/source_list.rb +9 -16
  441. data/lib/rubygems/spec_fetcher.rb +49 -48
  442. data/lib/rubygems/specification.rb +338 -295
  443. data/lib/rubygems/specification_policy.rb +112 -61
  444. data/lib/rubygems/stub_specification.rb +21 -28
  445. data/lib/rubygems/text.rb +21 -20
  446. data/lib/rubygems/tsort/.document +1 -0
  447. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  448. data/lib/rubygems/tsort/lib/tsort.rb +454 -0
  449. data/lib/rubygems/tsort.rb +3 -0
  450. data/lib/rubygems/uninstaller.rb +98 -45
  451. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  452. data/lib/rubygems/uri.rb +126 -0
  453. data/lib/rubygems/uri_formatter.rb +2 -3
  454. data/lib/rubygems/user_interaction.rb +43 -54
  455. data/lib/rubygems/util/licenses.rb +115 -10
  456. data/lib/rubygems/util/list.rb +0 -2
  457. data/lib/rubygems/util.rb +18 -12
  458. data/lib/rubygems/validator.rb +6 -8
  459. data/lib/rubygems/version.rb +29 -20
  460. data/lib/rubygems/version_option.rb +11 -5
  461. data/lib/rubygems.rb +192 -289
  462. data/rubygems-update.gemspec +4 -4
  463. data/setup.rb +11 -22
  464. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  465. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  466. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  467. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  468. data/test/rubygems/encrypted_private_key.pem +26 -26
  469. data/{lib/rubygems/test_case.rb → test/rubygems/helper.rb} +380 -314
  470. data/{lib → test}/rubygems/installer_test_case.rb +38 -24
  471. data/{lib → test}/rubygems/package/tar_test_case.rb +4 -6
  472. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  473. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  474. data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
  475. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  476. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
  477. data/test/rubygems/private_ec_key.pem +9 -0
  478. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  479. data/test/rubygems/rubygems_plugin.rb +2 -4
  480. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  481. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +4 -6
  482. data/test/rubygems/test_bundled_ca.rb +43 -50
  483. data/test/rubygems/test_config.rb +5 -7
  484. data/test/rubygems/test_deprecate.rb +87 -10
  485. data/test/rubygems/test_exit.rb +11 -0
  486. data/test/rubygems/test_gem.rb +719 -639
  487. data/test/rubygems/test_gem_available_set.rb +24 -26
  488. data/test/rubygems/test_gem_bundler_version_finder.rb +37 -44
  489. data/test/rubygems/test_gem_command.rb +78 -49
  490. data/test/rubygems/test_gem_command_manager.rb +98 -35
  491. data/test/rubygems/test_gem_commands_build_command.rb +275 -57
  492. data/test/rubygems/test_gem_commands_cert_command.rb +180 -125
  493. data/test/rubygems/test_gem_commands_check_command.rb +9 -11
  494. data/test/rubygems/test_gem_commands_cleanup_command.rb +78 -69
  495. data/test/rubygems/test_gem_commands_contents_command.rb +73 -42
  496. data/test/rubygems/test_gem_commands_dependency_command.rb +38 -40
  497. data/test/rubygems/test_gem_commands_environment_command.rb +60 -38
  498. data/test/rubygems/test_gem_commands_fetch_command.rb +163 -32
  499. data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -14
  500. data/test/rubygems/test_gem_commands_help_command.rb +34 -16
  501. data/test/rubygems/test_gem_commands_info_command.rb +33 -9
  502. data/test/rubygems/test_gem_commands_install_command.rb +401 -198
  503. data/test/rubygems/test_gem_commands_list_command.rb +5 -7
  504. data/test/rubygems/test_gem_commands_lock_command.rb +11 -13
  505. data/test/rubygems/test_gem_commands_mirror.rb +3 -5
  506. data/test/rubygems/test_gem_commands_open_command.rb +16 -19
  507. data/test/rubygems/test_gem_commands_outdated_command.rb +23 -7
  508. data/test/rubygems/test_gem_commands_owner_command.rb +100 -46
  509. data/test/rubygems/test_gem_commands_pristine_command.rb +131 -99
  510. data/test/rubygems/test_gem_commands_push_command.rb +134 -66
  511. data/test/rubygems/test_gem_commands_query_command.rb +91 -91
  512. data/test/rubygems/test_gem_commands_search_command.rb +2 -4
  513. data/test/rubygems/test_gem_commands_server_command.rb +6 -50
  514. data/test/rubygems/test_gem_commands_setup_command.rb +288 -179
  515. data/test/rubygems/test_gem_commands_signin_command.rb +162 -28
  516. data/test/rubygems/test_gem_commands_signout_command.rb +3 -10
  517. data/test/rubygems/test_gem_commands_sources_command.rb +139 -32
  518. data/test/rubygems/test_gem_commands_specification_command.rb +81 -55
  519. data/test/rubygems/test_gem_commands_stale_command.rb +4 -6
  520. data/test/rubygems/test_gem_commands_uninstall_command.rb +80 -82
  521. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -34
  522. data/test/rubygems/test_gem_commands_update_command.rb +335 -88
  523. data/test/rubygems/test_gem_commands_which_command.rb +12 -14
  524. data/test/rubygems/test_gem_commands_yank_command.rb +80 -44
  525. data/test/rubygems/test_gem_config_file.rb +114 -97
  526. data/test/rubygems/test_gem_dependency.rb +87 -87
  527. data/test/rubygems/test_gem_dependency_installer.rb +277 -391
  528. data/test/rubygems/test_gem_dependency_list.rb +57 -59
  529. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -7
  530. data/test/rubygems/test_gem_doctor.rb +73 -47
  531. data/test/rubygems/test_gem_ext_builder.rb +115 -109
  532. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +1 -0
  533. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +243 -0
  534. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +10 -0
  535. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +21 -0
  536. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +10 -0
  537. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/src/lib.rs +27 -0
  538. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +1 -0
  539. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +243 -0
  540. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +10 -0
  541. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +21 -0
  542. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +8 -0
  543. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +39 -0
  544. data/test/rubygems/test_gem_ext_cargo_builder.rb +178 -0
  545. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +33 -0
  546. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +75 -0
  547. data/test/rubygems/test_gem_ext_cmake_builder.rb +31 -38
  548. data/test/rubygems/test_gem_ext_configure_builder.rb +23 -39
  549. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +66 -82
  550. data/test/rubygems/test_gem_ext_rake_builder.rb +49 -32
  551. data/test/rubygems/test_gem_gem_runner.rb +51 -8
  552. data/test/rubygems/test_gem_gemcutter_utilities.rb +87 -76
  553. data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -6
  554. data/test/rubygems/test_gem_indexer.rb +62 -64
  555. data/test/rubygems/test_gem_install_update_options.rb +31 -21
  556. data/test/rubygems/test_gem_installer.rb +798 -491
  557. data/test/rubygems/test_gem_local_remote_options.rb +11 -13
  558. data/test/rubygems/test_gem_name_tuple.rb +4 -6
  559. data/test/rubygems/test_gem_package.rb +318 -283
  560. data/test/rubygems/test_gem_package_old.rb +18 -20
  561. data/test/rubygems/test_gem_package_tar_header.rb +64 -47
  562. data/test/rubygems/test_gem_package_tar_reader.rb +8 -10
  563. data/test/rubygems/test_gem_package_tar_reader_entry.rb +18 -20
  564. data/test/rubygems/test_gem_package_tar_writer.rb +96 -100
  565. data/test/rubygems/test_gem_package_task.rb +58 -25
  566. data/test/rubygems/test_gem_path_support.rb +15 -21
  567. data/test/rubygems/test_gem_platform.rb +354 -201
  568. data/test/rubygems/test_gem_rdoc.rb +19 -21
  569. data/test/rubygems/test_gem_remote_fetcher.rb +376 -337
  570. data/test/rubygems/test_gem_request.rb +114 -86
  571. data/test/rubygems/test_gem_request_connection_pools.rb +30 -34
  572. data/test/rubygems/test_gem_request_set.rb +123 -124
  573. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +222 -226
  574. data/test/rubygems/test_gem_request_set_lockfile.rb +93 -95
  575. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +68 -70
  576. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +136 -138
  577. data/test/rubygems/test_gem_requirement.rb +133 -54
  578. data/test/rubygems/test_gem_resolver.rb +149 -117
  579. data/test/rubygems/test_gem_resolver_activation_request.rb +6 -8
  580. data/test/rubygems/test_gem_resolver_api_set.rb +79 -78
  581. data/test/rubygems/test_gem_resolver_api_specification.rb +47 -49
  582. data/test/rubygems/test_gem_resolver_best_set.rb +43 -22
  583. data/test/rubygems/test_gem_resolver_composed_set.rb +1 -3
  584. data/test/rubygems/test_gem_resolver_conflict.rb +12 -14
  585. data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -17
  586. data/test/rubygems/test_gem_resolver_git_set.rb +22 -24
  587. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -23
  588. data/test/rubygems/test_gem_resolver_index_set.rb +14 -16
  589. data/test/rubygems/test_gem_resolver_index_specification.rb +16 -18
  590. data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -7
  591. data/test/rubygems/test_gem_resolver_installer_set.rb +104 -44
  592. data/test/rubygems/test_gem_resolver_local_specification.rb +7 -9
  593. data/test/rubygems/test_gem_resolver_lock_set.rb +15 -17
  594. data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -19
  595. data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -3
  596. data/test/rubygems/test_gem_resolver_specification.rb +8 -12
  597. data/test/rubygems/test_gem_resolver_vendor_set.rb +9 -11
  598. data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -12
  599. data/test/rubygems/test_gem_security.rb +104 -78
  600. data/test/rubygems/test_gem_security_policy.rb +92 -97
  601. data/test/rubygems/test_gem_security_signer.rb +45 -47
  602. data/test/rubygems/test_gem_security_trust_dir.rb +12 -14
  603. data/test/rubygems/test_gem_silent_ui.rb +46 -42
  604. data/test/rubygems/test_gem_source.rb +53 -52
  605. data/test/rubygems/test_gem_source_fetch_problem.rb +16 -8
  606. data/test/rubygems/test_gem_source_git.rb +69 -69
  607. data/test/rubygems/test_gem_source_installed.rb +16 -18
  608. data/test/rubygems/test_gem_source_list.rb +5 -6
  609. data/test/rubygems/test_gem_source_local.rb +15 -17
  610. data/test/rubygems/test_gem_source_lock.rb +31 -33
  611. data/test/rubygems/test_gem_source_specific_file.rb +18 -20
  612. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  613. data/test/rubygems/test_gem_source_vendor.rb +13 -15
  614. data/test/rubygems/test_gem_spec_fetcher.rb +74 -67
  615. data/test/rubygems/test_gem_specification.rb +888 -1024
  616. data/test/rubygems/test_gem_stream_ui.rb +23 -23
  617. data/test/rubygems/test_gem_stub_specification.rb +39 -57
  618. data/test/rubygems/test_gem_text.rb +8 -4
  619. data/test/rubygems/test_gem_uninstaller.rb +233 -104
  620. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -5
  621. data/test/rubygems/test_gem_uri.rb +39 -0
  622. data/test/rubygems/test_gem_uri_formatter.rb +14 -16
  623. data/test/rubygems/test_gem_util.rb +37 -35
  624. data/test/rubygems/test_gem_validator.rb +10 -12
  625. data/test/rubygems/test_gem_version.rb +31 -31
  626. data/test/rubygems/test_gem_version_option.rb +16 -18
  627. data/test/rubygems/test_kernel.rb +46 -60
  628. data/test/rubygems/test_project_sanity.rb +8 -3
  629. data/test/rubygems/test_remote_fetch_error.rb +7 -9
  630. data/test/rubygems/test_require.rb +240 -167
  631. data/test/rubygems/test_rubygems.rb +74 -0
  632. data/{lib/rubygems/test_utilities.rb → test/rubygems/utilities.rb} +30 -39
  633. data/test/test_changelog_generator.rb +17 -0
  634. metadata +158 -146
  635. data/.bundle/config +0 -2
  636. data/.rubocop.yml +0 -91
  637. data/Gemfile +0 -8
  638. data/Gemfile.lock +0 -43
  639. data/Rakefile +0 -428
  640. data/bundler/CODE_OF_CONDUCT.md +0 -136
  641. data/bundler/lib/bundler/gemdeps.rb +0 -29
  642. data/bundler/lib/bundler/psyched_yaml.rb +0 -37
  643. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
  644. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  645. data/bundler/man/bundle-add.1.txt +0 -58
  646. data/bundler/man/bundle-binstubs.1.txt +0 -48
  647. data/bundler/man/bundle-cache.1.txt +0 -78
  648. data/bundler/man/bundle-check.1.txt +0 -33
  649. data/bundler/man/bundle-clean.1.txt +0 -26
  650. data/bundler/man/bundle-config.1.txt +0 -528
  651. data/bundler/man/bundle-doctor.1.txt +0 -44
  652. data/bundler/man/bundle-exec.1.txt +0 -178
  653. data/bundler/man/bundle-gem.1.txt +0 -91
  654. data/bundler/man/bundle-info.1.txt +0 -21
  655. data/bundler/man/bundle-init.1.txt +0 -34
  656. data/bundler/man/bundle-inject.1.txt +0 -32
  657. data/bundler/man/bundle-install.1.txt +0 -401
  658. data/bundler/man/bundle-list.1.txt +0 -43
  659. data/bundler/man/bundle-lock.1.txt +0 -93
  660. data/bundler/man/bundle-open.1.txt +0 -29
  661. data/bundler/man/bundle-outdated.1.txt +0 -131
  662. data/bundler/man/bundle-platform.1.txt +0 -57
  663. data/bundler/man/bundle-pristine.1.txt +0 -44
  664. data/bundler/man/bundle-remove.1.txt +0 -34
  665. data/bundler/man/bundle-show.1.txt +0 -27
  666. data/bundler/man/bundle-update.1.txt +0 -390
  667. data/bundler/man/bundle-viz.1.txt +0 -39
  668. data/bundler/man/bundle.1.txt +0 -116
  669. data/bundler/man/gemfile.5.txt +0 -649
  670. data/lib/rubygems/psych_additions.rb +0 -10
  671. data/lib/rubygems/server.rb +0 -879
  672. data/lib/rubygems/source_local.rb +0 -7
  673. data/lib/rubygems/source_specific_file.rb +0 -6
  674. data/lib/rubygems/syck_hack.rb +0 -79
  675. data/lib/rubygems/uri_parser.rb +0 -36
  676. data/lib/rubygems/uri_parsing.rb +0 -23
  677. data/lib/ubygems.rb +0 -14
  678. data/test/rubygems/bogussources.rb +0 -9
  679. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  680. data/test/rubygems/test_gem_server.rb +0 -612
  681. data/tmp/.keep +0 -0
  682. data/util/CL2notes +0 -55
  683. data/util/bisect +0 -10
  684. data/util/ci.sh +0 -62
  685. data/util/cops/deprecations.rb +0 -52
  686. data/util/create_certs.rb +0 -171
  687. data/util/create_certs.sh +0 -27
  688. data/util/create_encrypted_key.rb +0 -16
  689. data/util/generate_spdx_license_list.rb +0 -63
  690. data/util/patch_with_prs.rb +0 -77
  691. data/util/rubocop +0 -8
  692. data/util/update_bundled_ca_certificates.rb +0 -137
  693. data/util/update_changelog.rb +0 -64
  694. /data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  695. /data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  696. /data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  697. /data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  698. /data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
  699. /data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  700. /data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  701. /data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  702. /data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  703. /data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
@@ -1,13 +1,14 @@
1
1
  # frozen_string_literal: true
2
- require 'rubygems/test_case'
3
- require 'rubygems/commands/signin_command'
4
- require 'rubygems/installer'
2
+ require_relative "helper"
3
+ require "rubygems/commands/signin_command"
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,36 +16,43 @@ 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 }
26
+ assert_match %r{Signed in.}, sign_in_ui.output
27
+ end
28
+
29
+ def test_execute_when_not_already_signed_in_and_not_preexisting_credentials_folder
30
+ FileUtils.rm Gem.configuration.credentials_path
31
+
32
+ sign_in_ui = util_capture { @cmd.execute }
25
33
  assert_match %r{Signed in.}, sign_in_ui.output
26
34
  end
27
35
 
28
36
  def test_execute_when_already_signed_in_with_same_host
29
- host = 'http://some-gemcutter-compatible-host.org'
37
+ host = "http://some-gemcutter-compatible-host.org"
30
38
 
31
39
  util_capture(nil, host) { @cmd.execute }
32
- old_credentials = YAML.load_file Gem.configuration.credentials_path
40
+ old_credentials = load_yaml_file Gem.configuration.credentials_path
33
41
 
34
42
  util_capture(nil, host) { @cmd.execute }
35
- new_credentials = YAML.load_file Gem.configuration.credentials_path
43
+ new_credentials = load_yaml_file Gem.configuration.credentials_path
36
44
 
37
45
  assert_equal old_credentials[host], new_credentials[host]
38
46
  end
39
47
 
40
48
  def test_execute_when_already_signed_in_with_different_host
41
- api_key = 'a5fdbb6ba150cbb83aad2bb2fede64cf04045xxxx'
49
+ api_key = "a5fdbb6ba150cbb83aad2bb2fede64cf04045xxxx"
42
50
 
43
51
  util_capture(nil, nil, api_key) { @cmd.execute }
44
- host = 'http://some-gemcutter-compatible-host.org'
52
+ host = "http://some-gemcutter-compatible-host.org"
45
53
 
46
54
  util_capture(nil, host, api_key) { @cmd.execute }
47
- credentials = YAML.load_file Gem.configuration.credentials_path
55
+ credentials = load_yaml_file Gem.configuration.credentials_path
48
56
 
49
57
  assert_equal credentials[:rubygems_api_key], api_key
50
58
 
@@ -52,42 +60,169 @@ class TestGemCommandsSigninCommand < Gem::TestCase
52
60
  end
53
61
 
54
62
  def test_execute_with_host_supplied
55
- host = 'http://some-gemcutter-compatible-host.org'
63
+ host = "http://some-gemcutter-compatible-host.org"
56
64
 
57
65
  sign_in_ui = util_capture(nil, host) { @cmd.execute }
58
66
  assert_match %r{Enter your #{host} credentials.}, sign_in_ui.output
59
67
  assert_match %r{Signed in.}, sign_in_ui.output
60
68
 
61
- api_key = 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903'
62
- credentials = YAML.load_file Gem.configuration.credentials_path
69
+ api_key = "a5fdbb6ba150cbb83aad2bb2fede64cf040453903"
70
+ credentials = load_yaml_file Gem.configuration.credentials_path
63
71
  assert_equal api_key, credentials[host]
64
72
  end
65
73
 
66
74
  def test_execute_with_valid_creds_set_for_default_host
67
- util_capture {@cmd.execute}
75
+ util_capture { @cmd.execute }
76
+
77
+ api_key = "a5fdbb6ba150cbb83aad2bb2fede64cf040453903"
78
+ credentials = load_yaml_file Gem.configuration.credentials_path
79
+
80
+ assert_equal api_key, credentials[:rubygems_api_key]
81
+ end
82
+
83
+ def test_execute_with_key_name_and_scope
84
+ email = "you@example.com"
85
+ password = "secret"
86
+ api_key = "1234"
87
+ fetcher = Gem::RemoteFetcher.fetcher
88
+
89
+ key_name_ui = Gem::MockGemUi.new "#{email}\n#{password}\ntest-key\n\ny\n\n\n\n\n\n"
90
+ util_capture(key_name_ui, nil, api_key, fetcher) { @cmd.execute }
91
+
92
+ user = ENV["USER"] || ENV["USERNAME"]
68
93
 
69
- api_key = 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903'
70
- credentials = YAML.load_file Gem.configuration.credentials_path
94
+ assert_match "API Key name [#{Socket.gethostname}-#{user}", key_name_ui.output
95
+ assert_match "index_rubygems [yN]", key_name_ui.output
96
+ assert_match "push_rubygem [yN]", key_name_ui.output
97
+ assert_match "yank_rubygem [yN]", key_name_ui.output
98
+ assert_match "add_owner [yN]", key_name_ui.output
99
+ assert_match "remove_owner [yN]", key_name_ui.output
100
+ assert_match "access_webhooks [yN]", key_name_ui.output
101
+ assert_match "show_dashboard [yN]", key_name_ui.output
102
+ assert_equal "name=test-key&push_rubygem=true", fetcher.last_request.body
71
103
 
104
+ credentials = load_yaml_file Gem.configuration.credentials_path
72
105
  assert_equal api_key, credentials[:rubygems_api_key]
73
106
  end
74
107
 
108
+ def test_execute_with_key_name_scope_and_mfa_level_of_ui_only
109
+ email = "you@example.com"
110
+ password = "secret"
111
+ api_key = "1234"
112
+ fetcher = Gem::RemoteFetcher.fetcher
113
+ mfa_level = "ui_only"
114
+
115
+ key_name_ui = Gem::MockGemUi.new "#{email}\n#{password}\ntest-key\n\ny\n\n\n\n\n\ny"
116
+ util_capture(key_name_ui, nil, api_key, fetcher, mfa_level) { @cmd.execute }
117
+
118
+ user = ENV["USER"] || ENV["USERNAME"]
119
+
120
+ assert_match "API Key name [#{Socket.gethostname}-#{user}", key_name_ui.output
121
+ assert_match "index_rubygems [yN]", key_name_ui.output
122
+ assert_match "push_rubygem [yN]", key_name_ui.output
123
+ assert_match "yank_rubygem [yN]", key_name_ui.output
124
+ assert_match "add_owner [yN]", key_name_ui.output
125
+ assert_match "remove_owner [yN]", key_name_ui.output
126
+ assert_match "access_webhooks [yN]", key_name_ui.output
127
+ assert_match "show_dashboard [yN]", key_name_ui.output
128
+ assert_match "Would you like to enable MFA for this key? (strongly recommended) [yn]", key_name_ui.output
129
+ assert_equal "name=test-key&push_rubygem=true&mfa=true", fetcher.last_request.body
130
+
131
+ credentials = load_yaml_file Gem.configuration.credentials_path
132
+ assert_equal api_key, credentials[:rubygems_api_key]
133
+ end
134
+
135
+ def test_execute_with_key_name_scope_and_mfa_level_of_gem_signin
136
+ email = "you@example.com"
137
+ password = "secret"
138
+ api_key = "1234"
139
+ fetcher = Gem::RemoteFetcher.fetcher
140
+ mfa_level = "ui_and_gem_signin"
141
+
142
+ key_name_ui = Gem::MockGemUi.new "#{email}\n#{password}\ntest-key\n\ny\n\n\n\n\n\ny"
143
+ util_capture(key_name_ui, nil, api_key, fetcher, mfa_level) { @cmd.execute }
144
+
145
+ user = ENV["USER"] || ENV["USERNAME"]
146
+
147
+ assert_match "API Key name [#{Socket.gethostname}-#{user}", key_name_ui.output
148
+ assert_match "index_rubygems [yN]", key_name_ui.output
149
+ assert_match "push_rubygem [yN]", key_name_ui.output
150
+ assert_match "yank_rubygem [yN]", key_name_ui.output
151
+ assert_match "add_owner [yN]", key_name_ui.output
152
+ assert_match "remove_owner [yN]", key_name_ui.output
153
+ assert_match "access_webhooks [yN]", key_name_ui.output
154
+ assert_match "show_dashboard [yN]", key_name_ui.output
155
+ assert_match "Would you like to enable MFA for this key? (strongly recommended) [yn]", key_name_ui.output
156
+ assert_equal "name=test-key&push_rubygem=true&mfa=true", fetcher.last_request.body
157
+
158
+ credentials = load_yaml_file Gem.configuration.credentials_path
159
+ assert_equal api_key, credentials[:rubygems_api_key]
160
+ end
161
+
162
+ def test_execute_with_warnings
163
+ email = "you@example.com"
164
+ password = "secret"
165
+ api_key = "1234"
166
+ fetcher = Gem::RemoteFetcher.fetcher
167
+ mfa_level = "disabled"
168
+ warning = "/[WARNING/] For protection of your account and gems"
169
+
170
+ key_name_ui = Gem::MockGemUi.new "#{email}\n#{password}\ntest-key\n\ny\n\n\n\n\n\ny"
171
+ util_capture(key_name_ui, nil, api_key, fetcher, mfa_level, warning) { @cmd.execute }
172
+
173
+ assert_match warning, key_name_ui.output
174
+ end
175
+
176
+ def test_execute_on_gemserver_without_profile_me_endpoint
177
+ host = "http://some-gemcutter-compatible-host.org"
178
+
179
+ email = "you@example.com"
180
+ password = "secret"
181
+ api_key = "1234"
182
+ fetcher = Gem::RemoteFetcher.fetcher
183
+
184
+ key_name_ui = Gem::MockGemUi.new "#{email}\n#{password}\ntest-key\n\ny\n\n\n\n\n\ny"
185
+
186
+ # Set the expected response for the Web-API supplied
187
+ ENV["RUBYGEMS_HOST"] = host
188
+ data_key = "#{ENV['RUBYGEMS_HOST']}/api/v1/api_key"
189
+ fetcher.data[data_key] = [api_key, 200, "OK"]
190
+
191
+ use_ui key_name_ui do
192
+ @cmd.execute
193
+ end
194
+
195
+ user = ENV["USER"] || ENV["USERNAME"]
196
+
197
+ assert_match "API Key name [#{Socket.gethostname}-#{user}", key_name_ui.output
198
+ assert_match "index_rubygems [yN]", key_name_ui.output
199
+ assert_match "push_rubygem [yN]", key_name_ui.output
200
+ assert_match "yank_rubygem [yN]", key_name_ui.output
201
+ assert_match "add_owner [yN]", key_name_ui.output
202
+ assert_match "remove_owner [yN]", key_name_ui.output
203
+ assert_match "access_webhooks [yN]", key_name_ui.output
204
+ assert_match "show_dashboard [yN]", key_name_ui.output
205
+ assert_equal "name=test-key&push_rubygem=true", fetcher.last_request.body
206
+ end
207
+
75
208
  # Utility method to capture IO/UI within the block passed
76
209
 
77
- def util_capture(ui_stub = nil, host = nil, api_key = nil)
78
- api_key ||= 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903'
79
- response = [api_key, 200, 'OK']
80
- email = 'you@example.com'
81
- password = 'secret'
82
- fetcher = Gem::FakeFetcher.new
210
+ def util_capture(ui_stub = nil, host = nil, api_key = nil, fetcher = Gem::FakeFetcher.new, mfa_level = "disabled", warning = nil)
211
+ api_key ||= "a5fdbb6ba150cbb83aad2bb2fede64cf040453903"
212
+ response = [api_key, 200, "OK"]
213
+ profile_response = [ "mfa: #{mfa_level}\nwarning: #{warning}" , 200, "OK"]
214
+ email = "you@example.com"
215
+ password = "secret"
83
216
 
84
217
  # Set the expected response for the Web-API supplied
85
- ENV['RUBYGEMS_HOST'] = host || Gem::DEFAULT_HOST
218
+ ENV["RUBYGEMS_HOST"] = host || Gem::DEFAULT_HOST
86
219
  data_key = "#{ENV['RUBYGEMS_HOST']}/api/v1/api_key"
87
220
  fetcher.data[data_key] = response
221
+ profile = "#{ENV['RUBYGEMS_HOST']}/api/v1/profile/me.yaml"
222
+ fetcher.data[profile] = profile_response
88
223
  Gem::RemoteFetcher.fetcher = fetcher
89
224
 
90
- sign_in_ui = ui_stub || Gem::MockGemUi.new("#{email}\n#{password}\n")
225
+ sign_in_ui = ui_stub || Gem::MockGemUi.new("#{email}\n#{password}\n\n\n\n\n\n\n\n\n")
91
226
 
92
227
  use_ui sign_in_ui do
93
228
  yield
@@ -95,5 +230,4 @@ class TestGemCommandsSigninCommand < Gem::TestCase
95
230
 
96
231
  sign_in_ui
97
232
  end
98
-
99
233
  end
@@ -1,21 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rubygems/test_case'
4
- require 'rubygems/commands/signout_command'
5
- require 'rubygems/installer'
3
+ require_relative "helper"
4
+ require "rubygems/commands/signout_command"
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
@@ -1,9 +1,8 @@
1
1
  # frozen_string_literal: true
2
- require 'rubygems/test_case'
3
- require 'rubygems/commands/sources_command'
2
+ require_relative "helper"
3
+ require "rubygems/commands/sources_command"
4
4
 
5
5
  class TestGemCommandsSourcesCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
 
@@ -21,7 +20,7 @@ class TestGemCommandsSourcesCommand < Gem::TestCase
21
20
  end
22
21
 
23
22
  def test_initialize_proxy
24
- assert @cmd.handles?(['--http-proxy', 'http://proxy.example.com'])
23
+ assert @cmd.handles?(["--http-proxy", "http://proxy.example.com"])
25
24
  end
26
25
 
27
26
  def test_execute
@@ -38,12 +37,12 @@ class TestGemCommandsSourcesCommand < Gem::TestCase
38
37
  EOF
39
38
 
40
39
  assert_equal expected, @ui.output
41
- assert_equal '', @ui.error
40
+ assert_equal "", @ui.error
42
41
  end
43
42
 
44
43
  def test_execute_add
45
44
  spec_fetcher do |fetcher|
46
- fetcher.spec 'a', 1
45
+ fetcher.spec "a", 1
47
46
  end
48
47
 
49
48
  specs = Gem::Specification.map do |spec|
@@ -71,7 +70,7 @@ class TestGemCommandsSourcesCommand < Gem::TestCase
71
70
  EOF
72
71
 
73
72
  assert_equal expected, @ui.output
74
- assert_equal '', @ui.error
73
+ assert_equal "", @ui.error
75
74
  end
76
75
 
77
76
  def test_execute_add_allow_typo_squatting_source
@@ -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
 
@@ -132,8 +161,7 @@ class TestGemCommandsSourcesCommand < Gem::TestCase
132
161
  ui = Gem::MockGemUi.new("n")
133
162
 
134
163
  use_ui ui do
135
-
136
- assert_raises Gem::MockGemUi::TermError do
164
+ assert_raise Gem::MockGemUi::TermError do
137
165
  @cmd.execute
138
166
  end
139
167
  end
@@ -153,13 +181,13 @@ class TestGemCommandsSourcesCommand < Gem::TestCase
153
181
 
154
182
  uri = "http://beta-gems.example.com/specs.#{@marshal_version}.gz"
155
183
  @fetcher.data[uri] = proc do
156
- raise Gem::RemoteFetcher::FetchError.new('it died', uri)
184
+ raise Gem::RemoteFetcher::FetchError.new("it died", uri)
157
185
  end
158
186
 
159
187
  @cmd.handle_options %w[--add http://beta-gems.example.com]
160
188
 
161
189
  use_ui @ui do
162
- assert_raises Gem::MockGemUi::TermError do
190
+ assert_raise Gem::MockGemUi::TermError do
163
191
  @cmd.execute
164
192
  end
165
193
  end
@@ -170,7 +198,57 @@ Error fetching http://beta-gems.example.com:
170
198
  EOF
171
199
 
172
200
  assert_equal expected, @ui.output
173
- assert_equal '', @ui.error
201
+ assert_equal "", @ui.error
202
+ end
203
+
204
+ def test_execute_add_existent_source_invalid_uri
205
+ spec_fetcher
206
+
207
+ uri = "https://u:p@example.com/specs.#{@marshal_version}.gz"
208
+
209
+ @cmd.handle_options %w[--add https://u:p@example.com]
210
+ @fetcher.data[uri] = proc do
211
+ raise Gem::RemoteFetcher::FetchError.new("it died", uri)
212
+ end
213
+
214
+ use_ui @ui do
215
+ assert_raise Gem::MockGemUi::TermError do
216
+ @cmd.execute
217
+ end
218
+ end
219
+
220
+ expected = <<-EOF
221
+ Error fetching https://u:REDACTED@example.com:
222
+ \tit died (https://u:REDACTED@example.com/specs.#{@marshal_version}.gz)
223
+ EOF
224
+
225
+ assert_equal expected, @ui.output
226
+ assert_equal "", @ui.error
227
+ end
228
+
229
+ def test_execute_add_existent_source_invalid_uri_with_error_by_chance_including_the_uri_password
230
+ spec_fetcher
231
+
232
+ uri = "https://u:secret@example.com/specs.#{@marshal_version}.gz"
233
+
234
+ @cmd.handle_options %w[--add https://u:secret@example.com]
235
+ @fetcher.data[uri] = proc do
236
+ raise Gem::RemoteFetcher::FetchError.new("it secretly died", uri)
237
+ end
238
+
239
+ use_ui @ui do
240
+ assert_raise Gem::MockGemUi::TermError do
241
+ @cmd.execute
242
+ end
243
+ end
244
+
245
+ expected = <<-EOF
246
+ Error fetching https://u:REDACTED@example.com:
247
+ \tit secretly died (https://u:REDACTED@example.com/specs.#{@marshal_version}.gz)
248
+ EOF
249
+
250
+ assert_equal expected, @ui.output
251
+ assert_equal "", @ui.error
174
252
  end
175
253
 
176
254
  def test_execute_add_redundant_source
@@ -189,7 +267,7 @@ source #{@gem_repo} already present in the cache
189
267
  EOF
190
268
 
191
269
  assert_equal expected, @ui.output
192
- assert_equal '', @ui.error
270
+ assert_equal "", @ui.error
193
271
  end
194
272
 
195
273
  def test_execute_add_redundant_source_trailing_slash
@@ -209,7 +287,7 @@ source #{@gem_repo} already present in the cache
209
287
  EOF
210
288
 
211
289
  assert_equal expected, @ui.output
212
- assert_equal '', @ui.error
290
+ assert_equal "", @ui.error
213
291
 
214
292
  # Re-add pre-existing gem source (w/o slash)
215
293
  repo_without_slash = "http://gems.example.com"
@@ -226,7 +304,7 @@ http://gems.example.com added to sources
226
304
  EOF
227
305
 
228
306
  assert_equal expected, @ui.output
229
- assert_equal '', @ui.error
307
+ assert_equal "", @ui.error
230
308
 
231
309
  # Re-add original gem source (w/ slash)
232
310
  @cmd.handle_options %W[--add #{repo_with_slash}]
@@ -243,14 +321,14 @@ source http://gems.example.com/ already present in the cache
243
321
  EOF
244
322
 
245
323
  assert_equal expected, @ui.output
246
- assert_equal '', @ui.error
324
+ assert_equal "", @ui.error
247
325
  end
248
326
 
249
327
  def test_execute_add_http_rubygems_org
250
- http_rubygems_org = 'http://rubygems.org/'
328
+ http_rubygems_org = "http://rubygems.org/"
251
329
 
252
330
  spec_fetcher do |fetcher|
253
- fetcher.spec 'a', 1
331
+ fetcher.spec "a", 1
254
332
  end
255
333
 
256
334
  specs = Gem::Specification.map do |spec|
@@ -270,7 +348,7 @@ source http://gems.example.com/ already present in the cache
270
348
  ui = Gem::MockGemUi.new "n"
271
349
 
272
350
  use_ui ui do
273
- assert_raises Gem::MockGemUi::TermError do
351
+ assert_raise Gem::MockGemUi::TermError do
274
352
  @cmd.execute
275
353
  end
276
354
  end
@@ -284,11 +362,41 @@ source http://gems.example.com/ already present in the cache
284
362
  assert_empty @ui.error
285
363
  end
286
364
 
365
+ def test_execute_add_http_rubygems_org_forced
366
+ rubygems_org = "http://rubygems.org"
367
+
368
+ spec_fetcher do |fetcher|
369
+ fetcher.spec("a", 1)
370
+ end
371
+
372
+ specs = Gem::Specification.map do |spec|
373
+ [spec.name, spec.version, spec.original_platform]
374
+ end
375
+
376
+ specs_dump_gz = StringIO.new
377
+ Zlib::GzipWriter.wrap(specs_dump_gz) do |io|
378
+ Marshal.dump(specs, io)
379
+ end
380
+
381
+ @fetcher.data["#{rubygems_org}/specs.#{@marshal_version}.gz"] = specs_dump_gz.string
382
+ @cmd.handle_options %W[--force --add #{rubygems_org}]
383
+
384
+ @cmd.execute
385
+
386
+ expected = "http://rubygems.org added to sources\n"
387
+ assert_equal expected, ui.output
388
+
389
+ source = Gem::Source.new(rubygems_org)
390
+ assert Gem.sources.include?(source)
391
+
392
+ assert_empty ui.error
393
+ end
394
+
287
395
  def test_execute_add_https_rubygems_org
288
- https_rubygems_org = 'https://rubygems.org/'
396
+ https_rubygems_org = "https://rubygems.org/"
289
397
 
290
398
  spec_fetcher do |fetcher|
291
- fetcher.spec 'a', 1
399
+ fetcher.spec "a", 1
292
400
  end
293
401
 
294
402
  specs = Gem::Specification.map do |spec|
@@ -308,7 +416,7 @@ source http://gems.example.com/ already present in the cache
308
416
  ui = Gem::MockGemUi.new "n"
309
417
 
310
418
  use_ui ui do
311
- assert_raises Gem::MockGemUi::TermError do
419
+ assert_raise Gem::MockGemUi::TermError do
312
420
  @cmd.execute
313
421
  end
314
422
  end
@@ -326,7 +434,7 @@ source http://gems.example.com/ already present in the cache
326
434
  @cmd.handle_options %w[--add beta-gems.example.com]
327
435
 
328
436
  use_ui @ui do
329
- assert_raises Gem::MockGemUi::TermError do
437
+ assert_raise Gem::MockGemUi::TermError do
330
438
  @cmd.execute
331
439
  end
332
440
  end
@@ -338,7 +446,7 @@ beta-gems.example.com is not a URI
338
446
  EOF
339
447
 
340
448
  assert_equal expected, @ui.output
341
- assert_equal '', @ui.error
449
+ assert_equal "", @ui.error
342
450
  end
343
451
 
344
452
  def test_execute_clear_all
@@ -353,10 +461,10 @@ beta-gems.example.com is not a URI
353
461
  EOF
354
462
 
355
463
  assert_equal expected, @ui.output
356
- assert_equal '', @ui.error
464
+ assert_equal "", @ui.error
357
465
 
358
466
  dir = Gem.spec_cache_dir
359
- refute File.exist?(dir), 'cache dir removed'
467
+ refute File.exist?(dir), "cache dir removed"
360
468
  end
361
469
 
362
470
  def test_execute_list
@@ -373,7 +481,7 @@ beta-gems.example.com is not a URI
373
481
  EOF
374
482
 
375
483
  assert_equal expected, @ui.output
376
- assert_equal '', @ui.error
484
+ assert_equal "", @ui.error
377
485
  end
378
486
 
379
487
  def test_execute_remove
@@ -386,7 +494,7 @@ beta-gems.example.com is not a URI
386
494
  expected = "#{@gem_repo} removed from sources\n"
387
495
 
388
496
  assert_equal expected, @ui.output
389
- assert_equal '', @ui.error
497
+ assert_equal "", @ui.error
390
498
  end
391
499
 
392
500
  def test_execute_remove_no_network
@@ -405,14 +513,14 @@ beta-gems.example.com is not a URI
405
513
  expected = "#{@gem_repo} removed from sources\n"
406
514
 
407
515
  assert_equal expected, @ui.output
408
- assert_equal '', @ui.error
516
+ assert_equal "", @ui.error
409
517
  end
410
518
 
411
519
  def test_execute_update
412
520
  @cmd.handle_options %w[--update]
413
521
 
414
522
  spec_fetcher do |fetcher|
415
- fetcher.gem 'a', 1
523
+ fetcher.gem "a", 1
416
524
  end
417
525
 
418
526
  use_ui @ui do
@@ -420,7 +528,6 @@ beta-gems.example.com is not a URI
420
528
  end
421
529
 
422
530
  assert_equal "source cache successfully updated\n", @ui.output
423
- assert_equal '', @ui.error
531
+ assert_equal "", @ui.error
424
532
  end
425
-
426
533
  end