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,11 +1,10 @@
1
1
  # frozen_string_literal: true
2
- require 'rubygems/test_case'
3
- require 'rubygems/commands/install_command'
4
- require 'rubygems/request_set'
5
- require 'rubygems/rdoc'
2
+ require_relative "helper"
3
+ require "rubygems/commands/install_command"
4
+ require "rubygems/request_set"
5
+ require "rubygems/rdoc"
6
6
 
7
7
  class TestGemCommandsInstallCommand < Gem::TestCase
8
-
9
8
  def setup
10
9
  super
11
10
  common_installer_setup
@@ -31,51 +30,51 @@ class TestGemCommandsInstallCommand < Gem::TestCase
31
30
 
32
31
  def test_execute_exclude_prerelease
33
32
  spec_fetcher do |fetcher|
34
- fetcher.gem 'a', 2
35
- fetcher.gem 'a', '2.pre'
33
+ fetcher.gem "a", 2
34
+ fetcher.gem "a", "2.pre"
36
35
  end
37
36
 
38
37
  @cmd.options[:args] = %w[a]
39
38
 
40
39
  use_ui @ui do
41
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
40
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
42
41
  @cmd.execute
43
42
  end
44
43
  end
45
44
 
46
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
45
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
47
46
  end
48
47
 
49
48
  def test_execute_explicit_version_includes_prerelease
50
49
  specs = spec_fetcher do |fetcher|
51
- fetcher.gem 'a', 2
52
- fetcher.gem 'a', '2.a'
50
+ fetcher.gem "a", 2
51
+ fetcher.gem "a", "2.a"
53
52
  end
54
53
 
55
- a2_pre = specs['a-2.a']
54
+ a2_pre = specs["a-2.a"]
56
55
 
