rubygems-update 3.0.9 → 3.1.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (428) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +31 -8
  3. data/.travis.yml +9 -27
  4. data/CONTRIBUTING.md +13 -0
  5. data/History.txt +24 -28
  6. data/MAINTAINERS.txt +1 -6
  7. data/Manifest.txt +65 -15
  8. data/Rakefile +39 -23
  9. data/bin/gem +0 -6
  10. data/bundler/CHANGELOG.md +746 -570
  11. data/bundler/CODE_OF_CONDUCT.md +117 -23
  12. data/bundler/LICENSE.md +18 -19
  13. data/bundler/README.md +9 -8
  14. data/bundler/bundler.gemspec +8 -25
  15. data/bundler/exe/bundle +19 -3
  16. data/bundler/lib/bundler.rb +120 -67
  17. data/bundler/lib/bundler/build_metadata.rb +1 -3
  18. data/bundler/lib/bundler/capistrano.rb +4 -4
  19. data/bundler/lib/bundler/cli.rb +129 -121
  20. data/bundler/lib/bundler/cli/add.rb +27 -16
  21. data/bundler/lib/bundler/cli/common.rb +11 -12
  22. data/bundler/lib/bundler/cli/config.rb +161 -86
  23. data/bundler/lib/bundler/cli/console.rb +1 -1
  24. data/bundler/lib/bundler/cli/doctor.rb +4 -4
  25. data/bundler/lib/bundler/cli/exec.rb +4 -9
  26. data/bundler/lib/bundler/cli/gem.rb +5 -5
  27. data/bundler/lib/bundler/cli/info.rb +17 -5
  28. data/bundler/lib/bundler/cli/init.rb +1 -1
  29. data/bundler/lib/bundler/cli/install.rb +11 -10
  30. data/bundler/lib/bundler/cli/issue.rb +3 -3
  31. data/bundler/lib/bundler/cli/open.rb +10 -6
  32. data/bundler/lib/bundler/cli/outdated.rb +85 -81
  33. data/bundler/lib/bundler/cli/package.rb +8 -9
  34. data/bundler/lib/bundler/cli/plugin.rb +9 -2
  35. data/bundler/lib/bundler/cli/pristine.rb +1 -1
  36. data/bundler/lib/bundler/cli/show.rb +1 -1
  37. data/bundler/lib/bundler/cli/update.rb +31 -11
  38. data/bundler/lib/bundler/compact_index_client.rb +25 -9
  39. data/bundler/lib/bundler/compact_index_client/updater.rb +2 -6
  40. data/bundler/lib/bundler/current_ruby.rb +9 -7
  41. data/bundler/lib/bundler/definition.rb +35 -26
  42. data/bundler/lib/bundler/dependency.rb +16 -4
  43. data/bundler/lib/bundler/deployment.rb +1 -1
  44. data/bundler/lib/bundler/dsl.rb +15 -39
  45. data/bundler/lib/bundler/env.rb +8 -13
  46. data/bundler/lib/bundler/environment_preserver.rb +0 -1
  47. data/bundler/lib/bundler/feature_flag.rb +23 -34
  48. data/bundler/lib/bundler/fetcher.rb +14 -11
  49. data/bundler/lib/bundler/fetcher/compact_index.rb +26 -12
  50. data/bundler/lib/bundler/fetcher/dependency.rb +1 -1
  51. data/bundler/lib/bundler/fetcher/downloader.rb +4 -1
  52. data/bundler/lib/bundler/fetcher/index.rb +4 -2
  53. data/bundler/lib/bundler/friendly_errors.rb +4 -5
  54. data/bundler/lib/bundler/gem_helper.rb +39 -24
  55. data/bundler/lib/bundler/gem_helpers.rb +2 -4
  56. data/bundler/lib/bundler/gem_tasks.rb +1 -1
  57. data/bundler/lib/bundler/gem_version_promoter.rb +3 -3
  58. data/bundler/lib/bundler/graph.rb +2 -2
  59. data/bundler/lib/bundler/injector.rb +10 -8
  60. data/bundler/lib/bundler/inline.rb +19 -18
  61. data/bundler/lib/bundler/installer.rb +7 -14
  62. data/bundler/lib/bundler/installer/gem_installer.rb +5 -1
  63. data/bundler/lib/bundler/installer/parallel_installer.rb +4 -8
  64. data/bundler/lib/bundler/installer/standalone.rb +1 -2
  65. data/bundler/lib/bundler/lazy_specification.rb +2 -2
  66. data/bundler/lib/bundler/lockfile_parser.rb +13 -21
  67. data/bundler/lib/bundler/match_platform.rb +1 -1
  68. data/bundler/lib/bundler/plugin.rb +42 -29
  69. data/bundler/lib/bundler/plugin/api.rb +1 -1
  70. data/bundler/lib/bundler/plugin/api/source.rb +2 -2
  71. data/bundler/lib/bundler/plugin/index.rb +14 -3
  72. data/bundler/lib/bundler/plugin/installer.rb +28 -15
  73. data/bundler/lib/bundler/psyched_yaml.rb +1 -1
  74. data/bundler/lib/bundler/resolver.rb +72 -24
  75. data/bundler/lib/bundler/resolver/spec_group.rb +3 -2
  76. data/bundler/lib/bundler/retry.rb +2 -2
  77. data/bundler/lib/bundler/ruby_version.rb +4 -19
  78. data/bundler/lib/bundler/rubygems_ext.rb +10 -66
  79. data/bundler/lib/bundler/rubygems_gem_installer.rb +1 -8
  80. data/bundler/lib/bundler/rubygems_integration.rb +144 -395
  81. data/bundler/lib/bundler/runtime.rb +2 -9
  82. data/bundler/lib/bundler/settings.rb +15 -47
  83. data/bundler/lib/bundler/setup.rb +6 -5
  84. data/bundler/lib/bundler/shared_helpers.rb +58 -71
  85. data/bundler/lib/bundler/similarity_detector.rb +2 -2
  86. data/bundler/lib/bundler/source.rb +5 -5
  87. data/bundler/lib/bundler/source/git.rb +19 -12
  88. data/bundler/lib/bundler/source/git/git_proxy.rb +35 -39
  89. data/bundler/lib/bundler/source/metadata.rb +7 -2
  90. data/bundler/lib/bundler/source/path.rb +13 -8
  91. data/bundler/lib/bundler/source/rubygems.rb +11 -5
  92. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -2
  93. data/bundler/lib/bundler/source_list.rb +9 -12
  94. data/bundler/lib/bundler/spec_set.rb +23 -12
  95. data/bundler/lib/bundler/stub_specification.rb +18 -30
  96. data/bundler/lib/bundler/templates/Executable.bundler +23 -14
  97. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +3 -3
  98. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +8 -2
  99. data/bundler/lib/bundler/templates/newgem/README.md.tt +4 -3
  100. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -27
  101. data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +1 -1
  102. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -1
  103. data/bundler/lib/bundler/ui.rb +3 -3
  104. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  105. data/bundler/lib/bundler/ui/shell.rb +4 -8
  106. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
  107. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
  108. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
  109. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  110. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +151 -48
  111. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils/version.rb +5 -0
  112. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +6 -6
  113. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +2 -2
  114. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  115. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  116. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  117. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  118. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
  119. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  120. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
  121. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +30 -8
  122. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  123. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +4 -4
  124. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
  125. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +248 -279
  126. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  127. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  128. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  129. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +7 -2
  130. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -11
  131. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  132. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +1 -1
  133. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  134. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +11 -2
  135. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -1
  136. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +16 -17
  137. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +82 -0
  138. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  139. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  140. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  141. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +7 -2
  142. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +6 -6
  143. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
  144. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +52 -7
  145. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -1
  146. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
  147. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  148. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  149. data/bundler/lib/bundler/vendored_fileutils.rb +1 -6
  150. data/bundler/lib/bundler/vendored_molinillo.rb +1 -1
  151. data/bundler/lib/bundler/vendored_persistent.rb +7 -5
  152. data/bundler/lib/bundler/vendored_thor.rb +2 -2
  153. data/bundler/lib/bundler/version.rb +1 -20
  154. data/bundler/lib/bundler/version_ranges.rb +51 -5
  155. data/bundler/lib/bundler/vlad.rb +2 -2
  156. data/bundler/lib/bundler/worker.rb +1 -3
  157. data/bundler/lib/bundler/yaml_serializer.rb +2 -3
  158. data/bundler/man/bundle-add.1 +66 -0
  159. data/bundler/man/bundle-add.1.txt +58 -0
  160. data/bundler/man/bundle-add.ronn +7 -1
  161. data/bundler/man/bundle-binstubs.1 +40 -0
  162. data/bundler/man/bundle-binstubs.1.txt +48 -0
  163. data/bundler/man/bundle-binstubs.ronn +1 -1
  164. data/bundler/man/bundle-check.1 +31 -0
  165. data/bundler/man/bundle-check.1.txt +33 -0
  166. data/bundler/man/bundle-clean.1 +24 -0
  167. data/bundler/man/bundle-clean.1.txt +26 -0
  168. data/bundler/man/bundle-config.1 +497 -0
  169. data/bundler/man/bundle-config.1.txt +528 -0
  170. data/bundler/man/bundle-config.ronn +42 -40
  171. data/bundler/man/bundle-doctor.1 +44 -0
  172. data/bundler/man/bundle-doctor.1.txt +44 -0
  173. data/bundler/man/bundle-exec.1 +165 -0
  174. data/bundler/man/bundle-exec.1.txt +178 -0
  175. data/bundler/man/bundle-exec.ronn +1 -1
  176. data/bundler/man/bundle-gem.1 +80 -0
  177. data/bundler/man/bundle-gem.1.txt +91 -0
  178. data/bundler/man/bundle-info.1 +20 -0
  179. data/bundler/man/bundle-info.1.txt +21 -0
  180. data/bundler/man/bundle-init.1 +25 -0
  181. data/bundler/man/bundle-init.1.txt +34 -0
  182. data/bundler/man/bundle-init.ronn +1 -1
  183. data/bundler/man/bundle-inject.1 +33 -0
  184. data/bundler/man/bundle-inject.1.txt +32 -0
  185. data/bundler/man/bundle-install.1 +311 -0
  186. data/bundler/man/bundle-install.1.txt +401 -0
  187. data/bundler/man/bundle-install.ronn +9 -4
  188. data/bundler/man/bundle-list.1 +50 -0
  189. data/bundler/man/bundle-list.1.txt +43 -0
  190. data/bundler/man/bundle-lock.1 +84 -0
  191. data/bundler/man/bundle-lock.1.txt +93 -0
  192. data/bundler/man/bundle-open.1 +32 -0
  193. data/bundler/man/bundle-open.1.txt +29 -0
  194. data/bundler/man/bundle-outdated.1 +155 -0
  195. data/bundler/man/bundle-outdated.1.txt +131 -0
  196. data/bundler/man/bundle-package.1 +55 -0
  197. data/bundler/man/bundle-package.1.txt +79 -0
  198. data/bundler/man/bundle-platform.1 +61 -0
  199. data/bundler/man/bundle-platform.1.txt +57 -0
  200. data/bundler/man/bundle-pristine.1 +34 -0
  201. data/bundler/man/bundle-pristine.1.txt +44 -0
  202. data/bundler/man/bundle-remove.1 +31 -0
  203. data/bundler/man/bundle-remove.1.txt +34 -0
  204. data/bundler/man/bundle-show.1 +23 -0
  205. data/bundler/man/bundle-show.1.txt +27 -0
  206. data/bundler/man/bundle-update.1 +394 -0
  207. data/bundler/man/bundle-update.1.txt +390 -0
  208. data/bundler/man/bundle-update.ronn +3 -3
  209. data/bundler/man/bundle-viz.1 +39 -0
  210. data/bundler/man/bundle-viz.1.txt +39 -0
  211. data/bundler/man/bundle.1 +136 -0
  212. data/bundler/man/bundle.1.txt +116 -0
  213. data/bundler/man/bundle.ronn +2 -2
  214. data/bundler/man/gemfile.5 +686 -0
  215. data/bundler/man/gemfile.5.ronn +14 -18
  216. data/bundler/man/gemfile.5.txt +649 -0
  217. data/bundler/man/index.txt +25 -0
  218. data/lib/rubygems.rb +80 -48
  219. data/lib/rubygems/available_set.rb +1 -0
  220. data/lib/rubygems/basic_specification.rb +17 -6
  221. data/lib/rubygems/bundler_version_finder.rb +5 -0
  222. data/lib/rubygems/command.rb +34 -5
  223. data/lib/rubygems/command_manager.rb +0 -6
  224. data/lib/rubygems/commands/build_command.rb +21 -8
  225. data/lib/rubygems/commands/cert_command.rb +0 -1
  226. data/lib/rubygems/commands/cleanup_command.rb +7 -7
  227. data/lib/rubygems/commands/contents_command.rb +3 -3
  228. data/lib/rubygems/commands/dependency_command.rb +4 -3
  229. data/lib/rubygems/commands/environment_command.rb +0 -3
  230. data/lib/rubygems/commands/info_command.rb +2 -0
  231. data/lib/rubygems/commands/install_command.rb +12 -52
  232. data/lib/rubygems/commands/lock_command.rb +2 -2
  233. data/lib/rubygems/commands/mirror_command.rb +1 -0
  234. data/lib/rubygems/commands/open_command.rb +2 -1
  235. data/lib/rubygems/commands/outdated_command.rb +1 -0
  236. data/lib/rubygems/commands/owner_command.rb +2 -7
  237. data/lib/rubygems/commands/pristine_command.rb +3 -0
  238. data/lib/rubygems/commands/push_command.rb +4 -6
  239. data/lib/rubygems/commands/query_command.rb +94 -80
  240. data/lib/rubygems/commands/rdoc_command.rb +1 -0
  241. data/lib/rubygems/commands/setup_command.rb +10 -8
  242. data/lib/rubygems/commands/signin_command.rb +1 -0
  243. data/lib/rubygems/commands/specification_command.rb +1 -0
  244. data/lib/rubygems/commands/stale_command.rb +2 -0
  245. data/lib/rubygems/commands/uninstall_command.rb +1 -0
  246. data/lib/rubygems/commands/unpack_command.rb +2 -29
  247. data/lib/rubygems/commands/update_command.rb +14 -14
  248. data/lib/rubygems/commands/which_command.rb +1 -0
  249. data/lib/rubygems/commands/yank_command.rb +8 -2
  250. data/lib/rubygems/compatibility.rb +4 -4
  251. data/lib/rubygems/config_file.rb +28 -23
  252. data/lib/rubygems/core_ext/kernel_gem.rb +2 -5
  253. data/lib/rubygems/core_ext/kernel_require.rb +29 -2
  254. data/lib/rubygems/core_ext/kernel_warn.rb +10 -4
  255. data/lib/rubygems/defaults.rb +10 -17
  256. data/lib/rubygems/dependency.rb +21 -6
  257. data/lib/rubygems/dependency_installer.rb +19 -102
  258. data/lib/rubygems/dependency_list.rb +11 -10
  259. data/lib/rubygems/deprecate.rb +5 -5
  260. data/lib/rubygems/errors.rb +11 -2
  261. data/lib/rubygems/exceptions.rb +9 -0
  262. data/lib/rubygems/ext/builder.rb +24 -43
  263. data/lib/rubygems/ext/cmake_builder.rb +2 -0
  264. data/lib/rubygems/ext/ext_conf_builder.rb +11 -9
  265. data/lib/rubygems/ext/rake_builder.rb +1 -1
  266. data/lib/rubygems/gemcutter_utilities.rb +19 -26
  267. data/lib/rubygems/indexer.rb +9 -5
  268. data/lib/rubygems/installer.rb +26 -13
  269. data/lib/rubygems/installer_test_case.rb +86 -38
  270. data/lib/rubygems/local_remote_options.rb +1 -1
  271. data/lib/rubygems/mock_gem_ui.rb +4 -1
  272. data/lib/rubygems/name_tuple.rb +1 -0
  273. data/lib/rubygems/package.rb +37 -9
  274. data/lib/rubygems/package/tar_writer.rb +4 -4
  275. data/lib/rubygems/path_support.rb +2 -0
  276. data/lib/rubygems/platform.rb +2 -1
  277. data/lib/rubygems/psych_tree.rb +2 -0
  278. data/lib/rubygems/remote_fetcher.rb +5 -1
  279. data/lib/rubygems/request.rb +5 -3
  280. data/lib/rubygems/request/connection_pools.rb +4 -4
  281. data/lib/rubygems/request/http_pool.rb +1 -0
  282. data/lib/rubygems/request/https_pool.rb +2 -0
  283. data/lib/rubygems/request_set.rb +2 -2
  284. data/lib/rubygems/request_set/gem_dependency_api.rb +2 -2
  285. data/lib/rubygems/request_set/lockfile.rb +5 -2
  286. data/lib/rubygems/request_set/lockfile/parser.rb +4 -2
  287. data/lib/rubygems/request_set/lockfile/tokenizer.rb +2 -0
  288. data/lib/rubygems/requirement.rb +20 -18
  289. data/lib/rubygems/resolver.rb +4 -5
  290. data/lib/rubygems/resolver/activation_request.rb +19 -49
  291. data/lib/rubygems/resolver/best_set.rb +2 -2
  292. data/lib/rubygems/resolver/conflict.rb +0 -5
  293. data/lib/rubygems/resolver/installer_set.rb +3 -3
  294. data/lib/rubygems/resolver/lock_set.rb +1 -1
  295. data/lib/rubygems/resolver/lock_specification.rb +2 -2
  296. data/lib/rubygems/resolver/requirement_list.rb +1 -0
  297. data/lib/rubygems/resolver/specification.rb +1 -0
  298. data/lib/rubygems/resolver/stats.rb +2 -0
  299. data/lib/rubygems/security/signer.rb +3 -2
  300. data/lib/rubygems/server.rb +5 -4
  301. data/lib/rubygems/source_list.rb +1 -0
  302. data/lib/rubygems/spec_fetcher.rb +3 -16
  303. data/lib/rubygems/specification.rb +69 -133
  304. data/lib/rubygems/specification_policy.rb +7 -2
  305. data/{bundler/lib/bundler → lib/rubygems}/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -0
  306. data/{bundler/lib/bundler → lib/rubygems}/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -0
  307. data/{bundler/lib/bundler → lib/rubygems}/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -0
  308. data/lib/rubygems/stub_specification.rb +5 -2
  309. data/lib/rubygems/syck_hack.rb +2 -0
  310. data/lib/rubygems/test_case.rb +78 -227
  311. data/lib/rubygems/test_utilities.rb +17 -6
  312. data/lib/rubygems/text.rb +2 -3
  313. data/lib/rubygems/uninstaller.rb +15 -15
  314. data/lib/rubygems/user_interaction.rb +9 -1
  315. data/lib/rubygems/util.rb +5 -41
  316. data/lib/rubygems/util/licenses.rb +398 -396
  317. data/lib/rubygems/util/list.rb +2 -0
  318. data/lib/rubygems/validator.rb +9 -29
  319. data/lib/rubygems/version.rb +5 -3
  320. data/rubygems-update.gemspec +3 -3
  321. data/test/rubygems/plugin/load/rubygems_plugin.rb +2 -0
  322. data/test/rubygems/test_bundled_ca.rb +4 -7
  323. data/test/rubygems/test_deprecate.rb +3 -0
  324. data/test/rubygems/test_gem.rb +183 -176
  325. data/test/rubygems/test_gem_available_set.rb +3 -2
  326. data/test/rubygems/test_gem_bundler_version_finder.rb +3 -1
  327. data/test/rubygems/test_gem_command.rb +94 -5
  328. data/test/rubygems/test_gem_command_manager.rb +5 -13
  329. data/test/rubygems/test_gem_commands_build_command.rb +142 -4
  330. data/test/rubygems/test_gem_commands_cert_command.rb +15 -1
  331. data/test/rubygems/test_gem_commands_cleanup_command.rb +22 -6
  332. data/test/rubygems/test_gem_commands_dependency_command.rb +1 -1
  333. data/test/rubygems/test_gem_commands_environment_command.rb +1 -11
  334. data/test/rubygems/test_gem_commands_help_command.rb +2 -0
  335. data/test/rubygems/test_gem_commands_info_command.rb +1 -0
  336. data/test/rubygems/test_gem_commands_install_command.rb +207 -2
  337. data/test/rubygems/test_gem_commands_mirror.rb +1 -0
  338. data/test/rubygems/test_gem_commands_outdated_command.rb +1 -0
  339. data/test/rubygems/test_gem_commands_owner_command.rb +4 -5
  340. data/test/rubygems/test_gem_commands_pristine_command.rb +56 -4
  341. data/test/rubygems/test_gem_commands_push_command.rb +19 -14
  342. data/test/rubygems/test_gem_commands_query_command.rb +27 -2
  343. data/test/rubygems/test_gem_commands_setup_command.rb +62 -37
  344. data/test/rubygems/test_gem_commands_signin_command.rb +5 -4
  345. data/test/rubygems/test_gem_commands_sources_command.rb +20 -6
  346. data/test/rubygems/test_gem_commands_uninstall_command.rb +107 -50
  347. data/test/rubygems/test_gem_commands_update_command.rb +86 -23
  348. data/test/rubygems/test_gem_commands_yank_command.rb +46 -1
  349. data/test/rubygems/test_gem_config_file.rb +9 -2
  350. data/test/rubygems/test_gem_dependency.rb +6 -0
  351. data/test/rubygems/test_gem_dependency_installer.rb +67 -36
  352. data/test/rubygems/test_gem_dependency_list.rb +21 -14
  353. data/test/rubygems/test_gem_ext_builder.rb +5 -1
  354. data/test/rubygems/test_gem_ext_cmake_builder.rb +2 -0
  355. data/test/rubygems/test_gem_ext_configure_builder.rb +8 -0
  356. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +12 -0
  357. data/test/rubygems/test_gem_ext_rake_builder.rb +2 -0
  358. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -8
  359. data/test/rubygems/test_gem_indexer.rb +31 -40
  360. data/test/rubygems/test_gem_install_update_options.rb +31 -17
  361. data/test/rubygems/test_gem_installer.rb +383 -223
  362. data/test/rubygems/test_gem_package.rb +99 -14
  363. data/test/rubygems/test_gem_package_old.rb +57 -54
  364. data/test/rubygems/test_gem_package_tar_reader_entry.rb +6 -5
  365. data/test/rubygems/test_gem_package_tar_writer.rb +11 -6
  366. data/test/rubygems/test_gem_path_support.rb +19 -13
  367. data/test/rubygems/test_gem_platform.rb +4 -2
  368. data/test/rubygems/test_gem_rdoc.rb +1 -0
  369. data/test/rubygems/test_gem_remote_fetcher.rb +29 -16
  370. data/test/rubygems/test_gem_request.rb +19 -4
  371. data/test/rubygems/test_gem_request_connection_pools.rb +6 -2
  372. data/test/rubygems/test_gem_request_set.rb +33 -8
  373. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +1 -1
  374. data/test/rubygems/test_gem_request_set_lockfile.rb +1 -0
  375. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +2 -1
  376. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +2 -0
  377. data/test/rubygems/test_gem_requirement.rb +7 -1
  378. data/test/rubygems/test_gem_resolver.rb +67 -23
  379. data/test/rubygems/test_gem_resolver_activation_request.rb +3 -32
  380. data/test/rubygems/test_gem_resolver_conflict.rb +0 -4
  381. data/test/rubygems/test_gem_resolver_git_specification.rb +1 -0
  382. data/test/rubygems/test_gem_resolver_index_specification.rb +7 -2
  383. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -1
  384. data/test/rubygems/test_gem_resolver_installer_set.rb +3 -1
  385. data/test/rubygems/test_gem_resolver_specification.rb +2 -0
  386. data/test/rubygems/test_gem_security.rb +6 -2
  387. data/test/rubygems/test_gem_security_signer.rb +1 -0
  388. data/test/rubygems/test_gem_server.rb +7 -2
  389. data/test/rubygems/test_gem_silent_ui.rb +1 -0
  390. data/test/rubygems/test_gem_source.rb +7 -7
  391. data/test/rubygems/test_gem_source_fetch_problem.rb +1 -0
  392. data/test/rubygems/test_gem_source_git.rb +4 -9
  393. data/test/rubygems/test_gem_source_installed.rb +6 -6
  394. data/test/rubygems/test_gem_source_list.rb +1 -0
  395. data/test/rubygems/test_gem_source_local.rb +5 -4
  396. data/test/rubygems/test_gem_source_lock.rb +12 -12
  397. data/test/rubygems/test_gem_source_specific_file.rb +7 -6
  398. data/test/rubygems/test_gem_source_vendor.rb +4 -4
  399. data/test/rubygems/test_gem_specification.rb +75 -43
  400. data/test/rubygems/test_gem_stream_ui.rb +2 -0
  401. data/test/rubygems/test_gem_stub_specification.rb +3 -1
  402. data/test/rubygems/test_gem_text.rb +1 -0
  403. data/test/rubygems/test_gem_uninstaller.rb +31 -10
  404. data/test/rubygems/test_gem_util.rb +6 -4
  405. data/test/rubygems/test_gem_validator.rb +3 -4
  406. data/test/rubygems/test_gem_version.rb +16 -8
  407. data/test/rubygems/test_kernel.rb +1 -0
  408. data/test/rubygems/test_rake_package.rb +26 -0
  409. data/test/rubygems/test_remote_fetch_error.rb +1 -0
  410. data/test/rubygems/test_require.rb +107 -3
  411. data/util/bisect +31 -0
  412. data/util/ci.sh +50 -0
  413. data/util/generate_spdx_license_list.rb +4 -2
  414. data/util/rubocop +2 -2
  415. data/util/update_bundled_ca_certificates.rb +3 -1
  416. metadata +97 -25
  417. data/appveyor.yml +0 -43
  418. data/bundler/CONTRIBUTING.md +0 -17
  419. data/bundler/exe/bundle_ruby +0 -60
  420. data/bundler/lib/bundler/cli/cache.rb +0 -36
  421. data/bundler/lib/bundler/compatibility_guard.rb +0 -14
  422. data/bundler/lib/bundler/ssl_certs/.document +0 -1
  423. data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  424. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  425. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  426. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +0 -21
  427. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +0 -21
  428. data/util/ci +0 -82
