rubygems-update 3.2.30 → 3.4.10

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 (641) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1666 -994
  3. data/CONTRIBUTING.md +71 -15
  4. data/Manifest.txt +93 -37
  5. data/POLICIES.md +65 -16
  6. data/README.md +28 -13
  7. data/UPGRADING.md +5 -81
  8. data/bin/gem +2 -10
  9. data/bin/update_rubygems +5 -5
  10. data/bundler/CHANGELOG.md +647 -1
  11. data/bundler/README.md +3 -6
  12. data/bundler/UPGRADING.md +11 -4
  13. data/bundler/bundler.gemspec +8 -10
  14. data/bundler/exe/bundle +7 -11
  15. data/bundler/exe/bundler +1 -1
  16. data/bundler/lib/bundler/.document +1 -0
  17. data/bundler/lib/bundler/build_metadata.rb +3 -3
  18. data/bundler/lib/bundler/cli/add.rb +1 -1
  19. data/bundler/lib/bundler/cli/binstubs.rb +5 -1
  20. data/bundler/lib/bundler/cli/check.rb +1 -1
  21. data/bundler/lib/bundler/cli/common.rb +4 -2
  22. data/bundler/lib/bundler/cli/config.rb +10 -1
  23. data/bundler/lib/bundler/cli/console.rb +2 -2
  24. data/bundler/lib/bundler/cli/doctor.rb +10 -3
  25. data/bundler/lib/bundler/cli/gem.rb +136 -42
  26. data/bundler/lib/bundler/cli/info.rb +17 -3
  27. data/bundler/lib/bundler/cli/init.rb +6 -2
  28. data/bundler/lib/bundler/cli/install.rb +15 -33
  29. data/bundler/lib/bundler/cli/lock.rb +8 -5
  30. data/bundler/lib/bundler/cli/open.rb +6 -4
  31. data/bundler/lib/bundler/cli/outdated.rb +13 -6
  32. data/bundler/lib/bundler/cli/platform.rb +2 -2
  33. data/bundler/lib/bundler/cli/show.rb +1 -1
  34. data/bundler/lib/bundler/cli/update.rb +8 -4
  35. data/bundler/lib/bundler/cli/viz.rb +1 -1
  36. data/bundler/lib/bundler/cli.rb +67 -21
  37. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -10
  38. data/bundler/lib/bundler/compact_index_client/updater.rb +53 -44
  39. data/bundler/lib/bundler/compact_index_client.rb +0 -6
  40. data/bundler/lib/bundler/constants.rb +1 -1
  41. data/bundler/lib/bundler/current_ruby.rb +18 -6
  42. data/bundler/lib/bundler/definition.rb +259 -242
  43. data/bundler/lib/bundler/dependency.rb +24 -71
  44. data/bundler/lib/bundler/digest.rb +1 -1
  45. data/bundler/lib/bundler/dsl.rb +29 -46
  46. data/bundler/lib/bundler/endpoint_specification.rb +15 -13
  47. data/bundler/lib/bundler/env.rb +2 -2
  48. data/bundler/lib/bundler/environment_preserver.rb +7 -3
  49. data/bundler/lib/bundler/errors.rb +15 -15
  50. data/bundler/lib/bundler/feature_flag.rb +0 -1
  51. data/bundler/lib/bundler/fetcher/base.rb +6 -8
  52. data/bundler/lib/bundler/fetcher/compact_index.rb +18 -25
  53. data/bundler/lib/bundler/fetcher/dependency.rb +2 -6
  54. data/bundler/lib/bundler/fetcher/downloader.rb +2 -5
  55. data/bundler/lib/bundler/fetcher/index.rb +0 -26
  56. data/bundler/lib/bundler/fetcher.rb +22 -29
  57. data/bundler/lib/bundler/force_platform.rb +18 -0
  58. data/bundler/lib/bundler/friendly_errors.rb +21 -7
  59. data/bundler/lib/bundler/gem_helper.rb +4 -4
  60. data/bundler/lib/bundler/gem_helpers.rb +9 -2
  61. data/bundler/lib/bundler/gem_version_promoter.rb +53 -98
  62. data/bundler/lib/bundler/graph.rb +3 -3
  63. data/bundler/lib/bundler/index.rb +13 -51
  64. data/bundler/lib/bundler/injector.rb +18 -4
  65. data/bundler/lib/bundler/inline.rb +9 -21
  66. data/bundler/lib/bundler/installer/gem_installer.rb +13 -5
  67. data/bundler/lib/bundler/installer/parallel_installer.rb +3 -33
  68. data/bundler/lib/bundler/installer/standalone.rb +42 -11
  69. data/bundler/lib/bundler/installer.rb +20 -44
  70. data/bundler/lib/bundler/lazy_specification.rb +72 -55
  71. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  72. data/bundler/lib/bundler/lockfile_parser.rb +28 -26
  73. data/bundler/lib/bundler/man/bundle-add.1 +21 -5
  74. data/bundler/lib/bundler/man/bundle-add.1.ronn +16 -4
  75. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  76. data/bundler/lib/bundler/man/bundle-cache.1 +7 -1
  77. data/bundler/lib/bundler/man/bundle-cache.1.ronn +7 -0
  78. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  79. data/bundler/lib/bundler/man/bundle-clean.1 +2 -2
  80. data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
  81. data/bundler/lib/bundler/man/bundle-config.1 +34 -15
  82. data/bundler/lib/bundler/man/bundle-config.1.ronn +31 -19
  83. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  84. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  85. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  86. data/bundler/lib/bundler/man/bundle-exec.1 +6 -6
  87. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -6
  88. data/bundler/lib/bundler/man/bundle-gem.1 +37 -34
  89. data/bundler/lib/bundler/man/bundle-gem.1.ronn +21 -5
  90. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  91. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  92. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  93. data/bundler/lib/bundler/man/bundle-init.1 +5 -1
  94. data/bundler/lib/bundler/man/bundle-init.1.ronn +2 -0
  95. data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
  96. data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
  97. data/bundler/lib/bundler/man/bundle-install.1 +6 -31
  98. data/bundler/lib/bundler/man/bundle-install.1.ronn +8 -31
  99. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  100. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  101. data/bundler/lib/bundler/man/bundle-open.1 +22 -2
  102. data/bundler/lib/bundler/man/bundle-open.1.ronn +9 -1
  103. data/bundler/lib/bundler/man/bundle-outdated.1 +3 -10
  104. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +1 -10
  105. data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
  106. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  107. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  108. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  109. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  110. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  111. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  112. data/bundler/lib/bundler/man/bundle-update.1 +2 -2
  113. data/bundler/lib/bundler/man/bundle-update.1.ronn +2 -1
  114. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  115. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  116. data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
  117. data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
  118. data/bundler/lib/bundler/man/bundle.1 +15 -10
  119. data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
  120. data/bundler/lib/bundler/man/gemfile.5 +117 -80
  121. data/bundler/lib/bundler/man/gemfile.5.ronn +105 -84
  122. data/bundler/lib/bundler/man/index.txt +4 -0
  123. data/bundler/lib/bundler/match_metadata.rb +13 -0
  124. data/bundler/lib/bundler/match_platform.rb +0 -1
  125. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  126. data/bundler/lib/bundler/mirror.rb +5 -7
  127. data/bundler/lib/bundler/plugin/api/source.rb +4 -9
  128. data/bundler/lib/bundler/plugin/index.rb +4 -4
  129. data/bundler/lib/bundler/plugin/installer/git.rb +0 -4
  130. data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -8
  131. data/bundler/lib/bundler/plugin/installer.rb +6 -3
  132. data/bundler/lib/bundler/plugin.rb +3 -1
  133. data/bundler/lib/bundler/process_lock.rb +1 -1
  134. data/bundler/lib/bundler/remote_specification.rb +7 -5
  135. data/bundler/lib/bundler/resolver/base.rb +109 -0
  136. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  137. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  138. data/bundler/lib/bundler/resolver/package.rb +72 -0
  139. data/bundler/lib/bundler/resolver/root.rb +25 -0
  140. data/bundler/lib/bundler/resolver/spec_group.rb +43 -71
  141. data/bundler/lib/bundler/resolver.rb +332 -308
  142. data/bundler/lib/bundler/ruby_dsl.rb +1 -1
  143. data/bundler/lib/bundler/ruby_version.rb +5 -18
  144. data/bundler/lib/bundler/rubygems_ext.rb +144 -25
  145. data/bundler/lib/bundler/rubygems_gem_installer.rb +32 -20
  146. data/bundler/lib/bundler/rubygems_integration.rb +24 -95
  147. data/bundler/lib/bundler/runtime.rb +2 -7
  148. data/bundler/lib/bundler/self_manager.rb +168 -0
  149. data/bundler/lib/bundler/settings.rb +5 -10
  150. data/bundler/lib/bundler/setup.rb +4 -1
  151. data/bundler/lib/bundler/shared_helpers.rb +17 -25
  152. data/bundler/lib/bundler/source/git/git_proxy.rb +219 -71
  153. data/bundler/lib/bundler/source/git.rb +23 -26
  154. data/bundler/lib/bundler/source/metadata.rb +3 -4
  155. data/bundler/lib/bundler/source/path/installer.rb +1 -22
  156. data/bundler/lib/bundler/source/path.rb +7 -7
  157. data/bundler/lib/bundler/source/rubygems.rb +91 -130
  158. data/bundler/lib/bundler/source/rubygems_aggregate.rb +1 -1
  159. data/bundler/lib/bundler/source.rb +4 -5
  160. data/bundler/lib/bundler/source_list.rb +19 -31
  161. data/bundler/lib/bundler/source_map.rb +15 -2
  162. data/bundler/lib/bundler/spec_set.rb +63 -35
  163. data/bundler/lib/bundler/stub_specification.rb +5 -3
  164. data/bundler/lib/bundler/templates/Executable +3 -5
  165. data/bundler/lib/bundler/templates/Executable.bundler +6 -11
  166. data/bundler/lib/bundler/templates/Executable.standalone +4 -4
  167. data/bundler/lib/bundler/templates/Gemfile +0 -2
  168. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  169. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +8 -2
  170. data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -11
  171. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +27 -3
  172. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  173. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  174. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  175. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  176. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +13 -3
  177. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  178. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  179. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +22 -16
  180. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  181. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  182. data/bundler/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
  183. data/bundler/lib/bundler/ui/shell.rb +36 -13
  184. data/bundler/lib/bundler/ui/silent.rb +21 -5
  185. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  186. data/bundler/lib/bundler/vendor/.document +1 -0
  187. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  188. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  189. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
  190. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1350 -408
  191. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  192. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  193. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  194. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  195. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  196. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  197. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  198. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  199. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  200. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  201. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  202. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  203. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  204. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  205. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  206. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  207. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +243 -0
  208. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  209. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  210. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +6 -6
  211. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -2
  212. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +6 -2
  213. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
  214. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +9 -4
  215. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +19 -1
  216. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +23 -5
  217. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  218. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  219. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  220. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  221. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
  222. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +76 -91
  223. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  224. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -2
  225. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +32 -13
  226. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -3
  227. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -2
  228. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +2 -2
  229. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  230. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -3
  231. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +14 -21
  232. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +11 -17
  233. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  234. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  235. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  236. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +3 -3
  237. data/bundler/lib/bundler/vendored_persistent.rb +1 -33
  238. data/bundler/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  239. data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_tsort.rb} +1 -1
  240. data/bundler/lib/bundler/version.rb +5 -1
  241. data/bundler/lib/bundler/worker.rb +5 -7
  242. data/bundler/lib/bundler.rb +50 -77
  243. data/hide_lib_for_update/note.txt +0 -4
  244. data/lib/rubygems/available_set.rb +3 -3
  245. data/lib/rubygems/basic_specification.rb +12 -12
  246. data/lib/rubygems/bundler_version_finder.rb +14 -46
  247. data/lib/rubygems/command.rb +47 -39
  248. data/lib/rubygems/command_manager.rb +34 -13
  249. data/lib/rubygems/commands/build_command.rb +11 -8
  250. data/lib/rubygems/commands/cert_command.rb +39 -39
  251. data/lib/rubygems/commands/check_command.rb +20 -20
  252. data/lib/rubygems/commands/cleanup_command.rb +23 -23
  253. data/lib/rubygems/commands/contents_command.rb +13 -13
  254. data/lib/rubygems/commands/dependency_command.rb +35 -45
  255. data/lib/rubygems/commands/environment_command.rb +10 -7
  256. data/lib/rubygems/commands/exec_command.rb +248 -0
  257. data/lib/rubygems/commands/fetch_command.rb +32 -13
  258. data/lib/rubygems/commands/generate_index_command.rb +17 -17
  259. data/lib/rubygems/commands/help_command.rb +6 -6
  260. data/lib/rubygems/commands/info_command.rb +3 -3
  261. data/lib/rubygems/commands/install_command.rb +31 -24
  262. data/lib/rubygems/commands/list_command.rb +4 -4
  263. data/lib/rubygems/commands/lock_command.rb +4 -4
  264. data/lib/rubygems/commands/mirror_command.rb +3 -3
  265. data/lib/rubygems/commands/open_command.rb +9 -9
  266. data/lib/rubygems/commands/outdated_command.rb +5 -5
  267. data/lib/rubygems/commands/owner_command.rb +17 -12
  268. data/lib/rubygems/commands/pristine_command.rb +64 -49
  269. data/lib/rubygems/commands/push_command.rb +16 -16
  270. data/lib/rubygems/commands/query_command.rb +9 -9
  271. data/lib/rubygems/commands/rdoc_command.rb +26 -25
  272. data/lib/rubygems/commands/search_command.rb +4 -4
  273. data/lib/rubygems/commands/server_command.rb +16 -79
  274. data/lib/rubygems/commands/setup_command.rb +172 -173
  275. data/lib/rubygems/commands/signin_command.rb +9 -9
  276. data/lib/rubygems/commands/signout_command.rb +7 -7
  277. data/lib/rubygems/commands/sources_command.rb +22 -22
  278. data/lib/rubygems/commands/specification_command.rb +18 -18
  279. data/lib/rubygems/commands/stale_command.rb +2 -2
  280. data/lib/rubygems/commands/uninstall_command.rb +43 -40
  281. data/lib/rubygems/commands/unpack_command.rb +13 -13
  282. data/lib/rubygems/commands/update_command.rb +61 -72
  283. data/lib/rubygems/commands/which_command.rb +7 -7
  284. data/lib/rubygems/commands/yank_command.rb +11 -11
  285. data/lib/rubygems/compatibility.rb +4 -2
  286. data/lib/rubygems/config_file.rb +58 -25
  287. data/lib/rubygems/core_ext/kernel_gem.rb +1 -6
  288. data/lib/rubygems/core_ext/kernel_require.rb +108 -115
  289. data/lib/rubygems/core_ext/kernel_warn.rb +33 -37
  290. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  291. data/lib/rubygems/defaults.rb +32 -36
  292. data/lib/rubygems/dependency.rb +20 -17
  293. data/lib/rubygems/dependency_installer.rb +37 -37
  294. data/lib/rubygems/dependency_list.rb +7 -7
  295. data/lib/rubygems/deprecate.rb +55 -8
  296. data/lib/rubygems/doctor.rb +21 -21
  297. data/lib/rubygems/errors.rb +3 -6
  298. data/lib/rubygems/exceptions.rb +35 -7
  299. data/lib/rubygems/ext/build_error.rb +1 -1
  300. data/lib/rubygems/ext/builder.rb +51 -22
  301. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
  302. data/lib/rubygems/ext/cargo_builder.rb +360 -0
  303. data/lib/rubygems/ext/cmake_builder.rb +2 -2
  304. data/lib/rubygems/ext/configure_builder.rb +1 -1
  305. data/lib/rubygems/ext/ext_conf_builder.rb +35 -59
  306. data/lib/rubygems/ext/rake_builder.rb +3 -3
  307. data/lib/rubygems/ext.rb +7 -6
  308. data/lib/rubygems/gem_runner.rb +12 -16
  309. data/lib/rubygems/gemcutter_utilities.rb +60 -21
  310. data/lib/rubygems/indexer.rb +30 -28
  311. data/lib/rubygems/install_default_message.rb +2 -2
  312. data/lib/rubygems/install_message.rb +2 -2
  313. data/lib/rubygems/install_update_options.rb +70 -61
  314. data/lib/rubygems/installer.rb +135 -87
  315. data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
  316. data/lib/rubygems/local_remote_options.rb +22 -24
  317. data/lib/rubygems/mock_gem_ui.rb +2 -2
  318. data/lib/rubygems/name_tuple.rb +6 -7
  319. data/lib/rubygems/optparse/.document +1 -0
  320. data/lib/rubygems/optparse/COPYING +56 -0
  321. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  322. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  323. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  324. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  325. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  326. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  327. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  328. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  329. data/lib/rubygems/optparse/lib/optparse.rb +2308 -0
  330. data/lib/rubygems/optparse.rb +3 -0
  331. data/lib/rubygems/package/file_source.rb +2 -2
  332. data/lib/rubygems/package/old.rb +9 -9
  333. data/lib/rubygems/package/tar_header.rb +62 -62
  334. data/lib/rubygems/package/tar_reader/entry.rb +90 -9
  335. data/lib/rubygems/package/tar_reader.rb +1 -29
  336. data/lib/rubygems/package/tar_writer.rb +7 -7
  337. data/lib/rubygems/package.rb +77 -60
  338. data/lib/rubygems/package_task.rb +4 -4
  339. data/lib/rubygems/path_support.rb +1 -6
  340. data/lib/rubygems/platform.rb +94 -61
  341. data/lib/rubygems/psych_tree.rb +1 -1
  342. data/lib/rubygems/query_utils.rb +49 -51
  343. data/lib/rubygems/rdoc.rb +2 -2
  344. data/lib/rubygems/remote_fetcher.rb +27 -27
  345. data/lib/rubygems/request/connection_pools.rb +4 -4
  346. data/lib/rubygems/request/http_pool.rb +1 -1
  347. data/lib/rubygems/request.rb +24 -24
  348. data/lib/rubygems/request_set/gem_dependency_api.rb +122 -123
  349. data/lib/rubygems/request_set/lockfile/parser.rb +26 -26
  350. data/lib/rubygems/request_set/lockfile/tokenizer.rb +4 -4
  351. data/lib/rubygems/request_set/lockfile.rb +9 -9
  352. data/lib/rubygems/request_set.rb +18 -18
  353. data/lib/rubygems/requirement.rb +15 -15
  354. data/lib/rubygems/resolver/activation_request.rb +3 -3
  355. data/lib/rubygems/resolver/api_set.rb +4 -4
  356. data/lib/rubygems/resolver/api_specification.rb +6 -6
  357. data/lib/rubygems/resolver/best_set.rb +5 -5
  358. data/lib/rubygems/resolver/conflict.rb +10 -10
  359. data/lib/rubygems/resolver/dependency_request.rb +2 -2
  360. data/lib/rubygems/resolver/git_set.rb +2 -2
  361. data/lib/rubygems/resolver/git_specification.rb +6 -6
  362. data/lib/rubygems/resolver/index_set.rb +3 -3
  363. data/lib/rubygems/resolver/index_specification.rb +6 -5
  364. data/lib/rubygems/resolver/installed_specification.rb +4 -4
  365. data/lib/rubygems/resolver/installer_set.rb +21 -26
  366. data/lib/rubygems/resolver/local_specification.rb +2 -2
  367. data/lib/rubygems/resolver/lock_set.rb +4 -4
  368. data/lib/rubygems/resolver/lock_specification.rb +4 -4
  369. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +3 -3
  370. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +32 -26
  371. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  372. data/lib/rubygems/resolver/molinillo.rb +1 -1
  373. data/lib/rubygems/resolver/specification.rb +1 -1
  374. data/lib/rubygems/resolver/stats.rb +1 -1
  375. data/lib/rubygems/resolver/vendor_set.rb +1 -1
  376. data/lib/rubygems/resolver/vendor_specification.rb +3 -3
  377. data/lib/rubygems/resolver.rb +40 -40
  378. data/lib/rubygems/s3_uri_signer.rb +6 -6
  379. data/lib/rubygems/safe_yaml.rb +10 -10
  380. data/lib/rubygems/security/policies.rb +47 -47
  381. data/lib/rubygems/security/policy.rb +19 -21
  382. data/lib/rubygems/security/signer.rb +5 -5
  383. data/lib/rubygems/security/trust_dir.rb +4 -4
  384. data/lib/rubygems/security.rb +37 -43
  385. data/lib/rubygems/security_option.rb +7 -7
  386. data/lib/rubygems/source/git.rb +25 -24
  387. data/lib/rubygems/source/installed.rb +1 -1
  388. data/lib/rubygems/source/local.rb +2 -2
  389. data/lib/rubygems/source/specific_file.rb +1 -1
  390. data/lib/rubygems/source.rb +27 -32
  391. data/lib/rubygems/source_list.rb +5 -9
  392. data/lib/rubygems/spec_fetcher.rb +37 -37
  393. data/lib/rubygems/specification.rb +265 -211
  394. data/lib/rubygems/specification_policy.rb +49 -30
  395. data/lib/rubygems/stub_specification.rb +24 -27
  396. data/lib/rubygems/text.rb +22 -21
  397. data/lib/rubygems/tsort/.document +1 -0
  398. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  399. data/lib/rubygems/tsort/lib/tsort.rb +452 -0
  400. data/lib/rubygems/tsort.rb +3 -0
  401. data/lib/rubygems/uninstaller.rb +29 -26
  402. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  403. data/lib/rubygems/update_suggestion.rb +69 -0
  404. data/lib/rubygems/uri.rb +45 -30
  405. data/lib/rubygems/uri_formatter.rb +1 -1
  406. data/lib/rubygems/user_interaction.rb +42 -28
  407. data/lib/rubygems/util/licenses.rb +4 -2
  408. data/lib/rubygems/util.rb +12 -16
  409. data/lib/rubygems/validator.rb +6 -6
  410. data/lib/rubygems/version.rb +28 -17
  411. data/lib/rubygems/version_option.rb +5 -5
  412. data/lib/rubygems.rb +129 -117
  413. data/rubygems-update.gemspec +3 -3
  414. data/setup.rb +11 -16
  415. data/test/rubygems/alternate_cert.pem +14 -14
  416. data/test/rubygems/alternate_cert_32.pem +15 -15
  417. data/test/rubygems/alternate_key.pem +25 -25
  418. data/test/rubygems/bundler_test_gem.rb +419 -0
  419. data/test/rubygems/child_cert.pem +15 -16
  420. data/test/rubygems/child_cert_32.pem +15 -16
  421. data/test/rubygems/child_key.pem +25 -25
  422. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  423. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  424. data/test/rubygems/encrypted_private_key.pem +26 -26
  425. data/test/rubygems/expired_cert.pem +15 -15
  426. data/test/rubygems/future_cert.pem +15 -15
  427. data/test/rubygems/future_cert_32.pem +15 -15
  428. data/test/rubygems/grandchild_cert.pem +15 -16
  429. data/test/rubygems/grandchild_cert_32.pem +15 -16
  430. data/test/rubygems/grandchild_key.pem +25 -25
  431. data/test/rubygems/helper.rb +237 -207
  432. data/test/rubygems/installer_test_case.rb +13 -13
  433. data/test/rubygems/invalid_issuer_cert.pem +16 -16
  434. data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
  435. data/test/rubygems/invalid_key.pem +25 -25
  436. data/test/rubygems/invalid_signer_cert.pem +15 -15
  437. data/test/rubygems/invalid_signer_cert_32.pem +15 -15
  438. data/test/rubygems/invalidchild_cert.pem +15 -16
  439. data/test/rubygems/invalidchild_cert_32.pem +15 -16
  440. data/test/rubygems/invalidchild_key.pem +25 -25
  441. data/test/rubygems/package/tar_test_case.rb +52 -17
  442. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  443. data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
  444. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
  445. data/test/rubygems/private_key.pem +25 -25
  446. data/test/rubygems/public_cert.pem +16 -16
  447. data/test/rubygems/public_cert_32.pem +15 -15
  448. data/test/rubygems/public_key.pem +7 -7
  449. data/test/rubygems/rubygems_plugin.rb +2 -2
  450. data/test/rubygems/simple_gem.rb +1 -1
  451. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +4 -4
  452. data/test/rubygems/test_bundled_ca.rb +11 -11
  453. data/test/rubygems/test_config.rb +5 -5
  454. data/test/rubygems/test_deprecate.rb +3 -3
  455. data/test/rubygems/test_exit.rb +17 -0
  456. data/test/rubygems/test_gem.rb +367 -757
  457. data/test/rubygems/test_gem_available_set.rb +21 -21
  458. data/test/rubygems/test_gem_bundler_version_finder.rb +27 -47
  459. data/test/rubygems/test_gem_command.rb +45 -45
  460. data/test/rubygems/test_gem_command_manager.rb +124 -27
  461. data/test/rubygems/test_gem_commands_build_command.rb +73 -63
  462. data/test/rubygems/test_gem_commands_cert_command.rb +105 -107
  463. data/test/rubygems/test_gem_commands_check_command.rb +4 -4
  464. data/test/rubygems/test_gem_commands_cleanup_command.rb +40 -40
  465. data/test/rubygems/test_gem_commands_contents_command.rb +28 -28
  466. data/test/rubygems/test_gem_commands_dependency_command.rb +36 -36
  467. data/test/rubygems/test_gem_commands_environment_command.rb +38 -14
  468. data/test/rubygems/test_gem_commands_exec_command.rb +851 -0
  469. data/test/rubygems/test_gem_commands_fetch_command.rb +159 -26
  470. data/test/rubygems/test_gem_commands_generate_index_command.rb +7 -7
  471. data/test/rubygems/test_gem_commands_help_command.rb +13 -13
  472. data/test/rubygems/test_gem_commands_info_command.rb +28 -2
  473. data/test/rubygems/test_gem_commands_install_command.rb +200 -132
  474. data/test/rubygems/test_gem_commands_list_command.rb +4 -4
  475. data/test/rubygems/test_gem_commands_lock_command.rb +10 -10
  476. data/test/rubygems/test_gem_commands_mirror.rb +2 -2
  477. data/test/rubygems/test_gem_commands_open_command.rb +5 -5
  478. data/test/rubygems/test_gem_commands_outdated_command.rb +9 -9
  479. data/test/rubygems/test_gem_commands_owner_command.rb +126 -45
  480. data/test/rubygems/test_gem_commands_pristine_command.rb +141 -92
  481. data/test/rubygems/test_gem_commands_push_command.rb +85 -59
  482. data/test/rubygems/test_gem_commands_query_command.rb +73 -73
  483. data/test/rubygems/test_gem_commands_search_command.rb +2 -2
  484. data/test/rubygems/test_gem_commands_server_command.rb +6 -48
  485. data/test/rubygems/test_gem_commands_setup_command.rb +169 -92
  486. data/test/rubygems/test_gem_commands_signin_command.rb +154 -26
  487. data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
  488. data/test/rubygems/test_gem_commands_sources_command.rb +74 -25
  489. data/test/rubygems/test_gem_commands_specification_command.rb +32 -32
  490. data/test/rubygems/test_gem_commands_stale_command.rb +4 -4
  491. data/test/rubygems/test_gem_commands_uninstall_command.rb +99 -82
  492. data/test/rubygems/test_gem_commands_unpack_command.rb +31 -31
  493. data/test/rubygems/test_gem_commands_update_command.rb +202 -91
  494. data/test/rubygems/test_gem_commands_which_command.rb +6 -6
  495. data/test/rubygems/test_gem_commands_yank_command.rb +43 -43
  496. data/test/rubygems/test_gem_config_file.rb +93 -81
  497. data/test/rubygems/test_gem_dependency.rb +78 -80
  498. data/test/rubygems/test_gem_dependency_installer.rb +165 -165
  499. data/test/rubygems/test_gem_dependency_list.rb +47 -47
  500. data/test/rubygems/test_gem_dependency_resolution_error.rb +4 -4
  501. data/test/rubygems/test_gem_doctor.rb +26 -26
  502. data/test/rubygems/test_gem_ext_builder.rb +60 -62
  503. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +1 -0
  504. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +8 -0
  505. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +233 -0
  506. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +10 -0
  507. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +27 -0
  508. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +1 -0
  509. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +1 -0
  510. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +247 -0
  511. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +10 -0
  512. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +8 -0
  513. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +51 -0
  514. data/test/rubygems/test_gem_ext_cargo_builder.rb +166 -0
  515. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +33 -0
  516. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +60 -0
  517. data/test/rubygems/test_gem_ext_cmake_builder.rb +17 -15
  518. data/test/rubygems/test_gem_ext_configure_builder.rb +13 -13
  519. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +53 -50
  520. data/test/rubygems/test_gem_ext_rake_builder.rb +15 -15
  521. data/test/rubygems/test_gem_gem_runner.rb +13 -8
  522. data/test/rubygems/test_gem_gemcutter_utilities.rb +71 -65
  523. data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -4
  524. data/test/rubygems/test_gem_indexer.rb +90 -67
  525. data/test/rubygems/test_gem_install_update_options.rb +18 -18
  526. data/test/rubygems/test_gem_installer.rb +511 -327
  527. data/test/rubygems/test_gem_local_remote_options.rb +10 -10
  528. data/test/rubygems/test_gem_name_tuple.rb +4 -4
  529. data/test/rubygems/test_gem_package.rb +246 -236
  530. data/test/rubygems/test_gem_package_old.rb +13 -13
  531. data/test/rubygems/test_gem_package_tar_header.rb +47 -47
  532. data/test/rubygems/test_gem_package_tar_reader.rb +55 -8
  533. data/test/rubygems/test_gem_package_tar_reader_entry.rb +161 -16
  534. data/test/rubygems/test_gem_package_tar_writer.rb +76 -76
  535. data/test/rubygems/test_gem_package_task.rb +18 -18
  536. data/test/rubygems/test_gem_path_support.rb +15 -19
  537. data/test/rubygems/test_gem_platform.rb +335 -214
  538. data/test/rubygems/test_gem_rdoc.rb +14 -14
  539. data/test/rubygems/test_gem_remote_fetcher.rb +169 -154
  540. data/test/rubygems/test_gem_request.rb +65 -59
  541. data/test/rubygems/test_gem_request_connection_pools.rb +29 -29
  542. data/test/rubygems/test_gem_request_set.rb +100 -100
  543. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +209 -211
  544. data/test/rubygems/test_gem_request_set_lockfile.rb +86 -86
  545. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +58 -58
  546. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +62 -62
  547. data/test/rubygems/test_gem_requirement.rb +47 -42
  548. data/test/rubygems/test_gem_resolver.rb +173 -106
  549. data/test/rubygems/test_gem_resolver_activation_request.rb +6 -6
  550. data/test/rubygems/test_gem_resolver_api_set.rb +33 -33
  551. data/test/rubygems/test_gem_resolver_api_specification.rb +47 -47
  552. data/test/rubygems/test_gem_resolver_best_set.rb +22 -22
  553. data/test/rubygems/test_gem_resolver_composed_set.rb +1 -1
  554. data/test/rubygems/test_gem_resolver_conflict.rb +12 -12
  555. data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -15
  556. data/test/rubygems/test_gem_resolver_git_set.rb +21 -21
  557. data/test/rubygems/test_gem_resolver_git_specification.rb +21 -21
  558. data/test/rubygems/test_gem_resolver_index_set.rb +12 -12
  559. data/test/rubygems/test_gem_resolver_index_specification.rb +16 -16
  560. data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -5
  561. data/test/rubygems/test_gem_resolver_installer_set.rb +79 -35
  562. data/test/rubygems/test_gem_resolver_local_specification.rb +7 -7
  563. data/test/rubygems/test_gem_resolver_lock_set.rb +12 -12
  564. data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -17
  565. data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -1
  566. data/test/rubygems/test_gem_resolver_specification.rb +8 -8
  567. data/test/rubygems/test_gem_resolver_vendor_set.rb +6 -6
  568. data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -10
  569. data/test/rubygems/test_gem_security.rb +69 -69
  570. data/test/rubygems/test_gem_security_policy.rb +72 -72
  571. data/test/rubygems/test_gem_security_signer.rb +34 -34
  572. data/test/rubygems/test_gem_security_trust_dir.rb +6 -6
  573. data/test/rubygems/test_gem_silent_ui.rb +38 -32
  574. data/test/rubygems/test_gem_source.rb +44 -44
  575. data/test/rubygems/test_gem_source_fetch_problem.rb +9 -9
  576. data/test/rubygems/test_gem_source_git.rb +69 -62
  577. data/test/rubygems/test_gem_source_installed.rb +16 -16
  578. data/test/rubygems/test_gem_source_list.rb +5 -5
  579. data/test/rubygems/test_gem_source_local.rb +14 -14
  580. data/test/rubygems/test_gem_source_lock.rb +31 -31
  581. data/test/rubygems/test_gem_source_specific_file.rb +17 -17
  582. data/test/rubygems/test_gem_source_subpath_problem.rb +7 -7
  583. data/test/rubygems/test_gem_source_vendor.rb +13 -13
  584. data/test/rubygems/test_gem_spec_fetcher.rb +72 -72
  585. data/test/rubygems/test_gem_specification.rb +560 -493
  586. data/test/rubygems/test_gem_stream_ui.rb +20 -20
  587. data/test/rubygems/test_gem_stub_specification.rb +32 -48
  588. data/test/rubygems/test_gem_text.rb +7 -1
  589. data/test/rubygems/test_gem_uninstaller.rb +113 -113
  590. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -3
  591. data/test/rubygems/test_gem_update_suggestion.rb +208 -0
  592. data/test/rubygems/test_gem_uri.rb +4 -4
  593. data/test/rubygems/test_gem_uri_formatter.rb +14 -14
  594. data/test/rubygems/test_gem_util.rb +23 -23
  595. data/test/rubygems/test_gem_validator.rb +8 -8
  596. data/test/rubygems/test_gem_version.rb +27 -16
  597. data/test/rubygems/test_gem_version_option.rb +15 -15
  598. data/test/rubygems/test_kernel.rb +42 -60
  599. data/test/rubygems/test_project_sanity.rb +2 -2
  600. data/test/rubygems/test_remote_fetch_error.rb +6 -6
  601. data/test/rubygems/test_require.rb +132 -174
  602. data/test/rubygems/test_rubygems.rb +42 -12
  603. data/test/rubygems/utilities.rb +59 -37
  604. data/test/rubygems/wrong_key_cert.pem +15 -15
  605. data/test/rubygems/wrong_key_cert_32.pem +15 -15
  606. data/test/test_changelog_generator.rb +1 -0
  607. metadata +97 -41
  608. data/bundler/lib/bundler/dep_proxy.rb +0 -55
  609. data/bundler/lib/bundler/gemdeps.rb +0 -29
  610. data/bundler/lib/bundler/psyched_yaml.rb +0 -22
  611. data/bundler/lib/bundler/templates/gems.rb +0 -8
  612. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  613. data/bundler/lib/bundler/vendor/molinillo/LICENSE +0 -9
  614. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  615. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  616. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  617. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  618. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  619. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  620. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  621. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  622. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  623. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  624. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  625. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  626. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  627. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  628. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  629. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  630. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  631. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  632. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  633. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  634. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  635. data/bundler/lib/bundler/version_ranges.rb +0 -122
  636. data/lib/rubygems/psych_additions.rb +0 -10
  637. data/lib/rubygems/server.rb +0 -882
  638. data/test/rubygems/bogussources.rb +0 -9
  639. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  640. data/test/rubygems/test_gem_server.rb +0 -608
  641. /data/bundler/lib/bundler/templates/newgem/ext/newgem/{extconf.rb.tt → extconf-c.rb.tt} +0 -0
