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
@@ -3,7 +3,6 @@
3
3
  # IO wrapper that creates digests of contents written to the IO it wraps.
4
4
 
5
5
  class Gem::Package::DigestIO
6
-
7
6
  ##
8
7
  # Collected digests for wrapped writes.
9
8
  #
@@ -60,5 +59,4 @@ class Gem::Package::DigestIO
60
59
 
61
60
  result
62
61
  end
63
-
64
62
  end
@@ -7,7 +7,6 @@
7
7
  # object to `Gem::Package.new`.
8
8
 
9
9
  class Gem::Package::FileSource < Gem::Package::Source # :nodoc: all
10
-
11
10
  attr_reader :path
12
11
 
13
12
  def initialize(path)
@@ -29,5 +28,4 @@ class Gem::Package::FileSource < Gem::Package::Source # :nodoc: all
29
28
  def with_read_io(&block)
30
29
  File.open path, 'rb', &block
31
30
  end
32
-
33
31
  end
@@ -8,7 +8,6 @@
8
8
  # object to `Gem::Package.new`.
9
9
 
10
10
  class Gem::Package::IOSource < Gem::Package::Source # :nodoc: all
11
-
12
11
  attr_reader :io
13
12
 
14
13
  def initialize(io)
@@ -41,5 +40,4 @@ class Gem::Package::IOSource < Gem::Package::Source # :nodoc: all
41
40
 
42
41
  def path
43
42
  end
44
-
45
43
  end
@@ -12,7 +12,6 @@
12
12
  # Please pretend this doesn't exist.
13
13
 
14
14
  class Gem::Package::Old < Gem::Package
15
-
16
15
  undef_method :spec=
17
16
 
18
17
  ##
@@ -42,7 +41,7 @@ class Gem::Package::Old < Gem::Package
42
41
  read_until_dashes io # spec
43
42
  header = file_list io
44
43
 
45
- @contents = header.map { |file| file['path'] }
44
+ @contents = header.map {|file| file['path'] }
46
45
  end
47
46
  end
48
47
 
@@ -166,5 +165,4 @@ class Gem::Package::Old < Gem::Package
166
165
 
167
166
  true
168
167
  end
169
-
170
168
  end
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  # frozen_string_literal: true
3
2
  #--
4
3
  # Copyright (C) 2004 Mauricio Julio Fernández Pradier
@@ -29,7 +28,6 @@
29
28
  # A header for a tar file
30
29
 
31
30
  class Gem::Package::TarHeader
32
-
33
31
  ##
34
32
  # Fields in the tar header
35
33
 
@@ -126,7 +124,8 @@ class Gem::Package::TarHeader
126
124
  end
127
125
 
128
126
  def self.strict_oct(str)
129
- return str.oct if str =~ /\A[0-7]*\z/
127
+ return str.strip.oct if str.strip =~ /\A[0-7]*\z/
128
+
130
129
  raise ArgumentError, "#{str.inspect} is not an octal string"
131
130
  end
132
131
 
@@ -209,7 +208,7 @@ class Gem::Package::TarHeader
209
208
  private
210
209
 
211
210
  def calculate_checksum(header)
212
- header.unpack("C*").inject { |a, b| a + b }
211
+ header.unpack("C*").inject {|a, b| a + b }
213
212
  end
214
213
 
215
214
  def header(checksum = @checksum)
@@ -241,5 +240,4 @@ class Gem::Package::TarHeader
241
240
  def oct(num, len)
242
241
  "%0#{len}o" % num
243
242
  end
244
-
245
243
  end
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  # frozen_string_literal: true
3
2
  #--
4
3
  # Copyright (C) 2004 Mauricio Julio Fernández Pradier
@@ -9,7 +8,6 @@
9
8
  # TarReader reads tar files and allows iteration over their items
10
9
 
11
10
  class Gem::Package::TarReader
12
-
13
11
  include Enumerable
14
12
 
15
13
  ##
@@ -121,7 +119,6 @@ class Gem::Package::TarReader
121
119
  ensure
122
120
  rewind
123
121
  end
