rubygems-update 3.0.3 → 3.4.7

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 (795) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5556 -0
  3. data/CODE_OF_CONDUCT.md +62 -24
  4. data/CONTRIBUTING.md +111 -21
  5. data/MAINTAINERS.txt +1 -6
  6. data/Manifest.txt +209 -101
  7. data/POLICIES.md +65 -22
  8. data/README.md +23 -15
  9. data/UPGRADING.md +5 -81
  10. data/bin/gem +2 -16
  11. data/bin/update_rubygems +5 -5
  12. data/bundler/CHANGELOG.md +2619 -1256
  13. data/bundler/LICENSE.md +18 -19
  14. data/bundler/README.md +11 -12
  15. data/bundler/UPGRADING.md +222 -0
  16. data/bundler/bundler.gemspec +13 -33
  17. data/bundler/exe/bundle +26 -11
  18. data/bundler/exe/bundler +1 -1
  19. data/bundler/lib/bundler/.document +1 -0
  20. data/bundler/lib/bundler/build_metadata.rb +5 -13
  21. data/bundler/lib/bundler/capistrano.rb +4 -4
  22. data/bundler/lib/bundler/cli/add.rb +28 -16
  23. data/bundler/lib/bundler/cli/binstubs.rb +11 -3
  24. data/bundler/lib/bundler/cli/cache.rb +24 -17
  25. data/bundler/lib/bundler/cli/check.rb +5 -3
  26. data/bundler/lib/bundler/cli/clean.rb +1 -1
  27. data/bundler/lib/bundler/cli/common.rb +41 -13
  28. data/bundler/lib/bundler/cli/config.rb +170 -86
  29. data/bundler/lib/bundler/cli/console.rb +3 -3
  30. data/bundler/lib/bundler/cli/doctor.rb +27 -10
  31. data/bundler/lib/bundler/cli/exec.rb +8 -25
  32. data/bundler/lib/bundler/cli/fund.rb +36 -0
  33. data/bundler/lib/bundler/cli/gem.rb +261 -48
  34. data/bundler/lib/bundler/cli/info.rb +52 -8
  35. data/bundler/lib/bundler/cli/init.rb +7 -3
  36. data/bundler/lib/bundler/cli/inject.rb +1 -1
  37. data/bundler/lib/bundler/cli/install.rb +38 -66
  38. data/bundler/lib/bundler/cli/issue.rb +8 -7
  39. data/bundler/lib/bundler/cli/list.rb +19 -11
  40. data/bundler/lib/bundler/cli/lock.rb +11 -4
  41. data/bundler/lib/bundler/cli/open.rb +14 -9
  42. data/bundler/lib/bundler/cli/outdated.rb +152 -121
  43. data/bundler/lib/bundler/cli/platform.rb +2 -2
  44. data/bundler/lib/bundler/cli/plugin.rb +19 -2
  45. data/bundler/lib/bundler/cli/pristine.rb +6 -1
  46. data/bundler/lib/bundler/cli/remove.rb +1 -2
  47. data/bundler/lib/bundler/cli/show.rb +3 -3
  48. data/bundler/lib/bundler/cli/update.rb +49 -18
  49. data/bundler/lib/bundler/cli/viz.rb +1 -1
  50. data/bundler/lib/bundler/cli.rb +269 -165
  51. data/bundler/lib/bundler/compact_index_client/cache.rb +7 -24
  52. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  53. data/bundler/lib/bundler/compact_index_client/updater.rb +58 -57
  54. data/bundler/lib/bundler/compact_index_client.rb +28 -18
  55. data/bundler/lib/bundler/constants.rb +1 -1
  56. data/bundler/lib/bundler/current_ruby.rb +26 -11
  57. data/bundler/lib/bundler/definition.rb +359 -441
  58. data/bundler/lib/bundler/dependency.rb +29 -71
  59. data/bundler/lib/bundler/deployment.rb +1 -1
  60. data/bundler/lib/bundler/digest.rb +71 -0
  61. data/bundler/lib/bundler/dsl.rb +84 -116
  62. data/bundler/lib/bundler/endpoint_specification.rb +20 -14
  63. data/bundler/lib/bundler/env.rb +10 -15
  64. data/bundler/lib/bundler/environment_preserver.rb +30 -3
  65. data/bundler/lib/bundler/errors.rb +31 -14
  66. data/bundler/lib/bundler/feature_flag.rb +13 -33
  67. data/bundler/lib/bundler/fetcher/base.rb +7 -9
  68. data/bundler/lib/bundler/fetcher/compact_index.rb +46 -39
  69. data/bundler/lib/bundler/fetcher/dependency.rb +2 -2
  70. data/bundler/lib/bundler/fetcher/downloader.rb +15 -12
  71. data/bundler/lib/bundler/fetcher/index.rb +4 -30
  72. data/bundler/lib/bundler/fetcher.rb +39 -41
  73. data/bundler/lib/bundler/force_platform.rb +18 -0
  74. data/bundler/lib/bundler/friendly_errors.rb +49 -54
  75. data/bundler/lib/bundler/gem_helper.rb +79 -43
  76. data/bundler/lib/bundler/gem_helpers.rb +44 -28
  77. data/bundler/lib/bundler/gem_tasks.rb +1 -1
  78. data/bundler/lib/bundler/gem_version_promoter.rb +54 -99
  79. data/bundler/lib/bundler/graph.rb +5 -5
  80. data/bundler/lib/bundler/index.rb +14 -52
  81. data/bundler/lib/bundler/injector.rb +50 -16
  82. data/bundler/lib/bundler/inline.rb +28 -29
  83. data/bundler/lib/bundler/installer/gem_installer.rb +22 -23
  84. data/bundler/lib/bundler/installer/parallel_installer.rb +51 -51
  85. data/bundler/lib/bundler/installer/standalone.rb +62 -12
  86. data/bundler/lib/bundler/installer.rb +46 -97
  87. data/bundler/lib/bundler/lazy_specification.rb +88 -48
  88. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  89. data/bundler/lib/bundler/lockfile_parser.rb +30 -62
  90. data/bundler/{man → lib/bundler/man}/bundle-add.1 +29 -5
  91. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +22 -4
  92. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +6 -4
  93. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
  94. data/bundler/lib/bundler/man/bundle-cache.1 +61 -0
  95. data/bundler/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +22 -15
  96. data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
  97. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +2 -2
  98. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +1 -1
  99. data/bundler/{man → lib/bundler/man}/bundle-config.1 +78 -60
  100. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +96 -85
  101. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  102. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  103. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  104. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +6 -6
  105. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +6 -6
  106. data/bundler/lib/bundler/man/bundle-gem.1 +105 -0
  107. data/bundler/lib/bundler/man/bundle-gem.1.ronn +117 -0
  108. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  109. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  110. data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
  111. data/bundler/{man → lib/bundler/man}/bundle-init.1 +6 -2
  112. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +3 -1
  113. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +5 -2
  114. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +3 -1
  115. data/bundler/{man → lib/bundler/man}/bundle-install.1 +42 -37
  116. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +42 -38
  117. data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
  118. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  119. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  120. data/bundler/{man → lib/bundler/man}/bundle-open.1 +22 -2
  121. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +9 -1
  122. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +3 -10
  123. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +1 -10
  124. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +16 -6
  125. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
  126. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  127. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  128. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  129. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  130. data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
  131. data/bundler/{man → lib/bundler/man}/bundle-update.1 +8 -8
  132. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +8 -7
  133. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  134. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  135. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +4 -1
  136. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +2 -0
  137. data/bundler/{man → lib/bundler/man}/bundle.1 +17 -12
  138. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +14 -9
  139. data/bundler/lib/bundler/man/gemfile.5 +723 -0
  140. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +112 -95
  141. data/bundler/lib/bundler/man/index.txt +29 -0
  142. data/bundler/lib/bundler/match_metadata.rb +13 -0
  143. data/bundler/lib/bundler/match_platform.rb +1 -2
  144. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  145. data/bundler/lib/bundler/mirror.rb +10 -12
  146. data/bundler/lib/bundler/plugin/api/source.rb +29 -15
  147. data/bundler/lib/bundler/plugin/api.rb +1 -1
  148. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  149. data/bundler/lib/bundler/plugin/index.rb +31 -8
  150. data/bundler/lib/bundler/plugin/installer/git.rb +0 -4
  151. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -9
  152. data/bundler/lib/bundler/plugin/installer.rb +35 -22
  153. data/bundler/lib/bundler/plugin/source_list.rb +5 -1
  154. data/bundler/lib/bundler/plugin.rb +102 -42
  155. data/bundler/lib/bundler/process_lock.rb +1 -1
  156. data/bundler/lib/bundler/remote_specification.rb +15 -8
  157. data/bundler/lib/bundler/resolver/base.rb +77 -0
  158. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  159. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  160. data/bundler/lib/bundler/resolver/package.rb +72 -0
  161. data/bundler/lib/bundler/resolver/root.rb +25 -0
  162. data/bundler/lib/bundler/resolver/spec_group.rb +49 -73
  163. data/bundler/lib/bundler/resolver.rb +343 -300
  164. data/bundler/lib/bundler/retry.rb +4 -4
  165. data/bundler/lib/bundler/ruby_dsl.rb +1 -1
  166. data/bundler/lib/bundler/ruby_version.rb +9 -37
  167. data/bundler/lib/bundler/rubygems_ext.rb +235 -92
  168. data/bundler/lib/bundler/rubygems_gem_installer.rb +87 -21
  169. data/bundler/lib/bundler/rubygems_integration.rb +179 -515
  170. data/bundler/lib/bundler/runtime.rb +25 -40
  171. data/bundler/lib/bundler/self_manager.rb +168 -0
  172. data/bundler/lib/bundler/settings.rb +162 -118
  173. data/bundler/lib/bundler/setup.rb +11 -12
  174. data/bundler/lib/bundler/shared_helpers.rb +61 -102
  175. data/bundler/lib/bundler/similarity_detector.rb +3 -3
  176. data/bundler/lib/bundler/source/git/git_proxy.rb +257 -128
  177. data/bundler/lib/bundler/source/git.rb +84 -61
  178. data/bundler/lib/bundler/source/metadata.rb +9 -9
  179. data/bundler/lib/bundler/source/path/installer.rb +11 -32
  180. data/bundler/lib/bundler/source/path.rb +28 -17
  181. data/bundler/lib/bundler/source/rubygems/remote.rb +3 -4
  182. data/bundler/lib/bundler/source/rubygems.rb +171 -197
  183. data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
  184. data/bundler/lib/bundler/source.rb +30 -10
  185. data/bundler/lib/bundler/source_list.rb +112 -67
  186. data/bundler/lib/bundler/source_map.rb +71 -0
  187. data/bundler/lib/bundler/spec_set.rb +86 -72
  188. data/bundler/lib/bundler/stub_specification.rb +45 -37
  189. data/bundler/lib/bundler/templates/Executable +3 -5
  190. data/bundler/lib/bundler/templates/Executable.bundler +21 -17
  191. data/bundler/lib/bundler/templates/Executable.standalone +4 -4
  192. data/bundler/lib/bundler/templates/Gemfile +0 -2
  193. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  194. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  195. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  196. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +22 -2
  197. data/bundler/lib/bundler/templates/newgem/README.md.tt +13 -15
  198. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +33 -5
  199. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  200. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
  201. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  202. data/bundler/lib/bundler/templates/newgem/ext/newgem/{extconf.rb.tt → extconf-c.rb.tt} +2 -0
  203. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  204. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  205. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  206. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  207. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  208. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  209. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  210. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +36 -41
  211. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  212. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  213. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  214. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  215. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  216. data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  217. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
  218. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  219. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  220. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  221. data/bundler/lib/bundler/ui/shell.rb +39 -20
  222. data/bundler/lib/bundler/ui/silent.rb +21 -5
  223. data/bundler/lib/bundler/ui.rb +3 -3
  224. data/bundler/lib/bundler/uri_credentials_filter.rb +10 -4
  225. data/bundler/lib/bundler/vendor/.document +1 -0
  226. data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  227. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  228. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  229. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  230. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +128 -0
  231. data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  232. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1493 -425
  233. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  234. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  235. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  236. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  237. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
  238. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  239. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  240. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  241. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  242. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +155 -0
  243. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  244. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  245. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  246. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  247. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  248. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  249. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  250. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  251. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  252. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +243 -0
  253. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  254. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  255. data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
  256. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  257. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
  258. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
  259. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +25 -14
  260. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +20 -10
  261. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +34 -15
  262. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
  263. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
  264. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
  265. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +83 -0
  266. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  267. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
  268. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  269. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  270. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  271. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  272. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
  273. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
  274. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +40 -6
  275. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  276. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  277. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
  278. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +88 -13
  279. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
  280. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
  281. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +5 -5
  282. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
  283. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  284. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +16 -9
  285. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  286. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
  287. data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  288. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +729 -0
  289. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  290. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  291. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1587 -0
  292. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  293. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  294. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  295. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  296. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  297. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
  298. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +119 -0
  299. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  300. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  301. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  302. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  303. data/bundler/lib/bundler/vendored_fileutils.rb +1 -6
  304. data/bundler/lib/bundler/vendored_persistent.rb +2 -39
  305. data/bundler/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  306. data/bundler/lib/bundler/vendored_thor.rb +2 -2
  307. data/bundler/lib/bundler/vendored_tsort.rb +4 -0
  308. data/bundler/lib/bundler/vendored_uri.rb +4 -0
  309. data/bundler/lib/bundler/version.rb +5 -20
  310. data/bundler/lib/bundler/vlad.rb +2 -2
  311. data/bundler/lib/bundler/worker.rb +26 -15
  312. data/bundler/lib/bundler/yaml_serializer.rb +3 -4
  313. data/bundler/lib/bundler.rb +285 -183
  314. data/hide_lib_for_update/note.txt +0 -4
  315. data/lib/rubygems/available_set.rb +7 -8
  316. data/lib/rubygems/basic_specification.rb +44 -31
  317. data/lib/rubygems/bundler_version_finder.rb +28 -50
  318. data/lib/rubygems/command.rb +104 -46
  319. data/lib/rubygems/command_manager.rb +35 -16
  320. data/lib/rubygems/commands/build_command.rb +77 -26
  321. data/lib/rubygems/commands/cert_command.rb +78 -76
  322. data/lib/rubygems/commands/check_command.rb +20 -22
  323. data/lib/rubygems/commands/cleanup_command.rb +36 -32
  324. data/lib/rubygems/commands/contents_command.rb +16 -18
  325. data/lib/rubygems/commands/dependency_command.rb +39 -50
  326. data/lib/rubygems/commands/environment_command.rb +11 -13
  327. data/lib/rubygems/commands/fetch_command.rb +33 -16
  328. data/lib/rubygems/commands/generate_index_command.rb +18 -17
  329. data/lib/rubygems/commands/help_command.rb +7 -7
  330. data/lib/rubygems/commands/info_command.rb +11 -6
  331. data/lib/rubygems/commands/install_command.rb +45 -79
  332. data/lib/rubygems/commands/list_command.rb +9 -8
  333. data/lib/rubygems/commands/lock_command.rb +7 -9
  334. data/lib/rubygems/commands/mirror_command.rb +3 -4
  335. data/lib/rubygems/commands/open_command.rb +11 -14
  336. data/lib/rubygems/commands/outdated_command.rb +5 -6
  337. data/lib/rubygems/commands/owner_command.rb +29 -22
  338. data/lib/rubygems/commands/pristine_command.rb +61 -51
  339. data/lib/rubygems/commands/push_command.rb +26 -63
  340. data/lib/rubygems/commands/query_command.rb +21 -337
  341. data/lib/rubygems/commands/rdoc_command.rb +26 -26
  342. data/lib/rubygems/commands/search_command.rb +8 -8
  343. data/lib/rubygems/commands/server_command.rb +16 -77
  344. data/lib/rubygems/commands/setup_command.rb +282 -241
  345. data/lib/rubygems/commands/signin_command.rb +9 -10
  346. data/lib/rubygems/commands/signout_command.rb +7 -9
  347. data/lib/rubygems/commands/sources_command.rb +42 -26
  348. data/lib/rubygems/commands/specification_command.rb +25 -20
  349. data/lib/rubygems/commands/stale_command.rb +3 -3
  350. data/lib/rubygems/commands/uninstall_command.rb +58 -49
  351. data/lib/rubygems/commands/unpack_command.rb +15 -44
  352. data/lib/rubygems/commands/update_command.rb +133 -81
  353. data/lib/rubygems/commands/which_command.rb +8 -11
  354. data/lib/rubygems/commands/yank_command.rb +22 -19
  355. data/lib/rubygems/compatibility.rb +7 -5
  356. data/lib/rubygems/config_file.rb +101 -47
  357. data/lib/rubygems/core_ext/kernel_gem.rb +8 -12
  358. data/lib/rubygems/core_ext/kernel_require.rb +124 -83
  359. data/lib/rubygems/core_ext/kernel_warn.rb +35 -30
  360. data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
  361. data/lib/rubygems/defaults.rb +131 -55
  362. data/lib/rubygems/dependency.rb +44 -27
  363. data/lib/rubygems/dependency_installer.rb +49 -205
  364. data/lib/rubygems/dependency_list.rb +24 -25
  365. data/lib/rubygems/deprecate.rb +106 -12
  366. data/lib/rubygems/doctor.rb +22 -22
  367. data/lib/rubygems/errors.rb +8 -14
  368. data/lib/rubygems/exceptions.rb +35 -33
  369. data/lib/rubygems/ext/build_error.rb +2 -0
  370. data/lib/rubygems/ext/builder.rb +71 -95
  371. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
  372. data/lib/rubygems/ext/cargo_builder.rb +360 -0
  373. data/lib/rubygems/ext/cmake_builder.rb +6 -7
  374. data/lib/rubygems/ext/configure_builder.rb +5 -8
  375. data/lib/rubygems/ext/ext_conf_builder.rb +45 -65
  376. data/lib/rubygems/ext/rake_builder.rb +7 -10
  377. data/lib/rubygems/ext.rb +7 -6
  378. data/lib/rubygems/gem_runner.rb +15 -26
  379. data/lib/rubygems/gemcutter_utilities.rb +179 -54
  380. data/lib/rubygems/indexer.rb +38 -53
  381. data/lib/rubygems/install_default_message.rb +2 -2
  382. data/lib/rubygems/install_message.rb +2 -2
  383. data/lib/rubygems/install_update_options.rb +73 -64
  384. data/lib/rubygems/installer.rb +230 -173
  385. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  386. data/lib/rubygems/local_remote_options.rb +22 -24
  387. data/lib/rubygems/mock_gem_ui.rb +2 -5
  388. data/lib/rubygems/name_tuple.rb +10 -14
  389. data/lib/rubygems/openssl.rb +7 -0
  390. data/lib/rubygems/optparse/.document +1 -0
  391. data/lib/rubygems/optparse/COPYING +56 -0
  392. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  393. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  394. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  395. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  396. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  397. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  398. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  399. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  400. data/lib/rubygems/optparse/lib/optparse.rb +2308 -0
  401. data/lib/rubygems/optparse.rb +3 -0
  402. data/lib/rubygems/package/digest_io.rb +0 -2
  403. data/lib/rubygems/package/file_source.rb +2 -4
  404. data/lib/rubygems/package/io_source.rb +4 -2
  405. data/lib/rubygems/package/old.rb +9 -11
  406. data/lib/rubygems/package/tar_header.rb +73 -66
  407. data/lib/rubygems/package/tar_reader/entry.rb +8 -9
  408. data/lib/rubygems/package/tar_reader.rb +16 -13
  409. data/lib/rubygems/package/tar_writer.rb +12 -22
  410. data/lib/rubygems/package.rb +142 -125
  411. data/lib/rubygems/package_task.rb +5 -11
  412. data/lib/rubygems/path_support.rb +3 -8
  413. data/lib/rubygems/platform.rb +113 -73
  414. data/lib/rubygems/psych_tree.rb +1 -1
  415. data/lib/rubygems/query_utils.rb +351 -0
  416. data/lib/rubygems/rdoc.rb +4 -16
  417. data/lib/rubygems/remote_fetcher.rb +64 -136
  418. data/lib/rubygems/request/connection_pools.rb +7 -11
  419. data/lib/rubygems/request/http_pool.rb +2 -3
  420. data/lib/rubygems/request.rb +31 -32
  421. data/lib/rubygems/request_set/gem_dependency_api.rb +135 -136
  422. data/lib/rubygems/request_set/lockfile/parser.rb +28 -28
  423. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -5
  424. data/lib/rubygems/request_set/lockfile.rb +21 -20
  425. data/lib/rubygems/request_set.rb +30 -43
  426. data/lib/rubygems/requirement.rb +42 -64
  427. data/lib/rubygems/resolver/activation_request.rb +29 -53
  428. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  429. data/lib/rubygems/resolver/api_set.rb +33 -26
  430. data/lib/rubygems/resolver/api_specification.rb +30 -16
  431. data/lib/rubygems/resolver/best_set.rb +9 -11
  432. data/lib/rubygems/resolver/composed_set.rb +3 -5
  433. data/lib/rubygems/resolver/conflict.rb +12 -19
  434. data/lib/rubygems/resolver/current_set.rb +0 -2
  435. data/lib/rubygems/resolver/dependency_request.rb +3 -5
  436. data/lib/rubygems/resolver/git_set.rb +2 -4
  437. data/lib/rubygems/resolver/git_specification.rb +6 -8
  438. data/lib/rubygems/resolver/index_set.rb +4 -6
  439. data/lib/rubygems/resolver/index_specification.rb +38 -7
  440. data/lib/rubygems/resolver/installed_specification.rb +4 -6
  441. data/lib/rubygems/resolver/installer_set.rb +69 -27
  442. data/lib/rubygems/resolver/local_specification.rb +2 -4
  443. data/lib/rubygems/resolver/lock_set.rb +7 -9
  444. data/lib/rubygems/resolver/lock_specification.rb +6 -8
  445. data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
  446. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  447. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
  448. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  449. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  450. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  451. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  452. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  453. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  454. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  455. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  456. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
  457. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +42 -9
  458. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +82 -8
  459. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  460. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
  461. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  462. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -165
  463. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  464. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  465. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  466. data/lib/rubygems/resolver/molinillo.rb +1 -1
  467. data/lib/rubygems/resolver/requirement_list.rb +0 -1
  468. data/lib/rubygems/resolver/set.rb +0 -3
  469. data/lib/rubygems/resolver/source_set.rb +0 -2
  470. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  471. data/lib/rubygems/resolver/specification.rb +14 -3
  472. data/lib/rubygems/resolver/vendor_set.rb +1 -3
  473. data/lib/rubygems/resolver/vendor_specification.rb +3 -5
  474. data/lib/rubygems/resolver.rb +58 -54
  475. data/lib/rubygems/s3_uri_signer.rb +175 -0
  476. data/lib/rubygems/safe_yaml.rb +14 -16
  477. data/lib/rubygems/security/policies.rb +47 -47
  478. data/lib/rubygems/security/policy.rb +25 -29
  479. data/lib/rubygems/security/signer.rb +16 -18
  480. data/lib/rubygems/security/trust_dir.rb +5 -6
  481. data/lib/rubygems/security.rb +90 -69
  482. data/lib/rubygems/security_option.rb +7 -8
  483. data/lib/rubygems/source/git.rb +30 -30
  484. data/lib/rubygems/source/installed.rb +1 -3
  485. data/lib/rubygems/source/local.rb +4 -6
  486. data/lib/rubygems/source/lock.rb +0 -2
  487. data/lib/rubygems/source/specific_file.rb +1 -3
  488. data/lib/rubygems/source/vendor.rb +0 -2
  489. data/lib/rubygems/source.rb +50 -38
  490. data/lib/rubygems/source_list.rb +9 -13
  491. data/lib/rubygems/spec_fetcher.rb +52 -64
  492. data/lib/rubygems/specification.rb +432 -463
  493. data/lib/rubygems/specification_policy.rb +185 -87
  494. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  495. data/lib/rubygems/stub_specification.rb +24 -29
  496. data/lib/rubygems/text.rb +21 -21
  497. data/lib/rubygems/tsort/.document +1 -0
  498. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  499. data/lib/rubygems/tsort/lib/tsort.rb +452 -0
  500. data/lib/rubygems/tsort.rb +3 -0
  501. data/lib/rubygems/uninstaller.rb +110 -57
  502. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  503. data/lib/rubygems/update_suggestion.rb +69 -0
  504. data/lib/rubygems/uri.rb +126 -0
  505. data/lib/rubygems/uri_formatter.rb +2 -4
  506. data/lib/rubygems/user_interaction.rb +46 -49
  507. data/lib/rubygems/util/licenses.rb +511 -404
  508. data/lib/rubygems/util.rb +40 -56
  509. data/lib/rubygems/validator.rb +15 -37
  510. data/lib/rubygems/version.rb +48 -29
  511. data/lib/rubygems/version_option.rb +11 -5
  512. data/lib/rubygems.rb +305 -332
  513. data/rubygems-update.gemspec +6 -13
  514. data/setup.rb +11 -22
  515. data/test/rubygems/alternate_cert.pem +14 -14
  516. data/test/rubygems/alternate_cert_32.pem +15 -15
  517. data/test/rubygems/alternate_key.pem +25 -25
  518. data/test/rubygems/bundler_test_gem.rb +419 -0
  519. data/test/rubygems/ca_cert.pem +74 -65
  520. data/test/rubygems/child_cert.pem +15 -16
  521. data/test/rubygems/child_cert_32.pem +15 -16
  522. data/test/rubygems/child_key.pem +25 -25
  523. data/test/rubygems/client.pem +103 -45
  524. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  525. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  526. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  527. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  528. data/test/rubygems/encrypted_private_key.pem +26 -26
  529. data/test/rubygems/expired_cert.pem +15 -15
  530. data/test/rubygems/future_cert.pem +15 -15
  531. data/test/rubygems/future_cert_32.pem +15 -15
  532. data/test/rubygems/grandchild_cert.pem +15 -16
  533. data/test/rubygems/grandchild_cert_32.pem +15 -16
  534. data/test/rubygems/grandchild_key.pem +25 -25
  535. data/{lib/rubygems/test_case.rb → test/rubygems/helper.rb} +505 -507
  536. data/{lib → test}/rubygems/installer_test_case.rb +115 -53
  537. data/test/rubygems/invalid_issuer_cert.pem +16 -16
  538. data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
  539. data/test/rubygems/invalid_key.pem +25 -25
  540. data/test/rubygems/invalid_signer_cert.pem +15 -15
  541. data/test/rubygems/invalid_signer_cert_32.pem +15 -15
  542. data/test/rubygems/invalidchild_cert.pem +15 -16
  543. data/test/rubygems/invalidchild_cert_32.pem +15 -16
  544. data/test/rubygems/invalidchild_key.pem +25 -25
  545. data/{lib → test}/rubygems/package/tar_test_case.rb +4 -6
  546. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  547. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  548. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  549. data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
  550. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
  551. data/test/rubygems/private_ec_key.pem +9 -0
  552. data/test/rubygems/private_key.pem +25 -25
  553. data/test/rubygems/public_cert.pem +16 -16
  554. data/test/rubygems/public_cert_32.pem +15 -15
  555. data/test/rubygems/public_key.pem +7 -7
  556. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  557. data/test/rubygems/rubygems_plugin.rb +2 -4
  558. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  559. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  560. data/test/rubygems/ssl_cert.pem +78 -17
  561. data/test/rubygems/ssl_key.pem +25 -13
  562. data/test/rubygems/test_bundled_ca.rb +44 -47
  563. data/test/rubygems/test_config.rb +5 -7
  564. data/test/rubygems/test_deprecate.rb +90 -10
  565. data/test/rubygems/test_exit.rb +17 -0
  566. data/test/rubygems/test_gem.rb +679 -885
  567. data/test/rubygems/test_gem_available_set.rb +24 -25
  568. data/test/rubygems/test_gem_bundler_version_finder.rb +42 -42
  569. data/test/rubygems/test_gem_command.rb +186 -39
  570. data/test/rubygems/test_gem_command_manager.rb +166 -36
  571. data/test/rubygems/test_gem_commands_build_command.rb +436 -52
  572. data/test/rubygems/test_gem_commands_cert_command.rb +193 -124
  573. data/test/rubygems/test_gem_commands_check_command.rb +9 -11
  574. data/test/rubygems/test_gem_commands_cleanup_command.rb +87 -62
  575. data/test/rubygems/test_gem_commands_contents_command.rb +73 -42
  576. data/test/rubygems/test_gem_commands_dependency_command.rb +39 -41
  577. data/test/rubygems/test_gem_commands_environment_command.rb +60 -48
  578. data/test/rubygems/test_gem_commands_fetch_command.rb +163 -32
  579. data/test/rubygems/test_gem_commands_generate_index_command.rb +39 -9
  580. data/test/rubygems/test_gem_commands_help_command.rb +34 -19
  581. data/test/rubygems/test_gem_commands_info_command.rb +34 -9
  582. data/test/rubygems/test_gem_commands_install_command.rb +600 -173
  583. data/test/rubygems/test_gem_commands_list_command.rb +5 -7
  584. data/test/rubygems/test_gem_commands_lock_command.rb +11 -13
  585. data/test/rubygems/test_gem_commands_mirror.rb +3 -4
  586. data/test/rubygems/test_gem_commands_open_command.rb +16 -19
  587. data/test/rubygems/test_gem_commands_outdated_command.rb +24 -7
  588. data/test/rubygems/test_gem_commands_owner_command.rb +183 -49
  589. data/test/rubygems/test_gem_commands_pristine_command.rb +222 -89
  590. data/test/rubygems/test_gem_commands_push_command.rb +178 -69
  591. data/test/rubygems/test_gem_commands_query_command.rb +114 -89
  592. data/test/rubygems/test_gem_commands_search_command.rb +2 -4
  593. data/test/rubygems/test_gem_commands_server_command.rb +6 -46
  594. data/test/rubygems/test_gem_commands_setup_command.rb +334 -157
  595. data/test/rubygems/test_gem_commands_signin_command.rb +187 -27
  596. data/test/rubygems/test_gem_commands_signout_command.rb +3 -10
  597. data/test/rubygems/test_gem_commands_sources_command.rb +266 -33
  598. data/test/rubygems/test_gem_commands_specification_command.rb +81 -55
  599. data/test/rubygems/test_gem_commands_stale_command.rb +4 -6
  600. data/test/rubygems/test_gem_commands_uninstall_command.rb +230 -95
  601. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -34
  602. data/test/rubygems/test_gem_commands_update_command.rb +412 -102
  603. data/test/rubygems/test_gem_commands_which_command.rb +12 -14
  604. data/test/rubygems/test_gem_commands_yank_command.rb +107 -26
  605. data/test/rubygems/test_gem_config_file.rb +120 -96
  606. data/test/rubygems/test_gem_dependency.rb +94 -86
  607. data/test/rubygems/test_gem_dependency_installer.rb +305 -388
  608. data/test/rubygems/test_gem_dependency_list.rb +66 -61
  609. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -7
  610. data/test/rubygems/test_gem_doctor.rb +73 -47
  611. data/test/rubygems/test_gem_ext_builder.rb +116 -106
  612. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +1 -0
  613. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +8 -0
  614. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +233 -0
  615. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +10 -0
  616. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +27 -0
  617. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +1 -0
  618. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +1 -0
  619. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +233 -0
  620. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +10 -0
  621. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +8 -0
  622. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +51 -0
  623. data/test/rubygems/test_gem_ext_cargo_builder.rb +166 -0
  624. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +33 -0
  625. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +60 -0
  626. data/test/rubygems/test_gem_ext_cmake_builder.rb +32 -37
  627. data/test/rubygems/test_gem_ext_configure_builder.rb +23 -31
  628. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +75 -79
  629. data/test/rubygems/test_gem_ext_rake_builder.rb +49 -30
  630. data/test/rubygems/test_gem_gem_runner.rb +52 -7
  631. data/test/rubygems/test_gem_gemcutter_utilities.rb +91 -76
  632. data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -6
  633. data/test/rubygems/test_gem_indexer.rb +120 -105
  634. data/test/rubygems/test_gem_install_update_options.rb +57 -33
  635. data/test/rubygems/test_gem_installer.rb +1230 -644
  636. data/test/rubygems/test_gem_local_remote_options.rb +11 -13
  637. data/test/rubygems/test_gem_name_tuple.rb +4 -6
  638. data/test/rubygems/test_gem_package.rb +396 -266
  639. data/test/rubygems/test_gem_package_old.rb +57 -56
  640. data/test/rubygems/test_gem_package_tar_header.rb +108 -50
  641. data/test/rubygems/test_gem_package_tar_reader.rb +8 -10
  642. data/test/rubygems/test_gem_package_tar_reader_entry.rb +77 -20
  643. data/test/rubygems/test_gem_package_tar_writer.rb +107 -101
  644. data/test/rubygems/test_gem_package_task.rb +58 -25
  645. data/test/rubygems/test_gem_path_support.rb +29 -29
  646. data/test/rubygems/test_gem_platform.rb +388 -199
  647. data/test/rubygems/test_gem_rdoc.rb +20 -155
  648. data/test/rubygems/test_gem_remote_fetcher.rb +474 -303
  649. data/test/rubygems/test_gem_request.rb +128 -85
  650. data/test/rubygems/test_gem_request_connection_pools.rb +32 -32
  651. data/test/rubygems/test_gem_request_set.rb +186 -110
  652. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +280 -261
  653. data/test/rubygems/test_gem_request_set_lockfile.rb +93 -94
  654. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +68 -69
  655. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +136 -136
  656. data/test/rubygems/test_gem_requirement.rb +140 -55
  657. data/test/rubygems/test_gem_resolver.rb +224 -115
  658. data/test/rubygems/test_gem_resolver_activation_request.rb +9 -40
  659. data/test/rubygems/test_gem_resolver_api_set.rb +79 -78
  660. data/test/rubygems/test_gem_resolver_api_specification.rb +47 -49
  661. data/test/rubygems/test_gem_resolver_best_set.rb +43 -22
  662. data/test/rubygems/test_gem_resolver_composed_set.rb +1 -3
  663. data/test/rubygems/test_gem_resolver_conflict.rb +12 -18
  664. data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -17
  665. data/test/rubygems/test_gem_resolver_git_set.rb +22 -24
  666. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -22
  667. data/test/rubygems/test_gem_resolver_index_set.rb +14 -16
  668. data/test/rubygems/test_gem_resolver_index_specification.rb +21 -18
  669. data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -8
  670. data/test/rubygems/test_gem_resolver_installer_set.rb +106 -44
  671. data/test/rubygems/test_gem_resolver_local_specification.rb +7 -9
  672. data/test/rubygems/test_gem_resolver_lock_set.rb +15 -17
  673. data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -19
  674. data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -3
  675. data/test/rubygems/test_gem_resolver_specification.rb +8 -10
  676. data/test/rubygems/test_gem_resolver_vendor_set.rb +9 -11
  677. data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -12
  678. data/test/rubygems/test_gem_security.rb +109 -79
  679. data/test/rubygems/test_gem_security_policy.rb +102 -107
  680. data/test/rubygems/test_gem_security_signer.rb +51 -52
  681. data/test/rubygems/test_gem_security_trust_dir.rb +14 -16
  682. data/test/rubygems/test_gem_silent_ui.rb +47 -42
  683. data/test/rubygems/test_gem_source.rb +66 -51
  684. data/test/rubygems/test_gem_source_fetch_problem.rb +17 -8
  685. data/test/rubygems/test_gem_source_git.rb +74 -74
  686. data/test/rubygems/test_gem_source_installed.rb +16 -18
  687. data/test/rubygems/test_gem_source_list.rb +5 -5
  688. data/test/rubygems/test_gem_source_local.rb +15 -16
  689. data/test/rubygems/test_gem_source_lock.rb +31 -33
  690. data/test/rubygems/test_gem_source_specific_file.rb +18 -19
  691. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  692. data/test/rubygems/test_gem_source_vendor.rb +13 -15
  693. data/test/rubygems/test_gem_spec_fetcher.rb +74 -67
  694. data/test/rubygems/test_gem_specification.rb +1051 -1071
  695. data/test/rubygems/test_gem_stream_ui.rb +25 -23
  696. data/test/rubygems/test_gem_stub_specification.rb +39 -56
  697. data/test/rubygems/test_gem_text.rb +8 -3
  698. data/test/rubygems/test_gem_uninstaller.rb +269 -100
  699. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -5
  700. data/test/rubygems/test_gem_update_suggestion.rb +208 -0
  701. data/test/rubygems/test_gem_uri.rb +39 -0
  702. data/test/rubygems/test_gem_uri_formatter.rb +14 -16
  703. data/test/rubygems/test_gem_util.rb +46 -34
  704. data/test/rubygems/test_gem_validator.rb +12 -15
  705. data/test/rubygems/test_gem_version.rb +49 -34
  706. data/test/rubygems/test_gem_version_option.rb +16 -18
  707. data/test/rubygems/test_kernel.rb +61 -53
  708. data/test/rubygems/test_project_sanity.rb +20 -0
  709. data/test/rubygems/test_remote_fetch_error.rb +7 -8
  710. data/test/rubygems/test_require.rb +415 -121
  711. data/test/rubygems/test_rubygems.rb +74 -0
  712. data/{lib/rubygems/test_utilities.rb → test/rubygems/utilities.rb} +74 -50
  713. data/test/rubygems/wrong_key_cert.pem +15 -15
  714. data/test/rubygems/wrong_key_cert_32.pem +15 -15
  715. data/test/test_changelog_generator.rb +17 -0
  716. metadata +218 -244
  717. data/.rubocop.yml +0 -66
  718. data/.travis.yml +0 -38
  719. data/History.txt +0 -3965
  720. data/Rakefile +0 -372
  721. data/appveyor.yml +0 -43
  722. data/bundler/CODE_OF_CONDUCT.md +0 -42
  723. data/bundler/CONTRIBUTING.md +0 -17
  724. data/bundler/exe/bundle_ruby +0 -60
  725. data/bundler/lib/bundler/cli/package.rb +0 -49
  726. data/bundler/lib/bundler/compatibility_guard.rb +0 -14
  727. data/bundler/lib/bundler/dep_proxy.rb +0 -48
  728. data/bundler/lib/bundler/gem_remote_fetcher.rb +0 -43
  729. data/bundler/lib/bundler/gemdeps.rb +0 -29
  730. data/bundler/lib/bundler/psyched_yaml.rb +0 -37
  731. data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  732. data/bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  733. data/bundler/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  734. data/bundler/lib/bundler/templates/gems.rb +0 -8
  735. data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  736. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -7
  737. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  738. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  739. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -81
  740. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  741. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  742. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  743. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  744. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  745. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  746. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  747. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  748. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -136
  749. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -223
  750. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  751. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  752. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -101
  753. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  754. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -837
  755. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  756. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  757. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -12
  758. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  759. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  760. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  761. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  762. data/bundler/lib/bundler/version_ranges.rb +0 -76
  763. data/bundler/man/bundle-gem.1 +0 -80
  764. data/bundler/man/bundle-gem.ronn +0 -78
  765. data/bundler/man/bundle-package.1 +0 -55
  766. data/lib/rubygems/psych_additions.rb +0 -10
  767. data/lib/rubygems/server.rb +0 -878
  768. data/lib/rubygems/source_local.rb +0 -7
  769. data/lib/rubygems/source_specific_file.rb +0 -6
  770. data/lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  771. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  772. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  773. data/lib/rubygems/syck_hack.rb +0 -77
  774. data/lib/ubygems.rb +0 -14
  775. data/test/rubygems/bogussources.rb +0 -9
  776. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  777. data/test/rubygems/test_gem_server.rb +0 -607
  778. data/util/CL2notes +0 -55
  779. data/util/ci +0 -77
  780. data/util/create_certs.rb +0 -171
  781. data/util/create_encrypted_key.rb +0 -16
  782. data/util/generate_spdx_license_list.rb +0 -61
  783. data/util/patch_with_prs.rb +0 -77
  784. data/util/rubocop +0 -8
  785. data/util/update_bundled_ca_certificates.rb +0 -139
  786. data/util/update_changelog.rb +0 -67
  787. /data/bundler/lib/bundler/{ssl_certs → man}/.document +0 -0
  788. /data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  789. /data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  790. /data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  791. /data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  792. /data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  793. /data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  794. /data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  795. /data/{bundler/lib/bundler/ssl_certs/index.rubygems.org → lib/rubygems/ssl_certs/rubygems.org}/GlobalSignRootCA.pem +0 -0