@@ -0,0 +1,851 @@
1
+ # frozen_string_literal: true
2
+ require_relative "helper"
3
+ require "rubygems/commands/exec_command"
4
+
5
+ class TestGemCommandsExecCommand < Gem::TestCase
6
+ def setup
7
+ @orig_args = Gem::Command.build_args
8
+ @orig_specific_extra_args = Gem::Command.specific_extra_args_hash.dup
9
+ @orig_extra_args = Gem::Command.extra_args.dup
10
+
11
+ super
12
+ common_installer_setup
13
+
14
+ @cmd = Gem::Commands::ExecCommand.new
15
+
16
+ @gem_home = Gem.dir
17
+ @gem_path = Gem.path
18
+ @test_arch = RbConfig::CONFIG["arch"]
19
+
20
+ @installed_specs = []
21
+ Gem.post_install {|installer| @installed_specs << installer.spec }
22
+ end
23
+
24
+ def teardown
25
+ super
26
+
27
+ common_installer_teardown
28
+
29
+ Gem::Command.build_args = @orig_args
30
+ Gem::Command.specific_extra_args_hash = @orig_specific_extra_args
31
+ Gem::Command.extra_args = @orig_extra_args
32
+ Gem.configuration = nil
33
+ end
34
+
35
+ def invoke(*args)
36
+ @ui.outs.truncate(0)
37
+ @ui.outs.rewind
38
+ @ui.errs.truncate(0)
39
+ @ui.errs.rewind
40
+ @installed_specs.clear
41
+
42
+ @cmd.invoke(*args)
43
+ ensure
44
+ Gem::Specification.unresolved_deps.clear
45
+ Gem.loaded_specs.clear
46
+ Gem.instance_variable_set(:@activated_gem_paths, 0)
47
+ Gem.clear_default_specs
48
+ Gem.use_paths(@gem_home, @gem_path)
49
+ Gem.refresh
50
+ end
51
+
52
+ def test_error_with_no_arguments
53
+ e = assert_raise Gem::CommandLineError do
54
+ @cmd.invoke
55
+ end
56
+ assert_equal "Please specify an executable to run (e.g. gem exec COMMAND)",
57
+ e.message
58
+ end
59
+
60
+ def test_error_with_no_executable
61
+ e = assert_raise Gem::CommandLineError do
62
+ @cmd.invoke "--verbose", "--gem", "GEM", "--version", "< 10", "--conservative"
63
+ end
64
+ assert_equal "Please specify an executable to run (e.g. gem exec COMMAND)",
65
+ e.message
66
+ end
67
+
68
+ def test_full_option_parsing
69
+ @cmd.when_invoked do |options|
70
+ assert_equal options, {
71
+ args: ["install", "--no-color", "--help", "--verbose"],
72
+ executable: "pod",
73
+ :explicit_prerelease => false,
74
+ gem_name: "cocoapods",
75
+ prerelease: false,
76
+ :version => Gem::Requirement.new(["> 1", "< 1.3"]),
77
+ build_args: nil,
78
+ }
79
+ end
80
+ @cmd.invoke "--gem", "cocoapods", "-v", "> 1", "--version", "< 1.3", "--verbose", "--", "pod", "install", "--no-color", "--help", "--verbose"
81
+ end
82
+
83
+ def test_single_arg_parsing
84
+ @cmd.when_invoked do |options|
85
+ assert_equal options, {
86
+ args: [],
87
+ executable: "rails",
88
+ gem_name: "rails",
89
+ :version => Gem::Requirement.new([">= 0"]),
90
+ build_args: nil,
91
+ }
92
+ end
93
+ @cmd.invoke "rails"
94
+ end
95
+
96
+ def test_single_arg_parsing_with_version
97
+ @cmd.when_invoked do |options|
98
+ assert_equal options, {
99
+ args: [],
100
+ executable: "rails",
101
+ gem_name: "rails",
102
+ :version => Gem::Requirement.new(["= 7.1"]),
103
+ build_args: nil,
104
+ }
105
+ end
106
+ @cmd.invoke "rails:7.1"
107
+ end
108
+
109
+ def test_gem_without_executable
110
+ spec_fetcher do |fetcher|
111
+ fetcher.gem "a", 2
112
+ end
113
+
114
+ util_clear_gems
115
+
116
+ use_ui @ui do
117
+ e = assert_raise Gem::MockGemUi::TermError, @ui.error do
118
+ @cmd.invoke "a:2"
119
+ end
120
+ assert_equal 1, e.exit_code
121
+ assert_equal "ERROR: Failed to load executable `a`, are you sure the gem `a` contains it?\n", @ui.error
122
+ end
123
+ end
124
+
125
+ def test_gem_with_executable
126
+ spec_fetcher do |fetcher|
127
+ fetcher.gem "a", 2 do |s|
128
+ s.executables = %w[a]
129
+ s.files = %w[bin/a lib/a.rb]
130
+
131
+ write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
132
+ f << "Gem.ui.say #{s.original_name.dump}"
133
+ end
134
+ end
135
+ end
136
+
137
+ util_clear_gems
138
+
139
+ use_ui @ui do
140
+ @cmd.invoke "a:2"
141
+ assert_equal "a-2\n", @ui.output
142
+ end
143
+ end
144
+
145
+ def test_gem_with_platforms
146
+ spec_fetcher do |fetcher|
147
+ fetcher.download "a", 2 do |s|
148
+ s.executables = %w[a]
149
+ s.files = %w[bin/a lib/a.rb]
150
+
151
+ write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
152
+ f << "Gem.ui.say #{s.original_name.dump}"
153
+ end
154
+ end
155
+
156
+ fetcher.download "a", 2 do |s|
157
+ s.executables = %w[a]
158
+ s.files = %w[bin/a lib/a.rb]
159
+ s.platform = "x86_64-darwin"
160
+
161
+ write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
162
+ f << "Gem.ui.say #{s.original_name.dump}"
163
+ end
164
+ end
165
+ end
166
+
167
+ use_ui @ui do
168
+ invoke "a:2"
169
+ assert_equal "a-2\n", @ui.output
170
+ end
171
+
172
+ use_ui @ui do
173
+ util_set_arch "x86_64-darwin-18"
174
+ invoke "a:2"
175
+ assert_equal "a-2-x86_64-darwin\n", @ui.output
176
+ end
177
+ end
178
+
179
+ def test_gem_with_platform_dependencies
180
+ spec_fetcher do |fetcher|
181
+ fetcher.download "a", 2 do |s|
182
+ s.executables = %w[a]
183
+ s.files = %w[bin/a lib/a.rb]
184
+ s.add_runtime_dependency "with_platform"
185
+
186
+ write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
187
+ f << 'require "with_platform"' << "\n"
188
+ f << 'Gem.ui.say Gem.loaded_specs.each_value.map(&:original_name).sort.join("\n")'
189
+ end
190
+ end
191
+
192
+ fetcher.download "with_platform", 2 do |s|
193
+ s.files = %w[lib/with_platform.rb]
194
+ s.platform = Gem::Platform.local
195
+ end
196
+
197
+ fetcher.download "with_platform", 2 do |s|
198
+ s.files = %w[lib/with_platform.rb]
199
+ end
200
+ end
201
+
202
+ use_ui @ui do
203
+ util_set_arch "unknown-unknown"
204
+ invoke "a"
205
+ assert_equal "a-2\nwith_platform-2\n", @ui.output
206
+ end
207
+
208
+ use_ui @ui do
209
+ util_set_arch @test_arch
210
+ invoke "a"
211
+ assert_empty @ui.error
212
+ assert_equal "a-2\nwith_platform-2-#{Gem::Platform.local}\n", @ui.output
213
+ end
214
+ end
215
+
216
+ def test_gem_with_platform_and_platform_dependencies
217
+ pend "extensions don't quite work on jruby" if Gem.java_platform?
218
+
219
+ spec_fetcher do |fetcher|
220
+ fetcher.download "a", 2 do |s|
221
+ s.executables = %w[a]
222
+ s.files = %w[bin/a lib/a.rb]
223
+ s.add_runtime_dependency "with_platform"
224
+ s.platform = Gem::Platform.local.to_s
225
+
226
+ write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
227
+ f << 'require "with_platform"' << "\n"
228
+ f << 'Gem.ui.say Gem.loaded_specs.each_value.map(&:original_name).sort.join("\n")'
229
+ end
230
+ end
231
+
232
+ fetcher.download "a", 2 do |s|
233
+ s.executables = %w[a]
234
+ s.files = %w[bin/a lib/a.rb extconf.rb]
235
+ s.add_runtime_dependency "with_platform"
236
+
237
+ write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
238
+ f << 'require "with_platform"' << "\n"
239
+ f << 'Gem.ui.say Gem.loaded_specs.each_value.map(&:original_name).sort.join("\n")'
240
+ end
241
+
242
+ s.extensions = %w[extconf.rb]
243
+ write_file File.join(*%W[gems #{s.original_name} extconf.rb]) do |f|
244
+ f.write <<-RUBY
245
+ gem('with_platform', '~> 2.0')
246
+ require 'with_platform'
247
+ gem 'sometimes_used'
248
+ require 'sometimes_used'
249
+ require "mkmf"
250
+ create_makefile("#{s.name}")
251
+ RUBY
252
+ end
253
+ end
254
+
255
+ fetcher.download "with_platform", 2 do |s|
256
+ s.files = %w[lib/with_platform.rb]
257
+ s.platform = Gem::Platform.local.to_s
258
+ end
259
+
260
+ fetcher.download "with_platform", 2 do |s|
261
+ s.files = %w[lib/with_platform.rb]
262
+ s.add_runtime_dependency "sometimes_used"
263
+ end
264
+
265
+ fetcher.download "sometimes_used", 2 do |s|
266
+ s.files = %w[lib/sometimes_used.rb]
267
+ end
268
+ end
269
+
270
+ use_ui @ui do
271
+ util_set_arch "unknown-unknown"
272
+ invoke "a"
273
+ assert_empty @ui.error
274
+ assert_equal "Building native extensions. This could take a while...\na-2\nsometimes_used-2\nwith_platform-2\n", @ui.output
275
+ end
276
+
277
+ use_ui @ui do
278
+ util_set_arch @test_arch
279
+ invoke "a"
280
+ assert_empty @ui.error
281
+ assert_equal "a-2-#{Gem::Platform.local}\nwith_platform-2-#{Gem::Platform.local}\n", @ui.output
282
+ end
283
+ end
284
+
285
+ def test_gem_with_other_executable_name
286
+ spec_fetcher do |fetcher|
287
+ fetcher.gem "a", 2 do |s|
288
+ s.executables = %w[foo]
289
+ s.files = %w[bin/foo lib/a.rb]
290
+
291
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
292
+ f << "Gem.ui.say #{s.original_name.dump}"
293
+ end
294
+ end
295
+ end
296
+
297
+ util_clear_gems
298
+
299
+ use_ui @ui do
300
+ @cmd.invoke "a:2"
301
+ assert_equal "a-2\n", @ui.output
302
+ end
303
+ end
304
+
305
+ def test_gem_with_executable_error
306
+ spec_fetcher do |fetcher|
307
+ fetcher.gem "a", 2 do |s|
308
+ s.executables = %w[foo]
309
+ s.files = %w[bin/foo lib/a.rb]
310
+
311
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
312
+ f << "raise #{s.original_name.dump}"
313
+ end
314
+ end
315
+ end
316
+
317
+ util_clear_gems
318
+
319
+ use_ui @ui do
320
+ e = assert_raise RuntimeError do
321
+ @cmd.invoke "a:2"
322
+ end
323
+ assert_equal "a-2", e.message
324
+ assert_empty @ui.error
325
+ end
326
+ end
327
+
328
+ def test_gem_with_multiple_executables_one_match
329
+ spec_fetcher do |fetcher|
330
+ fetcher.gem "a", 2 do |s|
331
+ s.executables = %w[foo a]
332
+ s.files = %w[bin/foo bin/a lib/a.rb]
333
+
334
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
335
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
336
+ end
337
+
338
+ write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
339
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
340
+ end
341
+ end
342
+ end
343
+
344
+ util_clear_gems
345
+
346
+ use_ui @ui do
347
+ @cmd.invoke "a:2"
348
+ assert_equal "a-2 a\n", @ui.output
349
+ end
350
+ end
351
+
352
+ def test_gem_with_multiple_executables_no_match
353
+ spec_fetcher do |fetcher|
354
+ fetcher.gem "a", 2 do |s|
355
+ s.executables = %w[foo bar]
356
+ s.files = %w[bin/foo bin/bar lib/a.rb]
357
+
358
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
359
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
360
+ end
361
+
362
+ write_file File.join(*%W[gems #{s.original_name} bin bar]) do |f|
363
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
364
+ end
365
+ end
366
+ end
367
+
368
+ util_clear_gems
369
+
370
+ use_ui @ui do
371
+ @cmd.invoke "a:2"
372
+ assert_equal "a-2 foo\n", @ui.output
373
+ end
374
+ end
375
+
376
+ def test_gem_dependency_contains_executable
377
+ spec_fetcher do |fetcher|
378
+ fetcher.gem "a", 2 do |s|
379
+ s.executables = %w[]
380
+ s.files = %w[lib/a.rb]
381
+
382
+ s.add_dependency "b"
383
+ end
384
+
385
+ fetcher.gem "b", 2 do |s|
386
+ s.executables = %w[a]
387
+ s.files = %w[bin/a lib/b.rb]
388
+
389
+ write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
390
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
391
+ end
392
+ end
393
+ end
394
+
395
+ util_clear_gems
396
+
397
+ use_ui @ui do
398
+ @cmd.invoke "a:2"
399
+ assert_equal "b-2 a\n", @ui.output
400
+ end
401
+ end
402
+
403
+ def test_gem_dependency_contains_other_executable
404
+ spec_fetcher do |fetcher|
405
+ fetcher.gem "a", 2 do |s|
406
+ s.executables = %w[]
407
+ s.files = %w[lib/a.rb]
408
+
409
+ s.add_dependency "b"
410
+ end
411
+
412
+ fetcher.gem "b", 2 do |s|
413
+ s.executables = %w[foo]
414
+ s.files = %w[bin/foo lib/b.rb]
415
+
416
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
417
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
418
+ end
419
+ end
420
+ end
421
+
422
+ util_clear_gems
423
+
424
+ use_ui @ui do
425
+ e = assert_raise Gem::MockGemUi::TermError do
426
+ @cmd.invoke "a:2"
427
+ end
428
+ assert_equal 1, e.exit_code
429
+ assert_equal <<~ERR, @ui.error
430
+ ERROR: Failed to load executable `a`, are you sure the gem `a` contains it?
431
+ ERR
432
+ end
433
+ end
434
+
435
+ def test_other_gem_contains_executable
436
+ spec_fetcher do |fetcher|
437
+ fetcher.gem "a", 2 do |s|
438
+ s.executables = %w[]
439
+ s.files = %w[lib/a.rb]
440
+ end
441
+
442
+ fetcher.gem "b", 2 do |s|
443
+ s.executables = %w[a]
444
+ s.files = %w[bin/a lib/b.rb]
445
+
446
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
447
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
448
+ end
449
+ end
450
+ end
451
+
452
+ util_clear_gems
453
+
454
+ use_ui @ui do
455
+ e = assert_raise Gem::MockGemUi::TermError do
456
+ @cmd.invoke "a:2"
457
+ end
458
+ assert_equal 1, e.exit_code
459
+ assert_equal <<~ERR, @ui.error
460
+ ERROR: Failed to load executable `a`, are you sure the gem `a` contains it?
461
+ ERR
462
+ end
463
+ end
464
+
465
+ def test_missing_gem
466
+ spec_fetcher do |fetcher|
467
+ end
468
+
469
+ use_ui @ui do
470
+ e = assert_raise Gem::MockGemUi::TermError do
471
+ @cmd.invoke "a"
472
+ end
473
+ assert_equal 2, e.exit_code
474
+ assert_equal <<~ERR, @ui.error
475
+ ERROR: Could not find a valid gem 'a' (>= 0) in any repository
476
+ ERR
477
+ end
478
+ end
479
+
480
+ def test_version_mismatch
481
+ spec_fetcher do |fetcher|
482
+ fetcher.gem "a", 1
483
+ end
484
+
485
+ util_clear_gems
486
+
487
+ use_ui @ui do
488
+ e = assert_raise Gem::MockGemUi::TermError do
489
+ @cmd.invoke "a:2"
490
+ end
491
+ assert_equal 2, e.exit_code
492
+ assert_equal <<~ERR, @ui.error
493
+ ERROR: Could not find a valid gem 'a' (= 2) in any repository
494
+ ERROR: Possible alternatives: a
495
+ ERR
496
+ end
497
+ end
498
+
499
+ def test_pre_argument
500
+ spec_fetcher do |fetcher|
501
+ fetcher.gem "a", 1 do |s|
502
+ s.executables = %w[foo]
503
+ s.files = %w[bin/foo lib/a.rb]
504
+
505
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
506
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
507
+ end
508
+ end
509
+ fetcher.gem "a", "1.1.a" do |s|
510
+ s.executables = %w[foo ]
511
+ s.files = %w[bin/foo lib/a.rb]
512
+
513
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
514
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
515
+ end
516
+ end
517
+ end
518
+
519
+ util_clear_gems
520
+
521
+ use_ui @ui do
522
+ @cmd.invoke "--pre", "a"
523
+ assert_equal "a-1.1.a foo\n", @ui.output
524
+ end
525
+ end
526
+
527
+ def test_pre_version_option
528
+ spec_fetcher do |fetcher|
529
+ fetcher.download "a", 1 do |s|
530
+ s.executables = %w[foo]
531
+ s.files = %w[bin/foo lib/a.rb]
532
+
533
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
534
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
535
+ end
536
+ end
537
+ fetcher.download "a", "1.1.a" do |s|
538
+ s.executables = %w[foo ]
539
+ s.files = %w[bin/foo lib/a.rb]
540
+
541
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
542
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
543
+ end
544
+ end
545
+ end
546
+
547
+ use_ui @ui do
548
+ @cmd.invoke "-v", ">= 0.a", "a"
549
+ assert_equal "a-1.1.a foo\n", @ui.output
550
+ end
551
+ end
552
+
553
+ def test_conservative_missing_gem
554
+ spec_fetcher do |fetcher|
555
+ fetcher.gem "a", 1 do |s|
556
+ s.executables = %w[foo]
557
+ s.files = %w[bin/foo lib/a.rb]
558
+
559
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
560
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
561
+ end
562
+ end
563
+ end
564
+
565
+ util_clear_gems
566
+
567
+ use_ui @ui do
568
+ e = assert_raise Gem::MockGemUi::TermError do
569
+ @cmd.invoke "--verbose", "--conservative", "a:2"
570
+ end
571
+ assert_equal 2, e.exit_code
572
+ assert_include @ui.output, "a (= 2) not available locally"
573
+ assert_equal <<~ERROR, @ui.error
574
+ ERROR: Could not find a valid gem 'a' (= 2) in any repository
575
+ ERROR: Possible alternatives: a
576
+ ERROR
577
+ end
578
+ end
579
+
580
+ def test_conservative
581
+ spec_fetcher do |fetcher|
582
+ fetcher.download "a", 1 do |s|
583
+ s.executables = %w[foo]
584
+ s.files = %w[bin/foo lib/a.rb]
585
+
586
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
587
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
588
+ end
589
+ end
590
+ end
591
+
592
+ use_ui @ui do
593
+ invoke "--verbose", "--conservative", "a"
594
+ assert_include @ui.output, "a (>= 0) not available locally"
595
+ assert_include @ui.output, "a-1 foo"
596
+ assert_equal %w[a-1], @installed_specs.map(&:original_name)
597
+ end
598
+
599
+ spec_fetcher do |fetcher|
600
+ fetcher.gem "a", 1 do |s|
601
+ s.executables = %w[foo]
602
+ s.files = %w[bin/foo lib/a.rb]
603
+
604
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
605
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
606
+ end
607
+ end
608
+
609
+ fetcher.download "a", 2 do |s|
610
+ s.executables = %w[foo]
611
+ s.files = %w[bin/foo lib/a.rb]
612
+
613
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
614
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
615
+ end
616
+ end
617
+ end
618
+
619
+ use_ui @ui do
620
+ invoke "--verbose", "--conservative", "a"
621
+ assert_not_include @ui.output, "a (>= 0) not available locally"
622
+ assert_include @ui.output, "a-1 foo"
623
+ assert_empty @installed_specs.map(&:original_name)
624
+ end
625
+ end
626
+
627
+ def test_uses_newest_version
628
+ spec_fetcher do |fetcher|
629
+ fetcher.download "a", 1 do |s|
630
+ s.executables = %w[foo]
631
+ s.files = %w[bin/foo lib/a.rb]
632
+
633
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
634
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
635
+ end
636
+ end
637
+ end
638
+
639
+ use_ui @ui do
640
+ invoke "a"
641
+ assert_include @ui.output, "a-1 foo"
642
+ end
643
+
644
+ spec_fetcher do |fetcher|
645
+ fetcher.download "a", 1 do |s|
646
+ s.executables = %w[foo]
647
+ s.files = %w[bin/foo lib/a.rb]
648
+
649
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
650
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
651
+ end
652
+ end
653
+
654
+ fetcher.download "a", 2 do |s|
655
+ s.executables = %w[foo]
656
+ s.files = %w[bin/foo lib/a.rb]
657
+
658
+ write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
659
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
660
+ end
661
+ end
662
+ end
663
+
664
+ use_ui @ui do
665
+ invoke "--verbose", "a:2"
666
+ refute_predicate @ui, :terminated?
667
+ assert_empty @ui.error
668
+ assert_include @ui.output, "a-2 foo"
669
+ assert_equal %w[a-2], @installed_specs.map(&:original_name)
670
+ end
671
+ end
672
+
673
+ def test_uses_newest_version_of_dependency
674
+ spec_fetcher do |fetcher|
675
+ fetcher.gem "a", 1 do |s|
676
+ s.executables = %w[]
677
+ s.files = %w[lib/a.rb]
678
+ s.add_runtime_dependency "b"
679
+ end
680
+
681
+ fetcher.gem "b", 1 do |s|
682
+ s.executables = %w[a]
683
+ s.files = %w[bin/a lib/a.rb]
684
+
685
+ write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
686
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
687
+ end
688
+ end
689
+
690
+ fetcher.download "b", 2 do |s|
691
+ s.executables = %w[a]
692
+ s.files = %w[bin/a lib/a.rb]
693
+
694
+ write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
695
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
696
+ end
697
+ end
698
+ end
699
+
700
+ use_ui @ui do
701
+ invoke "a"
702
+ assert_include @ui.output, "b-2 a"
703
+ assert_equal %w[b-2], @installed_specs.map(&:original_name)
704
+ end
705
+ end
706
+
707
+ def test_gem_exec_gem_uninstall
708
+ spec_fetcher do |fetcher|
709
+ fetcher.download "a", 2 do |s|
710
+ s.executables = %w[a]
711
+ s.files = %w[bin/a lib/a.rb]
712
+ s.add_runtime_dependency "b"
713
+
714
+ write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
715
+ f << "Gem.ui.say #{s.original_name.dump}"
716
+ end
717
+ end
718
+
719
+ fetcher.download "b", 2 do |s|
720
+ s.files = %w[lib/b.rb]
721
+ end
722
+ end
723
+
724
+ use_ui @ui do
725
+ invoke "a:2"
726
+ assert_equal "a-2\n", @ui.output
727
+
728
+ invoke "gem", "list", "--local"
729
+ assert_includes @ui.output, "a (2)\n"
730
+ assert_includes @ui.output, "b (2)\n"
731
+
732
+ invoke "gem", "uninstall", "--verbose", "-x", "a" rescue nil
733
+ refute_includes @ui.output, "running gem exec with"
734
+ assert_includes @ui.output, "Successfully uninstalled a-2\n"
735
+
736
+ invoke "--verbose", "gem", "uninstall", "b"
737
+ assert_includes @ui.output, "Successfully uninstalled b-2\n"
738
+
739
+ invoke "gem", "list", "--local"
740
+ assert_empty @ui.error
741
+ assert_match(/\A\s*\** LOCAL GEMS \**\s*\z/m, @ui.output)
742
+
743
+ invoke "gem", "env", "GEM_HOME"
744
+ assert_equal "#{@gem_home}/gem_exec\n", @ui.output
745
+ end
746
+ end
747
+
748
+ def test_only_prerelease_available
749
+ spec_fetcher do |fetcher|
750
+ fetcher.download "a", "1.a" do |s|
751
+ s.executables = %w[a]
752
+ s.files = %w[lib/a.rb bin/a]
753
+
754
+ write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
755
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
756
+ end
757
+ end
758
+ end
759
+
760
+ use_ui @ui do
761
+ assert_raise Gem::MockGemUi::TermError do
762
+ invoke "a"
763
+ end
764
+ assert_equal "ERROR: Could not find a valid gem 'a' (>= 0) in any repository\n" +
765
+ "ERROR: Possible alternatives: a\n", @ui.error
766
+ assert_empty @ui.output
767
+ assert_empty @installed_specs
768
+ end
769
+
770
+ use_ui @ui do
771
+ invoke "a:1.a"
772
+ assert_empty @ui.error
773
+ assert_equal "a-1.a a\n", @ui.output
774
+ assert_equal %w[a-1.a], @installed_specs.map(&:full_name)
775
+ end
776
+
777
+ FileUtils.rm_rf Gem.dir
778
+
779
+ use_ui @ui do
780
+ invoke "--version", ">= 1.a", "a"
781
+ assert_empty @ui.error
782
+ assert_equal "a-1.a a\n", @ui.output
783
+ assert_equal %w[a-1.a], @installed_specs.map(&:full_name)
784
+ end
785
+
786
+ FileUtils.rm_rf Gem.dir
787
+
788
+ use_ui @ui do
789
+ invoke "--pre", "a"
790
+ assert_empty @ui.error
791
+ assert_equal "a-1.a a\n", @ui.output
792
+ assert_equal %w[a-1.a], @installed_specs.map(&:full_name)
793
+ end
794
+ end
795
+
796
+ def test_newer_prerelease_available
797
+ spec_fetcher do |fetcher|
798
+ fetcher.download "a", "1" do |s|
799
+ s.executables = %w[a]
800
+ s.files = %w[lib/a.rb bin/a]
801
+
802
+ write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
803
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
804
+ end
805
+ end
806
+
807
+ fetcher.download "a", "1.1.a" do |s|
808
+ s.executables = %w[a]
809
+ s.files = %w[lib/a.rb bin/a]
810
+
811
+ write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
812
+ f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
813
+ end
814
+ end
815
+ end
816
+
817
+ use_ui @ui do
818
+ invoke "a"
819
+ assert_empty @ui.error
820
+ assert_equal "a-1 a\n", @ui.output
821
+ assert_equal %w[a-1], @installed_specs.map(&:full_name)
822
+ end
823
+
824
+ FileUtils.rm_rf Gem.dir
825
+
826
+ use_ui @ui do
827
+ invoke "a:1.1.a"
828
+ assert_empty @ui.error
829
+ assert_equal "a-1.1.a a\n", @ui.output
830
+ assert_equal %w[a-1.1.a], @installed_specs.map(&:full_name)
831
+ end
832
+
833
+ FileUtils.rm_rf Gem.dir
834
+
835
+ use_ui @ui do
836
+ invoke "--version", ">= 1.a", "a"
837
+ assert_empty @ui.error
838
+ assert_equal "a-1.1.a a\n", @ui.output
839
+ assert_equal %w[a-1.1.a], @installed_specs.map(&:full_name)
840
+ end
841
+
842
+ FileUtils.rm_rf Gem.dir
843
+
844
+ use_ui @ui do
845
+ invoke "--pre", "a"
846
+ assert_empty @ui.error
847
+ assert_equal "a-1.1.a a\n", @ui.output
848
+ assert_equal %w[a-1.1.a], @installed_specs.map(&:full_name)
849
+ end
850
+ end
851
+ end