124
-
125
122
  end
126
123
 
127
124
  require 'rubygems/package/tar_reader/entry'
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  # frozen_string_literal: true
3
2
  #++
4
3
  # Copyright (C) 2004 Mauricio Julio Fernández Pradier
@@ -9,7 +8,6 @@
9
8
  # Class for reading entries out of a tar file
10
9
 
11
10
  class Gem::Package::TarReader::Entry
12
-
13
11
  ##
14
12
  # Header for this tar entry
15
13
 
@@ -166,5 +164,4 @@ class Gem::Package::TarReader::Entry
166
164
  @io.pos = @orig_pos
167
165
  @read = 0
168
166
  end
169
-
170
167
  end
@@ -6,7 +6,6 @@ require 'rubygems/package'
6
6
  # A test case for Gem::Package::Tar* classes
7
7
 
8
8
  class Gem::Package::TarTestCase < Gem::TestCase
9
-
10
9
  def ASCIIZ(str, length)
11
10
  str + "\0" * (length - str.length)
12
11
  end
@@ -68,7 +67,7 @@ class Gem::Package::TarTestCase < Gem::TestCase
68
67
  end
69
68
 
70
69
  def calc_checksum(header)
71
- sum = header.unpack("C*").inject{|s,a| s + a}
70
+ sum = header.unpack("C*").inject{|s,a| s + a }
72
71
  SP(Z(to_oct(sum, 6)))
73
72
  end
74
73
 
@@ -137,5 +136,4 @@ class Gem::Package::TarTestCase < Gem::TestCase
137
136
  def util_symlink_entry
138
137
  util_entry tar_symlink_header("foo", "bar", 0, Time.now, "link")
139
138
  end
140
-
141
139
  end
@@ -1,24 +1,19 @@
1
- # -*- coding: utf-8 -*-
2
1
  # frozen_string_literal: true
3
2
  #--
4
3
  # Copyright (C) 2004 Mauricio Julio Fernández Pradier
5
4
  # See LICENSE.txt for additional licensing information.
6
5
  #++
7
6
 
8
- require 'digest'
9
-
10
7
  ##
11
8
  # Allows writing of tar files
12
9
 
13
10
  class Gem::Package::TarWriter
14
-
15
11
  class FileOverflow < StandardError; end
16
12
 
17
13
  ##
18
14
  # IO wrapper that allows writing a limited amount of data
19
15
 
20
16
  class BoundedStream
21
-
22
17
  ##
23
18
  # Maximum number of bytes that can be written
24
19
 
@@ -50,14 +45,12 @@ class Gem::Package::TarWriter
50
45
  @written += data.bytesize
51
46
  data.bytesize
52
47
  end
53
-
54
48
  end
55
49
 
56
50
  ##
57
51
  # IO wrapper that provides only #write
58
52
 
59
53
  class RestrictedStream
60
-
61
54
  ##
62
55
  # Creates a new RestrictedStream wrapping +io+
63
56
 
@@ -71,7 +64,6 @@ class Gem::Package::TarWriter
71
64
  def write(data)
72
65
  @io.write data
73
66
  end
74
-
75
67
  end
76
68
 
77
69
  ##
@@ -146,8 +138,7 @@ class Gem::Package::TarWriter
146
138
  if digest.respond_to? :name
147
139
  digest.name
148
140
  else
149
- /::([^:]+)$/ =~ digest_algorithm.name
150
- $1
141
+ digest_algorithm.class.name[/::([^:]+)\z/, 1]
151
142
  end
152
143
 
153
144
  [digest_name, digest]
@@ -175,7 +166,7 @@ class Gem::Package::TarWriter
175
166
  def add_file_signed(name, mode, signer)
176
167
  digest_algorithms = [
177
168
  signer.digest_algorithm,
178
- Digest::SHA512,
169
+ Gem::Security.create_digest('SHA512'),
179
170
  ].compact.uniq
180
171
 
181
172
  digests = add_file_digest name, mode, digest_algorithms do |io|
@@ -334,5 +325,4 @@ class Gem::Package::TarWriter
334
325
 
