rubygems-update 3.1.1 → 3.2.0.rc.2

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 (518) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +55 -19
  3. data/CONTRIBUTING.md +25 -11
  4. data/History.txt +389 -144
  5. data/Manifest.txt +37 -73
  6. data/POLICIES.md +2 -9
  7. data/README.md +5 -5
  8. data/Rakefile +47 -82
  9. data/bin/update_rubygems +2 -2
  10. data/bundler/CHANGELOG.md +1546 -1414
  11. data/bundler/README.md +6 -8
  12. data/bundler/UPGRADING.md +18 -32
  13. data/bundler/bundler.gemspec +3 -3
  14. data/bundler/exe/bundle +3 -0
  15. data/bundler/lib/bundler.rb +21 -7
  16. data/bundler/lib/bundler/build_metadata.rb +4 -12
  17. data/bundler/lib/bundler/cli.rb +54 -20
  18. data/bundler/lib/bundler/cli/add.rb +1 -1
  19. data/bundler/lib/bundler/cli/cache.rb +1 -7
  20. data/bundler/lib/bundler/cli/clean.rb +1 -1
  21. data/bundler/lib/bundler/cli/common.rb +14 -0
  22. data/bundler/lib/bundler/cli/console.rb +1 -1
  23. data/bundler/lib/bundler/cli/doctor.rb +1 -1
  24. data/bundler/lib/bundler/cli/exec.rb +4 -13
  25. data/bundler/lib/bundler/cli/fund.rb +36 -0
  26. data/bundler/lib/bundler/cli/gem.rb +84 -11
  27. data/bundler/lib/bundler/cli/info.rb +15 -4
  28. data/bundler/lib/bundler/cli/init.rb +2 -2
  29. data/bundler/lib/bundler/cli/inject.rb +1 -1
  30. data/bundler/lib/bundler/cli/install.rb +12 -18
  31. data/bundler/lib/bundler/cli/issue.rb +2 -2
  32. data/bundler/lib/bundler/cli/list.rb +12 -10
  33. data/bundler/lib/bundler/cli/outdated.rb +89 -66
  34. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  35. data/bundler/lib/bundler/cli/pristine.rb +5 -0
  36. data/bundler/lib/bundler/cli/show.rb +1 -1
  37. data/bundler/lib/bundler/cli/update.rb +2 -0
  38. data/bundler/lib/bundler/compact_index_client.rb +1 -1
  39. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
  40. data/bundler/lib/bundler/definition.rb +51 -60
  41. data/bundler/lib/bundler/dep_proxy.rb +1 -1
  42. data/bundler/lib/bundler/dependency.rb +0 -9
  43. data/bundler/lib/bundler/dsl.rb +5 -9
  44. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  45. data/bundler/lib/bundler/environment_preserver.rb +26 -2
  46. data/bundler/lib/bundler/errors.rb +1 -0
  47. data/bundler/lib/bundler/feature_flag.rb +0 -2
  48. data/bundler/lib/bundler/fetcher.rb +4 -3
  49. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  50. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
  51. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  52. data/bundler/lib/bundler/fetcher/index.rb +1 -1
  53. data/bundler/lib/bundler/friendly_errors.rb +7 -13
  54. data/bundler/lib/bundler/gem_helper.rb +33 -19
  55. data/bundler/lib/bundler/gem_helpers.rb +6 -1
  56. data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
  57. data/bundler/lib/bundler/graph.rb +1 -1
  58. data/bundler/lib/bundler/index.rb +1 -1
  59. data/bundler/lib/bundler/injector.rb +15 -4
  60. data/bundler/lib/bundler/inline.rb +2 -2
  61. data/bundler/lib/bundler/installer.rb +30 -29
  62. data/bundler/lib/bundler/installer/gem_installer.rb +3 -3
  63. data/bundler/lib/bundler/installer/parallel_installer.rb +10 -10
  64. data/bundler/lib/bundler/installer/standalone.rb +2 -2
  65. data/bundler/lib/bundler/lazy_specification.rb +19 -6
  66. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  67. data/bundler/lib/bundler/lockfile_parser.rb +1 -1
  68. data/bundler/lib/bundler/mirror.rb +2 -2
  69. data/bundler/lib/bundler/plugin.rb +30 -5
  70. data/bundler/lib/bundler/plugin/index.rb +10 -1
  71. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  72. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  73. data/bundler/lib/bundler/plugin/source_list.rb +1 -1
  74. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  75. data/bundler/lib/bundler/remote_specification.rb +5 -2
  76. data/bundler/lib/bundler/resolver.rb +32 -9
  77. data/bundler/lib/bundler/resolver/spec_group.rb +27 -6
  78. data/bundler/lib/bundler/retry.rb +1 -1
  79. data/bundler/lib/bundler/ruby_version.rb +1 -1
  80. data/bundler/lib/bundler/rubygems_ext.rb +53 -9
  81. data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
  82. data/bundler/lib/bundler/rubygems_integration.rb +31 -54
  83. data/bundler/lib/bundler/runtime.rb +4 -14
  84. data/bundler/lib/bundler/settings.rb +49 -45
  85. data/bundler/lib/bundler/setup.rb +5 -0
  86. data/bundler/lib/bundler/shared_helpers.rb +2 -2
  87. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  88. data/bundler/lib/bundler/source.rb +1 -1
  89. data/bundler/lib/bundler/source/git.rb +5 -5
  90. data/bundler/lib/bundler/source/git/git_proxy.rb +56 -59
  91. data/bundler/lib/bundler/source/path.rb +7 -3
  92. data/bundler/lib/bundler/source/path/installer.rb +8 -10
  93. data/bundler/lib/bundler/source/rubygems.rb +13 -16
  94. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  95. data/bundler/lib/bundler/source_list.rb +2 -2
  96. data/bundler/lib/bundler/spec_set.rb +1 -1
  97. data/bundler/lib/bundler/stub_specification.rb +17 -5
  98. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  99. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  100. data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -1
  101. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  102. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  103. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  104. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  105. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  106. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  107. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -0
  108. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  109. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -6
  110. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
  111. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  112. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  113. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  114. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  115. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  116. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  117. data/bundler/lib/bundler/ui/shell.rb +5 -5
  118. data/bundler/lib/bundler/uri_credentials_filter.rb +1 -1
  119. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -212
  120. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  121. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  122. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  123. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  124. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  125. data/bundler/lib/bundler/version.rb +1 -1
  126. data/bundler/lib/bundler/worker.rb +1 -1
  127. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  128. data/bundler/man/bundle-add.1 +1 -1
  129. data/bundler/man/{bundle-add.ronn → bundle-add.1.ronn} +0 -0
  130. data/bundler/man/bundle-binstubs.1 +5 -3
  131. data/bundler/man/{bundle-binstubs.ronn → bundle-binstubs.1.ronn} +2 -4
  132. data/bundler/man/bundle-cache.1 +1 -1
  133. data/bundler/man/{bundle-cache.ronn → bundle-cache.1.ronn} +0 -0
  134. data/bundler/man/bundle-check.1 +1 -1
  135. data/bundler/man/{bundle-check.ronn → bundle-check.1.ronn} +0 -0
  136. data/bundler/man/bundle-clean.1 +1 -1
  137. data/bundler/man/{bundle-clean.ronn → bundle-clean.1.ronn} +0 -0
  138. data/bundler/man/bundle-config.1 +16 -22
  139. data/bundler/man/{bundle-config.ronn → bundle-config.1.ronn} +19 -22
  140. data/bundler/man/bundle-doctor.1 +1 -1
  141. data/bundler/man/{bundle-doctor.ronn → bundle-doctor.1.ronn} +0 -0
  142. data/bundler/man/bundle-exec.1 +1 -1
  143. data/bundler/man/{bundle-exec.ronn → bundle-exec.1.ronn} +0 -0
  144. data/bundler/man/bundle-gem.1 +25 -3
  145. data/bundler/man/{bundle-gem.ronn → bundle-gem.1.ronn} +30 -7
  146. data/bundler/man/bundle-info.1 +1 -1
  147. data/bundler/man/{bundle-info.ronn → bundle-info.1.ronn} +0 -0
  148. data/bundler/man/bundle-init.1 +1 -1
  149. data/bundler/man/{bundle-init.ronn → bundle-init.1.ronn} +0 -0
  150. data/bundler/man/bundle-inject.1 +1 -1
  151. data/bundler/man/{bundle-inject.ronn → bundle-inject.1.ronn} +0 -0
  152. data/bundler/man/bundle-install.1 +29 -2
  153. data/bundler/man/{bundle-install.ronn → bundle-install.1.ronn} +24 -2
  154. data/bundler/man/bundle-list.1 +7 -7
  155. data/bundler/man/{bundle-list.ronn → bundle-list.1.ronn} +6 -6
  156. data/bundler/man/bundle-lock.1 +1 -1
  157. data/bundler/man/{bundle-lock.ronn → bundle-lock.1.ronn} +0 -0
  158. data/bundler/man/bundle-open.1 +1 -1
  159. data/bundler/man/{bundle-open.ronn → bundle-open.1.ronn} +0 -0
  160. data/bundler/man/bundle-outdated.1 +1 -1
  161. data/bundler/man/{bundle-outdated.ronn → bundle-outdated.1.ronn} +0 -0
  162. data/bundler/man/bundle-platform.1 +1 -1
  163. data/bundler/man/{bundle-platform.ronn → bundle-platform.1.ronn} +0 -0
  164. data/bundler/man/bundle-pristine.1 +1 -1
  165. data/bundler/man/{bundle-pristine.ronn → bundle-pristine.1.ronn} +0 -0
  166. data/bundler/man/bundle-remove.1 +1 -1
  167. data/bundler/man/{bundle-remove.ronn → bundle-remove.1.ronn} +0 -0
  168. data/bundler/man/bundle-show.1 +1 -1
  169. data/bundler/man/{bundle-show.ronn → bundle-show.1.ronn} +0 -0
  170. data/bundler/man/bundle-update.1 +1 -1
  171. data/bundler/man/{bundle-update.ronn → bundle-update.1.ronn} +0 -0
  172. data/bundler/man/bundle-viz.1 +1 -1
  173. data/bundler/man/{bundle-viz.ronn → bundle-viz.1.ronn} +0 -0
  174. data/bundler/man/bundle.1 +1 -1
  175. data/bundler/man/{bundle.ronn → bundle.1.ronn} +0 -0
  176. data/bundler/man/gemfile.5 +4 -4
  177. data/bundler/man/gemfile.5.ronn +4 -4
  178. data/lib/rubygems.rb +133 -186
  179. data/lib/rubygems/available_set.rb +4 -6
  180. data/lib/rubygems/basic_specification.rb +12 -10
  181. data/lib/rubygems/bundler_version_finder.rb +14 -9
  182. data/lib/rubygems/command.rb +17 -17
  183. data/lib/rubygems/command_manager.rb +4 -5
  184. data/lib/rubygems/commands/build_command.rb +4 -1
  185. data/lib/rubygems/commands/cert_command.rb +1 -9
  186. data/lib/rubygems/commands/check_command.rb +0 -2
  187. data/lib/rubygems/commands/cleanup_command.rb +11 -7
  188. data/lib/rubygems/commands/contents_command.rb +4 -6
  189. data/lib/rubygems/commands/dependency_command.rb +6 -8
  190. data/lib/rubygems/commands/environment_command.rb +1 -3
  191. data/lib/rubygems/commands/fetch_command.rb +2 -4
  192. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  193. data/lib/rubygems/commands/help_command.rb +2 -4
  194. data/lib/rubygems/commands/info_command.rb +8 -5
  195. data/lib/rubygems/commands/install_command.rb +3 -5
  196. data/lib/rubygems/commands/list_command.rb +8 -7
  197. data/lib/rubygems/commands/lock_command.rb +1 -3
  198. data/lib/rubygems/commands/mirror_command.rb +0 -2
  199. data/lib/rubygems/commands/open_command.rb +0 -4
  200. data/lib/rubygems/commands/outdated_command.rb +0 -2
  201. data/lib/rubygems/commands/owner_command.rb +0 -2
  202. data/lib/rubygems/commands/pristine_command.rb +10 -4
  203. data/lib/rubygems/commands/push_command.rb +4 -44
  204. data/lib/rubygems/commands/query_command.rb +6 -353
  205. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  206. data/lib/rubygems/commands/search_command.rb +7 -7
  207. data/lib/rubygems/commands/server_command.rb +0 -2
  208. data/lib/rubygems/commands/setup_command.rb +156 -48
  209. data/lib/rubygems/commands/signin_command.rb +0 -2
  210. data/lib/rubygems/commands/signout_command.rb +0 -2
  211. data/lib/rubygems/commands/sources_command.rb +3 -5
  212. data/lib/rubygems/commands/specification_command.rb +2 -4
  213. data/lib/rubygems/commands/stale_command.rb +1 -3
  214. data/lib/rubygems/commands/uninstall_command.rb +2 -4
  215. data/lib/rubygems/commands/unpack_command.rb +1 -3
  216. data/lib/rubygems/commands/update_command.rb +59 -14
  217. data/lib/rubygems/commands/which_command.rb +0 -2
  218. data/lib/rubygems/commands/yank_command.rb +0 -2
  219. data/lib/rubygems/config_file.rb +11 -4
  220. data/lib/rubygems/core_ext/kernel_require.rb +26 -36
  221. data/lib/rubygems/core_ext/kernel_warn.rb +6 -6
  222. data/lib/rubygems/defaults.rb +99 -5
  223. data/lib/rubygems/dependency.rb +2 -7
  224. data/lib/rubygems/dependency_installer.rb +1 -75
  225. data/lib/rubygems/dependency_list.rb +7 -9
  226. data/lib/rubygems/deprecate.rb +46 -1
  227. data/lib/rubygems/doctor.rb +4 -4
  228. data/lib/rubygems/errors.rb +3 -14
  229. data/lib/rubygems/exceptions.rb +2 -33
  230. data/lib/rubygems/ext.rb +6 -6
  231. data/lib/rubygems/ext/build_error.rb +2 -0
  232. data/lib/rubygems/ext/builder.rb +4 -4
  233. data/lib/rubygems/ext/cmake_builder.rb +1 -3
  234. data/lib/rubygems/ext/configure_builder.rb +0 -2
  235. data/lib/rubygems/ext/ext_conf_builder.rb +6 -9
  236. data/lib/rubygems/ext/rake_builder.rb +0 -2
  237. data/lib/rubygems/gem_runner.rb +3 -10
  238. data/lib/rubygems/gemcutter_utilities.rb +1 -1
  239. data/lib/rubygems/indexer.rb +1 -21
  240. data/lib/rubygems/install_update_options.rb +5 -5
  241. data/lib/rubygems/installer.rb +47 -48
  242. data/lib/rubygems/installer_test_case.rb +18 -5
  243. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  244. data/lib/rubygems/local_remote_options.rb +1 -1
  245. data/lib/rubygems/mock_gem_ui.rb +0 -6
  246. data/lib/rubygems/name_tuple.rb +2 -6
  247. data/lib/rubygems/openssl.rb +7 -0
  248. data/lib/rubygems/package.rb +11 -23
  249. data/lib/rubygems/package/digest_io.rb +0 -2
  250. data/lib/rubygems/package/file_source.rb +0 -2
  251. data/lib/rubygems/package/io_source.rb +0 -2
  252. data/lib/rubygems/package/old.rb +1 -3
  253. data/lib/rubygems/package/tar_header.rb +3 -5
  254. data/lib/rubygems/package/tar_reader.rb +0 -3
  255. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  256. data/lib/rubygems/package/tar_test_case.rb +1 -3
  257. data/lib/rubygems/package/tar_writer.rb +2 -12
  258. data/lib/rubygems/package_task.rb +1 -7
  259. data/lib/rubygems/path_support.rb +1 -3
  260. data/lib/rubygems/platform.rb +3 -5
  261. data/lib/rubygems/psych_tree.rb +0 -2
  262. data/lib/rubygems/query_utils.rb +362 -0
  263. data/lib/rubygems/rdoc.rb +0 -12
  264. data/lib/rubygems/remote_fetcher.rb +9 -25
  265. data/lib/rubygems/request.rb +1 -9
  266. data/lib/rubygems/request/connection_pools.rb +1 -5
  267. data/lib/rubygems/request/http_pool.rb +0 -2
  268. data/lib/rubygems/request/https_pool.rb +0 -2
  269. data/lib/rubygems/request_set.rb +5 -7
  270. data/lib/rubygems/request_set/gem_dependency_api.rb +2 -4
  271. data/lib/rubygems/request_set/lockfile.rb +8 -12
  272. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  273. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
  274. data/lib/rubygems/requirement.rb +20 -21
  275. data/lib/rubygems/resolver.rb +7 -10
  276. data/lib/rubygems/resolver/activation_request.rb +0 -2
  277. data/lib/rubygems/resolver/api_set.rb +4 -6
  278. data/lib/rubygems/resolver/api_specification.rb +16 -7
  279. data/lib/rubygems/resolver/best_set.rb +0 -2
  280. data/lib/rubygems/resolver/composed_set.rb +3 -5
  281. data/lib/rubygems/resolver/conflict.rb +1 -3
  282. data/lib/rubygems/resolver/current_set.rb +0 -2
  283. data/lib/rubygems/resolver/dependency_request.rb +0 -2
  284. data/lib/rubygems/resolver/git_set.rb +0 -2
  285. data/lib/rubygems/resolver/git_specification.rb +0 -2
  286. data/lib/rubygems/resolver/index_set.rb +1 -3
  287. data/lib/rubygems/resolver/index_specification.rb +0 -2
  288. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  289. data/lib/rubygems/resolver/installer_set.rb +3 -5
  290. data/lib/rubygems/resolver/local_specification.rb +0 -2
  291. data/lib/rubygems/resolver/lock_set.rb +1 -3
  292. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  293. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  294. data/lib/rubygems/resolver/set.rb +0 -2
  295. data/lib/rubygems/resolver/source_set.rb +0 -2
  296. data/lib/rubygems/resolver/spec_specification.rb +0 -2
  297. data/lib/rubygems/resolver/specification.rb +0 -2
  298. data/lib/rubygems/resolver/stats.rb +0 -2
  299. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  300. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  301. data/lib/rubygems/s3_uri_signer.rb +1 -7
  302. data/lib/rubygems/safe_yaml.rb +4 -4
  303. data/lib/rubygems/security.rb +26 -32
  304. data/lib/rubygems/security/policy.rb +3 -7
  305. data/lib/rubygems/security/signer.rb +4 -6
  306. data/lib/rubygems/security/trust_dir.rb +1 -3
  307. data/lib/rubygems/server.rb +9 -11
  308. data/lib/rubygems/source.rb +4 -4
  309. data/lib/rubygems/source/git.rb +7 -8
  310. data/lib/rubygems/source/installed.rb +0 -2
  311. data/lib/rubygems/source/local.rb +2 -4
  312. data/lib/rubygems/source/lock.rb +0 -2
  313. data/lib/rubygems/source/specific_file.rb +0 -2
  314. data/lib/rubygems/source/vendor.rb +0 -2
  315. data/lib/rubygems/source_list.rb +6 -7
  316. data/lib/rubygems/spec_fetcher.rb +18 -17
  317. data/lib/rubygems/specification.rb +107 -120
  318. data/lib/rubygems/specification_policy.rb +88 -30
  319. data/lib/rubygems/stub_specification.rb +0 -4
  320. data/lib/rubygems/syck_hack.rb +0 -2
  321. data/lib/rubygems/test_case.rb +122 -92
  322. data/lib/rubygems/test_utilities.rb +6 -14
  323. data/lib/rubygems/uninstaller.rb +35 -16
  324. data/lib/rubygems/uri_formatter.rb +0 -2
  325. data/lib/rubygems/uri_parser.rb +0 -2
  326. data/lib/rubygems/user_interaction.rb +1 -26
  327. data/lib/rubygems/util.rb +15 -3
  328. data/lib/rubygems/util/licenses.rb +4 -6
  329. data/lib/rubygems/util/list.rb +0 -2
  330. data/lib/rubygems/validator.rb +1 -3
  331. data/lib/rubygems/version.rb +5 -7
  332. data/rubygems-update.gemspec +2 -2
  333. data/setup.rb +2 -7
  334. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  335. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  336. data/test/rubygems/rubygems_plugin.rb +0 -2
  337. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  338. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  339. data/test/rubygems/test_bundled_ca.rb +38 -45
  340. data/test/rubygems/test_config.rb +0 -2
  341. data/test/rubygems/test_deprecate.rb +40 -7
  342. data/test/rubygems/test_gem.rb +150 -103
  343. data/test/rubygems/test_gem_available_set.rb +3 -5
  344. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
  345. data/test/rubygems/test_gem_command.rb +24 -7
  346. data/test/rubygems/test_gem_command_manager.rb +36 -5
  347. data/test/rubygems/test_gem_commands_build_command.rb +53 -10
  348. data/test/rubygems/test_gem_commands_cert_command.rb +2 -4
  349. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  350. data/test/rubygems/test_gem_commands_cleanup_command.rb +13 -4
  351. data/test/rubygems/test_gem_commands_contents_command.rb +48 -17
  352. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  353. data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
  354. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  355. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
  356. data/test/rubygems/test_gem_commands_help_command.rb +0 -2
  357. data/test/rubygems/test_gem_commands_info_command.rb +6 -8
  358. data/test/rubygems/test_gem_commands_install_command.rb +31 -33
  359. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  360. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  361. data/test/rubygems/test_gem_commands_mirror.rb +1 -3
  362. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  363. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
  364. data/test/rubygems/test_gem_commands_owner_command.rb +11 -5
  365. data/test/rubygems/test_gem_commands_pristine_command.rb +41 -10
  366. data/test/rubygems/test_gem_commands_push_command.rb +7 -4
  367. data/test/rubygems/test_gem_commands_query_command.rb +9 -9
  368. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  369. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  370. data/test/rubygems/test_gem_commands_setup_command.rb +210 -118
  371. data/test/rubygems/test_gem_commands_signin_command.rb +6 -6
  372. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  373. data/test/rubygems/test_gem_commands_sources_command.rb +39 -3
  374. data/test/rubygems/test_gem_commands_specification_command.rb +18 -20
  375. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  376. data/test/rubygems/test_gem_commands_uninstall_command.rb +2 -3
  377. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  378. data/test/rubygems/test_gem_commands_update_command.rb +116 -7
  379. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  380. data/test/rubygems/test_gem_commands_yank_command.rb +14 -8
  381. data/test/rubygems/test_gem_config_file.rb +7 -12
  382. data/test/rubygems/test_gem_dependency.rb +0 -2
  383. data/test/rubygems/test_gem_dependency_installer.rb +54 -191
  384. data/test/rubygems/test_gem_dependency_list.rb +8 -10
  385. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  386. data/test/rubygems/test_gem_doctor.rb +28 -2
  387. data/test/rubygems/test_gem_ext_builder.rb +16 -33
  388. data/test/rubygems/test_gem_ext_cmake_builder.rb +13 -14
  389. data/test/rubygems/test_gem_ext_configure_builder.rb +1 -11
  390. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -3
  391. data/test/rubygems/test_gem_ext_rake_builder.rb +9 -11
  392. data/test/rubygems/test_gem_gem_runner.rb +43 -1
  393. data/test/rubygems/test_gem_gemcutter_utilities.rb +5 -2
  394. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  395. data/test/rubygems/test_gem_indexer.rb +9 -15
  396. data/test/rubygems/test_gem_install_update_options.rb +0 -2
  397. data/test/rubygems/test_gem_installer.rb +192 -71
  398. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  399. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  400. data/test/rubygems/test_gem_package.rb +33 -31
  401. data/test/rubygems/test_gem_package_old.rb +0 -2
  402. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  403. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  404. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  405. data/test/rubygems/test_gem_package_tar_writer.rb +8 -5
  406. data/test/rubygems/test_gem_package_task.rb +46 -13
  407. data/test/rubygems/test_gem_path_support.rb +0 -2
  408. data/test/rubygems/test_gem_platform.rb +0 -2
  409. data/test/rubygems/test_gem_rdoc.rb +0 -2
  410. data/test/rubygems/test_gem_remote_fetcher.rb +156 -195
  411. data/test/rubygems/test_gem_request.rb +11 -15
  412. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  413. data/test/rubygems/test_gem_request_set.rb +72 -22
  414. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
  415. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -2
  416. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
  417. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
  418. data/test/rubygems/test_gem_requirement.rb +10 -4
  419. data/test/rubygems/test_gem_resolver.rb +6 -8
  420. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  421. data/test/rubygems/test_gem_resolver_api_set.rb +3 -5
  422. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -2
  423. data/test/rubygems/test_gem_resolver_best_set.rb +2 -4
  424. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  425. data/test/rubygems/test_gem_resolver_conflict.rb +0 -2
  426. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  427. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  428. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  429. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  430. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  431. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  432. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
  433. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  434. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  435. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  436. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  437. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  438. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -2
  439. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  440. data/test/rubygems/test_gem_security.rb +20 -22
  441. data/test/rubygems/test_gem_security_policy.rb +5 -10
  442. data/test/rubygems/test_gem_security_signer.rb +8 -10
  443. data/test/rubygems/test_gem_security_trust_dir.rb +2 -4
  444. data/test/rubygems/test_gem_server.rb +10 -14
  445. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  446. data/test/rubygems/test_gem_source.rb +12 -16
  447. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  448. data/test/rubygems/test_gem_source_git.rb +12 -13
  449. data/test/rubygems/test_gem_source_installed.rb +7 -9
  450. data/test/rubygems/test_gem_source_list.rb +1 -2
  451. data/test/rubygems/test_gem_source_local.rb +8 -10
  452. data/test/rubygems/test_gem_source_lock.rb +10 -12
  453. data/test/rubygems/test_gem_source_specific_file.rb +7 -9
  454. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  455. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  456. data/test/rubygems/test_gem_specification.rb +179 -129
  457. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  458. data/test/rubygems/test_gem_stub_specification.rb +4 -7
  459. data/test/rubygems/test_gem_text.rb +1 -3
  460. data/test/rubygems/test_gem_uninstaller.rb +133 -11
  461. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  462. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  463. data/test/rubygems/test_gem_util.rb +7 -7
  464. data/test/rubygems/test_gem_validator.rb +0 -2
  465. data/test/rubygems/test_gem_version.rb +1 -3
  466. data/test/rubygems/test_gem_version_option.rb +0 -2
  467. data/test/rubygems/test_kernel.rb +25 -10
  468. data/test/rubygems/test_project_sanity.rb +7 -2
  469. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  470. data/test/rubygems/test_require.rb +241 -47
  471. metadata +59 -96
  472. data/.bundle/config +0 -2
  473. data/.rubocop.yml +0 -91
  474. data/Gemfile +0 -8
  475. data/Gemfile.lock +0 -43
  476. data/bundler/CODE_OF_CONDUCT.md +0 -136
  477. data/bundler/man/bundle-add.1.txt +0 -58
  478. data/bundler/man/bundle-binstubs.1.txt +0 -48
  479. data/bundler/man/bundle-cache.1.txt +0 -78
  480. data/bundler/man/bundle-check.1.txt +0 -33
  481. data/bundler/man/bundle-clean.1.txt +0 -26
  482. data/bundler/man/bundle-config.1.txt +0 -528
  483. data/bundler/man/bundle-doctor.1.txt +0 -44
  484. data/bundler/man/bundle-exec.1.txt +0 -178
  485. data/bundler/man/bundle-gem.1.txt +0 -91
  486. data/bundler/man/bundle-info.1.txt +0 -21
  487. data/bundler/man/bundle-init.1.txt +0 -34
  488. data/bundler/man/bundle-inject.1.txt +0 -32
  489. data/bundler/man/bundle-install.1.txt +0 -401
  490. data/bundler/man/bundle-list.1.txt +0 -43
  491. data/bundler/man/bundle-lock.1.txt +0 -93
  492. data/bundler/man/bundle-open.1.txt +0 -29
  493. data/bundler/man/bundle-outdated.1.txt +0 -131
  494. data/bundler/man/bundle-platform.1.txt +0 -57
  495. data/bundler/man/bundle-pristine.1.txt +0 -44
  496. data/bundler/man/bundle-remove.1.txt +0 -34
  497. data/bundler/man/bundle-show.1.txt +0 -27
  498. data/bundler/man/bundle-update.1.txt +0 -390
  499. data/bundler/man/bundle-viz.1.txt +0 -39
  500. data/bundler/man/bundle.1.txt +0 -116
  501. data/bundler/man/gemfile.5.txt +0 -649
  502. data/bundler/man/index.txt +0 -25
  503. data/lib/rubygems/source_local.rb +0 -7
  504. data/lib/rubygems/source_specific_file.rb +0 -6
  505. data/lib/ubygems.rb +0 -14
  506. data/tmp/.keep +0 -0
  507. data/util/CL2notes +0 -55
  508. data/util/bisect +0 -10
  509. data/util/ci.sh +0 -62
  510. data/util/cops/deprecations.rb +0 -52
  511. data/util/create_certs.rb +0 -171
  512. data/util/create_certs.sh +0 -27
  513. data/util/create_encrypted_key.rb +0 -16
  514. data/util/generate_spdx_license_list.rb +0 -63
  515. data/util/patch_with_prs.rb +0 -77
  516. data/util/rubocop +0 -8
  517. data/util/update_bundled_ca_certificates.rb +0 -139
  518. data/util/update_changelog.rb +0 -67
