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,9 +1,8 @@
1
1
  # frozen_string_literal: true
2
- require 'rubygems/installer_test_case'
3
- require 'rubygems/uninstaller'
2
+ require_relative "installer_test_case"
3
+ require "rubygems/uninstaller"
4
4
 
5
5
  class TestGemUninstaller < Gem::InstallerTestCase
6
-
7
6
  def setup
8
7
  super
9
8
  @installer = setup_base_installer
@@ -24,14 +23,14 @@ class TestGemUninstaller < Gem::InstallerTestCase
24
23
  end
25
24
 
26
25
  def test_initialize_expand_path
27
- FileUtils.mkdir_p 'foo/bar'
28
- uninstaller = Gem::Uninstaller.new nil, :install_dir => 'foo//bar'
26
+ FileUtils.mkdir_p "foo/bar"
27
+ uninstaller = Gem::Uninstaller.new nil, :install_dir => "foo//bar"
29
28
 
30
- assert_match %r|foo/bar$|, uninstaller.instance_variable_get(:@gem_home)
29
+ assert_match %r{foo/bar$}, uninstaller.instance_variable_get(:@gem_home)
31
30
  end
32
31
 
33
32
  def test_ask_if_ok
34
- c = util_spec 'c'
33
+ c = util_spec "c"
35
34
 
36
35
  uninstaller = Gem::Uninstaller.new nil
37
36
 
@@ -55,14 +54,14 @@ class TestGemUninstaller < Gem::InstallerTestCase
55
54
  uninstaller.remove_all [@spec]
56
55
  end
57
56
 
58
- refute_path_exists @spec.gem_dir
57
+ assert_path_not_exist @spec.gem_dir
59
58
  end
60
59
 
61
60
  def test_remove_executables_force_keep
62
61
  uninstaller = Gem::Uninstaller.new nil, :executables => false
63
62
 
64
- executable = File.join Gem.bindir(@user_spec.base_dir), 'executable'
65
- assert File.exist?(executable), 'executable not written'
63
+ executable = File.join Gem.bindir(@user_spec.base_dir), "executable"
64
+ assert File.exist?(executable), "executable not written"
66
65
 
67
66
  use_ui @ui do
68
67
  uninstaller.remove_executables @user_spec
@@ -76,8 +75,8 @@ class TestGemUninstaller < Gem::InstallerTestCase
76
75
  def test_remove_executables_force_remove
77
76
  uninstaller = Gem::Uninstaller.new nil, :executables => true
78
77
 
79
- executable = File.join Gem.bindir(@user_spec.base_dir), 'executable'
80
- assert File.exist?(executable), 'executable not written'
78
+ executable = File.join Gem.bindir(@user_spec.base_dir), "executable"
79
+ assert File.exist?(executable), "executable not written"
81
80
 
82
81
  use_ui @ui do
83
82
  uninstaller.remove_executables @user_spec
@@ -95,14 +94,14 @@ class TestGemUninstaller < Gem::InstallerTestCase
95
94
  uninstaller.remove_executables @user_spec
96
95
  end
97
96
 
98
- exec_path = File.join Gem.user_dir, 'bin', 'executable'
99
- refute File.exist?(exec_path), 'exec still exists in user bin dir'
97
+ exec_path = File.join Gem.user_dir, "bin", "executable"
98
+ refute File.exist?(exec_path), "exec still exists in user bin dir"
100
99
 
101
100
  assert_equal "Removing executable\n", @ui.output
102
101
  end
103
102
 
104
103
  def test_remove_executables_user_format
105
- Gem::Installer.exec_format = 'foo-%s-bar'
104
+ Gem::Installer.exec_format = "foo-%s-bar"
106
105
 
107
106
  uninstaller = Gem::Uninstaller.new nil, :executables => true, :format_executable => true
108
107
 