335
326
  return name, prefix
336
327
  end
337
-
338
328
  end
@@ -22,11 +22,6 @@
22
22
 
23
23
  require 'rubygems'
24
24
  require 'rubygems/package'
25
- begin
26
- gem 'rake'
27
- rescue Gem::LoadError
28
- end
29
-
30
25
  require 'rake/packagetask'
31
26
 
32
27
  ##
@@ -62,7 +57,6 @@ require 'rake/packagetask'
62
57
  # end
63
58
 
64
59
  class Gem::PackageTask < Rake::PackageTask
65
-
66
60
  ##
67
61
  # Ruby Gem::Specification containing the metadata for this package. The
68
62
  # name, version and package_files are automatically determined from the
@@ -88,6 +82,7 @@ class Gem::PackageTask < Rake::PackageTask
88
82
  super gem.full_name, :noversion
89
83
  @gem_spec = gem
90
84
  @package_files += gem_spec.files if gem_spec.files
85
+ @fileutils_output = $stdout
91
86
  end
92
87
 
93
88
  ##
@@ -124,5 +119,4 @@ class Gem::PackageTask < Rake::PackageTask
124
119
  end
125
120
  end
126
121
  end
127
-
128
122
  end
@@ -5,7 +5,6 @@
5
5
  # to the rest of RubyGems.
6
6
  #
7
7
  class Gem::PathSupport
8
-
9
8
  ##
10
9
  # The default system path for managing Gems.
11
10
  attr_reader :home
@@ -68,7 +67,7 @@ class Gem::PathSupport
68
67
  gem_path = default_path
69
68
  end
70
69
 
71
- gem_path.map { |path| expand(path) }.uniq
70
+ gem_path.map {|path| expand(path) }.uniq
72
71
  end
73
72
 
74
73
  # Return the default Gem path
@@ -88,5 +87,4 @@ class Gem::PathSupport
88
87
  path
89
88
  end
90
89
  end
91
-
92
90
  end
@@ -7,7 +7,6 @@ require "rubygems/deprecate"
7
7
  # See `gem help platform` for information on platform matching.
8
8
 
9
9
  class Gem::Platform
10
-
11
10
  @local = nil
12
11
 
13
12
  attr_accessor :cpu
@@ -56,7 +55,7 @@ class Gem::Platform
56
55
  when String then
57
56
  arch = arch.split '-'
58
57
 
59
- if arch.length > 2 and arch.last !~ /\d/ # reassemble x86-linux-gnu
58
+ if arch.length > 2 and arch.last !~ /\d/ # reassemble x86-linux-gnu
60
59
  extra = arch.pop
61
60
  arch.last << "-#{extra}"
62
61
  end
@@ -68,7 +67,7 @@ class Gem::Platform
68
67
  else cpu
69
68
  end
70
69
 
71
- if arch.length == 2 and arch.last =~ /^\d+(\.\d+)?$/ # for command-line
70
+ if arch.length == 2 and arch.last =~ /^\d+(\.\d+)?$/ # for command-line
72
71
  @os, @version = arch
73
72
  return
74
73
  end
@@ -150,7 +149,7 @@ class Gem::Platform
150
149
 
151
150
  # cpu
152
151
  ([nil,'universal'].include?(@cpu) or [nil, 'universal'].include?(other.cpu) or @cpu == other.cpu or
153
- (@cpu == 'arm' and other.cpu =~ /\Aarm/)) and
152
+ (@cpu == 'arm' and other.cpu.start_with?("arm"))) and
154
153
 
155
154
  # os
156
155
  @os == other.os and
@@ -202,5 +201,4 @@ class Gem::Platform
202
201
  # This will be replaced with Gem::Platform::local.
203
202
 
204
203
  CURRENT = 'current'.freeze
205
-
206
204
  end
@@ -2,7 +2,6 @@
2
2
  module Gem
3
3
  if defined? ::Psych::Visitors
4
4
  class NoAliasYAMLTree < Psych::Visitors::YAMLTree
5
-
6
5
  def self.create