@@ -1,15 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
  require 'rubygems/command'
3
- require 'rubygems/local_remote_options'
4
- require 'rubygems/spec_fetcher'
5
- require 'rubygems/version_option'
6
- require 'rubygems/text'
3
+ require 'rubygems/query_utils'
4
+ require 'rubygems/deprecate'
7
5
 
8
6
  class Gem::Commands::QueryCommand < Gem::Command
7
+ extend Gem::Deprecate
8
+ rubygems_deprecate_command
9
9
 
10
- include Gem::Text
11
- include Gem::LocalRemoteOptions
12
- include Gem::VersionOption
10
+ include Gem::QueryUtils
13
11
 
14
12
  def initialize(name = 'query',
15
13
  summary = 'Query gem information in local or remote repositories')
@@ -17,357 +15,12 @@ class Gem::Commands::QueryCommand < Gem::Command
17
15
  :name => //, :domain => :local, :details => false, :versions => true,
18
16
  :installed => nil, :version => Gem::Requirement.default
19
17
 
20
- add_option('-i', '--[no-]installed',
21
- 'Check for installed gem') do |value, options|
22
- options[:installed] = value
23
- end
24
-
25
- add_option('-I', 'Equivalent to --no-installed') do |value, options|
26
- options[:installed] = false
27
- end
28
-
29
- add_version_option command, "for use with --installed"
30
-
31
18
  add_option('-n', '--name-matches REGEXP',
32
19
  'Name of gem(s) to query on matches the',
33
20
  'provided REGEXP') do |value, options|