@@ -110,8 +109,8 @@ class TestGemUninstaller < Gem::InstallerTestCase
110
109
  uninstaller.remove_executables @user_spec
111
110
  end
112
111
 
113
- exec_path = File.join Gem.user_dir, 'bin', 'foo-executable-bar'
114
- assert_equal false, File.exist?(exec_path), 'removed exec from bin dir'
112
+ exec_path = File.join Gem.user_dir, "bin", "foo-executable-bar"
113
+ assert_equal false, File.exist?(exec_path), "removed exec from bin dir"
115
114
 
116
115
  assert_equal "Removing foo-executable-bar\n", @ui.output
117
116
  ensure
@@ -119,7 +118,7 @@ class TestGemUninstaller < Gem::InstallerTestCase
119
118
  end
120
119
 
121
120
  def test_remove_executables_user_format_disabled
122
- Gem::Installer.exec_format = 'foo-%s-bar'
121
+ Gem::Installer.exec_format = "foo-%s-bar"
123
122
 
124
123
  uninstaller = Gem::Uninstaller.new nil, :executables => true
125
124
 
@@ -127,8 +126,8 @@ class TestGemUninstaller < Gem::InstallerTestCase
127
126
  uninstaller.remove_executables @user_spec
128
127
  end
129
128
 
130
- exec_path = File.join Gem.user_dir, 'bin', 'executable'
131
- refute File.exist?(exec_path), 'removed exec from bin dir'
129
+ exec_path = File.join Gem.user_dir, "bin", "executable"
130
+ refute File.exist?(exec_path), "removed exec from bin dir"
132
131
 
133
132
  assert_equal "Removing executable\n", @ui.output
134
133
  ensure
@@ -139,7 +138,7 @@ class TestGemUninstaller < Gem::InstallerTestCase
139
138
  Dir.mkdir "#{@gemhome}2"
140
139
  uninstaller = Gem::Uninstaller.new nil, :install_dir => "#{@gemhome}2"
141
140
 
142
- e = assert_raises Gem::GemNotInHomeException do
141
+ e = assert_raise Gem::GemNotInHomeException do
143
142
  use_ui ui do
144
143
  uninstaller.remove @spec
145
144
  end
@@ -150,10 +149,12 @@ class TestGemUninstaller < Gem::InstallerTestCase
150
149
 
151
150
  assert_equal expected, e.message
152
151
 
153
- assert_path_exists @spec.gem_dir
152
+ assert_path_exist @spec.gem_dir
154
153
  end
155
154
 
156
155
  def test_remove_symlinked_gem_home
156
+ pend "Symlinks not supported or not enabled" unless symlink_supported?
157
+
157
158
  Dir.mktmpdir("gem_home") do |dir|
158
159
  symlinked_gem_home = "#{dir}/#{File.basename(@gemhome)}"
159
160
 
@@ -165,8 +166,61 @@ class TestGemUninstaller < Gem::InstallerTestCase
165
166
  uninstaller.remove @spec
166
167
  end
167
168
 