7
6
  new({})
8
7
  end unless respond_to? :create
@@ -28,7 +27,6 @@ module Gem
28
27
  end
29
28
 
30
29
  private :format_time
31
-
32
30
  end
33
31
  end
34
32
  end
@@ -0,0 +1,362 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubygems/local_remote_options'
4
+ require 'rubygems/spec_fetcher'
5
+ require 'rubygems/version_option'
6
+ require 'rubygems/text'
7
+
8
+ module Gem::QueryUtils
9
+
10
+ include Gem::Text
11
+ include Gem::LocalRemoteOptions
12
+ include Gem::VersionOption
13
+
14
+ def add_query_options
15
+ add_option('-i', '--[no-]installed',
16
+ 'Check for installed gem') do |value, options|
17
+ options[:installed] = value
18
+ end
19
+
20
+ add_option('-I', 'Equivalent to --no-installed') do |value, options|
21
+ options[:installed] = false
22
+ end
23
+
24
+ add_version_option command, "for use with --installed"
25
+
26
+ add_option('-d', '--[no-]details',
27
+ 'Display detailed information of gem(s)') do |value, options|
28
+ options[:details] = value
29
+ end
30
+
31
+ add_option('--[no-]versions',
32
+ 'Display only gem names') do |value, options|
33
+ options[:versions] = value
34
+ options[:details] = false unless value
35
+ end
36
+
37
+ add_option('-a', '--all',
38
+ 'Display all gem versions') do |value, options|
39
+ options[:all] = value
40
+ end
41
+
42
+ add_option('-e', '--exact',
43
+ 'Name of gem(s) to query on matches the',
44
+ 'provided STRING') do |value, options|
45
+ options[:exact] = value
46
+ end
47
+
48
+ add_option('--[no-]prerelease',
49
+ 'Display prerelease versions') do |value, options|
50
+ options[:prerelease] = value
51
+ end
52
+
53
+ add_local_remote_options
54
+ end
55
+
56
+ def defaults_str # :nodoc:
57
+ "--local --name-matches // --no-details --versions --no-installed"
58
+ end
59
+
60
+ def description # :nodoc:
61
+ <<-EOF
62
+ The query command is the basis for the list and search commands.
63
+
64
+ You should really use the list and search commands instead. This command
65
+ is too hard to use.
66
+ EOF
67
+ end
68
+
69
+ def execute
70
+ gem_names = Array(options[:name])
71
+
72
+ if !args.empty?
73
+ gem_names = options[:exact] ? args.map{|arg| /\A#{Regexp.escape(arg)}\Z/ } : args.map{|arg| /#{arg}/i }
74
+ end
75
+
76
+ terminate_interaction(check_installed_gems(gem_names)) if check_installed_gems?
77
+
78
+ gem_names.each {|n| show_gems(n) }
79
+ end
80
+
81
+ private
82
+
83
+ def check_installed_gems(gem_names)
84
+ exit_code = 0
85
+
86
+ if args.empty? && !gem_name?
87
+ alert_error "You must specify a gem name"
88
+ exit_code = 4
89
+ elsif gem_names.count > 1
90
+ alert_error "You must specify only ONE gem!"
91
+ exit_code = 4
92
+ else
93
+ installed = installed?(gem_names.first, options[:version])
94
+ installed = !installed unless options[:installed]
95
+
96
+ say(installed)
97
+ exit_code = 1 if !installed
98
+ end
99
+
100
+ exit_code
101
+ end
102
+
103
+ def check_installed_gems?
104
+ !options[:installed].nil?
105
+ end
106
+
107
+ def gem_name?
108
+ !options[:name].source.empty?
109
+ end
110
+
111
+ def prerelease
112
+ options[:prerelease]
113
+ end
114
+
115
+ def show_prereleases?
116
+ prerelease.nil? || prerelease
117
+ end
118
+
119
+ def args
120
+ options[:args].to_a
121
+ end
122
+
123
+ def display_header(type)
124
+ if (ui.outs.tty? and Gem.configuration.verbose) or both?
125
+ say
126
+ say "*** #{type} GEMS ***"
127
+ say
128
+ end
129
+ end
130
+
131
+ #Guts of original execute
132
+ def show_gems(name)
133
+ show_local_gems(name) if local?
134
+ show_remote_gems(name) if remote?
135
+ end
136
+
137
+ def show_local_gems(name, req = Gem::Requirement.default)
138
+ display_header("LOCAL")
139
+
140
+ specs = Gem::Specification.find_all do |s|
141
+ s.name =~ name and req =~ s.version
142
+ end
143
+
144
+ dep = Gem::Deprecate.skip_during { Gem::Dependency.new name, req }
145
+ specs.select! do |s|
146
+ dep.match?(s.name, s.version, show_prereleases?)
147
+ end
148
+
149
+ spec_tuples = specs.map do |spec|
150
+ [spec.name_tuple, spec]
151
+ end
152
+
153
+ output_query_results(spec_tuples)
154
+ end
155
+
156
+ def show_remote_gems(name)
157
+ display_header("REMOTE")
158
+
159
+ fetcher = Gem::SpecFetcher.fetcher
160
+
161
+ spec_tuples = if name.respond_to?(:source) && name.source.empty?
162
+ fetcher.detect(specs_type) { true }
163
+ else
164
+ fetcher.detect(specs_type) do |name_tuple|
165
+ name === name_tuple.name
166
+ end
167
+ end
168
+
169
+ output_query_results(spec_tuples)
170
+ end
171
+
172
+ def specs_type
173
+ if options[:all]
174
+ if options[:prerelease]
175
+ :complete
176
+ else
177
+ :released
178
+ end
179
+ elsif options[:prerelease]
180
+ :prerelease
181
+ else
182
+ :latest
183
+ end
184
+ end
185
+
186
+ ##
187
+ # Check if gem +name+ version +version+ is installed.
188
+
189
+ def installed?(name, req = Gem::Requirement.default)
190
+ Gem::Specification.any? {|s| s.name =~ name and req =~ s.version }
191
+ end
192
+
193
+ def output_query_results(spec_tuples)
194
+ output = []
195
+ versions = Hash.new {|h,name| h[name] = [] }
196
+
197
+ spec_tuples.each do |spec_tuple, source|
198
+ versions[spec_tuple.name] << [spec_tuple, source]
199
+ end
200
+
201
+ versions = versions.sort_by do |(n,_),_|
202
+ n.downcase
203
+ end
204
+
205
+ output_versions output, versions
206
+
207
+ say output.join(options[:details] ? "\n\n" : "\n")
208
+ end
209
+
210
+ def output_versions(output, versions)
211
+ versions.each do |gem_name, matching_tuples|
212
+ matching_tuples = matching_tuples.sort_by {|n,_| n.version }.reverse
213
+
214
+ platforms = Hash.new {|h,version| h[version] = [] }
215
+
216
+ matching_tuples.each do |n, _|
217
+ platforms[n.version] << n.platform if n.platform
218
+ end
219
+
220
+ seen = {}
221
+
222
+ matching_tuples.delete_if do |n,_|
223
+ if seen[n.version]
224
+ true
225
+ else
226
+ seen[n.version] = true
227
+ false
228
+ end
229
+ end
230
+
231
+ output << clean_text(make_entry(matching_tuples, platforms))
232
+ end
233
+ end
234
+
235
+ def entry_details(entry, detail_tuple, specs, platforms)
236
+ return unless options[:details]
237
+
238
+ name_tuple, spec = detail_tuple
239
+
240
+ spec = spec.fetch_spec(name_tuple)if spec.respond_to?(:fetch_spec)
241
+
242
+ entry << "\n"
243
+
244
+ spec_platforms entry, platforms
245
+ spec_authors entry, spec
246
+ spec_homepage entry, spec
247
+ spec_license entry, spec
248
+ spec_loaded_from entry, spec, specs
249
+ spec_summary entry, spec
250
+ end
251
+
252
+ def entry_versions(entry, name_tuples, platforms, specs)
253
+ return unless options[:versions]
254
+
255
+ list =
256
+ if platforms.empty? or options[:details]
257
+ name_tuples.map {|n| n.version }.uniq
258
+ else
259
+ platforms.sort.reverse.map do |version, pls|
260
+ out = version.to_s
261
+
262
+ if options[:domain] == :local
263
+ default = specs.any? do |s|
264
+ !s.is_a?(Gem::Source) && s.version == version && s.default_gem?
265
+ end
266
+ out = "default: #{out}" if default
267
+ end
268
+
269
+ if pls != [Gem::Platform::RUBY]
270
+ platform_list = [pls.delete(Gem::Platform::RUBY), *pls.sort].compact
271
+ out = platform_list.unshift(out).join(' ')
272
+ end
273
+
274
+ out
275
+ end
276
+ end
277
+
278
+ entry << " (#{list.join ', '})"
279
+ end
280
+
281
+ def make_entry(entry_tuples, platforms)
282
+ detail_tuple = entry_tuples.first
283
+
284
+ name_tuples, specs = entry_tuples.flatten.partition do |item|
285
+ Gem::NameTuple === item
286
+ end
287
+
288
+ entry = [name_tuples.first.name]
289
+
290
+ entry_versions(entry, name_tuples, platforms, specs)
291
+ entry_details(entry, detail_tuple, specs, platforms)
292
+
293
+ entry.join
294
+ end
295
+
296
+ def spec_authors(entry, spec)
297
+ authors = "Author#{spec.authors.length > 1 ? 's' : ''}: ".dup
298
+ authors << spec.authors.join(', ')
299
+ entry << format_text(authors, 68, 4)
300
+ end
301
+
302
+ def spec_homepage(entry, spec)
303
+ return if spec.homepage.nil? or spec.homepage.empty?
304
+
305
+ entry << "\n" << format_text("Homepage: #{spec.homepage}", 68, 4)
306
+ end
307
+
308
+ def spec_license(entry, spec)
309
+ return if spec.license.nil? or spec.license.empty?
310
+
311
+ licenses = "License#{spec.licenses.length > 1 ? 's' : ''}: ".dup
312
+ licenses << spec.licenses.join(', ')
313
+ entry << "\n" << format_text(licenses, 68, 4)
314
+ end
315
+
316
+ def spec_loaded_from(entry, spec, specs)
317
+ return unless spec.loaded_from
318
+
319
+ if specs.length == 1
320
+ default = spec.default_gem? ? ' (default)' : nil
321
+ entry << "\n" << " Installed at#{default}: #{spec.base_dir}"
322
+ else
323
+ label = 'Installed at'
324
+ specs.each do |s|
325
+ version = s.version.to_s
326
+ version << ', default' if s.default_gem?
327
+ entry << "\n" << " #{label} (#{version}): #{s.base_dir}"
328
+ label = ' ' * label.length
329
+ end
330
+ end
331
+ end
332
+
333
+ def spec_platforms(entry, platforms)
334
+ non_ruby = platforms.any? do |_, pls|
335
+ pls.any? {|pl| pl != Gem::Platform::RUBY }
336
+ end
337
+
338
+ return unless non_ruby
339
+
340
+ if platforms.length == 1
341
+ title = platforms.values.length == 1 ? 'Platform' : 'Platforms'
342
+ entry << " #{title}: #{platforms.values.sort.join(', ')}\n"
343
+ else
344
+ entry << " Platforms:\n"
345
+
346
+ sorted_platforms = platforms.sort_by {|version,| version }
347
+
348
+ sorted_platforms.each do |version, pls|
349
+ label = " #{version}: "
350
+ data = format_text pls.sort.join(', '), 68, label.length
351
+ data[0, label.length] = label
352
+ entry << data << "\n"
353
+ end
354
+ end
355
+ end
356
+
357
+ def spec_summary(entry, spec)
358
+ summary = truncate_text(spec.summary, "the summary for #{spec.full_name}")
359
+ entry << "\n\n" << format_text(summary, 68, 4)
360
+ end
361
+
362
+ end