34
21
  options[:name] = /#{value}/i
35
22
  end
36
23
 
37
- add_option('-d', '--[no-]details',
38
- 'Display detailed information of gem(s)') do |value, options|
39
- options[:details] = value
40
- end
41
-
42
- add_option('--[no-]versions',
43
- 'Display only gem names') do |value, options|
44
- options[:versions] = value
45
- options[:details] = false unless value
46
- end
47
-
48
- add_option('-a', '--all',
49
- 'Display all gem versions') do |value, options|
50
- options[:all] = value
51
- end
52
-
53
- add_option('-e', '--exact',
54
- 'Name of gem(s) to query on matches the',
55
- 'provided STRING') do |value, options|
56
- options[:exact] = value
57
- end
58
-
59
- add_option('--[no-]prerelease',
60
- 'Display prerelease versions') do |value, options|
61
- options[:prerelease] = value
62
- end
63
-
64
- add_local_remote_options
65
- end
66
-
67
- def defaults_str # :nodoc:
68
- "--local --name-matches // --no-details --versions --no-installed"
69
- end
70
-
71
- def description # :nodoc:
72
- <<-EOF
73
- The query command is the basis for the list and search commands.
74
-
75
- You should really use the list and search commands instead. This command
76
- is too hard to use.
77
- EOF
78
- end
79
-
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)
95
- exit_code = 0
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
103
- else
104
- installed = installed?(gem_names.first, options[:version])
105
- installed = !installed unless options[:installed]
106
-
107
- say(installed)
108
- exit_code = 1 if !installed
109
- end
110
-
111
- exit_code
112
- end
113
-
114
- def check_installed_gems?
115
- !options[:installed].nil?
116
- end
117
-
118
- def gem_name?
119
- !options[:name].source.empty?
120
- end
121
-
122
- def prerelease
123
- options[:prerelease]
124
- end
125
-
126
- def show_prereleases?
127
- prerelease.nil? || prerelease
128
- end
129
-
130
- def args
131
- options[:args].to_a
132
- end
133
-
134
- def display_header(type)
135
- if (ui.outs.tty? and Gem.configuration.verbose) or both?
136
- say
137
- say "*** #{type} GEMS ***"
138
- say
139
- end
140
- end
141
-
142
- #Guts of original execute
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
-
155
- dep = Gem::Deprecate.skip_during { Gem::Dependency.new name, req }
156
- specs.select! do |s|
157
- dep.match?(s.name, s.version, show_prereleases?)
158
- end
159
-
160
- spec_tuples = specs.map do |spec|
161
- [spec.name_tuple, spec]
162
- end
163
-
164
- output_query_results(spec_tuples)
165
- end
166
-
167
- def show_remote_gems(name)
168
- display_header("REMOTE")
169
-
170
- fetcher = Gem::SpecFetcher.fetcher
171
-
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
179
-
180
- output_query_results(spec_tuples)
181
- end
182
-
183
- def specs_type
184
- if options[:all]
185
- if options[:prerelease]
186
- :complete
187
- else
188
- :released
189
- end
190
- elsif options[:prerelease]
191
- :prerelease
192
- else
193
- :latest
194
- end
195
- end
196
-
197
- ##
198
- # Check if gem +name+ version +version+ is installed.
199
-
200
- def installed?(name, req = Gem::Requirement.default)
201
- Gem::Specification.any? { |s| s.name =~ name and req =~ s.version }
202
- end
203
-
204
- def output_query_results(spec_tuples)
205
- output = []
206
- versions = Hash.new { |h,name| h[name] = [] }
207
-
208
- spec_tuples.each do |spec_tuple, source|
209
- versions[spec_tuple.name] << [spec_tuple, source]
210
- end
211
-
212
- versions = versions.sort_by do |(n,_),_|
213
- n.downcase
214
- end
215
-
216
- output_versions output, versions
217
-
218
- say output.join(options[:details] ? "\n\n" : "\n")
219
- end
220
-
221
- def output_versions(output, versions)
222
- versions.each do |gem_name, matching_tuples|
223
- matching_tuples = matching_tuples.sort_by { |n,_| n.version }.reverse
224
-
225
- platforms = Hash.new { |h,version| h[version] = [] }
226
-
227
- matching_tuples.each do |n, _|
228
- platforms[n.version] << n.platform if n.platform
229
- end
230
-
231
- seen = {}
232
-
233
- matching_tuples.delete_if do |n,_|
234
- if seen[n.version]
235
- true
236
- else
237
- seen[n.version] = true
238
- false
239
- end
240
- end
241
-
242
- output << clean_text(make_entry(matching_tuples, platforms))
243
- end
244
- end
245
-
246
- def entry_details(entry, detail_tuple, specs, platforms)
247
- return unless options[:details]
248
-
249
- name_tuple, spec = detail_tuple
250
-
251
- spec = spec.fetch_spec(name_tuple)if spec.respond_to?(:fetch_spec)
252
-
253
- entry << "\n"
254
-
255
- spec_platforms entry, platforms
256
- spec_authors entry, spec
257
- spec_homepage entry, spec
258
- spec_license entry, spec
259
- spec_loaded_from entry, spec, specs
260
- spec_summary entry, spec
261
- end
262
-
263
- def entry_versions(entry, name_tuples, platforms, specs)
264
- return unless options[:versions]
265
-
266
- list =
267
- if platforms.empty? or options[:details]
268
- name_tuples.map { |n| n.version }.uniq
269
- else
270
- platforms.sort.reverse.map do |version, pls|
271
- out = version.to_s
272
-
273
- if options[:domain] == :local
274
- default = specs.any? do |s|
275
- !s.is_a?(Gem::Source) && s.version == version && s.default_gem?
276
- end
277
- out = "default: #{out}" if default
278
- end
279
-
280
- if pls != [Gem::Platform::RUBY]
281
- platform_list = [pls.delete(Gem::Platform::RUBY), *pls.sort].compact
282
- out = platform_list.unshift(out).join(' ')
283
- end
284
-
285
- out
286
- end
287
- end
288
-
289
- entry << " (#{list.join ', '})"
290
- end
291
-
292
- def make_entry(entry_tuples, platforms)
293
- detail_tuple = entry_tuples.first
294
-
295
- name_tuples, specs = entry_tuples.flatten.partition do |item|
296
- Gem::NameTuple === item
297
- end
298
-
299
- entry = [name_tuples.first.name]
300
-
301
- entry_versions(entry, name_tuples, platforms, specs)
302
- entry_details(entry, detail_tuple, specs, platforms)
303
-
304
- entry.join
305
- end
306
-
307
- def spec_authors(entry, spec)
308
- authors = "Author#{spec.authors.length > 1 ? 's' : ''}: ".dup
309
- authors << spec.authors.join(', ')
310
- entry << format_text(authors, 68, 4)
311
- end
312
-
313
- def spec_homepage(entry, spec)
314
- return if spec.homepage.nil? or spec.homepage.empty?
315
-
316
- entry << "\n" << format_text("Homepage: #{spec.homepage}", 68, 4)
317
- end
318
-
319
- def spec_license(entry, spec)
320
- return if spec.license.nil? or spec.license.empty?
321
-
322
- licenses = "License#{spec.licenses.length > 1 ? 's' : ''}: ".dup
323
- licenses << spec.licenses.join(', ')
324
- entry << "\n" << format_text(licenses, 68, 4)
325
- end
326
-
327
- def spec_loaded_from(entry, spec, specs)
328
- return unless spec.loaded_from
329
-
330
- if specs.length == 1
331
- default = spec.default_gem? ? ' (default)' : nil
332
- entry << "\n" << " Installed at#{default}: #{spec.base_dir}"
333
- else
334
- label = 'Installed at'
335
- specs.each do |s|
336
- version = s.version.to_s
337
- version << ', default' if s.default_gem?
338
- entry << "\n" << " #{label} (#{version}): #{s.base_dir}"
339
- label = ' ' * label.length
340
- end
341
- end
342
- end
343
-
344
- def spec_platforms(entry, platforms)
345
- non_ruby = platforms.any? do |_, pls|
346
- pls.any? { |pl| pl != Gem::Platform::RUBY }
347
- end
348
-
349
- return unless non_ruby
350
-
351
- if platforms.length == 1
352
- title = platforms.values.length == 1 ? 'Platform' : 'Platforms'
353
- entry << " #{title}: #{platforms.values.sort.join(', ')}\n"
354
- else
355
- entry << " Platforms:\n"
356
-
357
- sorted_platforms = platforms.sort_by { |version,| version }
358
-
359
- sorted_platforms.each do |version, pls|
360
- label = " #{version}: "
361
- data = format_text pls.sort.join(', '), 68, label.length
362
- data[0, label.length] = label
363
- entry << data << "\n"
364
- end
365
- end
366
- end
367
-
368
- def spec_summary(entry, spec)
369
- summary = truncate_text(spec.summary, "the summary for #{spec.full_name}")
370
- entry << "\n\n" << format_text(summary, 68, 4)
24
+ add_query_options
371
25
  end