@@ -1,11 +1,11 @@
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_relative "test_gem_update_suggestion"
4
+ require "rubygems/commands/install_command"
5
+ require "rubygems/request_set"
6
+ require "rubygems/rdoc"
6
7
 
7
8
  class TestGemCommandsInstallCommand < Gem::TestCase
8
-
9
9
  def setup
10
10
  super
11
11
  common_installer_setup
@@ -31,51 +31,51 @@ class TestGemCommandsInstallCommand < Gem::TestCase
31
31
 
32
32
  def test_execute_exclude_prerelease
33
33
  spec_fetcher do |fetcher|
34
- fetcher.gem 'a', 2
35
- fetcher.gem 'a', '2.pre'
34
+ fetcher.gem "a", 2
35
+ fetcher.gem "a", "2.pre"
36
36
  end
37
37
 
38
38
  @cmd.options[:args] = %w[a]
39
39
 
40
40
  use_ui @ui do
41
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
41
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
42
42
  @cmd.execute
43
43
  end
44
44
  end
45
45
 
46
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
46
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
47
47
  end
48
48
 
49
49
  def test_execute_explicit_version_includes_prerelease
50
50
  specs = spec_fetcher do |fetcher|
51
- fetcher.gem 'a', 2
52
- fetcher.gem 'a', '2.a'
51
+ fetcher.gem "a", 2
52
+ fetcher.gem "a", "2.a"
53
53
  end