168
- refute_path_exists @spec.gem_dir
169
+ assert_path_not_exist @spec.gem_dir
170
+ end
171
+ end
172
+
173
+ def test_remove_plugins
174
+ write_file File.join(@tempdir, "lib", "rubygems_plugin.rb") do |io|
175
+ io.write "puts __FILE__"
176
+ end
177
+
178
+ @spec.files += %w[lib/rubygems_plugin.rb]
179
+
180
+ Gem::Installer.at(Gem::Package.build(@spec), :force => true).install
181
+
182
+ plugin_path = File.join Gem.plugindir, "a_plugin.rb"
183
+ assert File.exist?(plugin_path), "plugin not written"
184
+
185
+ Gem::Uninstaller.new(nil).remove_plugins @spec
186
+
187
+ refute File.exist?(plugin_path), "plugin not removed"
188
+ end
189
+
190
+ def test_remove_plugins_with_install_dir
191
+ write_file File.join(@tempdir, "lib", "rubygems_plugin.rb") do |io|
192
+ io.write "puts __FILE__"
193
+ end
194
+
195
+ @spec.files += %w[lib/rubygems_plugin.rb]
196
+
197
+ Gem::Installer.at(Gem::Package.build(@spec), :force => true).install
198
+
199
+ plugin_path = File.join Gem.plugindir, "a_plugin.rb"
200
+ assert File.exist?(plugin_path), "plugin not written"
201
+
202
+ Dir.mkdir "#{@gemhome}2"
203
+ Gem::Uninstaller.new(nil, :install_dir => "#{@gemhome}2").remove_plugins @spec
204
+
205
+ assert File.exist?(plugin_path), "plugin unintentionally removed"
206
+ end
207
+
208
+ def test_regenerate_plugins_for
209
+ write_file File.join(@tempdir, "lib", "rubygems_plugin.rb") do |io|
210
+ io.write "puts __FILE__"
169
211
  end
212
+
213
+ @spec.files += %w[lib/rubygems_plugin.rb]
214
+
215
+ Gem::Installer.at(Gem::Package.build(@spec), :force => true).install
216
+
217
+ plugin_path = File.join Gem.plugindir, "a_plugin.rb"
218
+ assert File.exist?(plugin_path), "plugin not written"
219
+
220
+ FileUtils.rm plugin_path
221
+ Gem::Uninstaller.new(nil).regenerate_plugins_for @spec, Gem.plugindir
222
+
223
+ assert File.exist?(plugin_path), "plugin not regenerated"
170
224
  end
171
225
 
172
226
  def test_path_ok_eh
@@ -180,7 +234,7 @@ class TestGemUninstaller < Gem::InstallerTestCase
180
234
 
181
235
  @spec.loaded_from = @spec.loaded_from.gsub @spec.full_name, '\&-legacy'
182
236
  @spec.internal_init # blow out cache. but why did ^^ depend on cache?
183
- @spec.platform = 'legacy'
237
+ @spec.platform = "legacy"
184
238
 
185
239
  assert_equal true, uninstaller.path_ok?(@gemhome, @spec)
186
240
  end
@@ -194,16 +248,16 @@ class TestGemUninstaller < Gem::InstallerTestCase
194
248
  def test_uninstall
195
249
  uninstaller = Gem::Uninstaller.new @spec.name, :executables => true
196
250
 
197
- gem_dir = File.join @gemhome, 'gems', @spec.full_name
251
+ gem_dir = File.join @gemhome, "gems", @spec.full_name
198
252
 
199
253
  Gem.pre_uninstall do
200
254
  sleep(0.1) if win_platform?
201
- assert File.exist?(gem_dir), 'gem_dir should exist'
255
+ assert File.exist?(gem_dir), "gem_dir should exist"
202
256
  end
203
257
 
204
258
  Gem.post_uninstall do
205
259
  sleep(0.1) if win_platform?
206
- refute File.exist?(gem_dir), 'gem_dir should not exist'
260
+ refute File.exist?(gem_dir), "gem_dir should not exist"
207
261
  end
208
262
 
209
263
  uninstaller.uninstall
@@ -215,7 +269,7 @@ class TestGemUninstaller < Gem::InstallerTestCase
215
269
  end
216
270
 
217
271
  def test_uninstall_default_gem
218
- spec = new_default_spec 'default', '2'
272
+ spec = new_default_spec "default", "2"
219
273
 
220
274
  install_default_gems spec
221
275
 
@@ -227,28 +281,35 @@ class TestGemUninstaller < Gem::InstallerTestCase
227
281
 
228
282
  lines = @ui.output.split("\n")
229
283
 
230
- assert_equal 'Gem default-2 cannot be uninstalled because it is a default gem', lines.shift
284
+ assert_equal "Gem default-2 cannot be uninstalled because it is a default gem", lines.shift
231
285
  end