372
-
373
26
  end
@@ -5,7 +5,6 @@ require 'rubygems/rdoc'
5
5
  require 'fileutils'
6
6
 
7
7
  class Gem::Commands::RdocCommand < Gem::Command
8
-
9
8
  include Gem::VersionOption
10
9
 
11
10
  def initialize
@@ -93,5 +92,4 @@ Use --overwrite to force rebuilding of documentation.
93
92
  end
94
93
  end
95
94
  end
96
-
97
95
  end
@@ -1,15 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
  require 'rubygems/command'
3
- require 'rubygems/commands/query_command'
3
+ require 'rubygems/query_utils'
4
4
 
5
- class Gem::Commands::SearchCommand < Gem::Commands::QueryCommand
5
+ class Gem::Commands::SearchCommand < Gem::Command
6
+ include Gem::QueryUtils
6
7
 
7
8
  def initialize
8
- super 'search', 'Display remote gems whose name matches REGEXP'
9
+ super 'search', 'Display remote gems whose name matches REGEXP',
10
+ :name => //, :domain => :remote, :details => false, :versions => true,
11
+ :installed => nil, :version => Gem::Requirement.default
9
12
 
10
- remove_option '--name-matches'
11
-
12
- defaults[:domain] = :remote
13
+ add_query_options
13
14
  end