54
54
 
55
- a2_pre = specs['a-2.a']
55
+ a2_pre = specs["a-2.a"]
56
56
 
57
- @cmd.handle_options [a2_pre.name, '--version', a2_pre.version.to_s,
57
+ @cmd.handle_options [a2_pre.name, "--version", a2_pre.version.to_s,
58
58
  "--no-document"]
59
59
  assert @cmd.options[:prerelease]
60
60
  assert @cmd.options[:version].satisfied_by?(a2_pre.version)
61
61
 
62
62
  use_ui @ui do
63
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
63
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
64
64
  @cmd.execute
65
65
  end
66
66
  end
67
67
 
68
- assert_equal %w[a-2.a], @cmd.installed_specs.map { |spec| spec.full_name }
68
+ assert_equal %w[a-2.a], @cmd.installed_specs.map {|spec| spec.full_name }
69
69
  end
70
70
 
71
71
  def test_execute_local
72
72
  specs = spec_fetcher do |fetcher|
73
- fetcher.gem 'a', 2
73
+ fetcher.gem "a", 2
74
74
  end
75
75
 
76
76
  @cmd.options[:domain] = :local
77
77
 
78
- FileUtils.mv specs['a-2'].cache_file, @tempdir
78
+ FileUtils.mv specs["a-2"].cache_file, @tempdir
79
79
 
80
80
  @cmd.options[:args] = %w[a]
81
81
 
@@ -83,7 +83,7 @@ class TestGemCommandsInstallCommand < Gem::TestCase
83
83
  orig_dir = Dir.pwd
84
84
  begin
85
85
  Dir.chdir @tempdir
86
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
86
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
87
87
  @cmd.execute
88
88
  end
89
89
  ensure
@@ -91,23 +91,81 @@ class TestGemCommandsInstallCommand < Gem::TestCase
91
91
  end
92
92
  end
93
93
 
94
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
94
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
95
+
96
+ assert_match "1 gem installed", @ui.output
97
+ end
98
+
99
+ def test_execute_local_dependency_nonexistent
100
+ specs = spec_fetcher do |fetcher|
101
+ fetcher.gem "foo", 2, "bar" => "0.5"
102
+ end
103
+
104
+ @cmd.options[:domain] = :local
105
+
106
+ FileUtils.mv specs["foo-2"].cache_file, @tempdir
107
+
108
+ @cmd.options[:args] = ["foo"]
109
+
110
+ use_ui @ui do
111
+ orig_dir = Dir.pwd
112
+ begin
113
+ Dir.chdir @tempdir
114
+ e = assert_raise Gem::MockGemUi::TermError do
115
+ @cmd.execute
116
+ end
117
+ assert_equal 2, e.exit_code
118
+ ensure
119
+ Dir.chdir orig_dir
120
+ end
121
+ end
122
+
123
+ expected = <<-EXPECTED
124
+ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in any repository
125
+ EXPECTED
126
+
127
+ assert_equal expected, @ui.error
128
+ end
129
+
130
+ def test_execute_local_dependency_nonexistent_ignore_dependencies
131
+ specs = spec_fetcher do |fetcher|
132
+ fetcher.gem "foo", 2, "bar" => "0.5"
133
+ end
134
+
135
+ @cmd.options[:domain] = :local
136
+ @cmd.options[:ignore_dependencies] = true
137
+
138
+ FileUtils.mv specs["foo-2"].cache_file, @tempdir
139
+
140
+ @cmd.options[:args] = ["foo"]
141
+
142
+ use_ui @ui do
143
+ orig_dir = Dir.pwd
144
+ begin
145
+ Dir.chdir orig_dir
146
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
147
+ @cmd.execute
148
+ end
149
+ ensure
150
+ Dir.chdir orig_dir
151
+ end
152
+ end
95
153
 
96
154
  assert_match "1 gem installed", @ui.output
97
155
  end
98
156
 
99
157
  def test_execute_local_transitive_prerelease
100
158
  specs = spec_fetcher do |fetcher|
101
- fetcher.download 'a', 2, 'b' => "2.a", 'c' => '3'
102
- fetcher.download 'b', '2.a'
103
- fetcher.download 'c', '3'
159
+ fetcher.download "a", 2, "b" => "2.a", "c" => "3"
160
+ fetcher.download "b", "2.a"
161
+ fetcher.download "c", "3"
104
162
  end
105
163
 
106
164
  @cmd.options[:domain] = :local
107
165
 
108
- FileUtils.mv specs['a-2'].cache_file, @tempdir
109
- FileUtils.mv specs['b-2.a'].cache_file, @tempdir
110
- FileUtils.mv specs['c-3'].cache_file, @tempdir
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
111
169
 
112
170
  @cmd.options[:args] = %w[a]
113
171
 
@@ -116,7 +174,7 @@ class TestGemCommandsInstallCommand < Gem::TestCase
116
174
  begin
117
175
  Dir.chdir @tempdir
118
176
  FileUtils.rm_r [@gemhome, "gems"]
119
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
177
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
120
178
  @cmd.execute
121
179
  end
122
180
  ensure
@@ -124,22 +182,22 @@ class TestGemCommandsInstallCommand < Gem::TestCase
124
182
  end
125
183
  end
126
184
 
127
- assert_equal %w[a-2 b-2.a c-3], @cmd.installed_specs.map { |spec| spec.full_name }.sort
185
+ assert_equal %w[a-2 b-2.a c-3], @cmd.installed_specs.map {|spec| spec.full_name }.sort
128
186
 
129
187
  assert_match "3 gems installed", @ui.output
130
188
  end
131
189
 
132
190
  def test_execute_no_user_install
133
- skip 'skipped on MS Windows (chmod has no effect)' if win_platform?
134
- skip 'skipped in root privilege' if Process.uid.zero?
191
+ pend "skipped on MS Windows (chmod has no effect)" if win_platform?
192
+ pend "skipped in root privilege" if Process.uid.zero?
135
193
 
136
194
  specs = spec_fetcher do |fetcher|
137
- fetcher.gem 'a', 2
195
+ fetcher.gem "a", 2
138
196
  end
139
197
 
140
198
  @cmd.options[:user_install] = false
141
199
 
142
- FileUtils.mv specs['a-2'].cache_file, @tempdir
200
+ FileUtils.mv specs["a-2"].cache_file, @tempdir
143
201
 
144
202
  @cmd.options[:args] = %w[a]
145
203
 
@@ -150,7 +208,7 @@ class TestGemCommandsInstallCommand < Gem::TestCase
150
208
  FileUtils.chmod 0555, @gemhome
151
209
 
152
210
  Dir.chdir @tempdir
153
- assert_raises Gem::FilePermissionError do
211
+ assert_raise Gem::FilePermissionError do
154
212
  @cmd.execute
155
213
  end
156
214
  ensure
@@ -168,7 +226,26 @@ class TestGemCommandsInstallCommand < Gem::TestCase
168
226
  @cmd.options[:args] = %w[no_such_gem]
169
227
 
170
228
  use_ui @ui do
171
- e = assert_raises Gem::MockGemUi::TermError do
229
+ e = assert_raise Gem::MockGemUi::TermError do
230
+ @cmd.execute
231
+ end
232
+ assert_equal 2, e.exit_code
233
+ end
234
+
235
+ # HACK no repository was checked
236
+ assert_match(/ould not find a valid gem 'no_such_gem'/, @ui.error)
237
+ end
238
+
239
+ def test_execute_local_missing_ignore_dependencies
240
+ spec_fetcher
241
+
242
+ @cmd.options[:domain] = :local
243
+ @cmd.options[:ignore_dependencies] = true
244
+
245
+ @cmd.options[:args] = %w[no_such_gem]
246
+
247
+ use_ui @ui do
248
+ e = assert_raise Gem::MockGemUi::TermError do
172
249
  @cmd.execute
173
250
  end
174
251
  assert_equal 2, e.exit_code
@@ -181,7 +258,7 @@ class TestGemCommandsInstallCommand < Gem::TestCase
181
258
  def test_execute_no_gem
182
259
  @cmd.options[:args] = %w[]
183
260
 
184
- assert_raises Gem::CommandLineError do
261
+ assert_raise Gem::CommandLineError do
185
262
  @cmd.execute
186
263
  end
187
264
  end
@@ -192,7 +269,23 @@ class TestGemCommandsInstallCommand < Gem::TestCase
192
269
  @cmd.options[:args] = %w[nonexistent]
193
270
 
194
271
  use_ui @ui do
195
- e = assert_raises Gem::MockGemUi::TermError do
272
+ e = assert_raise Gem::MockGemUi::TermError do
273
+ @cmd.execute
274
+ end
275
+ assert_equal 2, e.exit_code
276
+ end
277
+
278
+ assert_match(/ould not find a valid gem 'nonexistent'/, @ui.error)
279
+ end
280
+
281
+ def test_execute_nonexistent_force
282
+ spec_fetcher
283
+
284
+ @cmd.options[:args] = %w[nonexistent]
285
+ @cmd.options[:force] = true
286
+
287
+ use_ui @ui do
288
+ e = assert_raise Gem::MockGemUi::TermError do
196
289
  @cmd.execute
197
290
  end
198
291
  assert_equal 2, e.exit_code
@@ -203,13 +296,13 @@ class TestGemCommandsInstallCommand < Gem::TestCase
203
296
 
204
297
  def test_execute_dependency_nonexistent
205
298
  spec_fetcher do |fetcher|
206
- fetcher.spec 'foo', 2, 'bar' => '0.5'
299
+ fetcher.spec "foo", 2, "bar" => "0.5"
207
300
  end
208
301
 
209
- @cmd.options[:args] = ['foo']
302
+ @cmd.options[:args] = ["foo"]
210
303
 
211
304
  use_ui @ui do
212
- e = assert_raises Gem::MockGemUi::TermError do
305
+ e = assert_raise Gem::MockGemUi::TermError do
213
306
  @cmd.execute
214
307
  end
215
308
 
@@ -225,7 +318,7 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
225
318
 
226
319
  def test_execute_http_proxy
227
320
  use_ui @ui do
228
- e = assert_raises ArgumentError, @ui.error do
321
+ e = assert_raise ArgumentError, @ui.error do
229
322
  @cmd.handle_options %w[-p=foo.bar.com]
230
323
  end
231
324
 
@@ -251,7 +344,7 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
251
344
  @cmd.options[:args] = %w[nonexistent]
252
345
 
253
346
  use_ui @ui do
254
- e = assert_raises Gem::MockGemUi::TermError do
347
+ e = assert_raise Gem::MockGemUi::TermError do
255
348
  @cmd.execute
256
349
  end
257
350
  assert_equal 2, e.exit_code
@@ -260,7 +353,7 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
260
353
  errs = @ui.error.split("\n")
261
354
 
262
355
  assert_match(/ould not find a valid gem 'nonexistent'/, errs.shift)
263
- assert_match(%r!Unable to download data from http://not-there.nothing!, errs.shift)
356
+ assert_match(%r{Unable to download data from http://not-there.nothing}, errs.shift)
264
357
  end
265
358
 
266
359
  def test_execute_nonexistent_hint_disabled
@@ -275,7 +368,7 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
275
368
  @cmd.options[:suggest_alternate] = false
276
369
 
277
370
  use_ui @ui do
278
- e = assert_raises Gem::MockGemUi::TermError do
371
+ e = assert_raise Gem::MockGemUi::TermError do
279
372
  @cmd.execute
280
373
  end
281
374
 
@@ -300,7 +393,7 @@ ERROR: Could not find a valid gem 'nonexistent_with_hint' (>= 0) in any reposit
300
393
  @cmd.options[:args] = [misspelled]
301
394
 
302
395
  use_ui @ui do
303
- e = assert_raises Gem::MockGemUi::TermError do
396
+ e = assert_raise Gem::MockGemUi::TermError do
304
397
  @cmd.execute
305
398
  end
306
399
 
@@ -325,7 +418,7 @@ ERROR: Possible alternatives: non_existent_with_hint
325
418
  @cmd.options[:args] = [misspelled]
326
419
 
327
420
  use_ui @ui do
328
- e = assert_raises Gem::MockGemUi::TermError do
421
+ e = assert_raise Gem::MockGemUi::TermError do
329
422
  @cmd.execute
330
423
  end
331
424
 
@@ -334,7 +427,7 @@ ERROR: Possible alternatives: non_existent_with_hint
334
427
 
335
428
  expected = [
336
429
  "ERROR: Could not find a valid gem 'non-existent_with-hint' (>= 0) in any repository",
337
- "ERROR: Possible alternatives: nonexistent-with_hint"
430
+ "ERROR: Possible alternatives: nonexistent-with_hint",
338
431
  ]
339
432
 
340
433
  output = @ui.error.split "\n"
@@ -347,7 +440,7 @@ ERROR: Possible alternatives: non_existent_with_hint
347
440
  @cmd.options[:install_dir] = "whatever"
348
441
 
349
442
  use_ui @ui do
350
- assert_raises Gem::MockGemUi::TermError do
443
+ assert_raise Gem::MockGemUi::TermError do
351
444
  @cmd.execute
352
445
  end
353
446
  end
@@ -359,78 +452,209 @@ ERROR: Possible alternatives: non_existent_with_hint
359
452
 
360
453
  def test_execute_prerelease_skipped_when_no_flag_set
361
454
  spec_fetcher do |fetcher|
362
- fetcher.gem 'a', 1
363
- fetcher.gem 'a', '3.a'
455
+ fetcher.gem "a", 1
456
+ fetcher.gem "a", "3.a"
364
457
  end
365
458
 
366
459
  @cmd.options[:prerelease] = false
367
460
  @cmd.options[:args] = %w[a]
368
461
 
369
462
  use_ui @ui do
370
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
463
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
371
464
  @cmd.execute
372
465
  end
373
466
  end
374
467
 
375
- assert_equal %w[a-1], @cmd.installed_specs.map { |spec| spec.full_name }
468
+ assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
376
469
  end
377
470
 
378
471
  def test_execute_prerelease_wins_over_previous_ver
379
472
  spec_fetcher do |fetcher|
380
- fetcher.download 'a', 1
381
- fetcher.download 'a', '2.a'
473
+ fetcher.download "a", 1
474
+ fetcher.download "a", "2.a"
382
475
  end
383
476
 
384
477
  @cmd.options[:prerelease] = true
385
478
  @cmd.options[:args] = %w[a]
386
479
 
387
480
  use_ui @ui do
388
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
481
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
389
482
  @cmd.execute
390
483
  end
391
484
  end
392
485
 
393
- assert_equal %w[a-2.a], @cmd.installed_specs.map { |spec| spec.full_name }
486
+ assert_equal %w[a-2.a], @cmd.installed_specs.map {|spec| spec.full_name }
394
487
  end
395
488
 
396
489
  def test_execute_with_version_specified_by_colon
397
490
  spec_fetcher do |fetcher|
398
- fetcher.download 'a', 1
399
- fetcher.download 'a', 2
491
+ fetcher.download "a", 1
492
+ fetcher.download "a", 2
400
493
  end
401
494
 
402
495
  @cmd.options[:args] = %w[a:1]
403
496
 
404
497
  use_ui @ui do
405
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
498
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
406
499
  @cmd.execute
407
500
  end
408
501
  end
409
502
 
410
- assert_equal %w[a-1], @cmd.installed_specs.map { |spec| spec.full_name }
503
+ assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
411
504
  end
412
505
 
413
506
  def test_execute_prerelease_skipped_when_non_pre_available
414
507
  spec_fetcher do |fetcher|
415
- fetcher.gem 'a', '2.pre'
416
- fetcher.gem 'a', 2
508
+ fetcher.gem "a", "2.pre"
509
+ fetcher.gem "a", 2
417
510
  end
418
511
 
419
512
  @cmd.options[:prerelease] = true
420
513
  @cmd.options[:args] = %w[a]
421
514
 
422
515
  use_ui @ui do
423
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
516
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
517
+ @cmd.execute
518
+ end
519
+ end
520
+
521
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
522
+ end
523
+
524
+ def test_execute_required_ruby_version
525
+ next_ruby = Gem.ruby_version.segments.map.with_index {|n, i| i == 1 ? n + 1 : n }.join(".")
526
+
527
+ local = Gem::Platform.local
528
+ spec_fetcher do |fetcher|
529
+ fetcher.download "a", 2
530
+ fetcher.download "a", 2 do |s|
531
+ s.required_ruby_version = "< #{RUBY_VERSION}.a"
532
+ s.platform = local
533
+ end
534
+ fetcher.download "a", 3 do |s|
535
+ s.required_ruby_version = ">= #{next_ruby}"
536
+ end
537
+ fetcher.download "a", 3 do |s|
538
+ s.required_ruby_version = ">= #{next_ruby}"
539
+ s.platform = local
540
+ end
541
+ end
542
+
543
+ @cmd.options[:args] = %w[a]
544
+
545
+ use_ui @ui do
546
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
547
+ @cmd.execute
548
+ end
549
+ end
550
+
551
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
552
+ end
553
+
554
+ def test_execute_required_ruby_version_upper_bound
555
+ local = Gem::Platform.local
556
+ spec_fetcher do |fetcher|
557
+ fetcher.gem "a", 2.0
558
+ fetcher.gem "a", 2.0 do |s|
559
+ s.required_ruby_version = "< #{RUBY_VERSION}.a"
560
+ s.platform = local
561
+ end
562
+ end
563
+
564
+ @cmd.options[:args] = %w[a]
565
+
566
+ use_ui @ui do
567
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
568
+ @cmd.execute
569
+ end
570
+ end
571
+
572
+ assert_equal %w[a-2.0], @cmd.installed_specs.map {|spec| spec.full_name }
573
+ end
574
+
575
+ def test_execute_required_ruby_version_specific_not_met
576
+ spec_fetcher do |fetcher|
577
+ fetcher.gem "a", "1.0" do |s|
578
+ s.required_ruby_version = "= 1.4.6"
579
+ end
580
+ end
581
+
582
+ @cmd.options[:args] = %w[a]
583
+
584
+ use_ui @ui do
585
+ assert_raise Gem::MockGemUi::TermError do
586
+ @cmd.execute
587
+ end
588
+ end
589
+
590
+ errs = @ui.error.split("\n")
591
+ assert_equal "ERROR: Error installing a:", errs.shift
592
+ assert_equal "\ta-1.0 requires Ruby version = 1.4.6. The current ruby version is #{Gem.ruby_version}.", errs.shift
593
+ end
594
+
595
+ def test_execute_required_ruby_version_specific_prerelease_met
596
+ spec_fetcher do |fetcher|
597
+ fetcher.gem "a", "1.0" do |s|
598
+ s.required_ruby_version = ">= 1.4.6.preview2"
599
+ end
600
+ end
601
+
602
+ @cmd.options[:args] = %w[a]
603
+
604
+ use_ui @ui do
605
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
606
+ @cmd.execute
607
+ end
608
+ end
609
+
610
+ assert_equal %w[a-1.0], @cmd.installed_specs.map {|spec| spec.full_name }
611
+ end
612
+
613
+ def test_execute_required_ruby_version_specific_prerelease_not_met
614
+ next_ruby_pre = Gem.ruby_version.segments.map.with_index {|n, i| i == 1 ? n + 1 : n }.join(".") + ".a"
615
+
616
+ spec_fetcher do |fetcher|
617
+ fetcher.gem "a", "1.0" do |s|
618
+ s.required_ruby_version = "> #{next_ruby_pre}"
619
+ end
620
+ end
621
+
622
+ @cmd.options[:args] = %w[a]
623
+
624
+ use_ui @ui do
625
+ assert_raise Gem::MockGemUi::TermError do
424
626
  @cmd.execute
425
627
  end
426
628
  end
427
629
 
428
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
630
+ errs = @ui.error.split("\n")
631
+ assert_equal "ERROR: Error installing a:", errs.shift
632
+ assert_equal "\ta-1.0 requires Ruby version > #{next_ruby_pre}. The current ruby version is #{Gem.ruby_version}.", errs.shift
633
+ end
634
+
635
+ def test_execute_required_rubygems_version_wrong
636
+ spec_fetcher do |fetcher|
637
+ fetcher.gem "a", "1.0" do |s|
638
+ s.required_rubygems_version = "< 0"
639
+ end
640
+ end
641
+
642
+ @cmd.options[:args] = %w[a]
643
+
644
+ use_ui @ui do
645
+ assert_raise Gem::MockGemUi::TermError do
646
+ @cmd.execute
647
+ end
648
+ end
649
+
650
+ errs = @ui.error.split("\n")
651
+ assert_equal "ERROR: Error installing a:", errs.shift
652
+ 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
429
653
  end
430
654
 
431
655
  def test_execute_rdoc
432
656
  specs = spec_fetcher do |fetcher|
433
- fetcher.gem 'a', 2
657
+ fetcher.gem "a", 2
434
658
  end
435
659
 
436
660
  Gem.done_installing(&Gem::RDoc.method(:generation_hook))
@@ -438,7 +662,7 @@ ERROR: Possible alternatives: non_existent_with_hint
438
662
  @cmd.options[:document] = %w[rdoc ri]
439
663
  @cmd.options[:domain] = :local
440
664
 
441
- a2 = specs['a-2']
665
+ a2 = specs["a-2"]
442
666
  FileUtils.mv a2.cache_file, @tempdir
443
667
 
444
668
  @cmd.options[:args] = %w[a]
@@ -450,7 +674,7 @@ ERROR: Possible alternatives: non_existent_with_hint
450
674
 
451
675
  begin
452
676
  Dir.chdir @tempdir
453
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
677
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
454
678
  @cmd.execute
455
679
  end
456
680
  ensure
@@ -460,22 +684,22 @@ ERROR: Possible alternatives: non_existent_with_hint
460
684
 
461
685
  wait_for_child_process_to_exit
462
686
 
463
- assert_path_exists File.join(a2.doc_dir, 'ri')
464
- assert_path_exists File.join(a2.doc_dir, 'rdoc')
687
+ assert_path_exist File.join(a2.doc_dir, "ri")
688
+ assert_path_exist File.join(a2.doc_dir, "rdoc")
465
689
  end
466
690
 
467
691
  def test_execute_rdoc_with_path
468
692
  specs = spec_fetcher do |fetcher|
469
- fetcher.gem 'a', 2
693
+ fetcher.gem "a", 2
470
694
  end
471
695
 
472
696
  Gem.done_installing(&Gem::RDoc.method(:generation_hook))
473
697
 
474
698
  @cmd.options[:document] = %w[rdoc ri]
475
699
  @cmd.options[:domain] = :local
476
- @cmd.options[:install_dir] = 'whatever'
700
+ @cmd.options[:install_dir] = "whatever"
477
701
 
478
- a2 = specs['a-2']
702
+ a2 = specs["a-2"]
479
703
  FileUtils.mv a2.cache_file, @tempdir
480
704
 
481
705
  @cmd.options[:args] = %w[a]
@@ -487,7 +711,7 @@ ERROR: Possible alternatives: non_existent_with_hint
487
711
 
488
712
  begin
489
713
  Dir.chdir @tempdir
490
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
714
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
491
715
  @cmd.execute
492
716
  end
493
717
  ensure
@@ -497,19 +721,19 @@ ERROR: Possible alternatives: non_existent_with_hint
497
721
 
498
722
  wait_for_child_process_to_exit
499
723
 
500
- assert_path_exists 'whatever/doc/a-2', 'documentation not installed'
724
+ assert_path_exist "whatever/doc/a-2", "documentation not installed"
501
725
  end
502
726
 
503
727
  def test_execute_saves_build_args
504
728
  specs = spec_fetcher do |fetcher|
505
- fetcher.gem 'a', 2
729
+ fetcher.gem "a", 2
506
730
  end
507
731
 
508
- args = %w!--with-awesome=true --more-awesome=yes!
732
+ args = %w[--with-awesome=true --more-awesome=yes]
509
733
 
510
734
  Gem::Command.build_args = args
511
735
 
512
- a2 = specs['a-2']
736
+ a2 = specs["a-2"]
513
737
  FileUtils.mv a2.cache_file, @tempdir
514
738
 
515
739
  @cmd.options[:domain] = :local
@@ -523,7 +747,7 @@ ERROR: Possible alternatives: non_existent_with_hint
523
747
 
524
748
  begin
525
749
  Dir.chdir @tempdir
526
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
750
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
527
751
  @cmd.execute
528
752
  end
529
753
  ensure
@@ -532,26 +756,25 @@ ERROR: Possible alternatives: non_existent_with_hint
532
756
  end
533
757
 
534
758
  path = a2.build_info_file
535
- assert_path_exists path
759
+ assert_path_exist path
536
760
 
537
761
  assert_equal args, a2.build_args
538
762
  end
539
763
 
540
-
541
764
  def test_execute_remote
542
765
  spec_fetcher do |fetcher|
543
- fetcher.gem 'a', 2
766
+ fetcher.gem "a", 2
544
767
  end
545
768
 
546
769
  @cmd.options[:args] = %w[a]
547
770
 
548
771
  use_ui @ui do
549
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
772
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
550
773
  @cmd.execute
551
774
  end
552
775
  end
553
776
 
554
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
777
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
555
778
 
556
779
  assert_match "1 gem installed", @ui.output
557
780
  end
@@ -560,32 +783,65 @@ ERROR: Possible alternatives: non_existent_with_hint
560
783
  FileUtils.touch("a.gem")
561
784
 
562
785
  spec_fetcher do |fetcher|
563
- fetcher.gem 'a', 2
786
+ fetcher.gem "a", 2
564
787
  end
565
788
 
566
789
  @cmd.options[:args] = %w[a]
567
790
 
568
791
  use_ui @ui do
569
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
792
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
570
793
  @cmd.execute
571
794
  end
572
795
  end
573
796
 
574
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
797
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
575
798
 
576
799
  assert_match "1 gem installed", @ui.output
577
800
  end
578
801
 
802
+ def test_execute_remote_truncates_existing_gemspecs
803
+ spec_fetcher do |fetcher|
804
+ fetcher.gem "a", 1
805
+ end
806
+
807
+ @cmd.options[:domain] = :remote
808
+
809
+ @cmd.options[:args] = %w[a]
810
+
811
+ use_ui @ui do
812
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
813
+ @cmd.execute
814
+ end
815
+ end
816
+
817
+ assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
818
+ assert_match "1 gem installed", @ui.output
819
+
820
+ a1_gemspec = File.join(@gemhome, "specifications", "a-1.gemspec")
821
+
822
+ initial_a1_gemspec_content = File.read(a1_gemspec)
823
+ modified_a1_gemspec_content = initial_a1_gemspec_content + "\n # AAAAAAA\n"
824
+ File.write(a1_gemspec, modified_a1_gemspec_content)
825
+
826
+ use_ui @ui do
827
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
828
+ @cmd.execute
829
+ end
830
+ end
831
+
832
+ assert_equal initial_a1_gemspec_content, File.read(a1_gemspec)
833
+ end
834
+
579
835
  def test_execute_remote_ignores_files
580
836
  specs = spec_fetcher do |fetcher|
581
- fetcher.gem 'a', 1
582
- fetcher.gem 'a', 2
837
+ fetcher.gem "a", 1
838
+ fetcher.gem "a", 2
583
839
  end
584
840
 
585
841
  @cmd.options[:domain] = :remote
586
842
 
587
- a1 = specs['a-1']
588
- a2 = specs['a-2']
843
+ a1 = specs["a-1"]
844
+ a2 = specs["a-2"]
589
845
 
590
846
  FileUtils.mv a2.cache_file, @tempdir
591
847
 
@@ -594,7 +850,7 @@ ERROR: Possible alternatives: non_existent_with_hint
594
850
 
595
851
  @cmd.options[:args] = [a2.name]
596
852
 
597
- gemdir = File.join @gemhome, 'specifications'
853
+ gemdir = File.join @gemhome, "specifications"
598
854
 
599
855
  a2_gemspec = File.join(gemdir, "a-2.gemspec")
600
856
  a1_gemspec = File.join(gemdir, "a-1.gemspec")
@@ -606,13 +862,13 @@ ERROR: Possible alternatives: non_existent_with_hint
606
862
 
607
863
  use_ui @ui do
608
864
  Dir.chdir @tempdir do
609
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
865
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
610
866
  @cmd.execute
611
867
  end
612
868
  end
613
869
  end
614
870
 
615
- assert_equal %w[a-1], @cmd.installed_specs.map { |spec| spec.full_name }
871
+ assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
616
872
 
617
873
  assert_match "1 gem installed", @ui.output
618
874
 
@@ -623,12 +879,12 @@ ERROR: Possible alternatives: non_existent_with_hint
623
879
 
624
880
  def test_execute_two
625
881
  specs = spec_fetcher do |fetcher|
626
- fetcher.gem 'a', 2
627
- fetcher.gem 'b', 2
882
+ fetcher.gem "a", 2
883
+ fetcher.gem "b", 2
628
884
  end
629
885
 
630
- FileUtils.mv specs['a-2'].cache_file, @tempdir
631
- FileUtils.mv specs['b-2'].cache_file, @tempdir
886
+ FileUtils.mv specs["a-2"].cache_file, @tempdir
887
+ FileUtils.mv specs["b-2"].cache_file, @tempdir
632
888
 
633
889
  @cmd.options[:domain] = :local
634
890
 
@@ -638,7 +894,7 @@ ERROR: Possible alternatives: non_existent_with_hint
638
894
  orig_dir = Dir.pwd
639
895
  begin
640
896
  Dir.chdir @tempdir
641
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
897
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
642
898
  @cmd.execute
643
899
  end
644
900
  ensure
@@ -646,7 +902,7 @@ ERROR: Possible alternatives: non_existent_with_hint
646
902
  end
647
903
  end
648
904
 
649
- assert_equal %w[a-2 b-2], @cmd.installed_specs.map { |spec| spec.full_name }
905
+ assert_equal %w[a-2 b-2], @cmd.installed_specs.map {|spec| spec.full_name }
650
906
 
651
907
  assert_match "2 gems installed", @ui.output
652
908
  end
@@ -656,7 +912,7 @@ ERROR: Possible alternatives: non_existent_with_hint
656
912
  @cmd.options[:version] = Gem::Requirement.new("> 1")
657
913
 
658
914
  use_ui @ui do
659
- e = assert_raises Gem::MockGemUi::TermError do
915
+ e = assert_raise Gem::MockGemUi::TermError do
660
916
  @cmd.execute
661
917
  end
662
918
 
@@ -674,28 +930,28 @@ ERROR: Possible alternatives: non_existent_with_hint
674
930
 
675
931
  def test_execute_two_version_specified_by_colon
676
932
  spec_fetcher do |fetcher|
677
- fetcher.gem 'a', 1
678
- fetcher.gem 'a', 2
679
- fetcher.gem 'b', 1
680
- fetcher.gem 'b', 2
933
+ fetcher.gem "a", 1
934
+ fetcher.gem "a", 2
935
+ fetcher.gem "b", 1
936
+ fetcher.gem "b", 2
681
937
  end
682
938
 
683
939
  @cmd.options[:args] = %w[a:1 b:1]
684
940
 
685
941
  use_ui @ui do
686
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
942
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
687
943
  @cmd.execute
688
944
  end
689
945
  end
690
946
 
691
- assert_equal %w[a-1 b-1], @cmd.installed_specs.map { |spec| spec.full_name }
947
+ assert_equal %w[a-1 b-1], @cmd.installed_specs.map {|spec| spec.full_name }
692
948
  end
693
949
 
694
950
  def test_execute_conservative
695
951
  spec_fetcher do |fetcher|
696
- fetcher.download 'b', 2
952
+ fetcher.download "b", 2
697
953
 
698
- fetcher.gem 'a', 2
954
+ fetcher.gem "a", 2
699
955
  end
700
956
 
701
957
  @cmd.options[:conservative] = true
@@ -706,7 +962,7 @@ ERROR: Possible alternatives: non_existent_with_hint
706
962
  orig_dir = Dir.pwd
707
963
  begin
708
964
  Dir.chdir @tempdir
709
- assert_raises Gem::MockGemUi::SystemExitException do
965
+ assert_raise Gem::MockGemUi::SystemExitException do
710
966
  @cmd.execute
711
967
  end
712
968
  ensure
@@ -714,7 +970,7 @@ ERROR: Possible alternatives: non_existent_with_hint
714
970
  end
715
971
  end
716
972
 
717
- assert_equal %w[b-2], @cmd.installed_specs.map { |spec| spec.full_name }
973
+ assert_equal %w[b-2], @cmd.installed_specs.map {|spec| spec.full_name }
718
974
 
719
975
  assert_equal "", @ui.error
720
976
  assert_match "1 gem installed", @ui.output
@@ -726,7 +982,7 @@ ERROR: Possible alternatives: non_existent_with_hint
726
982
  done_installing = true
727
983
  end
728
984
 
729
- spec = util_spec 'a', 2
985
+ spec = util_spec "a", 2
730
986
 
731
987
  util_build_gem spec
732
988
 
@@ -734,27 +990,44 @@ ERROR: Possible alternatives: non_existent_with_hint
734
990
 
735
991
  @cmd.options[:ignore_dependencies] = true
736
992
 
737
- @cmd.install_gem 'a', '>= 0'
993
+ @cmd.install_gem "a", ">= 0"
738
994
 
739
- assert_equal %w[a-2], @cmd.installed_specs.map { |s| s.full_name }
995
+ assert_equal %w[a-2], @cmd.installed_specs.map {|s| s.full_name }
740
996
 
741
- assert done_installing, 'documentation was not generated'
997
+ assert done_installing, "documentation was not generated"
742
998
  end
743
999
 
744
1000
  def test_install_gem_ignore_dependencies_remote
745
1001
  spec_fetcher do |fetcher|
746
- fetcher.gem 'a', 2
1002
+ fetcher.gem "a", 2
1003
+ end
1004
+
1005
+ @cmd.options[:ignore_dependencies] = true
1006
+
1007
+ @cmd.install_gem "a", ">= 0"
1008
+
1009
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
1010
+ end
1011
+
1012
+ def test_install_gem_ignore_dependencies_remote_platform_local
1013
+ local = Gem::Platform.local
1014
+ spec_fetcher do |fetcher|
1015
+ fetcher.gem "a", 3
1016
+
1017
+ fetcher.gem "a", 3 do |s|
1018
+ s.platform = local
1019
+ end
747
1020
  end
748
1021
 
749
1022
  @cmd.options[:ignore_dependencies] = true
750
1023
 
751
- @cmd.install_gem 'a', '>= 0'
1024
+ @cmd.install_gem "a", ">= 0"
752
1025
 
753
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
1026
+ assert_equal %W[a-3-#{local}], @cmd.installed_specs.map {|spec| spec.full_name }
754
1027
  end
755
1028
 
756
1029
  def test_install_gem_ignore_dependencies_specific_file
757
- spec = util_spec 'a', 2
1030
+ spec = util_spec "a", 2
758
1031
 
759
1032
  util_build_gem spec
760
1033
 
@@ -764,13 +1037,13 @@ ERROR: Possible alternatives: non_existent_with_hint
764
1037
 
765
1038
  @cmd.install_gem File.join(@tempdir, spec.file_name), nil
766
1039
 
767
- assert_equal %w[a-2], @cmd.installed_specs.map { |s| s.full_name }
1040
+ assert_equal %w[a-2], @cmd.installed_specs.map {|s| s.full_name }
768
1041
  end
769
1042
 
770
1043
  def test_parses_requirement_from_gemname
771
1044
  spec_fetcher do |fetcher|
772
- fetcher.gem 'a', 2
773
- fetcher.gem 'b', 2
1045
+ fetcher.gem "a", 2
1046
+ fetcher.gem "b", 2
774
1047
  end
775
1048
 
776
1049
  @cmd.options[:domain] = :local
@@ -784,7 +1057,7 @@ ERROR: Possible alternatives: non_existent_with_hint
784
1057
  orig_dir = Dir.pwd
785
1058
  begin
786
1059
  Dir.chdir @tempdir
787
- e = assert_raises Gem::MockGemUi::TermError do
1060
+ e = assert_raise Gem::MockGemUi::TermError do
788
1061
  @cmd.execute
789
1062
  end
790
1063
  ensure
@@ -793,7 +1066,7 @@ ERROR: Possible alternatives: non_existent_with_hint
793
1066
  end
794
1067
 
795
1068
  assert_equal 2, e.exit_code
796
- assert_match %r!Could not find a valid gem 'a' \(= 10.0\)!, @ui.error
1069
+ assert_match %r{Could not find a valid gem 'a' \(= 10.0\)}, @ui.error
797
1070
  end
798
1071
 
799
1072
  def test_show_errors_on_failure
@@ -806,7 +1079,7 @@ ERROR: Possible alternatives: non_existent_with_hint
806
1079
  orig_dir = Dir.pwd
807
1080
  begin
808
1081
  Dir.chdir @tempdir
809
- e = assert_raises Gem::MockGemUi::TermError do
1082
+ e = assert_raise Gem::MockGemUi::TermError do
810
1083
  @cmd.execute
811
1084
  end
812
1085
  ensure
@@ -816,12 +1089,12 @@ ERROR: Possible alternatives: non_existent_with_hint
816
1089
 
817
1090
  assert_equal 2, e.exit_code
818
1091
 
819
- assert_match 'Unable to download data', @ui.error
1092
+ assert_match "Unable to download data", @ui.error
820
1093
  end
821
1094
 
822
1095
  def test_show_source_problems_even_on_success
823
1096
  spec_fetcher do |fetcher|
824
- fetcher.download 'a', 2
1097
+ fetcher.download "a", 2
825
1098
  end
826
1099
 
827
1100
  Gem.sources << "http://nonexistent.example"
@@ -829,12 +1102,12 @@ ERROR: Possible alternatives: non_existent_with_hint
829
1102
  @cmd.options[:args] = %w[a]
830
1103
 
831
1104
  use_ui @ui do
832
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1105
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
833
1106
  @cmd.execute
834
1107
  end
835
1108
  end
836
1109
 
837
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
1110
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
838
1111
 
839
1112
  assert_match "1 gem installed", @ui.output
840
1113
 
@@ -844,9 +1117,34 @@ ERROR: Possible alternatives: non_existent_with_hint
844
1117
  assert_equal x, e
845
1118
  end
846
1119
 
1120
+ def test_redact_credentials_from_uri_on_warning
1121
+ spec_fetcher do |fetcher|
1122
+ fetcher.download "a", 2
1123
+ end
1124
+
1125
+ Gem.sources << "http://username:SECURE_TOKEN@nonexistent.example"
1126
+
1127
+ @cmd.options[:args] = %w[a]
1128
+
1129
+ use_ui @ui do
1130
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1131
+ @cmd.execute
1132
+ end
1133
+ end
1134
+
1135
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
1136
+
1137
+ assert_match "1 gem installed", @ui.output
1138
+
1139
+ e = @ui.error
1140
+
1141
+ 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"
1142
+ assert_equal x, e
1143
+ end
1144
+
847
1145
  def test_execute_uses_from_a_gemdeps
848
1146
  spec_fetcher do |fetcher|
849
- fetcher.gem 'a', 2
1147
+ fetcher.gem "a", 2
850
1148
  end
851
1149
 
852
1150
  File.open @gemdeps, "w" do |f|
@@ -856,12 +1154,12 @@ ERROR: Possible alternatives: non_existent_with_hint
856
1154
  @cmd.options[:gemdeps] = @gemdeps
857
1155
 
858
1156
  use_ui @ui do
859
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1157
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
860
1158
  @cmd.execute
861
1159
  end
862
1160
  end
863
1161
 
864
- assert_equal %w[], @cmd.installed_specs.map { |spec| spec.full_name }
1162
+ assert_equal %w[], @cmd.installed_specs.map {|spec| spec.full_name }
865
1163
 
866
1164
  assert_match "Using a (2)", @ui.output
867
1165
  assert File.exist?("#{@gemdeps}.lock")
@@ -869,7 +1167,7 @@ ERROR: Possible alternatives: non_existent_with_hint
869
1167
 
870
1168
  def test_execute_uses_from_a_gemdeps_with_no_lock
871
1169
  spec_fetcher do |fetcher|
872
- fetcher.gem 'a', 2
1170
+ fetcher.gem "a", 2
873
1171
  end
874
1172
 
875
1173
  File.open @gemdeps, "w" do |f|
@@ -880,12 +1178,12 @@ ERROR: Possible alternatives: non_existent_with_hint
880
1178
  @cmd.options[:gemdeps] = @gemdeps
881
1179
 
882
1180
  use_ui @ui do
883
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1181
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
884
1182
  @cmd.execute
885
1183
  end
886
1184
  end
887
1185
 
888
- assert_equal %w[], @cmd.installed_specs.map { |spec| spec.full_name }
1186
+ assert_equal %w[], @cmd.installed_specs.map {|spec| spec.full_name }
889
1187
 
890
1188
  assert_match "Using a (2)", @ui.output
891
1189
  assert !File.exist?("#{@gemdeps}.lock")
@@ -893,8 +1191,8 @@ ERROR: Possible alternatives: non_existent_with_hint
893
1191
 
894
1192
  def test_execute_installs_from_a_gemdeps_with_conservative
895
1193
  spec_fetcher do |fetcher|
896
- fetcher.download 'a', 2
897
- fetcher.gem 'a', 1
1194
+ fetcher.download "a", 2
1195
+ fetcher.gem "a", 1
898
1196
  end
899
1197
 
900
1198
  File.open @gemdeps, "w" do |f|
@@ -905,19 +1203,19 @@ ERROR: Possible alternatives: non_existent_with_hint
905
1203
  @cmd.options[:gemdeps] = @gemdeps
906
1204
 
907
1205
  use_ui @ui do
908
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1206
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
909
1207
  @cmd.execute
910
1208
  end
911
1209
  end
912
1210
 
913
- assert_equal %w[], @cmd.installed_specs.map { |spec| spec.full_name }
1211
+ assert_equal %w[], @cmd.installed_specs.map {|spec| spec.full_name }
914
1212
 
915
1213
  assert_match "Using a (1)", @ui.output
916
1214
  end
917
1215
 
918
1216
  def test_execute_installs_from_a_gemdeps
919
1217
  spec_fetcher do |fetcher|
920
- fetcher.download 'a', 2
1218
+ fetcher.download "a", 2
921
1219
  end
922
1220
 
923
1221
  File.open @gemdeps, "w" do |f|
@@ -927,20 +1225,20 @@ ERROR: Possible alternatives: non_existent_with_hint
927
1225
  @cmd.options[:gemdeps] = @gemdeps
928
1226
 
929
1227
  use_ui @ui do
930
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1228
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
931
1229
  @cmd.execute
932
1230
  end
933
1231
  end
934
1232
 
935
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
1233
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
936
1234
 
937
1235
  assert_match "Installing a (2)", @ui.output
938
1236
  end
939
1237
 
940
1238
  def test_execute_installs_deps_a_gemdeps
941
1239
  spec_fetcher do |fetcher|
942
- fetcher.download 'q', '1.0'
943
- fetcher.download 'r', '2.0', 'q' => nil
1240
+ fetcher.download "q", "1.0"
1241
+ fetcher.download "r", "2.0", "q" => nil
944
1242
  end
945
1243
 
946
1244
  File.open @gemdeps, "w" do |f|
@@ -950,12 +1248,12 @@ ERROR: Possible alternatives: non_existent_with_hint
950
1248
  @cmd.options[:gemdeps] = @gemdeps
951
1249
 
952
1250
  use_ui @ui do
953
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1251
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
954
1252
  @cmd.execute
955
1253
  end
956
1254
  end
957
1255
 
958
- names = @cmd.installed_specs.map { |spec| spec.full_name }
1256
+ names = @cmd.installed_specs.map {|spec| spec.full_name }
959
1257
 
960
1258
  assert_equal %w[q-1.0 r-2.0], names
961
1259
 
@@ -965,9 +1263,9 @@ ERROR: Possible alternatives: non_existent_with_hint
965
1263
 
966
1264
  def test_execute_uses_deps_a_gemdeps
967
1265
  spec_fetcher do |fetcher|
968
- fetcher.download 'r', '2.0', 'q' => nil
1266
+ fetcher.download "r", "2.0", "q" => nil
969
1267
 
970
- fetcher.spec 'q', '1.0'
1268
+ fetcher.spec "q", "1.0"
971
1269
  end
972
1270
 
973
1271
  File.open @gemdeps, "w" do |f|
@@ -977,12 +1275,12 @@ ERROR: Possible alternatives: non_existent_with_hint
977
1275
  @cmd.options[:gemdeps] = @gemdeps
978
1276
 
979
1277
  use_ui @ui do
980
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1278
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
981
1279
  @cmd.execute
982
1280
  end
983
1281
  end
984
1282
 
985
- names = @cmd.installed_specs.map { |spec| spec.full_name }
1283
+ names = @cmd.installed_specs.map {|spec| spec.full_name }
986
1284
 
987
1285
  assert_equal %w[r-2.0], names
988
1286
 
@@ -992,8 +1290,8 @@ ERROR: Possible alternatives: non_existent_with_hint
992
1290
 
993
1291
  def test_execute_installs_deps_a_gemdeps_into_a_path
994
1292
  spec_fetcher do |fetcher|
995
- fetcher.download 'q', '1.0'
996
- fetcher.download 'r', '2.0', 'q' => nil
1293
+ fetcher.download "q", "1.0"
1294
+ fetcher.download "r", "2.0", "q" => nil
997
1295
  end
998
1296
 
999
1297
  File.open @gemdeps, "w" do |f|
@@ -1004,12 +1302,12 @@ ERROR: Possible alternatives: non_existent_with_hint
1004
1302
  @cmd.options[:gemdeps] = @gemdeps
1005
1303
 
1006
1304
  use_ui @ui do
1007
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1305
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1008
1306
  @cmd.execute
1009
1307
  end
1010
1308
  end
1011
1309
 
1012
- names = @cmd.installed_specs.map { |spec| spec.full_name }
1310
+ names = @cmd.installed_specs.map {|spec| spec.full_name }
1013
1311
 
1014
1312
  assert_equal %w[q-1.0 r-2.0], names
1015
1313
 
@@ -1022,11 +1320,11 @@ ERROR: Possible alternatives: non_existent_with_hint
1022
1320
 
1023
1321
  def test_execute_with_gemdeps_path_ignores_system
1024
1322
  specs = spec_fetcher do |fetcher|
1025
- fetcher.download 'q', '1.0'
1026
- fetcher.download 'r', '2.0', 'q' => nil
1323
+ fetcher.download "q", "1.0"
1324
+ fetcher.download "r", "2.0", "q" => nil
1027
1325
  end
1028
1326
 
1029
- install_specs specs['q-1.0']
1327
+ install_specs specs["q-1.0"]
1030
1328
 
1031
1329
  File.open @gemdeps, "w" do |f|
1032
1330
  f << "gem 'r'"
@@ -1036,12 +1334,12 @@ ERROR: Possible alternatives: non_existent_with_hint
1036
1334
  @cmd.options[:gemdeps] = @gemdeps
1037
1335
 
1038
1336
  use_ui @ui do
1039
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1337
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1040
1338
  @cmd.execute
1041
1339
  end
1042
1340
  end
1043
1341
 
1044
- names = @cmd.installed_specs.map { |spec| spec.full_name }
1342
+ names = @cmd.installed_specs.map {|spec| spec.full_name }
1045
1343
 
1046
1344
  assert_equal %w[q-1.0 r-2.0], names
1047
1345
 
@@ -1054,11 +1352,11 @@ ERROR: Possible alternatives: non_existent_with_hint
1054
1352
 
1055
1353
  def test_execute_uses_deps_a_gemdeps_with_a_path
1056
1354
  specs = spec_fetcher do |fetcher|
1057
- fetcher.gem 'q', '1.0'
1058
- fetcher.gem 'r', '2.0', 'q' => nil
1355
+ fetcher.gem "q", "1.0"
1356
+ fetcher.gem "r", "2.0", "q" => nil
1059
1357
  end
1060
1358
 
1061
- i = Gem::Installer.at specs['q-1.0'].cache_file, :install_dir => "gf-path"
1359
+ i = Gem::Installer.at specs["q-1.0"].cache_file, :install_dir => "gf-path"
1062
1360
  i.install
1063
1361
 
1064
1362
  assert File.file?("gf-path/specifications/q-1.0.gemspec"), "not installed"
@@ -1071,12 +1369,12 @@ ERROR: Possible alternatives: non_existent_with_hint
1071
1369
  @cmd.options[:gemdeps] = @gemdeps
1072
1370
 
1073
1371
  use_ui @ui do
1074
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1372
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1075
1373
  @cmd.execute
1076
1374
  end
1077
1375
  end
1078
1376
 
1079
- names = @cmd.installed_specs.map { |spec| spec.full_name }
1377
+ names = @cmd.installed_specs.map {|spec| spec.full_name }
1080
1378
 
1081
1379
  assert_equal %w[r-2.0], names
1082
1380
 
@@ -1085,39 +1383,39 @@ ERROR: Possible alternatives: non_existent_with_hint
1085
1383
  end
1086
1384
 
1087
1385
  def test_handle_options_file
1088
- FileUtils.touch 'Gemfile'
1386
+ FileUtils.touch "Gemfile"
1089
1387
 
1090
1388
  @cmd.handle_options %w[-g Gemfile]
1091
1389
 
1092
- assert_equal 'Gemfile', @cmd.options[:gemdeps]
1390
+ assert_equal "Gemfile", @cmd.options[:gemdeps]
1093
1391
 
1094
- FileUtils.rm 'Gemfile'
1392
+ FileUtils.rm "Gemfile"
1095
1393
 
1096
- FileUtils.touch 'gem.deps.rb'
1394
+ FileUtils.touch "gem.deps.rb"
1097
1395
 
1098
1396
  @cmd.handle_options %w[--file gem.deps.rb]
1099
1397
 
1100
- assert_equal 'gem.deps.rb', @cmd.options[:gemdeps]
1398
+ assert_equal "gem.deps.rb", @cmd.options[:gemdeps]
1101
1399
 
1102
- FileUtils.rm 'gem.deps.rb'
1400
+ FileUtils.rm "gem.deps.rb"
1103
1401
 
1104
- FileUtils.touch 'Isolate'
1402
+ FileUtils.touch "Isolate"
1105
1403
 
1106
1404
  @cmd.handle_options %w[-g]
1107
1405
 
1108
- assert_equal 'Isolate', @cmd.options[:gemdeps]
1406
+ assert_equal "Isolate", @cmd.options[:gemdeps]
1109
1407
 
1110
- FileUtils.touch 'Gemfile'
1408
+ FileUtils.touch "Gemfile"
1111
1409
 
1112
1410
  @cmd.handle_options %w[-g]
1113
1411
 
1114
- assert_equal 'Gemfile', @cmd.options[:gemdeps]
1412
+ assert_equal "Gemfile", @cmd.options[:gemdeps]
1115
1413
 
1116
- FileUtils.touch 'gem.deps.rb'
1414
+ FileUtils.touch "gem.deps.rb"
1117
1415
 
1118
1416
  @cmd.handle_options %w[-g]
1119
1417
 
1120
- assert_equal 'gem.deps.rb', @cmd.options[:gemdeps]
1418
+ assert_equal "gem.deps.rb", @cmd.options[:gemdeps]
1121
1419
  end
1122
1420
 
1123
1421
  def test_handle_options_suggest
@@ -1142,4 +1440,133 @@ ERROR: Possible alternatives: non_existent_with_hint
1142
1440
  assert_equal [:test, :development], @cmd.options[:without_groups]
1143
1441
  end
1144
1442
 
1443
+ def test_explain_platform_local
1444
+ local = Gem::Platform.local
1445
+ spec_fetcher do |fetcher|
1446
+ fetcher.spec "a", 2
1447
+
1448
+ fetcher.spec "a", 2 do |s|
1449
+ s.platform = local
1450
+ end
1451
+ end
1452
+
1453
+ @cmd.options[:explain] = true
1454
+ @cmd.options[:args] = %w[a]
1455
+
1456
+ use_ui @ui do
1457
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1458
+ @cmd.execute
1459
+ end
1460
+ end
1461
+
1462
+ out = @ui.output.split "\n"
1463
+
1464
+ assert_equal "Gems to install:", out.shift
1465
+ assert_equal " a-2-#{local}", out.shift
1466
+ assert_empty out
1467
+ end
1468
+
1469
+ def test_explain_platform_local_ignore_dependencies
1470
+ local = Gem::Platform.local
1471
+ spec_fetcher do |fetcher|
1472
+ fetcher.spec "a", 3
1473
+
1474
+ fetcher.spec "a", 3 do |s|
1475
+ s.platform = local
1476
+ end
1477
+ end
1478
+
1479
+ @cmd.options[:ignore_dependencies] = true
1480
+ @cmd.options[:explain] = true
1481
+ @cmd.options[:args] = %w[a]
1482
+
1483
+ use_ui @ui do
1484
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1485
+ @cmd.execute
1486
+ end
1487
+ end
1488
+
1489
+ out = @ui.output.split "\n"
1490
+
1491
+ assert_equal "Gems to install:", out.shift
1492
+ assert_equal " a-3-#{local}", out.shift
1493
+ assert_empty out
1494
+ end
1495
+
1496
+ def test_explain_platform_ruby
1497
+ local = Gem::Platform.local
1498
+ spec_fetcher do |fetcher|
1499
+ fetcher.spec "a", 2
1500
+
1501
+ fetcher.spec "a", 2 do |s|
1502
+ s.platform = local
1503
+ end
1504
+ end
1505
+
1506
+ # equivalent to --platform=ruby
1507
+ Gem.platforms = [Gem::Platform::RUBY]
1508
+
1509
+ @cmd.options[:explain] = true
1510
+ @cmd.options[:args] = %w[a]
1511
+
1512
+ use_ui @ui do
1513
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1514
+ @cmd.execute
1515
+ end
1516
+ end
1517
+
1518
+ out = @ui.output.split "\n"
1519
+
1520
+ assert_equal "Gems to install:", out.shift
1521
+ assert_equal " a-2", out.shift
1522
+ assert_empty out
1523
+ end
1524
+
1525
+ def test_explain_platform_ruby_ignore_dependencies
1526
+ local = Gem::Platform.local
1527
+ spec_fetcher do |fetcher|
1528
+ fetcher.spec "a", 3
1529
+
1530
+ fetcher.spec "a", 3 do |s|
1531
+ s.platform = local
1532
+ end
1533
+ end
1534
+
1535
+ # equivalent to --platform=ruby
1536
+ Gem.platforms = [Gem::Platform::RUBY]
1537
+
1538
+ @cmd.options[:ignore_dependencies] = true
1539
+ @cmd.options[:explain] = true
1540
+ @cmd.options[:args] = %w[a]
1541
+
1542
+ use_ui @ui do
1543
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1544
+ @cmd.execute
1545
+ end
1546
+ end
1547
+
1548
+ out = @ui.output.split "\n"
1549
+
1550
+ assert_equal "Gems to install:", out.shift
1551
+ assert_equal " a-3", out.shift
1552
+ assert_empty out
1553
+ end
1554
+
1555
+ def test_suggest_update_if_enabled
1556
+ TestUpdateSuggestion.with_eglible_environment(cmd: @cmd) do
1557
+ spec_fetcher do |fetcher|
1558
+ fetcher.gem "a", 2
1559
+ end
1560
+
1561
+ @cmd.options[:args] = %w[a]
1562
+
1563
+ use_ui @ui do
1564
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1565
+ @cmd.execute
1566
+ end
1567
+ end
1568
+
1569
+ assert_includes @ui.output, "A new release of RubyGems is available: 1.2.3 → 2.0.0!"
1570
+ end
1571
+ end
1145
1572
  end