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
@@ -25,12 +25,12 @@ module Gem::InstallUpdateOptions
25
25
  end
26
26
 
27
27
  add_option(:"Install/Update", '-n', '--bindir DIR',
28
- 'Directory where executables are',
29
- 'located') do |value, options|
28
+ 'Directory where executables will be',
29
+ 'placed when the gem is installed') do |value, options|
30
30
  options[:bin_dir] = File.expand_path(value)
31
31
  end
32
32
 
33
- add_option(:"Install/Update", '--document [TYPES]', Array,
33
+ add_option(:"Install/Update", '--document [TYPES]', Array,
34
34
  'Generate documentation for installed gems',
35
35
  'List the documentation types you wish to',
36
36
  'generate. For example: rdoc,ri') do |value, options|
@@ -88,7 +88,7 @@ module Gem::InstallUpdateOptions
88
88
  options[:ignore_dependencies] = value
89
89
  end
90
90
 
91
- add_option(:"Install/Update", '--[no-]format-executable',
91
+ add_option(:"Install/Update", '--[no-]format-executable',
92
92
  'Make installed executable names match Ruby.',
93
93
  'If Ruby is ruby18, foo_exec will be',
94
94
  'foo_exec18') do |value, options|
@@ -154,7 +154,7 @@ module Gem::InstallUpdateOptions
154
154
  'Omit the named groups (comma separated)',
155
155
  'when installing from a gem dependencies',
156
156
  'file') do |v,o|
157
- options[:without_groups].concat v.map { |without| without.intern }
157
+ options[:without_groups].concat v.map {|without| without.intern }
158
158
  end
159
159
 
160
160
  add_option(:"Install/Update", '--default',
@@ -6,6 +6,7 @@
6
6
  #++
7
7
 
8
8
  require 'rubygems/command'
9
+ require 'rubygems/installer_uninstaller_utils'
9
10
  require 'rubygems/exceptions'
10
11
  require 'rubygems/deprecate'
11
12
  require 'rubygems/package'
@@ -27,7 +28,6 @@ require 'fileutils'
27
28
  # file. See Gem.pre_install and Gem.post_install for details.
28
29
 
29
30
  class Gem::Installer
30
-
31
31
  extend Gem::Deprecate
32
32
 
33
33
  ##
@@ -43,10 +43,7 @@ class Gem::Installer
43
43
 
44
44
  include Gem::UserInteraction
45
45
 
46
- ##
47
- # Filename of the gem being installed.
48
-
49
- attr_reader :gem
46
+ include Gem::InstallerUninstallerUtils
50
47
 
51
48
  ##
52
49
  # The directory a gem's executables will be installed into
@@ -75,7 +72,6 @@ class Gem::Installer
75
72
  @install_lock = Mutex.new
76
73
 
77
74
  class << self
78
-
79
75
  ##
80
76
  # True if we've warned about PATH not including Gem.bindir
81
77
 
@@ -100,7 +96,6 @@ class Gem::Installer
100
96
  def exec_format
101
97
  @exec_format ||= Gem.default_exec_format
102
98
  end
103
-
104
99
  end
105
100
 
106
101
  ##
@@ -113,7 +108,6 @@ class Gem::Installer
113
108
  end
114
109
 
115
110
  class FakePackage
116
-
117
111
  attr_accessor :spec
118
112
 
119
113
  attr_accessor :dir_mode
@@ -139,7 +133,6 @@ class Gem::Installer
139
133
 
140
134
  def copy_to(path)
141
135
  end
142
-
143
136
  end
144
137
 
145
138
  ##
@@ -180,15 +173,7 @@ class Gem::Installer
180
173
  require 'fileutils'
181
174
 
182
175
  @options = options
183
- if package.is_a? String
184
- security_policy = options[:security_policy]
185
- @package = Gem::Package.new package, security_policy
186
- if $VERBOSE
187
- warn "constructing an Installer object with a string is deprecated. Please use Gem::Installer.at (called from: #{caller.first})"
188
- end
189
- else
190
- @package = package
191
- end
176
+ @package = package
192
177
 
193
178
  process_options
194
179
 
@@ -199,6 +184,7 @@ class Gem::Installer
199
184
  if options[:user_install]
200
185
  @gem_home = Gem.user_dir
201
186
  @bin_dir = Gem.bindir gem_home unless options[:bin_dir]
187
+ @plugins_dir = Gem.plugindir(gem_home)
202
188
  check_that_user_bin_dir_is_in_path
203
189
  end
204
190
  end
@@ -330,6 +316,7 @@ class Gem::Installer
330
316
  end
331
317
 
332
318
  generate_bin
319
+ generate_plugins
333
320
 
334
321
  unless @options[:install_as_default]
335
322
  write_spec
@@ -419,7 +406,7 @@ class Gem::Installer
419
406
 
420
407
  def installation_satisfies_dependency?(dependency)
421
408
  return true if @options[:development] and dependency.type == :development
422
- return true if installed_specs.detect { |s| dependency.matches_spec? s }
409
+ return true if installed_specs.detect {|s| dependency.matches_spec? s }
423
410
  return false if @only_install_dir
424
411
  not dependency.matching_specs.empty?
425
412
  end
@@ -431,7 +418,7 @@ class Gem::Installer
431
418
  @gem_dir = directory
432
419
  extract_files
433
420
  end
434
- deprecate :unpack, :none, 2020, 04
421
+ rubygems_deprecate :unpack
435
422
 
436
423
  ##
437
424
  # The location of the spec file that is installed.
@@ -491,13 +478,7 @@ class Gem::Installer
491
478
  def generate_bin # :nodoc:
492
479
  return if spec.executables.nil? or spec.executables.empty?
493
480
 
494
- begin
495
- Dir.mkdir @bin_dir, *[options[:dir_mode] && 0755].compact
496
- rescue SystemCallError
497
- raise unless File.directory? @bin_dir
498
- end
499
-
500
- raise Gem::FilePermissionError.new(@bin_dir) unless File.writable? @bin_dir
481
+ ensure_writable_dir @bin_dir
501
482
 
502
483
  spec.executables.each do |filename|
503
484
  filename.tap(&Gem::UNTAINT)
@@ -520,7 +501,19 @@ class Gem::Installer
520
501
  else
521
502
  generate_bin_symlink filename, @bin_dir
522
503
  end
504
+ end
505
+ end
506
+
507
+ def generate_plugins # :nodoc:
508
+ latest = Gem::Installer.install_lock.synchronize { Gem::Specification.latest_spec_for(spec.name) }
509
+ return if latest && latest.version > spec.version
523
510
 
511
+ ensure_writable_dir @plugins_dir
512
+
513
+ if spec.plugins.empty?
514
+ remove_plugins_for(spec, @plugins_dir)
515
+ else
516
+ regenerate_plugins_for(spec, @plugins_dir)
524
517
  end
525
518
  end
526
519
 
@@ -587,9 +580,9 @@ class Gem::Installer
587
580
  def shebang(bin_file_name)
588
581
  ruby_name = RbConfig::CONFIG['ruby_install_name'] if @env_shebang
589
582
  path = File.join gem_dir, spec.bindir, bin_file_name
590
- first_line = File.open(path, "rb") {|file| file.gets}
583
+ first_line = File.open(path, "rb") {|file| file.gets } || ""
591
584
 
592
- if /\A#!/ =~ first_line
585
+ if first_line.start_with?("#!")
593
586
  # Preserve extra words on shebang line, like "-w". Thanks RPA.
594
587
  shebang = first_line.sub(/\A\#!.*?ruby\S*((\s+\S+)+)/, "#!#{Gem.ruby}")
595
588
  opts = $1
@@ -684,6 +677,7 @@ class Gem::Installer
684
677
  @force = options[:force]
685
678
  @install_dir = options[:install_dir]
686
679
  @gem_home = options[:install_dir] || Gem.dir
680
+ @plugins_dir = Gem.plugindir(@gem_home)
687
681
  @ignore_dependencies = options[:ignore_dependencies]
688
682
  @format_executable = options[:format_executable]
689
683
  @wrappers = options[:wrappers]
@@ -708,11 +702,14 @@ class Gem::Installer
708
702
  end
709
703
 
710
704
  def check_that_user_bin_dir_is_in_path # :nodoc:
705
+ return if self.class.path_warning
706
+
711
707
  user_bin_dir = @bin_dir || Gem.bindir(gem_home)
712
- user_bin_dir = user_bin_dir.gsub(File::SEPARATOR, File::ALT_SEPARATOR) if
713
- File::ALT_SEPARATOR
708
+ user_bin_dir = user_bin_dir.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
714
709
 
715
710
  path = ENV['PATH']
711
+ path = path.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
712
+
716
713
  if Gem.win_platform?
717
714
  path = path.downcase
718
715
  user_bin_dir = user_bin_dir.downcase
@@ -722,10 +719,8 @@ class Gem::Installer
722
719
 
723
720
  unless path.include? user_bin_dir
724
721
  unless !Gem.win_platform? && (path.include? user_bin_dir.sub(ENV['HOME'], '~'))
725
- unless self.class.path_warning
726
- alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables will not run."
727
- self.class.path_warning = true
728
- end
722
+ alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables will not run."
723
+ self.class.path_warning = true
729
724
  end
730
725
  end
731
726
  end
@@ -810,7 +805,7 @@ TEXT
810
805
  ruby_exe = "ruby.exe" if ruby_exe.empty?
811
806
 
812
807
  if File.exist?(File.join bindir, ruby_exe)
813
- # stub & ruby.exe withing same folder. Portable
808
+ # stub & ruby.exe within same folder. Portable
814
809
  <<-TEXT
815
810
  @ECHO OFF
816
811
  @"%~dp0#{ruby_exe}" "%~dpn0" %*
@@ -844,18 +839,6 @@ TEXT
844
839
  builder.build_extensions
845
840
  end
846
841
 
847
- ##
848
- # Logs the build +output+ in +build_dir+, then raises Gem::Ext::BuildError.
849
- #
850
- # TODO: Delete this for RubyGems 4. It remains for API compatibility
851
-
852
- def extension_build_error(build_dir, output, backtrace = nil) # :nodoc:
853
- builder = Gem::Ext::Builder.new spec, @build_args
854
-
855
- builder.build_error build_dir, output, backtrace
856
- end
857
- deprecate :extension_build_error, :none, 2018, 12
858
-
859
842
  ##
860
843
  # Reads the file index and extracts each file into the gem directory.
861
844
  #
@@ -895,6 +878,13 @@ TEXT
895
878
  gem_dir.to_s
896
879
  end
897
880
 
881
+ ##
882
+ # Filename of the gem being installed.
883
+
884
+ def gem
885
+ @package.gem.path
886
+ end
887
+
898
888
  ##
899
889
  # Performs various checks before installing the gem such as the install
900
890
  # repository is writable and its directories exist, required Ruby and
@@ -959,4 +949,13 @@ TEXT
959
949
  @package.copy_to cache_file
960
950
  end
961
951
 
952
+ def ensure_writable_dir(dir) # :nodoc:
953
+ begin
954
+ Dir.mkdir dir, *[options[:dir_mode] && 0755].compact
955
+ rescue SystemCallError
956
+ raise unless File.directory? dir
957
+ end
958
+
959
+ raise Gem::FilePermissionError.new(dir) unless File.writable? dir
960
+ end
962
961
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/installer'
4
4
 
5
5
  class Gem::Installer
6
-
7
6
  ##
8
7
  # Available through requiring rubygems/installer_test_case
9
8
 
@@ -58,14 +57,12 @@ class Gem::Installer
58
57
  # Available through requiring rubygems/installer_test_case
59
58
 
60
59
  attr_writer :wrappers
61
-
62
60
  end
63
61
 
64
62
  ##
65
63
  # A test case for Gem::Installer.
66
64
 
67
65
  class Gem::InstallerTestCase < Gem::TestCase
68
-
69
66
  def setup
70
67
  super
71
68
 
@@ -171,10 +168,10 @@ class Gem::InstallerTestCase < Gem::TestCase
171
168
  ##
172
169
  # Sets up the base @gem, builds it and returns an installer for it.
173
170
  #
174
- def util_setup_installer
171
+ def util_setup_installer(&block)
175
172
  @gem = setup_base_gem
176
173
 
177
- util_setup_gem
174
+ util_setup_gem(&block)
178
175
  end
179
176
 
180
177
  ##
@@ -230,4 +227,20 @@ class Gem::InstallerTestCase < Gem::TestCase
230
227
  :user_install => user)
231
228
  end
232
229
 
230
+ @@symlink_supported = nil
231
+
232
+ # This is needed for Windows environment without symlink support enabled (the default
233
+ # for non admin) to be able to skip test for features using symlinks.
234
+ def symlink_supported?
235
+ if @@symlink_supported.nil?
236
+ begin
237
+ File.symlink("", "")
238
+ rescue Errno::ENOENT, Errno::EEXIST
239
+ @@symlink_supported = true
240
+ rescue NotImplementedError, SystemCallError
241
+ @@symlink_supported = false
242
+ end
243
+ end
244
+ @@symlink_supported
245
+ end
233
246
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ ##
4
+ # Helper methods for both Gem::Installer and Gem::Uninstaller
5
+
6
+ module Gem::InstallerUninstallerUtils
7
+
8
+ def regenerate_plugins_for(spec, plugins_dir)
9
+ spec.plugins.each do |plugin|
10
+ plugin_script_path = File.join plugins_dir, "#{spec.name}_plugin#{File.extname(plugin)}"
11
+
12
+ File.open plugin_script_path, 'wb' do |file|
13
+ file.puts "require '#{plugin}'"
14
+ end
15
+
16
+ verbose plugin_script_path
17
+ end
18
+ end
19
+
20
+ def remove_plugins_for(spec, plugins_dir)
21
+ FileUtils.rm_f Gem::Util.glob_files_in_dir("#{spec.name}#{Gem.plugin_suffix_pattern}", plugins_dir)
22
+ end
23
+
24
+ end
@@ -26,7 +26,7 @@ module Gem::LocalRemoteOptions
26
26
 
27
27
  valid_uri_schemes = ["http", "https", "file", "s3"]
28
28
  unless valid_uri_schemes.include?(uri.scheme)
29
- msg = "Invalid uri scheme for #{value}\nPreface URLs with one of #{valid_uri_schemes.map{|s| "#{s}://"}}"
29
+ msg = "Invalid uri scheme for #{value}\nPreface URLs with one of #{valid_uri_schemes.map{|s| "#{s}://" }}"
30
30
  raise ArgumentError, msg
31
31
  end
32
32
 
@@ -6,27 +6,22 @@ require 'rubygems/user_interaction'
6
6
  # retrieval during tests.
7
7
 
8
8
  class Gem::MockGemUi < Gem::StreamUI
9
-
10
9
  ##
11
10
  # Raised when you haven't provided enough input to your MockGemUi
12
11
 
13
12
  class InputEOFError < RuntimeError
14
-
15
13
  def initialize(question)
16
14
  super "Out of input for MockGemUi on #{question.inspect}"
17
15
  end
18
-
19
16
  end
20
17
 
21
18
  class TermError < RuntimeError
22
-
23
19
  attr_reader :exit_code
24
20
 
25
21
  def initialize(exit_code)
26
22
  super
27
23
  @exit_code = exit_code
28
24
  end
29
-
30
25
  end
31
26
  class SystemExitException < RuntimeError; end
32
27
 
@@ -87,5 +82,4 @@ class Gem::MockGemUi < Gem::StreamUI
87
82
  raise TermError, status if status != 0
88
83
  raise SystemExitException
89
84
  end
90
-
91
85
  end
@@ -4,10 +4,7 @@
4
4
  # Represents a gem of name +name+ at +version+ of +platform+. These
5
5
  # wrap the data returned from the indexes.
6
6
 
7
- require 'rubygems/platform'
8
-
9
7
  class Gem::NameTuple
10
-
11
8
  def initialize(name, version, platform="ruby")
12
9
  @name = name
13
10
  @version = version
@@ -26,7 +23,7 @@ class Gem::NameTuple
26
23
  # NameTuple objects.
27
24
 
28
25
  def self.from_list(list)
29
- list.map { |t| new(*t) }
26
+ list.map {|t| new(*t) }
30
27
  end
31
28
 
32
29
  ##
@@ -34,7 +31,7 @@ class Gem::NameTuple
34
31
  # [name, version, platform] tuples.
35
32
 
36
33
  def self.to_basic(list)
37
- list.map { |t| t.to_a }
34
+ list.map {|t| t.to_a }
38
35
  end
39
36
 
40
37
  ##
@@ -121,5 +118,4 @@ class Gem::NameTuple
121
118
  def hash
122
119
  to_a.hash
123
120
  end
124
-
125
121
  end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ require "openssl"
5
+ rescue LoadError => e
6
+ raise unless e.path == 'openssl'
7
+ 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
@@ -8,7 +7,8 @@
8
7
  # Example using a Gem::Package
9
8
  #
10
9
  # Builds a .gem file given a Gem::Specification. A .gem file is a tarball
11
- # which contains a data.tar.gz and metadata.gz, and possibly signatures.
10
+ # which contains a data.tar.gz, metadata.gz, checksums.yaml.gz and possibly
11
+ # signatures.
12
12
  #
13
13
  # require 'rubygems'
14
14
  # require 'rubygems/package'
@@ -41,19 +41,17 @@
41
41
  # #files are the files in the .gem tar file, not the Ruby files in the gem
42
42
  # #extract_files and #contents automatically call #verify
43
43
 
44
+ require "rubygems"
44
45
  require 'rubygems/security'
45
- require 'rubygems/specification'
46
46
  require 'rubygems/user_interaction'
47
47
  require 'zlib'
48
48
 
49
49
  class Gem::Package
50
-
51
50
  include Gem::UserInteraction
52
51
 
53
52
  class Error < Gem::Exception; end
54
53
 
55
54
  class FormatError < Error
56
-
57
55
  attr_reader :path
58
56
 
59
57
  def initialize(message, source = nil)
@@ -65,16 +63,13 @@ class Gem::Package
65
63
 
66
64
  super message
67
65
  end
68
-
69
66
  end
70
67
 
71
68
  class PathError < Error
72
-
73
69
  def initialize(destination, destination_dir)
74
70
  super "installing into parent path %s of %s is not allowed" %
75
71
  [destination, destination_dir]
76
72
  end
77
-
78
73
  end
79
74
 
80
75
  class NonSeekableIO < Error; end
@@ -196,7 +191,7 @@ class Gem::Package
196
191
  @build_time = Gem.source_date_epoch
197
192
  @checksums = {}
198
193
  @contents = nil
199
- @digests = Hash.new { |h, algorithm| h[algorithm] = {} }
194
+ @digests = Hash.new {|h, algorithm| h[algorithm] = {} }
200
195
  @files = nil
201
196
  @security_policy = security_policy
202
197
  @signatures = {}
@@ -217,7 +212,7 @@ class Gem::Package
217
212
  def add_checksums(tar)
218
213
  Gem.load_yaml
219
214
 
220
- checksums_by_algorithm = Hash.new { |h, algorithm| h[algorithm] = {} }
215
+ checksums_by_algorithm = Hash.new {|h, algorithm| h[algorithm] = {} }
221
216
 
222
217
  @checksums.each do |name, digests|
223
218
  digests.each do |algorithm, digest|
@@ -363,12 +358,7 @@ EOM
363
358
  end
364
359
 
365
360
  algorithms.each do |algorithm|
366
- digester =
367
- if defined?(OpenSSL::Digest)
368
- OpenSSL::Digest.new algorithm
369
- else
370
- Digest.const_get(algorithm).new
371
- end
361
+ digester = Gem::Security.create_digest(algorithm)
372
362
 
373
363
  digester << entry.read(16384) until entry.eof?
374
364
 
@@ -580,10 +570,10 @@ EOM
580
570
  )
581
571
 
582
572
  @spec.signing_key = nil
583
- @spec.cert_chain = @signer.cert_chain.map { |cert| cert.to_s }
573
+ @spec.cert_chain = @signer.cert_chain.map {|cert| cert.to_s }
584
574
  else
585
575
  @signer = Gem::Security::Signer.new nil, nil, passphrase
586
- @spec.cert_chain = @signer.cert_chain.map { |cert| cert.to_pem } if
576
+ @spec.cert_chain = @signer.cert_chain.map {|cert| cert.to_pem } if
587
577
  @signer.cert_chain
588
578
  end
589
579
  end
@@ -679,10 +669,9 @@ EOM
679
669
  when 'data.tar.gz' then
680
670
  verify_gz entry
681
671
  end
682
- rescue => e
683
- message = "package is corrupt, exception while verifying: " +
684
- "#{e.message} (#{e.class})"
685
- raise Gem::Package::FormatError.new message, @gem
672
+ rescue
673
+ warn "Exception while verifying #{@gem.path}"
674
+ raise
686
675
  end
687
676
 
688
677
  ##
@@ -717,7 +706,6 @@ EOM
717
706
  rescue Zlib::GzipFile::Error => e
718
707
  raise Gem::Package::FormatError.new(e.message, entry.full_name)
719
708
  end
720
-
721
709
  end
722
710
 
723
711
  require 'rubygems/package/digest_io'