14
15
 
15
16
  def arguments # :nodoc:
@@ -36,5 +37,4 @@ To list local gems use the list command.
36
37
  def usage # :nodoc:
37
38
  "#{program_name} [REGEXP]"
38
39
  end
39
-
40
40
  end
@@ -3,7 +3,6 @@ require 'rubygems/command'
3
3
  require 'rubygems/server'
4
4
 
5
5
  class Gem::Commands::ServerCommand < Gem::Command
6
-
7
6
  def initialize
8
7
  super 'server', 'Documentation and gem repository HTTP server',
9
8
  :port => 8808, :gemdir => [], :daemon => false
@@ -82,5 +81,4 @@ You can set up a shortcut to gem server documentation using the URL:
82
81
  options[:gemdir] = Gem.path if options[:gemdir].empty?
83
82
  Gem::Server.run options
84
83
  end
85
-
86
84
  end
@@ -6,7 +6,6 @@ require 'rubygems/command'
6
6
  # RubyGems checkout or tarball.
7
7
 
8
8
  class Gem::Commands::SetupCommand < Gem::Command
9
-
10
9
  HISTORY_HEADER = /^===\s*[\d.a-zA-Z]+\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/.freeze
11
10
  VERSION_MATCHER = /^===\s*([\d.a-zA-Z]+)\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/.freeze