@@ -169,12 +169,6 @@ class Gem::CommandManager
169
169
  when '-v', '--version' then
170
170
  say Gem::VERSION
171
171
  terminate_interaction 0
172
- when '--no-ri', '--no-rdoc' then
173
- # This was added to compensate for a deprecation warning not being shown
174
- # in Rubygems 2.x.x.
175
- # TODO: Remove when Rubygems 3.1 is released.
176
- alert_error "Invalid option: #{args.first}. Use --no-document instead."
177
- terminate_interaction 1
178
172
  when /^-/ then
179
173
  alert_error clean_text("Invalid option: #{args.first}. See 'gem --help'.")
180
174
  terminate_interaction 1
@@ -57,18 +57,32 @@ Gems can be saved to a specified filename with the output option:
57
57
  end
58
58
 
59
59
  def execute
60
- gemspec = get_one_gem_name
60
+ gem_name = get_one_optional_argument || find_gemspec
61
+ build_gem(gem_name)
62
+ end
63
+
64
+ private
61
65
 
62
- unless File.exist? gemspec
63
- gemspec += '.gemspec' if File.exist? gemspec + '.gemspec'
66
+ def find_gemspec
67
+ gemspecs = Dir.glob("*.gemspec").sort
68
+
69
+ if gemspecs.size > 1
70
+ alert_error "Multiple gemspecs found: #{gemspecs}, please specify one"
71
+ terminate_interaction(1)
64
72
  end