232
286
 
233
287
  def test_uninstall_default_gem_with_same_version
234
- default_spec = new_default_spec 'default', '2'
288
+ default_spec = new_default_spec "default", "2"
235
289
  install_default_gems default_spec
236
290
 
237
- spec = util_spec 'default', '2'
291
+ spec = util_spec "default", "2"
238
292
  install_gem spec
239
293
 
240
294
  Gem::Specification.reset
241
295
 
242
296
  uninstaller = Gem::Uninstaller.new spec.name, :executables => true
243
297
 
244
- uninstaller.uninstall
245
-
246
- refute_path_exists spec.gem_dir
298
+ ui = Gem::MockGemUi.new "1\ny\n"
299
+ use_ui ui do
300
+ uninstaller.uninstall
301
+ end
302
+ expected = "Successfully uninstalled default-2\n" \
303
+ "There was both a regular copy and a default copy of default-2. The " \
304
+ "regular copy was successfully uninstalled, but the default copy " \
305
+ "was left around because default gems can't be removed.\n"
306
+ assert_equal expected, ui.output
307
+ assert_path_not_exist spec.gem_dir
247
308
  end
248
309
 
249
310
  def test_uninstall_extension
250
- @spec.extensions << 'extconf.rb'
251
- write_file File.join(@tempdir, 'extconf.rb') do |io|
311
+ @spec.extensions << "extconf.rb"
312
+ write_file File.join(@tempdir, "extconf.rb") do |io|
252
313
  io.write <<-RUBY
253
314
  require 'mkmf'
254
315
  create_makefile '#{@spec.name}'
@@ -260,22 +321,22 @@ create_makefile '#{@spec.name}'
260
321
  use_ui @ui do
261
322
  path = Gem::Package.build @spec
262
323
 
263
- installer = Gem::Installer.at path
324
+ installer = Gem::Installer.at path, :force => true
264
325
  installer.install
265
326
  end
266
327
 
267
- assert_path_exists @spec.extension_dir, 'sanity check'
328
+ assert_path_exist @spec.extension_dir, "sanity check"
268
329
 
269
330
  uninstaller = Gem::Uninstaller.new @spec.name, :executables => true
270
331
  uninstaller.uninstall
271
332
 
272
- refute_path_exists @spec.extension_dir
333
+ assert_path_not_exist @spec.extension_dir
273
334
  end
274
335
 
275
336
  def test_uninstall_nonexistent
276
- uninstaller = Gem::Uninstaller.new 'bogus', :executables => true
337
+ uninstaller = Gem::Uninstaller.new "bogus", :executables => true
277
338
 
278
- e = assert_raises Gem::InstallError do
339
+ e = assert_raise Gem::InstallError do
279
340
  uninstaller.uninstall
280
341
  end
281
342
 
@@ -283,32 +344,32 @@ create_makefile '#{@spec.name}'
283
344
  end
284
345
 
285
346
  def test_uninstall_not_ok
286
- quick_gem 'z' do |s|
347
+ quick_gem "z" do |s|
287
348
  s.add_runtime_dependency @spec.name
288
349
  end
289
350
 
290
351
  uninstaller = Gem::Uninstaller.new @spec.name
291
352
 
292
- gem_dir = File.join @gemhome, 'gems', @spec.full_name
293
- executable = File.join @gemhome, 'bin', 'executable'
353
+ gem_dir = File.join @gemhome, "gems", @spec.full_name
354
+ executable = File.join @gemhome, "bin", "executable"
294
355
 
295
- assert File.exist?(gem_dir), 'gem_dir must exist'
296
- assert File.exist?(executable), 'executable must exist'
356
+ assert File.exist?(gem_dir), "gem_dir must exist"
357
+ assert File.exist?(executable), "executable must exist"
297
358
 
298
359
  ui = Gem::MockGemUi.new "n\n"