12
11
 
@@ -16,10 +15,12 @@ class Gem::Commands::SetupCommand < Gem::Command
16
15
  require 'tmpdir'
17
16
 
18
17
  super 'setup', 'Install RubyGems',
19
- :format_executable => true, :document => %w[ri],
18
+ :format_executable => false, :document => %w[ri],
19
+ :force => true,
20
20
  :site_or_vendor => 'sitelibdir',
21
21
  :destdir => '', :prefix => '', :previous_version => '',
22
- :regenerate_binstubs => true
22
+ :regenerate_binstubs => true,
23
+ :regenerate_plugins => true
23
24
 
24
25
  add_option '--previous-version=VERSION',
25
26
  'Previous version of RubyGems',
@@ -88,6 +89,16 @@ class Gem::Commands::SetupCommand < Gem::Command
88
89
  options[:regenerate_binstubs] = value
89
90
  end
90
91
 
92
+ add_option '--[no-]regenerate-plugins',
93
+ 'Regenerate gem plugins' do |value, options|
94
+ options[:regenerate_plugins] = value
95
+ end
96
+
97
+ add_option '-f', '--[no-]force',
98
+ 'Forcefully overwrite binstubs' do |value, options|
99
+ options[:force] = value
100
+ end
101
+
91
102
  add_option('-E', '--[no-]env-shebang',
92
103
  'Rewrite executables with a shebang',
93
104
  'of /usr/bin/env') do |value, options|