65
73
 
66
- if File.exist? gemspec
74
+ gemspecs.first
75
+ end
76
+
77
+ def build_gem(gem_name)
78
+ gemspec = File.exist?(gem_name) ? gem_name : "#{gem_name}.gemspec"
79
+
80
+ if File.exist?(gemspec)
67
81
  spec = Gem::Specification.load(gemspec)
68
82
 
69
83
  if options[:build_path]
70
84
  Dir.chdir(File.dirname(gemspec)) do
71
- spec = Gem::Specification.load File.basename(gemspec)
85
+ spec = Gem::Specification.load(File.basename(gemspec))
72
86
  build_package(spec)
73
87
  end
74
88
  else
@@ -77,12 +91,10 @@ Gems can be saved to a specified filename with the output option:
77
91
 
78
92
  else
79
93
  alert_error "Gemspec file not found: #{gemspec}"
80
- terminate_interaction 1
94
+ terminate_interaction(1)
81
95
  end
82
96
  end
83
97
 
84
- private
85
-
86
98
  def build_package(spec)
87
99
  if spec
88
100
  Gem::Package.build(
@@ -96,4 +108,5 @@ Gems can be saved to a specified filename with the output option:
96
108
  terminate_interaction 1
97
109
  end
98
110
  end
111
+
99
112
  end
@@ -319,5 +319,4 @@ For further reading on signing gems see `ri Gem::Security`.
319
319
  email =~ /\A.+@.+\z/
320
320
  end
321
321
 
322
-
323
322
  end if defined?(OpenSSL::SSL)
@@ -99,7 +99,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
99
99
  @full = Gem::DependencyList.from_specs
100
100
 
101
101
  deplist = Gem::DependencyList.new
102
- @gems_to_cleanup.each do |spec| deplist.add spec end
102
+ @gems_to_cleanup.each { |spec| deplist.add spec }
103
103
 
104
104
  deps = deplist.strongly_connected_components.flatten
105
105
 
@@ -121,19 +121,19 @@ If no gems are named all gems in GEM_HOME are cleaned.
121
121
  end
122
122
 
123
123
  def get_gems_to_cleanup
124
- gems_to_cleanup = @candidate_gems.select { |spec|
124
+ gems_to_cleanup = @candidate_gems.select do |spec|
125
125
  @primary_gems[spec.name].version != spec.version
126
- }
126
+ end
127
127
 
128
- default_gems, gems_to_cleanup = gems_to_cleanup.partition { |spec|
128
+ default_gems, gems_to_cleanup = gems_to_cleanup.partition do |spec|
129
129
  spec.default_gem?
130
- }
130
+ end
131
131
 
132
132
  uninstall_from = options[:user_install] ? Gem.user_dir : @original_home
133
133
 
134
- gems_to_cleanup = gems_to_cleanup.select { |spec|
134
+ gems_to_cleanup = gems_to_cleanup.select do |spec|
135
135
  spec.base_dir == uninstall_from
136
- }
136
+ end
137
137
 
138
138
  @default_gems += default_gems
139
139
  @default_gems.uniq!
@@ -14,7 +14,7 @@ class Gem::Commands::ContentsCommand < Gem::Command
14
14
 
15
15
  add_version_option
16
16
 
17
- add_option( '--all',
17
+ add_option('--all',
18
18
  "Contents for all gems") do |all, options|
19
19
  options[:all] = all
20
20
  end
@@ -29,12 +29,12 @@ class Gem::Commands::ContentsCommand < Gem::Command
29
29
  options[:lib_only] = lib_only
30
30
  end
31
31
 
32
- add_option( '--[no-]prefix',
32
+ add_option('--[no-]prefix',
33
33
  "Don't include installed path prefix") do |prefix, options|
34
34
  options[:prefix] = prefix
35
35
  end
36
36
 
37
- add_option( '--[no-]show-install-dir',
37
+ add_option('--[no-]show-install-dir',
38
38
  'Show only the gem install dir') do |show, options|
39
39
  options[:show_install_dir] = show
40
40
  end
@@ -80,9 +80,9 @@ use with other commands.
80
80
  end
81
81
 
82
82
  def gem_dependency(pattern, version, prerelease) # :nodoc:
83
- dependency = Gem::Deprecate.skip_during {
83
+ dependency = Gem::Deprecate.skip_during do
84
84
  Gem::Dependency.new pattern, version
85
- }
85
+ end
86
86
 
87
87
  dependency.prerelease = prerelease
88
88
 
@@ -208,11 +208,12 @@ use with other commands.
208
208
  def name_pattern(args)
209
209
  args << '' if args.empty?
210
210
 
211
- if args.length == 1 and args.first =~ /\A\/(.*)\/(i)?\z/m
211
+ if args.length == 1 and args.first =~ /\A(.*)(i)?\z/m
212
212
  flags = $2 ? Regexp::IGNORECASE : nil
213
213
  Regexp.new $1, flags
214
214
  else
215
215
  /\A#{Regexp.union(*args)}/
216
216
  end
217
217
  end
218
+
218
219
  end
@@ -9,7 +9,6 @@ class Gem::Commands::EnvironmentCommand < Gem::Command
9
9
 
10
10
  def arguments # :nodoc:
11
11
  args = <<-EOF
12
- packageversion display the package version
13
12
  gemdir display the path where gems are installed
14
13
  gempath display path used to search for gems
15
14
  version display the gem format version
@@ -76,8 +75,6 @@ lib/rubygems/defaults/operating_system.rb
76
75
  arg = options[:args][0]
77
76
  out <<
78
77
  case arg
79
- when /^packageversion/ then
80
- Gem::RubyGemsPackageVersion
81
78
  when /^version/ then
82
79
  Gem::VERSION
83
80
  when /^gemdir/, /^gemhome/, /^home/, /^GEM_HOME/ then
@@ -4,6 +4,7 @@ require 'rubygems/command'
4
4
  require 'rubygems/commands/query_command'
5
5
 
6
6
  class Gem::Commands::InfoCommand < Gem::Commands::QueryCommand
7
+
7
8
  def initialize
8
9
  super "info", "Show information for the given gem"
9
10
 
@@ -30,4 +31,5 @@ class Gem::Commands::InfoCommand < Gem::Commands::QueryCommand
30
31
  def defaults_str
31
32
  "--local"
32
33
  end
34
+
33
35
  end
@@ -194,62 +194,21 @@ You can use `i` command instead of `install`.
194
194
 
195
195
  req = Gem::Requirement.create(version)
196
196
 
197
- if options[:ignore_dependencies]
198
- install_gem_without_dependencies name, req
199
- else
200
- inst = Gem::DependencyInstaller.new options
201
- request_set = inst.resolve_dependencies name, req
202
-
203
- if options[:explain]
204
- puts "Gems to install:"
205
-
206
- request_set.sorted_requests.each do |s|
207
- puts " #{s.full_name}"
208
- end
209
-
210
- return
211
- else
212
- @installed_specs.concat request_set.install options
213
- end
197
+ dinst = Gem::DependencyInstaller.new options
214
198
 
215
- show_install_errors inst.errors
216
- end
217
- end
199
+ request_set = dinst.resolve_dependencies name, req
218
200
 
219
- def install_gem_without_dependencies(name, req) # :nodoc:
220
- gem = nil
201
+ if options[:explain]
202
+ say "Gems to install:"
221
203
 
222
- if local?
223
- if name =~ /\.gem$/ and File.file? name
224
- source = Gem::Source::SpecificFile.new name
225
- spec = source.spec
226
- else
227
- source = Gem::Source::Local.new
228
- spec = source.find_gem name, req
204
+ request_set.sorted_requests.each do |activation_request|
205
+ say " #{activation_request.full_name}"
229
206
  end
230
- gem = source.download spec if spec
231
- end
232
-
233
- if remote? and not gem
234
- dependency = Gem::Dependency.new name, req
235
- dependency.prerelease = options[:prerelease]
236
-
237
- fetcher = Gem::RemoteFetcher.fetcher
238
- gem = fetcher.download_to_cache dependency
207
+ else
208
+ @installed_specs.concat request_set.install options
239
209
  end
240
210
 
241
- inst = Gem::Installer.at gem, options
242
- inst.install
243
-
244
- require 'rubygems/dependency_installer'
245
- dinst = Gem::DependencyInstaller.new options
246
- dinst.installed_gems.replace [inst.spec]
247
-
248
- Gem.done_installing_hooks.each do |hook|
249
- hook.call dinst, [inst.spec]
250
- end unless Gem.done_installing_hooks.empty?
251
-
252
- @installed_specs.push(inst.spec)
211
+ show_install_errors dinst.errors
253
212
  end
254
213
 
255
214
  def install_gems # :nodoc:
@@ -259,6 +218,7 @@ You can use `i` command instead of `install`.
259
218
  gem_version ||= options[:version]
260
219
  domain = options[:domain]
261
220
  domain = :local unless options[:suggest_alternate]
221
+ supress_suggestions = (domain == :local)
262
222
 
263
223
  begin
264
224
  install_gem gem_name, gem_version
@@ -266,11 +226,11 @@ You can use `i` command instead of `install`.
266
226
  alert_error "Error installing #{gem_name}:\n\t#{e.message}"
267
227
  exit_code |= 1
268
228
  rescue Gem::GemNotFoundException => e
269
- show_lookup_failure e.name, e.version, e.errors, domain
229
+ show_lookup_failure e.name, e.version, e.errors, supress_suggestions
270
230
 
271
231
  exit_code |= 2
272
232
  rescue Gem::UnsatisfiableDependencyError => e
273
- show_lookup_failure e.name, e.version, e.errors, domain,
233
+ show_lookup_failure e.name, e.version, e.errors, supress_suggestions,
274
234
  "'#{gem_name}' (#{gem_version})"
275
235
 
276
236
  exit_code |= 2
@@ -100,9 +100,9 @@ lock it down to the exact version.
100
100
  end
101
101
 
102
102
  def spec_path(gem_full_name)
103
- gemspecs = Gem.path.map { |path|
103
+ gemspecs = Gem.path.map do |path|
104
104
  File.join path, "specifications", "#{gem_full_name}.gemspec"
105
- }
105
+ end
106
106
 
107
107
  gemspecs.find { |path| File.exist? path }
108
108
  end
@@ -3,6 +3,7 @@ require 'rubygems/command'
3
3
 
4
4
  unless defined? Gem::Commands::MirrorCommand
5
5
  class Gem::Commands::MirrorCommand < Gem::Command
6
+
6
7
  def initialize
7
8
  super('mirror', 'Mirror all gem files (requires rubygems-mirror)')
8
9
  begin
@@ -17,7 +17,7 @@ class Gem::Commands::OpenCommand < Gem::Command
17
17
  end
18
18
  add_option('-v', '--version VERSION', String,
19
19
  "Opens specific gem version") do |version|
20
- options[:version] = version
20
+ options[:version] = version
21
21
  end
22
22
  end
23
23
 
@@ -84,4 +84,5 @@ class Gem::Commands::OpenCommand < Gem::Command
84
84
 
85
85
  say "Unable to find gem '#{name}'"
86
86
  end
87
+
87
88
  end
@@ -30,4 +30,5 @@ update the gems with the update or install commands.
30
30
  say "#{spec.name} (#{spec.version} < #{remote_version})"
31
31
  end
32
32
  end
33
+
33
34
  end
@@ -91,11 +91,6 @@ permission to.
91
91
  owners.each do |owner|
92
92
  begin
93
93
  response = send_owner_request(method, name, owner)
94
-
95
- if need_otp? response
96
- response = send_owner_request(method, name, owner, true)
97
- end
98
-
99
94
  action = method == :delete ? "Removing" : "Adding"
100
95
 
101
96
  with_response response, "#{action} #{owner}"
@@ -107,11 +102,11 @@ permission to.
107
102
 
108
103
  private
109
104
 
110
- def send_owner_request(method, name, owner, use_otp = false)
105
+ def send_owner_request(method, name, owner)
111
106
  rubygems_api_request method, "api/v1/gems/#{name}/owners" do |request|
112
107
  request.set_form_data 'email' => owner
113
108
  request.add_field "Authorization", api_key
114
- request.add_field "OTP", options[:otp] if use_otp
109
+ request.add_field "OTP", options[:otp] if options[:otp]
115
110
  end
116
111
  end
117
112
 
@@ -104,6 +104,8 @@ extensions will be restored.
104
104
  end.flatten
105
105
  end
106
106
 
107
+ specs = specs.select{|spec| RUBY_ENGINE == spec.platform || Gem::Platform.local === spec.platform || spec.platform == Gem::Platform::RUBY }
108
+
107
109
  if specs.to_a.empty?
108
110
  raise Gem::Exception,
109
111
  "Failed to find gems #{options[:args]} #{options[:version]}"
@@ -183,4 +185,5 @@ extensions will be restored.
183
185
  say "Restored #{spec.full_name}"
184
186
  end
185
187
  end
188
+
186
189
  end
@@ -5,6 +5,7 @@ require 'rubygems/gemcutter_utilities'
5
5
  require 'rubygems/package'
6
6
 
7
7
  class Gem::Commands::PushCommand < Gem::Command
8
+
8
9
  include Gem::LocalRemoteOptions
9
10
  include Gem::GemcutterUtilities
10
11
 
@@ -118,22 +119,18 @@ You can upgrade or downgrade to the latest release version with:
118
119
 
119
120
  response = send_push_request(name, args)
120
121
 
121
- if need_otp? response
122
- response = send_push_request(name, args, true)
123
- end
124
-
125
122
  with_response response
126
123
  end
127
124
 
128
125
  private
129
126
 
130
- def send_push_request(name, args, use_otp = false)
127
+ def send_push_request(name, args)
131
128
  rubygems_api_request(*args) do |request|
132
129
  request.body = Gem.read_binary name
133
130
  request.add_field "Content-Length", request.body.size
134
131
  request.add_field "Content-Type", "application/octet-stream"
135
132
  request.add_field "Authorization", api_key
136
- request.add_field "OTP", options[:otp] if use_otp
133
+ request.add_field "OTP", options[:otp] if options[:otp]
137
134
  end
138
135
  end
139
136
 
@@ -145,4 +142,5 @@ You can upgrade or downgrade to the latest release version with:
145
142
  gem_metadata["allowed_push_host"]
146
143
  ]
147
144
  end
145
+
148
146
  end
@@ -39,7 +39,7 @@ class Gem::Commands::QueryCommand < Gem::Command
39
39
  options[:details] = value
40
40
  end
41
41
 
42
- add_option( '--[no-]versions',
42
+ add_option('--[no-]versions',
43
43
  'Display only gem names') do |value, options|
44
44
  options[:versions] = value
45
45
  options[:details] = false unless value
@@ -56,7 +56,7 @@ class Gem::Commands::QueryCommand < Gem::Command
56
56
  options[:exact] = value
57
57
  end
58
58
 
59
- add_option( '--[no-]prerelease',
59
+ add_option('--[no-]prerelease',
60
60
  'Display prerelease versions') do |value, options|
61
61
  options[:prerelease] = value
62
62
  end
@@ -78,46 +78,58 @@ is too hard to use.
78
78
  end
79
79
 
80
80
  def execute
81
+ gem_names = Array(options[:name])
82
+
83
+ if !args.empty?
84
+ gem_names = options[:exact] ? args.map{|arg| /\A#{Regexp.escape(arg)}\Z/ } : args.map{|arg| /#{arg}/i }
85
+ end
86
+
87
+ terminate_interaction(check_installed_gems(gem_names)) if check_installed_gems?
88
+
89
+ gem_names.each { |n| show_gems(n) }
90
+ end
91
+
92
+ private
93
+
94
+ def check_installed_gems(gem_names)
81
95
  exit_code = 0
82
- if options[:args].to_a.empty? and options[:name].source.empty?
83
- name = options[:name]
84
- no_name = true
85
- elsif !options[:name].source.empty?
86
- name = Array(options[:name])
96
+
97
+ if args.empty? && !gem_name?
98
+ alert_error "You must specify a gem name"
99
+ exit_code = 4
100
+ elsif gem_names.count > 1
101
+ alert_error "You must specify only ONE gem!"
102
+ exit_code = 4
87
103
  else
88
- args = options[:args].to_a
89
- name = options[:exact] ? args.map{|arg| /\A#{Regexp.escape(arg)}\Z/ } : args.map{|arg| /#{arg}/i }
104
+ installed = installed?(gem_names.first, options[:version])
105
+ installed = !installed unless options[:installed]
106
+
107
+ say(installed)
108
+ exit_code = 1 if !installed
90
109
  end
91
110
 
92
- prerelease = options[:prerelease]
111
+ exit_code
112
+ end
93
113
 
94
- unless options[:installed].nil?
95
- if no_name
96
- alert_error "You must specify a gem name"
97
- exit_code |= 4
98
- elsif name.count > 1
99
- alert_error "You must specify only ONE gem!"
100
- exit_code |= 4
101
- else
102
- installed = installed? name.first, options[:version]
103
- installed = !installed unless options[:installed]
114
+ def check_installed_gems?
115
+ !options[:installed].nil?
116
+ end
104
117
 
105
- if installed
106
- say "true"
107
- else
108
- say "false"
109
- exit_code |= 1
110
- end
111
- end
118
+ def gem_name?
119
+ !options[:name].source.empty?
120
+ end
112
121
 
113
- terminate_interaction exit_code
114
- end
122
+ def prerelease
123
+ options[:prerelease]
124
+ end
115
125
 
116
- names = Array(name)
117
- names.each { |n| show_gems n, prerelease }
126
+ def show_prereleases?
127
+ prerelease.nil? || prerelease
118
128
  end
119
129
 
120
- private
130
+ def args
131
+ options[:args].to_a
132
+ end
121
133
 
122
134
  def display_header(type)
123
135
  if (ui.outs.tty? and Gem.configuration.verbose) or both?
@@ -128,56 +140,57 @@ is too hard to use.
128
140
  end
129
141
 
130
142
  #Guts of original execute
131
- def show_gems(name, prerelease)
132
- req = Gem::Requirement.default
133
- # TODO: deprecate for real
143
+ def show_gems(name)
144
+ show_local_gems(name) if local?
145
+ show_remote_gems(name) if remote?
146
+ end
147
+
148
+ def show_local_gems(name, req = Gem::Requirement.default)
149
+ display_header("LOCAL")
150
+
151
+ specs = Gem::Specification.find_all do |s|
152
+ s.name =~ name and req =~ s.version
153
+ end
154
+
134
155
  dep = Gem::Deprecate.skip_during { Gem::Dependency.new name, req }
135
- dep.prerelease = prerelease
156
+ specs.select! do |s|
157
+ dep.match?(s.name, s.version, show_prereleases?)
158
+ end
136
159
 
137
- if local?
138
- if prerelease and not both?
139
- alert_warning "prereleases are always shown locally"
140
- end
160
+ spec_tuples = specs.map do |spec|
161
+ [spec.name_tuple, spec]
162
+ end
141
163
 
142
- display_header 'LOCAL'
164
+ output_query_results(spec_tuples)
165
+ end
143
166
 
144
- specs = Gem::Specification.find_all { |s|
145
- s.name =~ name and req =~ s.version
146
- }
167
+ def show_remote_gems(name)
168
+ display_header("REMOTE")
147
169
 
148
- spec_tuples = specs.map do |spec|
149
- [spec.name_tuple, spec]
150
- end
170
+ fetcher = Gem::SpecFetcher.fetcher
151
171
 
152
- output_query_results spec_tuples
153
- end
172
+ spec_tuples = if name.respond_to?(:source) && name.source.empty?
173
+ fetcher.detect(specs_type) { true }
174
+ else
175
+ fetcher.detect(specs_type) do |name_tuple|
176
+ name === name_tuple.name
177
+ end
178
+ end
154
179
 
155
- if remote?
156
- display_header 'REMOTE'
157
-
158
- fetcher = Gem::SpecFetcher.fetcher
159
-
160
- type = if options[:all]
161
- if options[:prerelease]
162
- :complete
163
- else
164
- :released
165
- end
166
- elsif options[:prerelease]
167
- :prerelease
168
- else
169
- :latest
170
- end
171
-
172
- if name.respond_to?(:source) && name.source.empty?
173
- spec_tuples = fetcher.detect(type) { true }
180
+ output_query_results(spec_tuples)
181
+ end
182
+
183
+ def specs_type
184
+ if options[:all]
185
+ if options[:prerelease]
186
+ :complete
174
187
  else
175
- spec_tuples = fetcher.detect(type) do |name_tuple|
176
- name === name_tuple.name
177
- end
188
+ :released
178
189
  end
179
-
180
- output_query_results spec_tuples
190
+ elsif options[:prerelease]
191
+ :prerelease
192
+ else
193
+ :latest
181
194
  end
182
195
  end
183
196
 
@@ -235,7 +248,7 @@ is too hard to use.
235
248
 
236
249
  name_tuple, spec = detail_tuple
237
250
 
238
- spec = spec.fetch_spec name_tuple if spec.respond_to? :fetch_spec
251
+ spec = spec.fetch_spec(name_tuple)if spec.respond_to?(:fetch_spec)
239
252
 
240
253
  entry << "\n"
241
254
 
@@ -285,8 +298,8 @@ is too hard to use.
285
298
 
286
299
  entry = [name_tuples.first.name]
287
300
 
288
- entry_versions entry, name_tuples, platforms, specs
289
- entry_details entry, detail_tuple, specs, platforms
301
+ entry_versions(entry, name_tuples, platforms, specs)
302
+ entry_details(entry, detail_tuple, specs, platforms)
290
303
 
291
304
  entry.join
292
305
  end
@@ -337,12 +350,13 @@ is too hard to use.
337
350
 
338
351
  if platforms.length == 1
339
352
  title = platforms.values.length == 1 ? 'Platform' : 'Platforms'
340
- entry << " #{title}: #{platforms.values.sort.join ', '}\n"
353
+ entry << " #{title}: #{platforms.values.sort.join(', ')}\n"
341
354
  else
342
355
  entry << " Platforms:\n"
343
- platforms.sort_by do |version,|
344
- version
345
- end.each do |version, pls|
356
+
357
+ sorted_platforms = platforms.sort_by { |version,| version }
358
+
359
+ sorted_platforms.each do |version, pls|
346
360
  label = " #{version}: "
347
361
  data = format_text pls.sort.join(', '), 68, label.length
348
362
  data[0, label.length] = label