57
- @cmd.handle_options [a2_pre.name, '--version', a2_pre.version.to_s,
56
+ @cmd.handle_options [a2_pre.name, "--version", a2_pre.version.to_s,
58
57
  "--no-document"]
59
58
  assert @cmd.options[:prerelease]
60
59
  assert @cmd.options[:version].satisfied_by?(a2_pre.version)
61
60
 
62
61
  use_ui @ui do
63
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
62
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
64
63
  @cmd.execute
65
64
  end
66
65
  end
67
66
 
68
- assert_equal %w[a-2.a], @cmd.installed_specs.map { |spec| spec.full_name }
67
+ assert_equal %w[a-2.a], @cmd.installed_specs.map {|spec| spec.full_name }
69
68
  end
70
69
 
71
70
  def test_execute_local
72
71
  specs = spec_fetcher do |fetcher|
73
- fetcher.gem 'a', 2
72
+ fetcher.gem "a", 2
74
73
  end
75
74
 
76
75
  @cmd.options[:domain] = :local
77
76
 
78
- FileUtils.mv specs['a-2'].cache_file, @tempdir
77
+ FileUtils.mv specs["a-2"].cache_file, @tempdir
79
78
 
80
79
  @cmd.options[:args] = %w[a]
81
80
 
@@ -83,7 +82,7 @@ class TestGemCommandsInstallCommand < Gem::TestCase
83
82
  orig_dir = Dir.pwd
84
83
  begin
85
84
  Dir.chdir @tempdir
86
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
85
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
87
86
  @cmd.execute
88
87
  end
89
88
  ensure
@@ -91,27 +90,27 @@ class TestGemCommandsInstallCommand < Gem::TestCase
91
90
  end
92
91
  end
93
92
 
94
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
93
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
95
94
 
96
95
  assert_match "1 gem installed", @ui.output
97
96
  end
98
97
 
99
98
  def test_execute_local_dependency_nonexistent
100
99
  specs = spec_fetcher do |fetcher|
101
- fetcher.gem 'foo', 2, 'bar' => '0.5'
100
+ fetcher.gem "foo", 2, "bar" => "0.5"
102
101
  end
103
102
 
104
103
  @cmd.options[:domain] = :local
105
104
 
106
- FileUtils.mv specs['foo-2'].cache_file, @tempdir
105
+ FileUtils.mv specs["foo-2"].cache_file, @tempdir
107
106
 
108
- @cmd.options[:args] = ['foo']
107
+ @cmd.options[:args] = ["foo"]
109
108
 
110
109
  use_ui @ui do
111
110
  orig_dir = Dir.pwd
112
111
  begin
113
112
  Dir.chdir @tempdir
114
- e = assert_raises Gem::MockGemUi::TermError do
113
+ e = assert_raise Gem::MockGemUi::TermError do
115
114
  @cmd.execute
116
115
  end
117
116
  assert_equal 2, e.exit_code
@@ -129,21 +128,21 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
129
128
 
130
129
  def test_execute_local_dependency_nonexistent_ignore_dependencies
131
130
  specs = spec_fetcher do |fetcher|
132
- fetcher.gem 'foo', 2, 'bar' => '0.5'
131
+ fetcher.gem "foo", 2, "bar" => "0.5"
133
132
  end
134
133
 
135
134
  @cmd.options[:domain] = :local
136
135
  @cmd.options[:ignore_dependencies] = true
137
136
 
138
- FileUtils.mv specs['foo-2'].cache_file, @tempdir
137
+ FileUtils.mv specs["foo-2"].cache_file, @tempdir
139
138
 
140
- @cmd.options[:args] = ['foo']
139
+ @cmd.options[:args] = ["foo"]
141
140
 
142
141
  use_ui @ui do
143
142
  orig_dir = Dir.pwd
144
143
  begin
145
144
  Dir.chdir orig_dir
146
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
145
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
147
146
  @cmd.execute
148
147
  end
149
148
  ensure
@@ -156,16 +155,16 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
156
155
 
157
156
  def test_execute_local_transitive_prerelease
158
157
  specs = spec_fetcher do |fetcher|
159
- fetcher.download 'a', 2, 'b' => "2.a", 'c' => '3'
160
- fetcher.download 'b', '2.a'
161
- fetcher.download 'c', '3'
158
+ fetcher.download "a", 2, "b" => "2.a", "c" => "3"
159
+ fetcher.download "b", "2.a"
160
+ fetcher.download "c", "3"
162
161
  end
163
162
 
164
163
  @cmd.options[:domain] = :local
165
164
 
166
- FileUtils.mv specs['a-2'].cache_file, @tempdir
167
- FileUtils.mv specs['b-2.a'].cache_file, @tempdir
168
- FileUtils.mv specs['c-3'].cache_file, @tempdir
165
+ FileUtils.mv specs["a-2"].cache_file, @tempdir
166
+ FileUtils.mv specs["b-2.a"].cache_file, @tempdir
167
+ FileUtils.mv specs["c-3"].cache_file, @tempdir
169
168
 
170
169
  @cmd.options[:args] = %w[a]
171
170
 
@@ -174,7 +173,7 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
174
173
  begin
175
174
  Dir.chdir @tempdir
176
175
  FileUtils.rm_r [@gemhome, "gems"]
177
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
176
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
178
177
  @cmd.execute
179
178
  end
180
179
  ensure
@@ -182,22 +181,22 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
182
181
  end
183
182
  end
184
183
 
185
- assert_equal %w[a-2 b-2.a c-3], @cmd.installed_specs.map { |spec| spec.full_name }.sort
184
+ assert_equal %w[a-2 b-2.a c-3], @cmd.installed_specs.map {|spec| spec.full_name }.sort
186
185
 
187
186
  assert_match "3 gems installed", @ui.output
188
187
  end
189
188
 
190
189
  def test_execute_no_user_install
191
- skip 'skipped on MS Windows (chmod has no effect)' if win_platform?
192
- skip 'skipped in root privilege' if Process.uid.zero?
190
+ pend "skipped on MS Windows (chmod has no effect)" if win_platform?
191
+ pend "skipped in root privilege" if Process.uid.zero?
193
192
 
194
193
  specs = spec_fetcher do |fetcher|
195
- fetcher.gem 'a', 2
194
+ fetcher.gem "a", 2
196
195
  end
197
196
 
198
197
  @cmd.options[:user_install] = false
199
198
 
200
- FileUtils.mv specs['a-2'].cache_file, @tempdir
199
+ FileUtils.mv specs["a-2"].cache_file, @tempdir
201
200
 
202
201
  @cmd.options[:args] = %w[a]
203
202
 
@@ -208,7 +207,7 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
208
207
  FileUtils.chmod 0555, @gemhome
209
208
 
210
209
  Dir.chdir @tempdir
211
- assert_raises Gem::FilePermissionError do
210
+ assert_raise Gem::FilePermissionError do
212
211
  @cmd.execute
213
212
  end
214
213
  ensure
@@ -226,7 +225,7 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
226
225
  @cmd.options[:args] = %w[no_such_gem]
227
226
 
228
227
  use_ui @ui do
229
- e = assert_raises Gem::MockGemUi::TermError do
228
+ e = assert_raise Gem::MockGemUi::TermError do
230
229
  @cmd.execute
231
230
  end
232
231
  assert_equal 2, e.exit_code
@@ -245,7 +244,7 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
245
244
  @cmd.options[:args] = %w[no_such_gem]
246
245
 
247
246
  use_ui @ui do
248
- e = assert_raises Gem::MockGemUi::TermError do
247
+ e = assert_raise Gem::MockGemUi::TermError do
249
248
  @cmd.execute
250
249
  end
251
250
  assert_equal 2, e.exit_code
@@ -258,7 +257,7 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
258
257
  def test_execute_no_gem
259
258
  @cmd.options[:args] = %w[]
260
259
 
261
- assert_raises Gem::CommandLineError do
260
+ assert_raise Gem::CommandLineError do
262
261
  @cmd.execute
263
262
  end
264
263
  end
@@ -269,7 +268,23 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
269
268
  @cmd.options[:args] = %w[nonexistent]
270
269
 
271
270
  use_ui @ui do
272
- e = assert_raises Gem::MockGemUi::TermError do
271
+ e = assert_raise Gem::MockGemUi::TermError do
272
+ @cmd.execute
273
+ end
274
+ assert_equal 2, e.exit_code
275
+ end
276
+
277
+ assert_match(/ould not find a valid gem 'nonexistent'/, @ui.error)
278
+ end
279
+
280
+ def test_execute_nonexistent_force
281
+ spec_fetcher
282
+
283
+ @cmd.options[:args] = %w[nonexistent]
284
+ @cmd.options[:force] = true
285
+
286
+ use_ui @ui do
287
+ e = assert_raise Gem::MockGemUi::TermError do
273
288
  @cmd.execute
274
289
  end
275
290
  assert_equal 2, e.exit_code
@@ -280,13 +295,13 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
280
295
 
281
296
  def test_execute_dependency_nonexistent
282
297
  spec_fetcher do |fetcher|
283
- fetcher.spec 'foo', 2, 'bar' => '0.5'
298
+ fetcher.spec "foo", 2, "bar" => "0.5"
284
299
  end
285
300
 
286
- @cmd.options[:args] = ['foo']
301
+ @cmd.options[:args] = ["foo"]
287
302
 
288
303
  use_ui @ui do
289
- e = assert_raises Gem::MockGemUi::TermError do
304
+ e = assert_raise Gem::MockGemUi::TermError do
290
305
  @cmd.execute
291
306
  end
292
307
 
@@ -302,7 +317,7 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
302
317
 
303
318
  def test_execute_http_proxy
304
319
  use_ui @ui do
305
- e = assert_raises ArgumentError, @ui.error do
320
+ e = assert_raise ArgumentError, @ui.error do
306
321
  @cmd.handle_options %w[-p=foo.bar.com]
307
322
  end
308
323
 
@@ -328,7 +343,7 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
328
343
  @cmd.options[:args] = %w[nonexistent]
329
344
 
330
345
  use_ui @ui do
331
- e = assert_raises Gem::MockGemUi::TermError do
346
+ e = assert_raise Gem::MockGemUi::TermError do
332
347
  @cmd.execute
333
348
  end
334
349
  assert_equal 2, e.exit_code
@@ -337,7 +352,7 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
337
352
  errs = @ui.error.split("\n")
338
353
 
339
354
  assert_match(/ould not find a valid gem 'nonexistent'/, errs.shift)
340
- assert_match(%r!Unable to download data from http://not-there.nothing!, errs.shift)
355
+ assert_match(%r{Unable to download data from http://not-there.nothing}, errs.shift)
341
356
  end
342
357
 
343
358
  def test_execute_nonexistent_hint_disabled
@@ -352,7 +367,7 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
352
367
  @cmd.options[:suggest_alternate] = false
353
368
 
354
369
  use_ui @ui do
355
- e = assert_raises Gem::MockGemUi::TermError do
370
+ e = assert_raise Gem::MockGemUi::TermError do
356
371
  @cmd.execute
357
372
  end
358
373
 
@@ -377,7 +392,7 @@ ERROR: Could not find a valid gem 'nonexistent_with_hint' (>= 0) in any reposit
377
392
  @cmd.options[:args] = [misspelled]
378
393
 
379
394
  use_ui @ui do
380
- e = assert_raises Gem::MockGemUi::TermError do
395
+ e = assert_raise Gem::MockGemUi::TermError do
381
396
  @cmd.execute
382
397
  end
383
398
 
@@ -402,7 +417,7 @@ ERROR: Possible alternatives: non_existent_with_hint
402
417
  @cmd.options[:args] = [misspelled]
403
418
 
404
419
  use_ui @ui do
405
- e = assert_raises Gem::MockGemUi::TermError do
420
+ e = assert_raise Gem::MockGemUi::TermError do
406
421
  @cmd.execute
407
422
  end
408
423
 
@@ -411,7 +426,7 @@ ERROR: Possible alternatives: non_existent_with_hint
411
426
 
412
427
  expected = [
413
428
  "ERROR: Could not find a valid gem 'non-existent_with-hint' (>= 0) in any repository",
414
- "ERROR: Possible alternatives: nonexistent-with_hint"
429
+ "ERROR: Possible alternatives: nonexistent-with_hint",
415
430
  ]
416
431
 
417
432
  output = @ui.error.split "\n"
@@ -424,7 +439,7 @@ ERROR: Possible alternatives: non_existent_with_hint
424
439
  @cmd.options[:install_dir] = "whatever"
425
440
 
426
441
  use_ui @ui do
427
- assert_raises Gem::MockGemUi::TermError do
442
+ assert_raise Gem::MockGemUi::TermError do
428
443
  @cmd.execute
429
444
  end
430
445
  end
@@ -436,78 +451,209 @@ ERROR: Possible alternatives: non_existent_with_hint
436
451
 
437
452
  def test_execute_prerelease_skipped_when_no_flag_set
438
453
  spec_fetcher do |fetcher|
439
- fetcher.gem 'a', 1
440
- fetcher.gem 'a', '3.a'
454
+ fetcher.gem "a", 1
455
+ fetcher.gem "a", "3.a"
441
456
  end
442
457
 
443
458
  @cmd.options[:prerelease] = false
444
459
  @cmd.options[:args] = %w[a]
445
460
 
446
461
  use_ui @ui do
447
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
462
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
448
463
  @cmd.execute
449
464
  end
450
465
  end
451
466
 
452
- assert_equal %w[a-1], @cmd.installed_specs.map { |spec| spec.full_name }
467
+ assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
453
468
  end
454
469
 
455
470
  def test_execute_prerelease_wins_over_previous_ver
456
471
  spec_fetcher do |fetcher|
457
- fetcher.download 'a', 1
458
- fetcher.download 'a', '2.a'
472
+ fetcher.download "a", 1
473
+ fetcher.download "a", "2.a"
459
474
  end
460
475
 
461
476
  @cmd.options[:prerelease] = true
462
477
  @cmd.options[:args] = %w[a]
463
478
 
464
479
  use_ui @ui do
465
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
480
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
466
481
  @cmd.execute
467
482
  end
468
483
  end
469
484
 
470
- assert_equal %w[a-2.a], @cmd.installed_specs.map { |spec| spec.full_name }
485
+ assert_equal %w[a-2.a], @cmd.installed_specs.map {|spec| spec.full_name }
471
486
  end
472
487
 
473
488
  def test_execute_with_version_specified_by_colon
474
489
  spec_fetcher do |fetcher|
475
- fetcher.download 'a', 1
476
- fetcher.download 'a', 2
490
+ fetcher.download "a", 1
491
+ fetcher.download "a", 2
477
492
  end
478
493
 
479
494
  @cmd.options[:args] = %w[a:1]
480
495
 
481
496
  use_ui @ui do
482
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
497
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
483
498
  @cmd.execute
484
499
  end
485
500
  end
486
501
 
487
- assert_equal %w[a-1], @cmd.installed_specs.map { |spec| spec.full_name }
502
+ assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
488
503
  end
489
504
 
490
505
  def test_execute_prerelease_skipped_when_non_pre_available
491
506
  spec_fetcher do |fetcher|
492
- fetcher.gem 'a', '2.pre'
493
- fetcher.gem 'a', 2
507
+ fetcher.gem "a", "2.pre"
508
+ fetcher.gem "a", 2
494
509
  end
495
510
 
496
511
  @cmd.options[:prerelease] = true
497
512
  @cmd.options[:args] = %w[a]
498
513
 
499
514
  use_ui @ui do
500
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
515
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
516
+ @cmd.execute
517
+ end
518
+ end
519
+
520
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
521
+ end
522
+
523
+ def test_execute_required_ruby_version
524
+ next_ruby = Gem.ruby_version.segments.map.with_index {|n, i| i == 1 ? n + 1 : n }.join(".")
525
+
526
+ local = Gem::Platform.local
527
+ spec_fetcher do |fetcher|
528
+ fetcher.download "a", 2
529
+ fetcher.download "a", 2 do |s|
530
+ s.required_ruby_version = "< #{RUBY_VERSION}.a"
531
+ s.platform = local
532
+ end
533
+ fetcher.download "a", 3 do |s|
534
+ s.required_ruby_version = ">= #{next_ruby}"
535
+ end
536
+ fetcher.download "a", 3 do |s|
537
+ s.required_ruby_version = ">= #{next_ruby}"
538
+ s.platform = local
539
+ end
540
+ end
541
+
542
+ @cmd.options[:args] = %w[a]
543
+
544
+ use_ui @ui do
545
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
546
+ @cmd.execute
547
+ end
548
+ end
549
+
550
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
551
+ end
552
+
553
+ def test_execute_required_ruby_version_upper_bound
554
+ local = Gem::Platform.local
555
+ spec_fetcher do |fetcher|
556
+ fetcher.gem "a", 2.0
557
+ fetcher.gem "a", 2.0 do |s|
558
+ s.required_ruby_version = "< #{RUBY_VERSION}.a"
559
+ s.platform = local
560
+ end
561
+ end
562
+
563
+ @cmd.options[:args] = %w[a]
564
+
565
+ use_ui @ui do
566
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
567
+ @cmd.execute
568
+ end
569
+ end
570
+
571
+ assert_equal %w[a-2.0], @cmd.installed_specs.map {|spec| spec.full_name }
572
+ end
573
+
574
+ def test_execute_required_ruby_version_specific_not_met
575
+ spec_fetcher do |fetcher|
576
+ fetcher.gem "a", "1.0" do |s|
577
+ s.required_ruby_version = "= 1.4.6"
578
+ end
579
+ end
580
+
581
+ @cmd.options[:args] = %w[a]
582
+
583
+ use_ui @ui do
584
+ assert_raise Gem::MockGemUi::TermError do
585
+ @cmd.execute
586
+ end
587
+ end
588
+
589
+ errs = @ui.error.split("\n")
590
+ assert_equal "ERROR: Error installing a:", errs.shift
591
+ assert_equal "\ta-1.0 requires Ruby version = 1.4.6. The current ruby version is #{Gem.ruby_version}.", errs.shift
592
+ end
593
+
594
+ def test_execute_required_ruby_version_specific_prerelease_met
595
+ spec_fetcher do |fetcher|
596
+ fetcher.gem "a", "1.0" do |s|
597
+ s.required_ruby_version = ">= 1.4.6.preview2"
598
+ end
599
+ end
600
+
601
+ @cmd.options[:args] = %w[a]
602
+
603
+ use_ui @ui do
604
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
501
605
  @cmd.execute
502
606
  end
503
607
  end
504
608
 
505
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
609
+ assert_equal %w[a-1.0], @cmd.installed_specs.map {|spec| spec.full_name }
610
+ end
611
+
612
+ def test_execute_required_ruby_version_specific_prerelease_not_met
613
+ next_ruby_pre = Gem.ruby_version.segments.map.with_index {|n, i| i == 1 ? n + 1 : n }.join(".") + ".a"
614
+
615
+ spec_fetcher do |fetcher|
616
+ fetcher.gem "a", "1.0" do |s|
617
+ s.required_ruby_version = "> #{next_ruby_pre}"
618
+ end
619
+ end
620
+
621
+ @cmd.options[:args] = %w[a]
622
+
623
+ use_ui @ui do
624
+ assert_raise Gem::MockGemUi::TermError do
625
+ @cmd.execute
626
+ end
627
+ end
628
+
629
+ errs = @ui.error.split("\n")
630
+ assert_equal "ERROR: Error installing a:", errs.shift
631
+ assert_equal "\ta-1.0 requires Ruby version > #{next_ruby_pre}. The current ruby version is #{Gem.ruby_version}.", errs.shift
632
+ end
633
+
634
+ def test_execute_required_rubygems_version_wrong
635
+ spec_fetcher do |fetcher|
636
+ fetcher.gem "a", "1.0" do |s|
637
+ s.required_rubygems_version = "< 0"
638
+ end
639
+ end
640
+
641
+ @cmd.options[:args] = %w[a]
642
+
643
+ use_ui @ui do
644
+ assert_raise Gem::MockGemUi::TermError do
645
+ @cmd.execute
646
+ end
647
+ end
648
+
649
+ errs = @ui.error.split("\n")
650
+ assert_equal "ERROR: Error installing a:", errs.shift
651
+ assert_equal "\ta-1.0 requires RubyGems version < 0. The current RubyGems version is #{Gem.rubygems_version}. Try 'gem update --system' to update RubyGems itself.", errs.shift
506
652
  end
507
653
 
508
654
  def test_execute_rdoc
509
655
  specs = spec_fetcher do |fetcher|
510
- fetcher.gem 'a', 2
656
+ fetcher.gem "a", 2
511
657
  end
512
658
 
513
659
  Gem.done_installing(&Gem::RDoc.method(:generation_hook))
@@ -515,7 +661,7 @@ ERROR: Possible alternatives: non_existent_with_hint
515
661
  @cmd.options[:document] = %w[rdoc ri]
516
662
  @cmd.options[:domain] = :local
517
663
 
518
- a2 = specs['a-2']
664
+ a2 = specs["a-2"]
519
665
  FileUtils.mv a2.cache_file, @tempdir
520
666
 
521
667
  @cmd.options[:args] = %w[a]
@@ -527,7 +673,7 @@ ERROR: Possible alternatives: non_existent_with_hint
527
673
 
528
674
  begin
529
675
  Dir.chdir @tempdir
530
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
676
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
531
677
  @cmd.execute
532
678
  end
533
679
  ensure
@@ -537,22 +683,22 @@ ERROR: Possible alternatives: non_existent_with_hint
537
683
 
538
684
  wait_for_child_process_to_exit
539
685
 
540
- assert_path_exists File.join(a2.doc_dir, 'ri')
541
- assert_path_exists File.join(a2.doc_dir, 'rdoc')
686
+ assert_path_exist File.join(a2.doc_dir, "ri")
687
+ assert_path_exist File.join(a2.doc_dir, "rdoc")
542
688
  end
543
689
 
544
690
  def test_execute_rdoc_with_path
545
691
  specs = spec_fetcher do |fetcher|
546
- fetcher.gem 'a', 2
692
+ fetcher.gem "a", 2
547
693
  end
548
694
 
549
695
  Gem.done_installing(&Gem::RDoc.method(:generation_hook))
550
696
 
551
697
  @cmd.options[:document] = %w[rdoc ri]
552
698
  @cmd.options[:domain] = :local
553
- @cmd.options[:install_dir] = 'whatever'
699
+ @cmd.options[:install_dir] = "whatever"
554
700
 
555
- a2 = specs['a-2']
701
+ a2 = specs["a-2"]
556
702
  FileUtils.mv a2.cache_file, @tempdir
557
703
 
558
704
  @cmd.options[:args] = %w[a]
@@ -564,7 +710,7 @@ ERROR: Possible alternatives: non_existent_with_hint
564
710
 
565
711
  begin
566
712
  Dir.chdir @tempdir
567
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
713
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
568
714
  @cmd.execute
569
715
  end
570
716
  ensure
@@ -574,19 +720,19 @@ ERROR: Possible alternatives: non_existent_with_hint
574
720
 
575
721
  wait_for_child_process_to_exit
576
722
 
577
- assert_path_exists 'whatever/doc/a-2', 'documentation not installed'
723
+ assert_path_exist "whatever/doc/a-2", "documentation not installed"
578
724
  end
579
725
 
580
726
  def test_execute_saves_build_args
581
727
  specs = spec_fetcher do |fetcher|
582
- fetcher.gem 'a', 2
728
+ fetcher.gem "a", 2
583
729
  end
584
730
 
585
- args = %w!--with-awesome=true --more-awesome=yes!
731
+ args = %w[--with-awesome=true --more-awesome=yes]
586
732
 
587
733
  Gem::Command.build_args = args
588
734
 
589
- a2 = specs['a-2']
735
+ a2 = specs["a-2"]
590
736
  FileUtils.mv a2.cache_file, @tempdir
591
737
 
592
738
  @cmd.options[:domain] = :local
@@ -600,7 +746,7 @@ ERROR: Possible alternatives: non_existent_with_hint
600
746
 
601
747
  begin
602
748
  Dir.chdir @tempdir
603
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
749
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
604
750
  @cmd.execute
605
751
  end
606
752
  ensure
@@ -609,25 +755,25 @@ ERROR: Possible alternatives: non_existent_with_hint
609
755
  end
610
756
 
611
757
  path = a2.build_info_file
612
- assert_path_exists path
758
+ assert_path_exist path
613
759
 
614
760
  assert_equal args, a2.build_args
615
761
  end
616
762
 
617
763
  def test_execute_remote
618
764
  spec_fetcher do |fetcher|
619
- fetcher.gem 'a', 2
765
+ fetcher.gem "a", 2
620
766
  end
621
767
 
622
768
  @cmd.options[:args] = %w[a]
623
769
 
624
770
  use_ui @ui do
625
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
771
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
626
772
  @cmd.execute
627
773
  end
628
774
  end
629
775
 
630
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
776
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
631
777
 
632
778
  assert_match "1 gem installed", @ui.output
633
779
  end
@@ -636,32 +782,65 @@ ERROR: Possible alternatives: non_existent_with_hint
636
782
  FileUtils.touch("a.gem")
637
783
 
638
784
  spec_fetcher do |fetcher|
639
- fetcher.gem 'a', 2
785
+ fetcher.gem "a", 2
640
786
  end
641
787
 
642
788
  @cmd.options[:args] = %w[a]
643
789
 
644
790
  use_ui @ui do
645
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
791
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
646
792
  @cmd.execute
647
793
  end
648
794
  end
649
795
 
650
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
796
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
797
+
798
+ assert_match "1 gem installed", @ui.output
799
+ end
800
+
801
+ def test_execute_remote_truncates_existing_gemspecs
802
+ spec_fetcher do |fetcher|
803
+ fetcher.gem "a", 1
804
+ end
805
+
806
+ @cmd.options[:domain] = :remote
807
+
808
+ @cmd.options[:args] = %w[a]
809
+
810
+ use_ui @ui do
811
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
812
+ @cmd.execute
813
+ end
814
+ end
651
815
 
816
+ assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
652
817
  assert_match "1 gem installed", @ui.output
818
+
819
+ a1_gemspec = File.join(@gemhome, "specifications", "a-1.gemspec")
820
+
821
+ initial_a1_gemspec_content = File.read(a1_gemspec)
822
+ modified_a1_gemspec_content = initial_a1_gemspec_content + "\n # AAAAAAA\n"
823
+ File.write(a1_gemspec, modified_a1_gemspec_content)
824
+
825
+ use_ui @ui do
826
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
827
+ @cmd.execute
828
+ end
829
+ end
830
+
831
+ assert_equal initial_a1_gemspec_content, File.read(a1_gemspec)
653
832
  end
654
833
 
655
834
  def test_execute_remote_ignores_files
656
835
  specs = spec_fetcher do |fetcher|
657
- fetcher.gem 'a', 1
658
- fetcher.gem 'a', 2
836
+ fetcher.gem "a", 1
837
+ fetcher.gem "a", 2
659
838
  end
660
839
 
661
840
  @cmd.options[:domain] = :remote
662
841
 
663
- a1 = specs['a-1']
664
- a2 = specs['a-2']
842
+ a1 = specs["a-1"]
843
+ a2 = specs["a-2"]
665
844
 
666
845
  FileUtils.mv a2.cache_file, @tempdir
667
846
 
@@ -670,7 +849,7 @@ ERROR: Possible alternatives: non_existent_with_hint
670
849
 
671
850
  @cmd.options[:args] = [a2.name]
672
851
 
673
- gemdir = File.join @gemhome, 'specifications'
852
+ gemdir = File.join @gemhome, "specifications"
674
853
 
675
854
  a2_gemspec = File.join(gemdir, "a-2.gemspec")
676
855
  a1_gemspec = File.join(gemdir, "a-1.gemspec")
@@ -682,13 +861,13 @@ ERROR: Possible alternatives: non_existent_with_hint
682
861
 
683
862
  use_ui @ui do
684
863
  Dir.chdir @tempdir do
685
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
864
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
686
865
  @cmd.execute
687
866
  end
688
867
  end
689
868
  end
690
869
 
691
- assert_equal %w[a-1], @cmd.installed_specs.map { |spec| spec.full_name }
870
+ assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
692
871
 
693
872
  assert_match "1 gem installed", @ui.output
694
873
 
@@ -699,12 +878,12 @@ ERROR: Possible alternatives: non_existent_with_hint
699
878
 
700
879
  def test_execute_two
701
880
  specs = spec_fetcher do |fetcher|
702
- fetcher.gem 'a', 2
703
- fetcher.gem 'b', 2
881
+ fetcher.gem "a", 2
882
+ fetcher.gem "b", 2
704
883
  end
705
884
 
706
- FileUtils.mv specs['a-2'].cache_file, @tempdir
707
- FileUtils.mv specs['b-2'].cache_file, @tempdir
885
+ FileUtils.mv specs["a-2"].cache_file, @tempdir
886
+ FileUtils.mv specs["b-2"].cache_file, @tempdir
708
887
 
709
888
  @cmd.options[:domain] = :local
710
889
 
@@ -714,7 +893,7 @@ ERROR: Possible alternatives: non_existent_with_hint
714
893
  orig_dir = Dir.pwd
715
894
  begin
716
895
  Dir.chdir @tempdir
717
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
896
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
718
897
  @cmd.execute
719
898
  end
720
899
  ensure
@@ -722,7 +901,7 @@ ERROR: Possible alternatives: non_existent_with_hint
722
901
  end
723
902
  end
724
903
 
725
- assert_equal %w[a-2 b-2], @cmd.installed_specs.map { |spec| spec.full_name }
904
+ assert_equal %w[a-2 b-2], @cmd.installed_specs.map {|spec| spec.full_name }
726
905
 
727
906
  assert_match "2 gems installed", @ui.output
728
907
  end
@@ -732,7 +911,7 @@ ERROR: Possible alternatives: non_existent_with_hint
732
911
  @cmd.options[:version] = Gem::Requirement.new("> 1")
733
912
 
734
913
  use_ui @ui do
735
- e = assert_raises Gem::MockGemUi::TermError do
914
+ e = assert_raise Gem::MockGemUi::TermError do
736
915
  @cmd.execute
737
916
  end
738
917
 
@@ -750,28 +929,28 @@ ERROR: Possible alternatives: non_existent_with_hint
750
929
 
751
930
  def test_execute_two_version_specified_by_colon
752
931
  spec_fetcher do |fetcher|
753
- fetcher.gem 'a', 1
754
- fetcher.gem 'a', 2
755
- fetcher.gem 'b', 1
756
- fetcher.gem 'b', 2
932
+ fetcher.gem "a", 1
933
+ fetcher.gem "a", 2
934
+ fetcher.gem "b", 1
935
+ fetcher.gem "b", 2
757
936
  end
758
937
 
759
938
  @cmd.options[:args] = %w[a:1 b:1]
760
939
 
761
940
  use_ui @ui do
762
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
941
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
763
942
  @cmd.execute
764
943
  end
765
944
  end
766
945
 
767
- assert_equal %w[a-1 b-1], @cmd.installed_specs.map { |spec| spec.full_name }
946
+ assert_equal %w[a-1 b-1], @cmd.installed_specs.map {|spec| spec.full_name }
768
947
  end
769
948
 
770
949
  def test_execute_conservative
771
950
  spec_fetcher do |fetcher|
772
- fetcher.download 'b', 2
951
+ fetcher.download "b", 2
773
952
 
774
- fetcher.gem 'a', 2
953
+ fetcher.gem "a", 2
775
954
  end
776
955
 
777
956
  @cmd.options[:conservative] = true
@@ -782,7 +961,7 @@ ERROR: Possible alternatives: non_existent_with_hint
782
961
  orig_dir = Dir.pwd
783
962
  begin
784
963
  Dir.chdir @tempdir
785
- assert_raises Gem::MockGemUi::SystemExitException do
964
+ assert_raise Gem::MockGemUi::SystemExitException do
786
965
  @cmd.execute
787
966
  end
788
967
  ensure
@@ -790,7 +969,7 @@ ERROR: Possible alternatives: non_existent_with_hint
790
969
  end
791
970
  end
792
971
 
793
- assert_equal %w[b-2], @cmd.installed_specs.map { |spec| spec.full_name }
972
+ assert_equal %w[b-2], @cmd.installed_specs.map {|spec| spec.full_name }
794
973
 
795
974
  assert_equal "", @ui.error
796
975
  assert_match "1 gem installed", @ui.output
@@ -802,7 +981,7 @@ ERROR: Possible alternatives: non_existent_with_hint
802
981
  done_installing = true
803
982
  end
804
983
 
805
- spec = util_spec 'a', 2
984
+ spec = util_spec "a", 2
806
985
 
807
986
  util_build_gem spec
808
987
 
@@ -810,44 +989,44 @@ ERROR: Possible alternatives: non_existent_with_hint
810
989
 
811
990
  @cmd.options[:ignore_dependencies] = true
812
991
 
813
- @cmd.install_gem 'a', '>= 0'
992
+ @cmd.install_gem "a", ">= 0"
814
993
 
815
- assert_equal %w[a-2], @cmd.installed_specs.map { |s| s.full_name }
994
+ assert_equal %w[a-2], @cmd.installed_specs.map {|s| s.full_name }
816
995
 
817
- assert done_installing, 'documentation was not generated'
996
+ assert done_installing, "documentation was not generated"
818
997
  end
819
998
 
820
999
  def test_install_gem_ignore_dependencies_remote
821
1000
  spec_fetcher do |fetcher|
822
- fetcher.gem 'a', 2
1001
+ fetcher.gem "a", 2
823
1002
  end
824
1003
 
825
1004
  @cmd.options[:ignore_dependencies] = true
826
1005
 
827
- @cmd.install_gem 'a', '>= 0'
1006
+ @cmd.install_gem "a", ">= 0"
828
1007
 
829
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
1008
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
830
1009
  end
831
1010
 
832
1011
  def test_install_gem_ignore_dependencies_remote_platform_local
833
1012
  local = Gem::Platform.local
834
1013
  spec_fetcher do |fetcher|
835
- fetcher.gem 'a', 3
1014
+ fetcher.gem "a", 3
836
1015
 
837
- fetcher.gem 'a', 3 do |s|
1016
+ fetcher.gem "a", 3 do |s|
838
1017
  s.platform = local
839
1018
  end
840
1019
  end
841
1020
 
842
1021
  @cmd.options[:ignore_dependencies] = true
843
1022
 
844
- @cmd.install_gem 'a', '>= 0'
1023
+ @cmd.install_gem "a", ">= 0"
845
1024
 
846
- assert_equal %W[a-3-#{local}], @cmd.installed_specs.map { |spec| spec.full_name }
1025
+ assert_equal %W[a-3-#{local}], @cmd.installed_specs.map {|spec| spec.full_name }
847
1026
  end
848
1027
 
849
1028
  def test_install_gem_ignore_dependencies_specific_file
850
- spec = util_spec 'a', 2
1029
+ spec = util_spec "a", 2
851
1030
 
852
1031
  util_build_gem spec
853
1032
 
@@ -857,13 +1036,13 @@ ERROR: Possible alternatives: non_existent_with_hint
857
1036
 
858
1037
  @cmd.install_gem File.join(@tempdir, spec.file_name), nil
859
1038
 
860
- assert_equal %w[a-2], @cmd.installed_specs.map { |s| s.full_name }
1039
+ assert_equal %w[a-2], @cmd.installed_specs.map {|s| s.full_name }
861
1040
  end
862
1041
 
863
1042
  def test_parses_requirement_from_gemname
864
1043
  spec_fetcher do |fetcher|
865
- fetcher.gem 'a', 2
866
- fetcher.gem 'b', 2
1044
+ fetcher.gem "a", 2
1045
+ fetcher.gem "b", 2
867
1046
  end
868
1047
 
869
1048
  @cmd.options[:domain] = :local
@@ -877,7 +1056,7 @@ ERROR: Possible alternatives: non_existent_with_hint
877
1056
  orig_dir = Dir.pwd
878
1057
  begin
879
1058
  Dir.chdir @tempdir
880
- e = assert_raises Gem::MockGemUi::TermError do
1059
+ e = assert_raise Gem::MockGemUi::TermError do
881
1060
  @cmd.execute
882
1061
  end
883
1062
  ensure
@@ -886,7 +1065,7 @@ ERROR: Possible alternatives: non_existent_with_hint
886
1065
  end
887
1066
 
888
1067
  assert_equal 2, e.exit_code
889
- assert_match %r!Could not find a valid gem 'a' \(= 10.0\)!, @ui.error
1068
+ assert_match %r{Could not find a valid gem 'a' \(= 10.0\)}, @ui.error
890
1069
  end
891
1070
 
892
1071
  def test_show_errors_on_failure
@@ -899,7 +1078,7 @@ ERROR: Possible alternatives: non_existent_with_hint
899
1078
  orig_dir = Dir.pwd
900
1079
  begin
901
1080
  Dir.chdir @tempdir
902
- e = assert_raises Gem::MockGemUi::TermError do
1081
+ e = assert_raise Gem::MockGemUi::TermError do
903
1082
  @cmd.execute
904
1083
  end
905
1084
  ensure
@@ -909,12 +1088,12 @@ ERROR: Possible alternatives: non_existent_with_hint
909
1088
 
910
1089
  assert_equal 2, e.exit_code
911
1090
 
912
- assert_match 'Unable to download data', @ui.error
1091
+ assert_match "Unable to download data", @ui.error
913
1092
  end
914
1093
 
915
1094
  def test_show_source_problems_even_on_success
916
1095
  spec_fetcher do |fetcher|
917
- fetcher.download 'a', 2
1096
+ fetcher.download "a", 2
918
1097
  end
919
1098
 
920
1099
  Gem.sources << "http://nonexistent.example"
@@ -922,12 +1101,12 @@ ERROR: Possible alternatives: non_existent_with_hint
922
1101
  @cmd.options[:args] = %w[a]
923
1102
 
924
1103
  use_ui @ui do
925
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1104
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
926
1105
  @cmd.execute
927
1106
  end
928
1107
  end
929
1108
 
930
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
1109
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
931
1110
 
932
1111
  assert_match "1 gem installed", @ui.output
933
1112
 
@@ -937,9 +1116,34 @@ ERROR: Possible alternatives: non_existent_with_hint
937
1116
  assert_equal x, e
938
1117
  end
939
1118
 
1119
+ def test_redact_credentials_from_uri_on_warning
1120
+ spec_fetcher do |fetcher|
1121
+ fetcher.download "a", 2
1122
+ end
1123
+
1124
+ Gem.sources << "http://username:SECURE_TOKEN@nonexistent.example"
1125
+
1126
+ @cmd.options[:args] = %w[a]
1127
+
1128
+ use_ui @ui do
1129
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1130
+ @cmd.execute
1131
+ end
1132
+ end
1133
+
1134
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
1135
+
1136
+ assert_match "1 gem installed", @ui.output
1137
+
1138
+ e = @ui.error
1139
+
1140
+ x = "WARNING: Unable to pull data from 'http://username:REDACTED@nonexistent.example': no data for http://username:REDACTED@nonexistent.example/specs.4.8.gz (http://username:REDACTED@nonexistent.example/specs.4.8.gz)\n"
1141
+ assert_equal x, e
1142
+ end
1143
+
940
1144
  def test_execute_uses_from_a_gemdeps
941
1145
  spec_fetcher do |fetcher|
942
- fetcher.gem 'a', 2
1146
+ fetcher.gem "a", 2
943
1147
  end
944
1148
 
945
1149
  File.open @gemdeps, "w" do |f|
@@ -949,12 +1153,12 @@ ERROR: Possible alternatives: non_existent_with_hint
949
1153
  @cmd.options[:gemdeps] = @gemdeps
950
1154
 
951
1155
  use_ui @ui do
952
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1156
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
953
1157
  @cmd.execute
954
1158
  end
955
1159
  end
956
1160
 
957
- assert_equal %w[], @cmd.installed_specs.map { |spec| spec.full_name }
1161
+ assert_equal %w[], @cmd.installed_specs.map {|spec| spec.full_name }
958
1162
 
959
1163
  assert_match "Using a (2)", @ui.output
960
1164
  assert File.exist?("#{@gemdeps}.lock")
@@ -962,7 +1166,7 @@ ERROR: Possible alternatives: non_existent_with_hint
962
1166
 
963
1167
  def test_execute_uses_from_a_gemdeps_with_no_lock
964
1168
  spec_fetcher do |fetcher|
965
- fetcher.gem 'a', 2
1169
+ fetcher.gem "a", 2
966
1170
  end
967
1171
 
968
1172
  File.open @gemdeps, "w" do |f|
@@ -973,12 +1177,12 @@ ERROR: Possible alternatives: non_existent_with_hint
973
1177
  @cmd.options[:gemdeps] = @gemdeps
974
1178
 
975
1179
  use_ui @ui do
976
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1180
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
977
1181
  @cmd.execute
978
1182
  end
979
1183
  end
980
1184
 
981
- assert_equal %w[], @cmd.installed_specs.map { |spec| spec.full_name }
1185
+ assert_equal %w[], @cmd.installed_specs.map {|spec| spec.full_name }
982
1186
 
983
1187
  assert_match "Using a (2)", @ui.output
984
1188
  assert !File.exist?("#{@gemdeps}.lock")
@@ -986,8 +1190,8 @@ ERROR: Possible alternatives: non_existent_with_hint
986
1190
 
987
1191
  def test_execute_installs_from_a_gemdeps_with_conservative
988
1192
  spec_fetcher do |fetcher|
989
- fetcher.download 'a', 2
990
- fetcher.gem 'a', 1
1193
+ fetcher.download "a", 2
1194
+ fetcher.gem "a", 1
991
1195
  end
992
1196
 
993
1197
  File.open @gemdeps, "w" do |f|
@@ -998,19 +1202,19 @@ ERROR: Possible alternatives: non_existent_with_hint
998
1202
  @cmd.options[:gemdeps] = @gemdeps
999
1203
 
1000
1204
  use_ui @ui do
1001
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1205
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1002
1206
  @cmd.execute
1003
1207
  end
1004
1208
  end
1005
1209
 
1006
- assert_equal %w[], @cmd.installed_specs.map { |spec| spec.full_name }
1210
+ assert_equal %w[], @cmd.installed_specs.map {|spec| spec.full_name }
1007
1211
 
1008
1212
  assert_match "Using a (1)", @ui.output
1009
1213
  end
1010
1214
 
1011
1215
  def test_execute_installs_from_a_gemdeps
1012
1216
  spec_fetcher do |fetcher|
1013
- fetcher.download 'a', 2
1217
+ fetcher.download "a", 2
1014
1218
  end
1015
1219
 
1016
1220
  File.open @gemdeps, "w" do |f|
@@ -1020,20 +1224,20 @@ ERROR: Possible alternatives: non_existent_with_hint
1020
1224
  @cmd.options[:gemdeps] = @gemdeps
1021
1225
 
1022
1226
  use_ui @ui do
1023
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1227
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1024
1228
  @cmd.execute
1025
1229
  end
1026
1230
  end
1027
1231
 
1028
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
1232
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
1029
1233
 
1030
1234
  assert_match "Installing a (2)", @ui.output
1031
1235
  end
1032
1236
 
1033
1237
  def test_execute_installs_deps_a_gemdeps
1034
1238
  spec_fetcher do |fetcher|
1035
- fetcher.download 'q', '1.0'
1036
- fetcher.download 'r', '2.0', 'q' => nil
1239
+ fetcher.download "q", "1.0"
1240
+ fetcher.download "r", "2.0", "q" => nil
1037
1241
  end
1038
1242
 
1039
1243
  File.open @gemdeps, "w" do |f|
@@ -1043,12 +1247,12 @@ ERROR: Possible alternatives: non_existent_with_hint
1043
1247
  @cmd.options[:gemdeps] = @gemdeps
1044
1248
 
1045
1249
  use_ui @ui do
1046
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1250
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1047
1251
  @cmd.execute
1048
1252
  end
1049
1253
  end
1050
1254
 
1051
- names = @cmd.installed_specs.map { |spec| spec.full_name }
1255
+ names = @cmd.installed_specs.map {|spec| spec.full_name }
1052
1256
 
1053
1257
  assert_equal %w[q-1.0 r-2.0], names
1054
1258
 
@@ -1058,9 +1262,9 @@ ERROR: Possible alternatives: non_existent_with_hint
1058
1262
 
1059
1263
  def test_execute_uses_deps_a_gemdeps
1060
1264
  spec_fetcher do |fetcher|
1061
- fetcher.download 'r', '2.0', 'q' => nil
1265
+ fetcher.download "r", "2.0", "q" => nil
1062
1266
 
1063
- fetcher.spec 'q', '1.0'
1267
+ fetcher.spec "q", "1.0"
1064
1268
  end
1065
1269
 
1066
1270
  File.open @gemdeps, "w" do |f|
@@ -1070,12 +1274,12 @@ ERROR: Possible alternatives: non_existent_with_hint
1070
1274
  @cmd.options[:gemdeps] = @gemdeps
1071
1275
 
1072
1276
  use_ui @ui do
1073
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1277
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1074
1278
  @cmd.execute
1075
1279
  end
1076
1280
  end
1077
1281
 
1078
- names = @cmd.installed_specs.map { |spec| spec.full_name }
1282
+ names = @cmd.installed_specs.map {|spec| spec.full_name }
1079
1283
 
1080
1284
  assert_equal %w[r-2.0], names
1081
1285
 
@@ -1085,8 +1289,8 @@ ERROR: Possible alternatives: non_existent_with_hint
1085
1289
 
1086
1290
  def test_execute_installs_deps_a_gemdeps_into_a_path
1087
1291
  spec_fetcher do |fetcher|
1088
- fetcher.download 'q', '1.0'
1089
- fetcher.download 'r', '2.0', 'q' => nil
1292
+ fetcher.download "q", "1.0"
1293
+ fetcher.download "r", "2.0", "q" => nil
1090
1294
  end
1091
1295
 
1092
1296
  File.open @gemdeps, "w" do |f|
@@ -1097,12 +1301,12 @@ ERROR: Possible alternatives: non_existent_with_hint
1097
1301
  @cmd.options[:gemdeps] = @gemdeps
1098
1302
 
1099
1303
  use_ui @ui do
1100
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1304
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1101
1305
  @cmd.execute
1102
1306
  end
1103
1307
  end
1104
1308
 
1105
- names = @cmd.installed_specs.map { |spec| spec.full_name }
1309
+ names = @cmd.installed_specs.map {|spec| spec.full_name }
1106
1310
 
1107
1311
  assert_equal %w[q-1.0 r-2.0], names
1108
1312
 
@@ -1115,11 +1319,11 @@ ERROR: Possible alternatives: non_existent_with_hint
1115
1319
 
1116
1320
  def test_execute_with_gemdeps_path_ignores_system
1117
1321
  specs = spec_fetcher do |fetcher|
1118
- fetcher.download 'q', '1.0'
1119
- fetcher.download 'r', '2.0', 'q' => nil
1322
+ fetcher.download "q", "1.0"
1323
+ fetcher.download "r", "2.0", "q" => nil
1120
1324
  end
1121
1325
 
1122
- install_specs specs['q-1.0']
1326
+ install_specs specs["q-1.0"]
1123
1327
 
1124
1328
  File.open @gemdeps, "w" do |f|
1125
1329
  f << "gem 'r'"
@@ -1129,12 +1333,12 @@ ERROR: Possible alternatives: non_existent_with_hint
1129
1333
  @cmd.options[:gemdeps] = @gemdeps
1130
1334
 
1131
1335
  use_ui @ui do
1132
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1336
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1133
1337
  @cmd.execute
1134
1338
  end
1135
1339
  end
1136
1340
 
1137
- names = @cmd.installed_specs.map { |spec| spec.full_name }
1341
+ names = @cmd.installed_specs.map {|spec| spec.full_name }
1138
1342
 
1139
1343
  assert_equal %w[q-1.0 r-2.0], names
1140
1344
 
@@ -1147,11 +1351,11 @@ ERROR: Possible alternatives: non_existent_with_hint
1147
1351
 
1148
1352
  def test_execute_uses_deps_a_gemdeps_with_a_path
1149
1353
  specs = spec_fetcher do |fetcher|
1150
- fetcher.gem 'q', '1.0'
1151
- fetcher.gem 'r', '2.0', 'q' => nil
1354
+ fetcher.gem "q", "1.0"
1355
+ fetcher.gem "r", "2.0", "q" => nil
1152
1356
  end
1153
1357
 
1154
- i = Gem::Installer.at specs['q-1.0'].cache_file, :install_dir => "gf-path"
1358
+ i = Gem::Installer.at specs["q-1.0"].cache_file, :install_dir => "gf-path"
1155
1359
  i.install
1156
1360
 
1157
1361
  assert File.file?("gf-path/specifications/q-1.0.gemspec"), "not installed"
@@ -1164,12 +1368,12 @@ ERROR: Possible alternatives: non_existent_with_hint
1164
1368
  @cmd.options[:gemdeps] = @gemdeps
1165
1369
 
1166
1370
  use_ui @ui do
1167
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1371
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1168
1372
  @cmd.execute
1169
1373
  end
1170
1374
  end
1171
1375
 
1172
- names = @cmd.installed_specs.map { |spec| spec.full_name }
1376
+ names = @cmd.installed_specs.map {|spec| spec.full_name }
1173
1377
 
1174
1378
  assert_equal %w[r-2.0], names
1175
1379
 
@@ -1178,39 +1382,39 @@ ERROR: Possible alternatives: non_existent_with_hint
1178
1382
  end
1179
1383
 
1180
1384
  def test_handle_options_file
1181
- FileUtils.touch 'Gemfile'
1385
+ FileUtils.touch "Gemfile"
1182
1386
 
1183
1387
  @cmd.handle_options %w[-g Gemfile]
1184
1388
 
1185
- assert_equal 'Gemfile', @cmd.options[:gemdeps]
1389
+ assert_equal "Gemfile", @cmd.options[:gemdeps]
1186
1390
 
1187
- FileUtils.rm 'Gemfile'
1391
+ FileUtils.rm "Gemfile"
1188
1392
 
1189
- FileUtils.touch 'gem.deps.rb'
1393
+ FileUtils.touch "gem.deps.rb"
1190
1394
 
1191
1395
  @cmd.handle_options %w[--file gem.deps.rb]
1192
1396
 
1193
- assert_equal 'gem.deps.rb', @cmd.options[:gemdeps]
1397
+ assert_equal "gem.deps.rb", @cmd.options[:gemdeps]
1194
1398
 
1195
- FileUtils.rm 'gem.deps.rb'
1399
+ FileUtils.rm "gem.deps.rb"
1196
1400
 
1197
- FileUtils.touch 'Isolate'
1401
+ FileUtils.touch "Isolate"
1198
1402
 
1199
1403
  @cmd.handle_options %w[-g]
1200
1404
 
1201
- assert_equal 'Isolate', @cmd.options[:gemdeps]
1405
+ assert_equal "Isolate", @cmd.options[:gemdeps]
1202
1406
 
1203
- FileUtils.touch 'Gemfile'
1407
+ FileUtils.touch "Gemfile"
1204
1408
 
1205
1409
  @cmd.handle_options %w[-g]
1206
1410
 
1207
- assert_equal 'Gemfile', @cmd.options[:gemdeps]
1411
+ assert_equal "Gemfile", @cmd.options[:gemdeps]
1208
1412
 
1209
- FileUtils.touch 'gem.deps.rb'
1413
+ FileUtils.touch "gem.deps.rb"
1210
1414
 
1211
1415
  @cmd.handle_options %w[-g]
1212
1416
 
1213
- assert_equal 'gem.deps.rb', @cmd.options[:gemdeps]
1417
+ assert_equal "gem.deps.rb", @cmd.options[:gemdeps]
1214
1418
  end
1215
1419
 
1216
1420
  def test_handle_options_suggest
@@ -1238,9 +1442,9 @@ ERROR: Possible alternatives: non_existent_with_hint
1238
1442
  def test_explain_platform_local
1239
1443
  local = Gem::Platform.local
1240
1444
  spec_fetcher do |fetcher|
1241
- fetcher.spec 'a', 2
1445
+ fetcher.spec "a", 2
1242
1446
 
1243
- fetcher.spec 'a', 2 do |s|
1447
+ fetcher.spec "a", 2 do |s|
1244
1448
  s.platform = local
1245
1449
  end
1246
1450
  end
@@ -1249,7 +1453,7 @@ ERROR: Possible alternatives: non_existent_with_hint
1249
1453
  @cmd.options[:args] = %w[a]
1250
1454
 
1251
1455
  use_ui @ui do
1252
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1456
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1253
1457
  @cmd.execute
1254
1458
  end
1255
1459
  end
@@ -1264,9 +1468,9 @@ ERROR: Possible alternatives: non_existent_with_hint
1264
1468
  def test_explain_platform_local_ignore_dependencies
1265
1469
  local = Gem::Platform.local
1266
1470
  spec_fetcher do |fetcher|
1267
- fetcher.spec 'a', 3
1471
+ fetcher.spec "a", 3
1268
1472
 
1269
- fetcher.spec 'a', 3 do |s|
1473
+ fetcher.spec "a", 3 do |s|
1270
1474
  s.platform = local
1271
1475
  end
1272
1476
  end
@@ -1276,7 +1480,7 @@ ERROR: Possible alternatives: non_existent_with_hint
1276
1480
  @cmd.options[:args] = %w[a]
1277
1481
 
1278
1482
  use_ui @ui do
1279
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1483
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1280
1484
  @cmd.execute
1281
1485
  end
1282
1486
  end
@@ -1291,9 +1495,9 @@ ERROR: Possible alternatives: non_existent_with_hint
1291
1495
  def test_explain_platform_ruby
1292
1496
  local = Gem::Platform.local
1293
1497
  spec_fetcher do |fetcher|
1294
- fetcher.spec 'a', 2
1498
+ fetcher.spec "a", 2
1295
1499
 
1296
- fetcher.spec 'a', 2 do |s|
1500
+ fetcher.spec "a", 2 do |s|
1297
1501
  s.platform = local
1298
1502
  end
1299
1503
  end
@@ -1305,7 +1509,7 @@ ERROR: Possible alternatives: non_existent_with_hint
1305
1509
  @cmd.options[:args] = %w[a]
1306
1510
 
1307
1511
  use_ui @ui do
1308
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1512
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1309
1513
  @cmd.execute
1310
1514
  end
1311
1515
  end
@@ -1320,9 +1524,9 @@ ERROR: Possible alternatives: non_existent_with_hint
1320
1524
  def test_explain_platform_ruby_ignore_dependencies
1321
1525
  local = Gem::Platform.local
1322
1526
  spec_fetcher do |fetcher|
1323
- fetcher.spec 'a', 3
1527
+ fetcher.spec "a", 3
1324
1528
 
1325
- fetcher.spec 'a', 3 do |s|
1529
+ fetcher.spec "a", 3 do |s|
1326
1530
  s.platform = local
1327
1531
  end
1328
1532
  end
@@ -1335,7 +1539,7 @@ ERROR: Possible alternatives: non_existent_with_hint
1335
1539
  @cmd.options[:args] = %w[a]
1336
1540
 
1337
1541
  use_ui @ui do
1338
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1542
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1339
1543
  @cmd.execute
1340
1544
  end
1341
1545
  end
@@ -1346,5 +1550,4 @@ ERROR: Possible alternatives: non_existent_with_hint
1346
1550
  assert_equal " a-3", out.shift
1347
1551
  assert_empty out
1348
1552
  end
1349
-
1350
1553
  end