@@ -156,15 +167,20 @@ By default, this RubyGems will install gem as:
156
167
  extend MakeDirs
157
168
 
158
169
  lib_dir, bin_dir = make_destination_dirs install_destdir
170
+ man_dir = make_man_dir install_destdir
159
171
 
160
172
  install_lib lib_dir
161
173
 
174
+ install_man man_dir
175
+
162
176
  install_executables bin_dir
163
177
 
164
178
  remove_old_bin_files bin_dir
165
179
 
166
180
  remove_old_lib_files lib_dir
167
181
 
182
+ remove_old_man_files man_dir
183
+
168
184
  install_default_bundler_gem bin_dir
169
185
 
170
186
  if mode = options[:dir_mode]
@@ -175,6 +191,7 @@ By default, this RubyGems will install gem as:
175
191
  say "RubyGems #{Gem::VERSION} installed"
176
192
 
177
193
  regenerate_binstubs if options[:regenerate_binstubs]
194
+ regenerate_plugins if options[:regenerate_plugins]
178
195
 
179
196
  uninstall_old_gemcutter
180
197
 
@@ -199,10 +216,10 @@ By default, this RubyGems will install gem as:
199
216
  say
200
217
 
201
218
  say "RubyGems installed the following executables:"
202
- say @bin_file_names.map { |name| "\t#{name}\n" }
219
+ say bin_file_names.map {|name| "\t#{name}\n" }
203
220
  say
204
221
 