299
360
 
300
- assert_raises Gem::DependencyRemovalException do
361
+ assert_raise Gem::DependencyRemovalException do
301
362
  use_ui ui do
302
363
  uninstaller.uninstall
303
364
  end
304
365
  end
305
366
 
306
- assert File.exist?(gem_dir), 'gem_dir must still exist'
307
- assert File.exist?(executable), 'executable must still exist'
367
+ assert File.exist?(gem_dir), "gem_dir must still exist"
368
+ assert File.exist?(executable), "executable must still exist"
308
369
  end
309
370
 
310
371
  def test_uninstall_user_install
311
- @user_spec = Gem::Specification.find_by_name 'b'
372
+ @user_spec = Gem::Specification.find_by_name "b"
312
373
 
313
374
  uninstaller = Gem::Uninstaller.new(@user_spec.name,
314
375
  :executables => true,
@@ -317,16 +378,16 @@ create_makefile '#{@spec.name}'
317
378
  gem_dir = File.join @user_spec.gem_dir
318
379
 
319
380
  Gem.pre_uninstall do
320
- assert_path_exists gem_dir
381
+ assert_path_exist gem_dir
321
382
  end
322
383
 
323
384
  Gem.post_uninstall do
324
- refute_path_exists gem_dir
385
+ assert_path_not_exist gem_dir
325
386
  end
326
387
 
327
388
  uninstaller.uninstall
328
389
 
329
- refute_path_exists gem_dir
390
+ assert_path_not_exist gem_dir
330
391
 
331
392
  assert_same uninstaller, @pre_uninstall_hook_arg
332
393
  assert_same uninstaller, @post_uninstall_hook_arg
@@ -338,7 +399,7 @@ create_makefile '#{@spec.name}'
338
399
 
339
400
  uninstaller = Gem::Uninstaller.new @spec.name, :executables => true
340
401
 
341
- e = assert_raises Gem::InstallError do
402
+ e = assert_raise Gem::InstallError do
342
403
  uninstaller.uninstall
343
404
  end
344
405
 
@@ -353,9 +414,9 @@ create_makefile '#{@spec.name}'
353
414
  def test_uninstall_selection
354
415
  util_make_gems
355
416
 
356
- list = Gem::Specification.find_all_by_name 'a'
417
+ list = Gem::Specification.find_all_by_name "a"
357
418
 
358
- uninstaller = Gem::Uninstaller.new 'a'
419
+ uninstaller = Gem::Uninstaller.new "a"
359
420
 
360
421
  ui = Gem::MockGemUi.new "1\ny\n"
361
422
 
@@ -363,39 +424,39 @@ create_makefile '#{@spec.name}'
363
424
  uninstaller.uninstall
364
425
  end
365
426
 
366
- updated_list = Gem::Specification.find_all_by_name('a')
427
+ updated_list = Gem::Specification.find_all_by_name("a")
367
428
  assert_equal list.length - 1, updated_list.length
368
429
 
369
- assert_match ' 1. a-1', ui.output
370
- assert_match ' 2. a-2', ui.output
371
- assert_match ' 3. a-3.a', ui.output
372
- assert_match ' 4. All versions', ui.output
373
- assert_match 'uninstalled a-1', ui.output
430
+ assert_match " 1. a-1", ui.output
431
+ assert_match " 2. a-2", ui.output
432
+ assert_match " 3. a-3.a", ui.output
433
+ assert_match " 4. All versions", ui.output
434
+ assert_match "uninstalled a-1", ui.output
374
435
  end
375
436
 
376
437
  def test_uninstall_selection_greater_than_one
377
438
  util_make_gems
378
439
 
379
- list = Gem::Specification.find_all_by_name('a')
440
+ list = Gem::Specification.find_all_by_name("a")
380
441
 
381
- uninstaller = Gem::Uninstaller.new('a')
442
+ uninstaller = Gem::Uninstaller.new("a")
382
443
 
383
444
  use_ui Gem::MockGemUi.new("2\ny\n") do
384
445
  uninstaller.uninstall
385
446
  end
386
447
 
387
- updated_list = Gem::Specification.find_all_by_name('a')
448
+ updated_list = Gem::Specification.find_all_by_name("a")
388
449
  assert_equal list.length - 1, updated_list.length
389
450
  end
390
451
 
391
452
  def test_uninstall_prompts_about_broken_deps
392
- quick_gem 'r', '1' do |s|
393
- s.add_dependency 'q', '= 1'
453
+ quick_gem "r", "1" do |s|
454
+ s.add_dependency "q", "= 1"
394
455
  end
395
456
 
396
- quick_gem 'q', '1'
457
+ quick_gem "q", "1"
397
458
 
398
- un = Gem::Uninstaller.new('q')
459
+ un = Gem::Uninstaller.new("q")
399
460
  ui = Gem::MockGemUi.new("y\n")
400
461
 
401
462
  use_ui ui do
@@ -405,27 +466,27 @@ create_makefile '#{@spec.name}'
405
466
  lines = ui.output.split("\n")
406
467
  lines.shift
407
468
 
408
- assert_match %r!You have requested to uninstall the gem:!, lines.shift
469
+ assert_match %r{You have requested to uninstall the gem:}, lines.shift
409
470
  lines.shift
410
471
  lines.shift
411
472
 
412
- assert_match %r!r-1 depends on q \(= 1\)!, lines.shift
413
- assert_match %r!Successfully uninstalled q-1!, lines.last
473
+ assert_match %r{r-1 depends on q \(= 1\)}, lines.shift
474
+ assert_match %r{Successfully uninstalled q-1}, lines.last
414
475
  end
415
476
 
416
477
  def test_uninstall_only_lists_unsatisfied_deps
417
- quick_gem 'r', '1' do |s|
418
- s.add_dependency 'q', '~> 1.0'
478
+ quick_gem "r", "1" do |s|
479
+ s.add_dependency "q", "~> 1.0"
419
480
  end
420
481
 
421
- quick_gem 'x', '1' do |s|
422
- s.add_dependency 'q', '= 1.0'
482
+ quick_gem "x", "1" do |s|
483
+ s.add_dependency "q", "= 1.0"
423
484
  end
424
485
 
425
- quick_gem 'q', '1.0'
426
- quick_gem 'q', '1.1'
486
+ quick_gem "q", "1.0"
487
+ quick_gem "q", "1.1"
427
488
 
428
- un = Gem::Uninstaller.new('q', :version => "1.0")
489
+ un = Gem::Uninstaller.new("q", :version => "1.0")
429
490
  ui = Gem::MockGemUi.new("y\n")
430
491
 
431
492
  use_ui ui do
@@ -435,23 +496,23 @@ create_makefile '#{@spec.name}'
435
496
  lines = ui.output.split("\n")
436
497
  lines.shift
437
498
 
438
- assert_match %r!You have requested to uninstall the gem:!, lines.shift
499
+ assert_match %r{You have requested to uninstall the gem:}, lines.shift
439
500
  lines.shift
440
501
  lines.shift
441
502
 
442
- assert_match %r!x-1 depends on q \(= 1.0\)!, lines.shift
443
- assert_match %r!Successfully uninstalled q-1.0!, lines.last
503
+ assert_match %r{x-1 depends on q \(= 1.0\)}, lines.shift
504
+ assert_match %r{Successfully uninstalled q-1.0}, lines.last
444
505
  end
445
506
 
446
507
  def test_uninstall_doesnt_prompt_when_other_gem_satisfies_requirement
447
- quick_gem 'r', '1' do |s|
448
- s.add_dependency 'q', '~> 1.0'
508
+ quick_gem "r", "1" do |s|
509
+ s.add_dependency "q", "~> 1.0"
449
510
  end
450
511
 
451
- quick_gem 'q', '1.0'
452
- quick_gem 'q', '1.1'
512
+ quick_gem "q", "1.0"
513
+ quick_gem "q", "1.1"
453
514
 
454
- un = Gem::Uninstaller.new('q', :version => "1.0")
515
+ un = Gem::Uninstaller.new("q", :version => "1.0")
455
516
  ui = Gem::MockGemUi.new("y\n")
456
517
 
457
518
  use_ui ui do
@@ -464,13 +525,13 @@ create_makefile '#{@spec.name}'
464
525
  end
465
526
 
466
527
  def test_uninstall_doesnt_prompt_when_removing_a_dev_dep
467
- quick_gem 'r', '1' do |s|
468
- s.add_development_dependency 'q', '= 1.0'
528
+ quick_gem "r", "1" do |s|
529
+ s.add_development_dependency "q", "= 1.0"
469
530
  end
470
531
 
471
- quick_gem 'q', '1.0'
532
+ quick_gem "q", "1.0"
472
533
 
473
- un = Gem::Uninstaller.new('q', :version => "1.0")
534
+ un = Gem::Uninstaller.new("q", :version => "1.0")
474
535
  ui = Gem::MockGemUi.new("y\n")
475
536
 
476
537
  use_ui ui do
@@ -483,16 +544,16 @@ create_makefile '#{@spec.name}'
483
544
  end
484
545
 
485
546
  def test_uninstall_doesnt_prompt_and_raises_when_abort_on_dependent_set
486
- quick_gem 'r', '1' do |s|
487
- s.add_dependency 'q', '= 1'
547
+ quick_gem "r", "1" do |s|
548
+ s.add_dependency "q", "= 1"
488
549
  end
489
550
 
490
- quick_gem 'q', '1'
551
+ quick_gem "q", "1"
491
552
 
492
- un = Gem::Uninstaller.new('q', :abort_on_dependent => true)
553
+ un = Gem::Uninstaller.new("q", :abort_on_dependent => true)
493
554
  ui = Gem::MockGemUi.new("y\n")
494
555
 
495
- assert_raises Gem::DependencyRemovalException do
556
+ assert_raise Gem::DependencyRemovalException do
496
557
  use_ui ui do
497
558
  un.uninstall
498
559
  end
@@ -500,13 +561,13 @@ create_makefile '#{@spec.name}'
500
561
  end
501
562
 
502
563
  def test_uninstall_prompt_includes_dep_type
503
- quick_gem 'r', '1' do |s|
504
- s.add_development_dependency 'q', '= 1'
564
+ quick_gem "r", "1" do |s|
565
+ s.add_development_dependency "q", "= 1"
505
566
  end
506
567
 
507
- quick_gem 'q', '1'
568
+ quick_gem "q", "1"
508
569
 
509
- un = Gem::Uninstaller.new('q', :check_dev => true)
570
+ un = Gem::Uninstaller.new("q", :check_dev => true)
510
571
  ui = Gem::MockGemUi.new("y\n")
511
572
 
512
573
  use_ui ui do
@@ -516,12 +577,41 @@ create_makefile '#{@spec.name}'
516
577
  lines = ui.output.split("\n")
517
578
  lines.shift
518
579
 
519
- assert_match %r!You have requested to uninstall the gem:!, lines.shift
580
+ assert_match %r{You have requested to uninstall the gem:}, lines.shift
520
581
  lines.shift
521
582
  lines.shift
522
583
 
523
- assert_match %r!r-1 depends on q \(= 1, development\)!, lines.shift
524
- assert_match %r!Successfully uninstalled q-1!, lines.last
584
+ assert_match %r{r-1 depends on q \(= 1, development\)}, lines.shift
585
+ assert_match %r{Successfully uninstalled q-1}, lines.last
586
+ end
587
+
588
+ def test_uninstall_prompt_only_lists_the_dependents_that_prevented_uninstallation
589
+ quick_gem "r", "1" do |s|
590
+ s.add_development_dependency "q", "= 1"
591
+ end
592
+
593
+ quick_gem "s", "1" do |s|
594
+ s.add_dependency "q", "= 1"
595
+ end
596
+
597
+ quick_gem "q", "1"
598
+
599
+ un = Gem::Uninstaller.new("q", :check_dev => false)
600
+ ui = Gem::MockGemUi.new("y\n")
601
+
602
+ use_ui ui do
603
+ un.uninstall
604
+ end
605
+
606
+ lines = ui.output.split("\n")
607
+ lines.shift
608
+
609
+ assert_match %r{You have requested to uninstall the gem:}, lines.shift
610
+ lines.shift
611
+ lines.shift
612
+
613
+ assert_match %r{s-1 depends on q \(= 1\)}, lines.shift
614
+ assert_match %r{Successfully uninstalled q-1}, lines.last
525
615
  end
526
616
 
527
617
  def test_uninstall_no_permission
@@ -536,10 +626,49 @@ create_makefile '#{@spec.name}'
536
626
  end
537
627
 
538
628
  FileUtils.stub :rm_r, stub_rm_r do
539
- assert_raises Gem::UninstallError do
629
+ assert_raise Gem::UninstallError do
540
630
  uninstaller.uninstall
541
631
  end
542
632
  end
543
633
  end
544
634
 
635
+ def test_uninstall_keeps_plugins_up_to_date
636
+ write_file File.join(@tempdir, "lib", "rubygems_plugin.rb") do |io|
637
+ io.write "puts __FILE__"
638
+ end
639
+
640
+ plugin_path = File.join Gem.plugindir, "a_plugin.rb"
641
+
642
+ @spec.version = "1"
643
+ Gem::Installer.at(Gem::Package.build(@spec), :force => true).install
644
+
645
+ refute File.exist?(plugin_path), "version without plugin installed, but plugin written"
646
+
647
+ @spec.files += %w[lib/rubygems_plugin.rb]
648
+ @spec.version = "2"
649
+ Gem::Installer.at(Gem::Package.build(@spec), :force => true).install
650
+
651
+ assert File.exist?(plugin_path), "version with plugin installed, but plugin not written"
652
+ assert_match %r{\Arequire.*a-2/lib/rubygems_plugin\.rb}, File.read(plugin_path), "written plugin has incorrect content"
653
+
654
+ @spec.version = "3"
655
+ Gem::Installer.at(Gem::Package.build(@spec), :force => true).install
656
+
657
+ assert File.exist?(plugin_path), "version with plugin installed, but plugin removed"
658
+ assert_match %r{\Arequire.*a-3/lib/rubygems_plugin\.rb}, File.read(plugin_path), "old version installed, but plugin updated"
659
+
660
+ Gem::Uninstaller.new("a", :version => "1", :executables => true).uninstall
661
+
662
+ assert File.exist?(plugin_path), "plugin removed when old version uninstalled"
663
+ assert_match %r{\Arequire.*a-3/lib/rubygems_plugin\.rb}, File.read(plugin_path), "old version uninstalled, but plugin updated"
664
+
665
+ Gem::Uninstaller.new("a", version: "3", :executables => true).uninstall
666
+
667
+ assert File.exist?(plugin_path), "plugin removed when old version uninstalled and another version with plugin still present"
668
+ assert_match %r{\Arequire.*a-2/lib/rubygems_plugin\.rb}, File.read(plugin_path), "latest version uninstalled, but plugin not updated to previous version"
669
+
670
+ Gem::Uninstaller.new("a", version: "2", :executables => true).uninstall
671
+
672
+ refute File.exist?(plugin_path), "last version uninstalled, but plugin still present"
673
+ end
545
674
  end