205
- unless @bin_file_names.grep(/#{File::SEPARATOR}gem$/)
222
+ unless bin_file_names.grep(/#{File::SEPARATOR}gem$/)
206
223
  say "If `gem` was installed by a previous RubyGems installation, you may need"
207
224
  say "to remove it by hand."
208
225
  say
@@ -235,8 +252,6 @@ By default, this RubyGems will install gem as:
235
252
  end
236
253
 
237
254
  def install_executables(bin_dir)
238
- @bin_file_names = []
239
-
240
255
  prog_mode = options[:prog_mode] || 0755
241
256
 
242
257
  executables = { 'gem' => 'bin' }
@@ -249,13 +264,7 @@ By default, this RubyGems will install gem as:
249
264
  bin_files -= %w[update_rubygems]
250
265
 
251
266
  bin_files.each do |bin_file|
252
- bin_file_formatted = if options[:format_executable]
253
- Gem.default_exec_format % bin_file
254
- else
255
- bin_file
256
- end
257
-
258
- dest_file = File.join bin_dir, bin_file_formatted
267
+ dest_file = target_bin_path(bin_dir, bin_file)
259
268
  bin_tmp_file = File.join Dir.tmpdir, "#{bin_file}.#{$$}"
260
269
 
261
270
  begin
@@ -267,7 +276,7 @@ By default, this RubyGems will install gem as:
267
276
  end
268
277
 
269
278
  install bin_tmp_file, dest_file, :mode => prog_mode
270
- @bin_file_names << dest_file
279
+ bin_file_names << dest_file
271
280
  ensure
272
281
  rm bin_tmp_file
273
282
  end
@@ -307,16 +316,6 @@ By default, this RubyGems will install gem as:
307
316
  end
308
317
  end
309
318
 
310
- def install_file(file, dest_dir)
311
- dest_file = File.join dest_dir, file
312
- dest_dir = File.dirname dest_file
313
- unless File.directory? dest_dir
314
- mkdir_p dest_dir, :mode => 0755
315
- end
316
-
317
- install file, dest_file, :mode => options[:data_mode] || 0644
318
- end
319
-
320
319
  def install_lib(lib_dir)
321
320
  libs = { 'RubyGems' => 'lib' }
322
321
  libs['Bundler'] = 'bundler/lib'
@@ -324,18 +323,27 @@ By default, this RubyGems will install gem as:
324
323
  say "Installing #{tool}" if @verbose
325
324
 
326
325
  lib_files = rb_files_in path
327
- lib_files.concat(template_files) if tool == 'Bundler'
326
+ lib_files.concat(bundler_template_files) if tool == 'Bundler'
328
327
 
329
328
  pem_files = pem_files_in path
330
329
 
331
330
  Dir.chdir path do
332
- lib_files.each do |lib_file|
333
- install_file lib_file, lib_dir
334
- end
331
+ install_file_list(lib_files + pem_files, lib_dir)
332
+ end
333
+ end
334
+ end
335
335
 
336
- pem_files.each do |pem_file|
337
- install_file pem_file, lib_dir
338
- end
336
+ def install_man(man_dir)
337
+ mans = { 'Bundler' => 'bundler/man' }
338
+ mans.each do |tool, path|
339
+ say "Installing #{tool} manpages" if @verbose
340
+
341
+ bundler_man1_files = bundler_man1_files_in(path)
342
+ bundler_man5_files = bundler_man5_files_in(path)
343
+
344
+ Dir.chdir path do
345
+ install_file_list(bundler_man1_files, "#{man_dir}/man1")
346
+ install_file_list(bundler_man5_files, "#{man_dir}/man5")
339
347
  end
340
348
  end
341
349
  end
@@ -429,13 +437,15 @@ By default, this RubyGems will install gem as:
429
437
  Dir.chdir("bundler") do
430
438
  built_gem = Gem::Package.build(bundler_spec)
431
439
  begin
432
- installer = Gem::Installer.at(built_gem, env_shebang: options[:env_shebang], format_executable: options[:format_executable], install_as_default: true, bin_dir: bin_dir, wrappers: true)
440
+ installer = Gem::Installer.at(built_gem, env_shebang: options[:env_shebang], format_executable: options[:format_executable], force: options[:force], install_as_default: true, bin_dir: bin_dir, wrappers: true)
433
441
  installer.install
434
442
  ensure
435
443
  FileUtils.rm_f built_gem
436
444
  end
437
445
  end
438
446
 
447
+ bundler_spec.executables.each {|executable| bin_file_names << target_bin_path(bin_dir, executable) }
448
+
439
449
  say "Bundler #{bundler_spec.version} installed"
440
450
  end
441
451
 
@@ -452,6 +462,30 @@ By default, this RubyGems will install gem as:
452
462
  return lib_dir, bin_dir
453
463
  end
454
464
 
465
+ def make_man_dir(install_destdir)
466
+ man_dir = generate_default_man_dir(install_destdir)
467
+
468
+ mkdir_p man_dir, :mode => 0755
469
+
470
+ return man_dir
471
+ end
472
+
473
+ def generate_default_man_dir(install_destdir)
474
+ prefix = options[:prefix]
475
+
476
+ if prefix.empty?
477
+ man_dir = RbConfig::CONFIG['mandir']
478
+ else
479
+ man_dir = File.join prefix, 'man'
480
+ end
481
+
482
+ unless install_destdir.empty?
483
+ man_dir = File.join install_destdir, man_dir.gsub(/^[a-zA-Z]:/, '')
484
+ end
485
+
486
+ man_dir
487
+ end
488
+
455
489
  def generate_default_dirs(install_destdir)
456
490
  prefix = options[:prefix]
457
491
  site_or_vendor = options[:site_or_vendor]
@@ -497,18 +531,31 @@ By default, this RubyGems will install gem as:
497
531
  end
498
532
 
499
533
  # for installation of bundler as default gems
500
- def template_files
534
+ def bundler_man1_files_in(dir)
535
+ Dir.chdir dir do
536
+ Dir['bundle*.1{,.txt,.ronn}']
537
+ end
538
+ end
539
+
540
+ # for installation of bundler as default gems
541
+ def bundler_man5_files_in(dir)
542
+ Dir.chdir dir do
543
+ Dir['gemfile.5{,.txt,.ronn}']
544
+ end
545
+ end
546
+
547
+ def bundler_template_files
501
548
  Dir.chdir "bundler/lib" do
502
- (Dir[File.join('bundler', 'templates', '**', '{*,.*}')]).
503
- select{|f| !File.directory?(f)}
549
+ Dir.glob(File.join('bundler', 'templates', '**', '*'), File::FNM_DOTMATCH).
550
+ select{|f| !File.directory?(f) }
504
551
  end
505
552
  end
506
553
 
507
554
  # for cleanup old bundler files
508
555
  def template_files_in(dir)
509
556
  Dir.chdir dir do
510
- (Dir[File.join('templates', '**', '{*,.*}')]).
511
- select{|f| !File.directory?(f)}
557
+ Dir.glob(File.join('templates', '**', '*'), File::FNM_DOTMATCH).
558
+ select{|f| !File.directory?(f) }
512
559
  end
513
560
  end
514
561
 
@@ -539,7 +586,7 @@ abort "#{deprecation_message}"
539
586
  next unless Gem.win_platform?
540
587
 
541
588
  File.open "#{old_bin_path}.bat", 'w' do |fp|
542
- fp.puts %{@ECHO.#{deprecation_message}}
589
+ fp.puts %(@ECHO.#{deprecation_message})
543
590
  end
544
591
  end
545
592
  end
@@ -556,17 +603,29 @@ abort "#{deprecation_message}"
556
603
 
557
604
  to_remove = old_lib_files - lib_files
558
605
 
606
+ gauntlet_rubygems = File.join(lib_dir, 'gauntlet_rubygems.rb')
607
+ to_remove << gauntlet_rubygems if File.exist? gauntlet_rubygems
608
+
559
609
  to_remove.delete_if do |file|
560
610
  file.start_with? 'defaults'
561
611
  end
562
612
 
563
- Dir.chdir old_lib_dir do
564
- to_remove.each do |file|
565
- FileUtils.rm_f file
613
+ remove_file_list(to_remove, old_lib_dir)
614
+ end
615
+ end
616
+
617
+ def remove_old_man_files(man_dir)
618
+ man_dirs = { man_dir => "bundler/man" }
619
+ man_dirs.each do |old_man_dir, new_man_dir|
620
+ ["1", "5"].each do |section|
621
+ man_files = send(:"bundler_man#{section}_files_in", new_man_dir)
566
622
 
567
- warn "unable to remove old file #{file} please remove it by hand" if
568
- File.exist? file
569
- end
623
+ old_man_dir_with_section = "#{old_man_dir}/man#{section}"
624
+ old_man_files = send(:"bundler_man#{section}_files_in", old_man_dir_with_section)
625
+
626
+ man_to_remove = old_man_files - man_files
627
+
628
+ remove_file_list(man_to_remove, old_man_dir_with_section)
570
629
  end
571
630
  end
572
631
  end
@@ -580,8 +639,6 @@ abort "#{deprecation_message}"
580
639
 
581
640
  history.force_encoding Encoding::UTF_8
582
641
 
583
- history = history.sub(/^# coding:.*?(?=^=)/m, '')
584
-
585
642
  text = history.split(HISTORY_HEADER)
586
643
  text.shift # correct an off-by-one generated by split
587
644
  version_lines = history.scan(HISTORY_HEADER)
@@ -592,7 +649,7 @@ abort "#{deprecation_message}"
592
649
  history_string = ""
593
650
 
594
651
  until versions.length == 0 or
595
- versions.shift < options[:previous_version] do
652
+ versions.shift <= options[:previous_version] do
596
653
  history_string += version_lines.shift + text.shift
597
654
  end
598
655
 
@@ -626,4 +683,55 @@ abort "#{deprecation_message}"
626
683
  command.invoke(*args)
627
684
  end
628
685
 
686
+ def regenerate_plugins
687
+ require "rubygems/commands/pristine_command"
688
+ say "Regenerating plugins"
689
+
690
+ args = %w[--all --only-plugins --silent]
691
+
692
+ command = Gem::Commands::PristineCommand.new
693
+ command.invoke(*args)
694
+ end
695
+
696
+ private
697
+
698
+ def install_file_list(files, dest_dir)
699
+ files.each do |file|
700
+ install_file file, dest_dir
701
+ end
702
+ end
703
+
704
+ def install_file(file, dest_dir)
705
+ dest_file = File.join dest_dir, file
706
+ dest_dir = File.dirname dest_file
707
+ unless File.directory? dest_dir
708
+ mkdir_p dest_dir, :mode => 0755
709
+ end
710
+
711
+ install file, dest_file, :mode => options[:data_mode] || 0644
712
+ end
713
+
714
+ def remove_file_list(files, dir)
715
+ Dir.chdir dir do
716
+ files.each do |file|
717
+ FileUtils.rm_f file
718
+
719
+ warn "unable to remove old file #{file} please remove it by hand" if
720
+ File.exist? file
721
+ end
722
+ end
723
+ end
724
+
725
+ def target_bin_path(bin_dir, bin_file)
726
+ bin_file_formatted = if options[:format_executable]
727
+ Gem.default_exec_format % bin_file
728
+ else
729
+ bin_file
730
+ end
731
+ File.join bin_dir, bin_file_formatted
732
+ end
733
+
734
+ def bin_file_names
735
+ @bin_file_names ||= []
736
+ end
629
737
  end