rubygems-update 3.1.2 → 3.2.3

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 (560) 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 +460 -232
  5. data/Manifest.txt +47 -77
  6. data/POLICIES.md +6 -12
  7. data/README.md +5 -5
  8. data/Rakefile +59 -83
  9. data/bin/update_rubygems +1 -1
  10. data/bundler/CHANGELOG.md +1598 -1421
  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 +32 -7
  16. data/bundler/lib/bundler/build_metadata.rb +4 -12
  17. data/bundler/lib/bundler/cli.rb +58 -21
  18. data/bundler/lib/bundler/cli/add.rb +1 -1
  19. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  20. data/bundler/lib/bundler/cli/cache.rb +1 -7
  21. data/bundler/lib/bundler/cli/clean.rb +1 -1
  22. data/bundler/lib/bundler/cli/common.rb +14 -0
  23. data/bundler/lib/bundler/cli/console.rb +1 -1
  24. data/bundler/lib/bundler/cli/doctor.rb +1 -1
  25. data/bundler/lib/bundler/cli/exec.rb +4 -4
  26. data/bundler/lib/bundler/cli/fund.rb +36 -0
  27. data/bundler/lib/bundler/cli/gem.rb +84 -11
  28. data/bundler/lib/bundler/cli/info.rb +15 -4
  29. data/bundler/lib/bundler/cli/init.rb +2 -2
  30. data/bundler/lib/bundler/cli/inject.rb +1 -1
  31. data/bundler/lib/bundler/cli/install.rb +16 -13
  32. data/bundler/lib/bundler/cli/issue.rb +2 -2
  33. data/bundler/lib/bundler/cli/list.rb +12 -10
  34. data/bundler/lib/bundler/cli/outdated.rb +87 -66
  35. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  36. data/bundler/lib/bundler/cli/pristine.rb +5 -0
  37. data/bundler/lib/bundler/cli/show.rb +1 -1
  38. data/bundler/lib/bundler/cli/update.rb +3 -1
  39. data/bundler/lib/bundler/compact_index_client.rb +1 -1
  40. data/bundler/lib/bundler/compact_index_client/cache.rb +6 -14
  41. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  42. data/bundler/lib/bundler/compact_index_client/updater.rb +5 -5
  43. data/bundler/lib/bundler/definition.rb +65 -76
  44. data/bundler/lib/bundler/dep_proxy.rb +1 -1
  45. data/bundler/lib/bundler/dependency.rb +3 -10
  46. data/bundler/lib/bundler/dsl.rb +5 -9
  47. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  48. data/bundler/lib/bundler/env.rb +1 -1
  49. data/bundler/lib/bundler/environment_preserver.rb +26 -2
  50. data/bundler/lib/bundler/errors.rb +1 -0
  51. data/bundler/lib/bundler/feature_flag.rb +0 -3
  52. data/bundler/lib/bundler/fetcher.rb +4 -3
  53. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  54. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
  55. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  56. data/bundler/lib/bundler/fetcher/index.rb +3 -4
  57. data/bundler/lib/bundler/friendly_errors.rb +22 -13
  58. data/bundler/lib/bundler/gem_helper.rb +33 -19
  59. data/bundler/lib/bundler/gem_helpers.rb +36 -25
  60. data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
  61. data/bundler/lib/bundler/graph.rb +1 -1
  62. data/bundler/lib/bundler/index.rb +6 -2
  63. data/bundler/lib/bundler/injector.rb +22 -4
  64. data/bundler/lib/bundler/inline.rb +2 -2
  65. data/bundler/lib/bundler/installer.rb +35 -32
  66. data/bundler/lib/bundler/installer/gem_installer.rb +3 -3
  67. data/bundler/lib/bundler/installer/parallel_installer.rb +10 -10
  68. data/bundler/lib/bundler/installer/standalone.rb +2 -2
  69. data/bundler/lib/bundler/lazy_specification.rb +35 -11
  70. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  71. data/bundler/lib/bundler/lockfile_parser.rb +1 -1
  72. data/bundler/lib/bundler/man/.document +1 -0
  73. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
  74. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
  75. data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
  76. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  77. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  78. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +19 -30
  79. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  80. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
  81. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
  82. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  83. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
  84. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  85. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
  86. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  87. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  88. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  89. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  90. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  91. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  92. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  93. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  94. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
  95. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  96. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
  97. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
  98. data/bundler/lib/bundler/mirror.rb +2 -2
  99. data/bundler/lib/bundler/plugin.rb +30 -5
  100. data/bundler/lib/bundler/plugin/api/source.rb +1 -1
  101. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  102. data/bundler/lib/bundler/plugin/index.rb +10 -1
  103. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  104. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  105. data/bundler/lib/bundler/plugin/source_list.rb +1 -1
  106. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  107. data/bundler/lib/bundler/remote_specification.rb +5 -2
  108. data/bundler/lib/bundler/resolver.rb +37 -18
  109. data/bundler/lib/bundler/resolver/spec_group.rb +36 -21
  110. data/bundler/lib/bundler/retry.rb +1 -1
  111. data/bundler/lib/bundler/ruby_version.rb +1 -1
  112. data/bundler/lib/bundler/rubygems_ext.rb +53 -9
  113. data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
  114. data/bundler/lib/bundler/rubygems_integration.rb +26 -61
  115. data/bundler/lib/bundler/runtime.rb +4 -14
  116. data/bundler/lib/bundler/settings.rb +49 -46
  117. data/bundler/lib/bundler/shared_helpers.rb +2 -2
  118. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  119. data/bundler/lib/bundler/source.rb +1 -1
  120. data/bundler/lib/bundler/source/git.rb +5 -5
  121. data/bundler/lib/bundler/source/git/git_proxy.rb +57 -60
  122. data/bundler/lib/bundler/source/path.rb +7 -3
  123. data/bundler/lib/bundler/source/path/installer.rb +8 -10
  124. data/bundler/lib/bundler/source/rubygems.rb +13 -16
  125. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  126. data/bundler/lib/bundler/source_list.rb +2 -2
  127. data/bundler/lib/bundler/spec_set.rb +7 -9
  128. data/bundler/lib/bundler/stub_specification.rb +17 -7
  129. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  130. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  131. data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -2
  132. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  133. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  134. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  135. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  136. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  137. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  138. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  139. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  140. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +14 -6
  141. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
  142. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  143. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  144. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  145. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  146. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  147. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  148. data/bundler/lib/bundler/ui/shell.rb +5 -5
  149. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
  150. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  151. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
  152. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  153. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  154. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  155. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +38 -40
  156. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -208
  157. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  158. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  159. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  160. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  161. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  162. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  163. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  164. data/bundler/lib/bundler/version.rb +1 -1
  165. data/bundler/lib/bundler/worker.rb +1 -1
  166. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  167. data/bundler/man/bundle-add.1 +1 -1
  168. data/bundler/man/bundle-binstubs.1 +5 -3
  169. data/bundler/man/bundle-cache.1 +1 -1
  170. data/bundler/man/bundle-check.1 +1 -1
  171. data/bundler/man/bundle-clean.1 +1 -1
  172. data/bundler/man/bundle-config.1 +16 -25
  173. data/bundler/man/bundle-doctor.1 +1 -1
  174. data/bundler/man/bundle-exec.1 +1 -1
  175. data/bundler/man/bundle-gem.1 +25 -3
  176. data/bundler/man/bundle-info.1 +1 -1
  177. data/bundler/man/bundle-init.1 +1 -1
  178. data/bundler/man/bundle-inject.1 +1 -1
  179. data/bundler/man/bundle-install.1 +30 -3
  180. data/bundler/man/bundle-list.1 +7 -7
  181. data/bundler/man/bundle-lock.1 +1 -1
  182. data/bundler/man/bundle-open.1 +1 -1
  183. data/bundler/man/bundle-outdated.1 +1 -1
  184. data/bundler/man/bundle-platform.1 +1 -1
  185. data/bundler/man/bundle-pristine.1 +1 -1
  186. data/bundler/man/bundle-remove.1 +1 -1
  187. data/bundler/man/bundle-show.1 +1 -1
  188. data/bundler/man/bundle-update.1 +1 -1
  189. data/bundler/man/bundle-viz.1 +1 -1
  190. data/bundler/man/bundle.1 +1 -1
  191. data/bundler/man/gemfile.5 +4 -4
  192. data/lib/rubygems.rb +138 -187
  193. data/lib/rubygems/available_set.rb +4 -6
  194. data/lib/rubygems/basic_specification.rb +12 -10
  195. data/lib/rubygems/bundler_version_finder.rb +14 -9
  196. data/lib/rubygems/command.rb +17 -17
  197. data/lib/rubygems/command_manager.rb +5 -6
  198. data/lib/rubygems/commands/build_command.rb +40 -20
  199. data/lib/rubygems/commands/cert_command.rb +2 -10
  200. data/lib/rubygems/commands/check_command.rb +0 -2
  201. data/lib/rubygems/commands/cleanup_command.rb +11 -7
  202. data/lib/rubygems/commands/contents_command.rb +4 -6
  203. data/lib/rubygems/commands/dependency_command.rb +6 -8
  204. data/lib/rubygems/commands/environment_command.rb +1 -3
  205. data/lib/rubygems/commands/fetch_command.rb +2 -4
  206. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  207. data/lib/rubygems/commands/help_command.rb +4 -4
  208. data/lib/rubygems/commands/info_command.rb +8 -5
  209. data/lib/rubygems/commands/install_command.rb +3 -5
  210. data/lib/rubygems/commands/list_command.rb +8 -7
  211. data/lib/rubygems/commands/lock_command.rb +1 -3
  212. data/lib/rubygems/commands/mirror_command.rb +0 -2
  213. data/lib/rubygems/commands/open_command.rb +0 -4
  214. data/lib/rubygems/commands/outdated_command.rb +0 -2
  215. data/lib/rubygems/commands/owner_command.rb +9 -4
  216. data/lib/rubygems/commands/pristine_command.rb +11 -5
  217. data/lib/rubygems/commands/push_command.rb +10 -47
  218. data/lib/rubygems/commands/query_command.rb +14 -344
  219. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  220. data/lib/rubygems/commands/search_command.rb +7 -7
  221. data/lib/rubygems/commands/server_command.rb +3 -1
  222. data/lib/rubygems/commands/setup_command.rb +131 -58
  223. data/lib/rubygems/commands/signin_command.rb +0 -2
  224. data/lib/rubygems/commands/signout_command.rb +0 -2
  225. data/lib/rubygems/commands/sources_command.rb +9 -7
  226. data/lib/rubygems/commands/specification_command.rb +8 -4
  227. data/lib/rubygems/commands/stale_command.rb +1 -3
  228. data/lib/rubygems/commands/uninstall_command.rb +2 -4
  229. data/lib/rubygems/commands/unpack_command.rb +1 -3
  230. data/lib/rubygems/commands/update_command.rb +59 -14
  231. data/lib/rubygems/commands/which_command.rb +0 -2
  232. data/lib/rubygems/commands/yank_command.rb +4 -7
  233. data/lib/rubygems/config_file.rb +11 -4
  234. data/lib/rubygems/core_ext/kernel_require.rb +29 -36
  235. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  236. data/lib/rubygems/defaults.rb +101 -7
  237. data/lib/rubygems/dependency.rb +3 -8
  238. data/lib/rubygems/dependency_installer.rb +6 -78
  239. data/lib/rubygems/dependency_list.rb +7 -9
  240. data/lib/rubygems/deprecate.rb +46 -1
  241. data/lib/rubygems/doctor.rb +4 -4
  242. data/lib/rubygems/errors.rb +3 -14
  243. data/lib/rubygems/exceptions.rb +2 -33
  244. data/lib/rubygems/ext.rb +6 -6
  245. data/lib/rubygems/ext/build_error.rb +2 -0
  246. data/lib/rubygems/ext/builder.rb +16 -35
  247. data/lib/rubygems/ext/cmake_builder.rb +5 -7
  248. data/lib/rubygems/ext/configure_builder.rb +4 -6
  249. data/lib/rubygems/ext/ext_conf_builder.rb +21 -19
  250. data/lib/rubygems/ext/rake_builder.rb +4 -6
  251. data/lib/rubygems/gem_runner.rb +3 -10
  252. data/lib/rubygems/gemcutter_utilities.rb +102 -21
  253. data/lib/rubygems/indexer.rb +1 -22
  254. data/lib/rubygems/install_update_options.rb +7 -7
  255. data/lib/rubygems/installer.rb +59 -80
  256. data/lib/rubygems/installer_test_case.rb +25 -11
  257. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  258. data/lib/rubygems/local_remote_options.rb +1 -1
  259. data/lib/rubygems/mock_gem_ui.rb +0 -6
  260. data/lib/rubygems/name_tuple.rb +3 -7
  261. data/lib/rubygems/openssl.rb +7 -0
  262. data/lib/rubygems/package.rb +14 -25
  263. data/lib/rubygems/package/digest_io.rb +0 -2
  264. data/lib/rubygems/package/file_source.rb +0 -2
  265. data/lib/rubygems/package/io_source.rb +0 -2
  266. data/lib/rubygems/package/old.rb +1 -3
  267. data/lib/rubygems/package/tar_header.rb +4 -6
  268. data/lib/rubygems/package/tar_reader.rb +0 -3
  269. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  270. data/lib/rubygems/package/tar_test_case.rb +2 -4
  271. data/lib/rubygems/package/tar_writer.rb +2 -12
  272. data/lib/rubygems/package_task.rb +1 -7
  273. data/lib/rubygems/path_support.rb +1 -3
  274. data/lib/rubygems/platform.rb +21 -12
  275. data/lib/rubygems/psych_tree.rb +0 -2
  276. data/lib/rubygems/query_utils.rb +353 -0
  277. data/lib/rubygems/rdoc.rb +0 -12
  278. data/lib/rubygems/remote_fetcher.rb +11 -28
  279. data/lib/rubygems/request.rb +4 -11
  280. data/lib/rubygems/request/connection_pools.rb +1 -5
  281. data/lib/rubygems/request/http_pool.rb +0 -2
  282. data/lib/rubygems/request/https_pool.rb +0 -2
  283. data/lib/rubygems/request_set.rb +7 -20
  284. data/lib/rubygems/request_set/gem_dependency_api.rb +6 -8
  285. data/lib/rubygems/request_set/lockfile.rb +8 -12
  286. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  287. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
  288. data/lib/rubygems/requirement.rb +20 -21
  289. data/lib/rubygems/resolver.rb +14 -12
  290. data/lib/rubygems/resolver/activation_request.rb +9 -3
  291. data/lib/rubygems/resolver/api_set.rb +31 -24
  292. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  293. data/lib/rubygems/resolver/api_specification.rb +24 -10
  294. data/lib/rubygems/resolver/best_set.rb +1 -3
  295. data/lib/rubygems/resolver/composed_set.rb +3 -5
  296. data/lib/rubygems/resolver/conflict.rb +2 -4
  297. data/lib/rubygems/resolver/current_set.rb +0 -2
  298. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  299. data/lib/rubygems/resolver/git_set.rb +0 -2
  300. data/lib/rubygems/resolver/git_specification.rb +0 -2
  301. data/lib/rubygems/resolver/index_set.rb +1 -3
  302. data/lib/rubygems/resolver/index_specification.rb +26 -2
  303. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  304. data/lib/rubygems/resolver/installer_set.rb +60 -13
  305. data/lib/rubygems/resolver/local_specification.rb +0 -2
  306. data/lib/rubygems/resolver/lock_set.rb +2 -4
  307. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  308. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  309. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  310. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  311. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  312. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  313. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  314. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  315. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  316. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  317. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  318. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  319. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  320. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  321. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  322. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  323. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  324. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  325. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  326. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  327. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  328. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  329. data/lib/rubygems/resolver/set.rb +0 -2
  330. data/lib/rubygems/resolver/source_set.rb +0 -2
  331. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  332. data/lib/rubygems/resolver/specification.rb +13 -3
  333. data/lib/rubygems/resolver/stats.rb +0 -2
  334. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  335. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  336. data/lib/rubygems/s3_uri_signer.rb +2 -8
  337. data/lib/rubygems/safe_yaml.rb +4 -4
  338. data/lib/rubygems/security.rb +27 -34
  339. data/lib/rubygems/security/policy.rb +4 -8
  340. data/lib/rubygems/security/signer.rb +5 -7
  341. data/lib/rubygems/security/trust_dir.rb +1 -3
  342. data/lib/rubygems/server.rb +16 -13
  343. data/lib/rubygems/source.rb +23 -12
  344. data/lib/rubygems/source/git.rb +7 -8
  345. data/lib/rubygems/source/installed.rb +0 -2
  346. data/lib/rubygems/source/local.rb +2 -4
  347. data/lib/rubygems/source/lock.rb +0 -2
  348. data/lib/rubygems/source/specific_file.rb +0 -2
  349. data/lib/rubygems/source/vendor.rb +0 -2
  350. data/lib/rubygems/source_list.rb +4 -7
  351. data/lib/rubygems/spec_fetcher.rb +19 -18
  352. data/lib/rubygems/specification.rb +113 -126
  353. data/lib/rubygems/specification_policy.rb +88 -30
  354. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  355. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  356. data/lib/rubygems/stub_specification.rb +1 -5
  357. data/lib/rubygems/syck_hack.rb +0 -2
  358. data/lib/rubygems/test_case.rb +105 -132
  359. data/lib/rubygems/test_utilities.rb +12 -19
  360. data/lib/rubygems/uninstaller.rb +35 -16
  361. data/lib/rubygems/uri_formatter.rb +2 -3
  362. data/lib/rubygems/uri_parser.rb +0 -2
  363. data/lib/rubygems/user_interaction.rb +1 -26
  364. data/lib/rubygems/util.rb +15 -3
  365. data/lib/rubygems/util/licenses.rb +4 -6
  366. data/lib/rubygems/util/list.rb +0 -2
  367. data/lib/rubygems/validator.rb +1 -3
  368. data/lib/rubygems/version.rb +5 -7
  369. data/lib/rubygems/version_option.rb +6 -0
  370. data/rubygems-update.gemspec +2 -2
  371. data/setup.rb +2 -7
  372. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  373. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  374. data/test/rubygems/rubygems_plugin.rb +0 -2
  375. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  376. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  377. data/test/rubygems/test_bundled_ca.rb +42 -45
  378. data/test/rubygems/test_config.rb +0 -2
  379. data/test/rubygems/test_deprecate.rb +40 -7
  380. data/test/rubygems/test_gem.rb +151 -99
  381. data/test/rubygems/test_gem_available_set.rb +3 -5
  382. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
  383. data/test/rubygems/test_gem_command.rb +24 -7
  384. data/test/rubygems/test_gem_command_manager.rb +36 -5
  385. data/test/rubygems/test_gem_commands_build_command.rb +250 -15
  386. data/test/rubygems/test_gem_commands_cert_command.rb +4 -6
  387. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  388. data/test/rubygems/test_gem_commands_cleanup_command.rb +14 -5
  389. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  390. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  391. data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
  392. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  393. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
  394. data/test/rubygems/test_gem_commands_help_command.rb +15 -4
  395. data/test/rubygems/test_gem_commands_info_command.rb +6 -8
  396. data/test/rubygems/test_gem_commands_install_command.rb +163 -34
  397. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  398. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  399. data/test/rubygems/test_gem_commands_mirror.rb +1 -3
  400. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  401. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
  402. data/test/rubygems/test_gem_commands_owner_command.rb +59 -5
  403. data/test/rubygems/test_gem_commands_pristine_command.rb +43 -12
  404. data/test/rubygems/test_gem_commands_push_command.rb +77 -9
  405. data/test/rubygems/test_gem_commands_query_command.rb +12 -12
  406. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  407. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  408. data/test/rubygems/test_gem_commands_setup_command.rb +165 -124
  409. data/test/rubygems/test_gem_commands_signin_command.rb +33 -9
  410. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  411. data/test/rubygems/test_gem_commands_sources_command.rb +99 -3
  412. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  413. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  414. data/test/rubygems/test_gem_commands_uninstall_command.rb +2 -3
  415. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  416. data/test/rubygems/test_gem_commands_update_command.rb +116 -7
  417. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  418. data/test/rubygems/test_gem_commands_yank_command.rb +44 -8
  419. data/test/rubygems/test_gem_config_file.rb +7 -12
  420. data/test/rubygems/test_gem_dependency.rb +0 -2
  421. data/test/rubygems/test_gem_dependency_installer.rb +90 -193
  422. data/test/rubygems/test_gem_dependency_list.rb +10 -12
  423. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  424. data/test/rubygems/test_gem_doctor.rb +28 -2
  425. data/test/rubygems/test_gem_ext_builder.rb +26 -47
  426. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -23
  427. data/test/rubygems/test_gem_ext_configure_builder.rb +4 -20
  428. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -29
  429. data/test/rubygems/test_gem_ext_rake_builder.rb +39 -24
  430. data/test/rubygems/test_gem_gem_runner.rb +44 -1
  431. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
  432. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  433. data/test/rubygems/test_gem_indexer.rb +9 -15
  434. data/test/rubygems/test_gem_install_update_options.rb +14 -4
  435. data/test/rubygems/test_gem_installer.rb +258 -115
  436. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  437. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  438. data/test/rubygems/test_gem_package.rb +41 -39
  439. data/test/rubygems/test_gem_package_old.rb +4 -6
  440. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  441. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  442. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  443. data/test/rubygems/test_gem_package_tar_writer.rb +9 -6
  444. data/test/rubygems/test_gem_package_task.rb +46 -13
  445. data/test/rubygems/test_gem_path_support.rb +0 -2
  446. data/test/rubygems/test_gem_platform.rb +63 -6
  447. data/test/rubygems/test_gem_rdoc.rb +0 -2
  448. data/test/rubygems/test_gem_remote_fetcher.rb +168 -211
  449. data/test/rubygems/test_gem_request.rb +13 -17
  450. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  451. data/test/rubygems/test_gem_request_set.rb +72 -22
  452. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
  453. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -6
  454. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
  455. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
  456. data/test/rubygems/test_gem_requirement.rb +10 -4
  457. data/test/rubygems/test_gem_resolver.rb +6 -8
  458. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  459. data/test/rubygems/test_gem_resolver_api_set.rb +60 -59
  460. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
  461. data/test/rubygems/test_gem_resolver_best_set.rb +5 -7
  462. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  463. data/test/rubygems/test_gem_resolver_conflict.rb +1 -3
  464. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  465. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  466. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  467. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  468. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  469. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  470. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
  471. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  472. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  473. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  474. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  475. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  476. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  477. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  478. data/test/rubygems/test_gem_security.rb +22 -24
  479. data/test/rubygems/test_gem_security_policy.rb +7 -12
  480. data/test/rubygems/test_gem_security_signer.rb +10 -12
  481. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  482. data/test/rubygems/test_gem_server.rb +10 -14
  483. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  484. data/test/rubygems/test_gem_source.rb +19 -18
  485. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  486. data/test/rubygems/test_gem_source_git.rb +12 -13
  487. data/test/rubygems/test_gem_source_installed.rb +7 -9
  488. data/test/rubygems/test_gem_source_list.rb +1 -2
  489. data/test/rubygems/test_gem_source_local.rb +8 -10
  490. data/test/rubygems/test_gem_source_lock.rb +10 -12
  491. data/test/rubygems/test_gem_source_specific_file.rb +7 -9
  492. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  493. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  494. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  495. data/test/rubygems/test_gem_specification.rb +182 -131
  496. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  497. data/test/rubygems/test_gem_stub_specification.rb +4 -7
  498. data/test/rubygems/test_gem_text.rb +1 -3
  499. data/test/rubygems/test_gem_uninstaller.rb +134 -12
  500. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  501. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  502. data/test/rubygems/test_gem_util.rb +7 -7
  503. data/test/rubygems/test_gem_validator.rb +1 -3
  504. data/test/rubygems/test_gem_version.rb +1 -3
  505. data/test/rubygems/test_gem_version_option.rb +1 -3
  506. data/test/rubygems/test_kernel.rb +25 -10
  507. data/test/rubygems/test_project_sanity.rb +7 -2
  508. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  509. data/test/rubygems/test_require.rb +291 -56
  510. data/test/test_changelog_generator.rb +17 -0
  511. metadata +65 -96
  512. data/.bundle/config +0 -2
  513. data/.rubocop.yml +0 -91
  514. data/Gemfile +0 -8
  515. data/Gemfile.lock +0 -43
  516. data/bundler/CODE_OF_CONDUCT.md +0 -136
  517. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  518. data/bundler/man/bundle-add.1.txt +0 -58
  519. data/bundler/man/bundle-binstubs.1.txt +0 -48
  520. data/bundler/man/bundle-cache.1.txt +0 -78
  521. data/bundler/man/bundle-check.1.txt +0 -33
  522. data/bundler/man/bundle-clean.1.txt +0 -26
  523. data/bundler/man/bundle-config.1.txt +0 -528
  524. data/bundler/man/bundle-doctor.1.txt +0 -44
  525. data/bundler/man/bundle-exec.1.txt +0 -178
  526. data/bundler/man/bundle-gem.1.txt +0 -91
  527. data/bundler/man/bundle-info.1.txt +0 -21
  528. data/bundler/man/bundle-init.1.txt +0 -34
  529. data/bundler/man/bundle-inject.1.txt +0 -32
  530. data/bundler/man/bundle-install.1.txt +0 -401
  531. data/bundler/man/bundle-list.1.txt +0 -43
  532. data/bundler/man/bundle-lock.1.txt +0 -93
  533. data/bundler/man/bundle-open.1.txt +0 -29
  534. data/bundler/man/bundle-outdated.1.txt +0 -131
  535. data/bundler/man/bundle-platform.1.txt +0 -57
  536. data/bundler/man/bundle-pristine.1.txt +0 -44
  537. data/bundler/man/bundle-remove.1.txt +0 -34
  538. data/bundler/man/bundle-show.1.txt +0 -27
  539. data/bundler/man/bundle-update.1.txt +0 -390
  540. data/bundler/man/bundle-viz.1.txt +0 -39
  541. data/bundler/man/bundle.1.txt +0 -116
  542. data/bundler/man/gemfile.5.txt +0 -649
  543. data/lib/rubygems/source_local.rb +0 -7
  544. data/lib/rubygems/source_specific_file.rb +0 -6
  545. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  546. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  547. data/lib/ubygems.rb +0 -14
  548. data/tmp/.keep +0 -0
  549. data/util/CL2notes +0 -55
  550. data/util/bisect +0 -10
  551. data/util/ci.sh +0 -62
  552. data/util/cops/deprecations.rb +0 -52
  553. data/util/create_certs.rb +0 -171
  554. data/util/create_certs.sh +0 -27
  555. data/util/create_encrypted_key.rb +0 -16
  556. data/util/generate_spdx_license_list.rb +0 -63
  557. data/util/patch_with_prs.rb +0 -77
  558. data/util/rubocop +0 -8
  559. data/util/update_bundled_ca_certificates.rb +0 -139
  560. data/util/update_changelog.rb +0 -67
@@ -2,14 +2,13 @@
2
2
  require 'rubygems/text'
3
3
 
4
4
  class Gem::Licenses
5
-
6
5
  extend Gem::Text
7
6
 
8
7
  NONSTANDARD = 'Nonstandard'.freeze
9
8
 
10
9
  # Software Package Data Exchange (SPDX) standard open-source software
11
10
  # license identifiers
12
- LICENSE_IDENTIFIERS = %w(
11
+ LICENSE_IDENTIFIERS = %w[
13
12
  0BSD
14
13
  AAL
15
14
  ADSL
@@ -379,10 +378,10 @@ class Gem::Licenses
379
378
  xinetd
380
379
  xpp
381
380
  zlib-acknowledgement
382
- ).freeze
381
+ ].freeze
383
382
 
384
383
  # exception identifiers
385
- EXCEPTION_IDENTIFIERS = %w(
384
+ EXCEPTION_IDENTIFIERS = %w[
386
385
  389-exception
387
386
  Autoconf-exception-2.0
388
387
  Autoconf-exception-3.0
@@ -410,7 +409,7 @@ class Gem::Licenses
410
409
  mif-exception
411
410
  openvpn-openssl-exception
412
411
  u-boot-exception-2.0
413
- ).freeze
412
+ ].freeze
414
413
 
415
414
  REGEXP = %r{
416
415
  \A
@@ -435,5 +434,4 @@ class Gem::Licenses
435
434
  return unless lowest < license.size
436
435
  by_distance[lowest]
437
436
  end
438
-
439
437
  end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  module Gem
3
3
  class List
4
-
5
4
  include Enumerable
6
5
  attr_accessor :value, :tail
7
6
 
@@ -34,6 +33,5 @@ module Gem
34
33
  return List.new(value) unless list
35
34
  List.new value, list
36
35
  end
37
-
38
36
  end
39
37
  end
@@ -12,7 +12,6 @@ require 'rubygems/installer'
12
12
  # Validator performs various gem file and gem database validation
13
13
 
14
14
  class Gem::Validator
15
-
16
15
  include Gem::UserInteraction
17
16
 
18
17
  def initialize # :nodoc:
@@ -60,7 +59,7 @@ class Gem::Validator
60
59
  # TODO needs further cleanup
61
60
 
62
61
  def alien(gems=[])
63
- errors = Hash.new { |h,k| h[k] = {} }
62
+ errors = Hash.new {|h,k| h[k] = {} }
64
63
 
65
64
  Gem::Specification.each do |spec|
66
65
  next unless gems.include? spec.name unless gems.empty?
@@ -141,5 +140,4 @@ class Gem::Validator
141
140
 
142
141
  errors
143
142
  end
144
-
145
143
  end
@@ -150,8 +150,7 @@
150
150
  # a zero to give a sensible result.
151
151
 
152
152
  class Gem::Version
153
-
154
- autoload :Requirement, 'rubygems/requirement'
153
+ autoload :Requirement, File.expand_path('requirement', __dir__)
155
154
 
156
155
  include Comparable
157
156
 
@@ -187,7 +186,7 @@ class Gem::Version
187
186
  # ver3 = Version.create(nil) # -> nil
188
187
 
189
188
  def self.create(input)
190
- if self === input # check yourself before you wreck yourself
189
+ if self === input # check yourself before you wreck yourself
191
190
  input
192
191
  elsif input.nil?
193
192
  nil
@@ -231,7 +230,7 @@ class Gem::Version
231
230
  def bump
232
231
  @@bump[self] ||= begin
233
232
  segments = self.segments
234
- segments.pop while segments.any? { |s| String === s }
233
+ segments.pop while segments.any? {|s| String === s }
235
234
  segments.pop if segments.size > 1
236
235
 
237
236
  segments[-1] = segments[-1].succ
@@ -310,7 +309,7 @@ class Gem::Version
310
309
  def release
311
310
  @@release[self] ||= if prerelease?
312
311
  segments = self.segments
313
- segments.pop while segments.any? { |s| String === s }
312
+ segments.pop while segments.any? {|s| String === s }
314
313
  self.class.new segments.join('.')
315
314
  else
316
315
  self
@@ -327,7 +326,7 @@ class Gem::Version
327
326
  def approximate_recommendation
328
327
  segments = self.segments
329
328
 
330
- segments.pop while segments.any? { |s| String === s }
329
+ segments.pop while segments.any? {|s| String === s }
331
330
  segments.pop while segments.size > 2
332
331
  segments.push 0 while segments.size < 2
333
332
 
@@ -404,5 +403,4 @@ class Gem::Version
404
403
  numeric_segments = string_segments.slice!(0, string_start || string_segments.size)
405
404
  return numeric_segments, string_segments
406
405
  end
407
-
408
406
  end
@@ -73,4 +73,10 @@ module Gem::VersionOption
73
73
  end
74
74
  end
75
75
 
76
+ ##
77
+ # Extract platform given on the command line
78
+
79
+ def get_platform_from_requirements(requirements)
80
+ Gem.platforms[1].to_s if requirements.key? :added_platform
81
+ end
76
82
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "rubygems-update"
5
- s.version = "3.1.2"
5
+ s.version = "3.2.3"
6
6
  s.authors = ["Jim Weirich", "Chad Fowler", "Eric Hodel", "Luis Lavena", "Aaron Patterson", "Samuel Giddins", "André Arko", "Evan Phoenix", "Hiroshi SHIBATA"]
7
7
  s.email = ["", "", "drbrain@segment7.net", "luislavena@gmail.com", "aaron@tenderlovemaking.com", "segiddins@segiddins.me", "andre@arko.net", "evan@phx.io", "hsbt@ruby-lang.org"]
8
8
 
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  "History.txt", "LICENSE.txt", "MAINTAINERS.txt",
25
25
  "MIT.txt", "Manifest.txt", "README.md",
26
26
  "UPGRADING.md", "POLICIES.md", "CODE_OF_CONDUCT.md",
27
- "CONTRIBUTING.md", "bundler/CHANGELOG.md", "bundler/CODE_OF_CONDUCT.md",
27
+ "CONTRIBUTING.md", "bundler/CHANGELOG.md",
28
28
  "bundler/LICENSE.md", "bundler/README.md",
29
29
  "hide_lib_for_update/note.txt", *Dir["bundler/man/*.1"]
30
30
  ]
data/setup.rb CHANGED
@@ -11,12 +11,7 @@ if ENV['RUBYOPT'] or defined? Gem
11
11
  ENV.delete 'RUBYOPT'
12
12
 
13
13
  require 'rbconfig'
14
- config = defined?(RbConfig) ? RbConfig : Config
15
-
16
- ruby = File.join config::CONFIG['bindir'], config::CONFIG['ruby_install_name']
17
- ruby << config::CONFIG['EXEEXT']
18
-
19
- cmd = [ruby, 'setup.rb', *ARGV].compact
14
+ cmd = [RbConfig.ruby, 'setup.rb', *ARGV].compact
20
15
  cmd[1,0] = "--disable-gems"
21
16
 
22
17
  exec(*cmd)
@@ -24,7 +19,7 @@ end
24
19
 
25
20
  Dir.chdir File.dirname(__FILE__)
26
21
 
27
- $:.unshift 'lib'
22
+ $:.unshift File.expand_path('lib')
28
23
  require 'rubygems'
29
24
  require 'rubygems/gem_runner'
30
25
  require 'rubygems/exceptions'
@@ -1,6 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  class TestGem
3
-
4
3
  TEST_PLUGIN_LOAD = :loaded
5
-
6
4
  end
@@ -1,6 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  class Gem::Commands::CrashCommand < Gem::Command
3
-
4
3
  raise "crash"
5
-
6
4
  end
@@ -11,7 +11,6 @@ module Gem::Commands
11
11
  end
12
12
 
13
13
  class Gem::Commands::InterruptCommand < Gem::Command
14
-
15
14
  def initialize
16
15
  super('interrupt', 'Raises an Interrupt Exception', {})
17
16
  end
@@ -19,7 +18,6 @@ class Gem::Commands::InterruptCommand < Gem::Command
19
18
  def execute
20
19
  raise Interrupt, "Interrupt exception"
21
20
  end
22
-
23
21
  end
24
22
 
25
23
  Gem::CommandManager.instance.register_command :interrupt
@@ -1,5 +1,3 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
1
  Gem::Specification.new do |s|
4
2
  s.name = "bar"
5
3
  s.version = "0.0.2"
@@ -0,0 +1,12 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "rubyforge"
3
+ s.version = "0.0.1"
4
+ s.platform = "ruby"
5
+ s.require_paths = ["lib"]
6
+ s.summary = "A very bar gem"
7
+ s.authors = ["unknown"]
8
+ s.license = 'MIT'
9
+ s.homepage = 'http://example.com'
10
+ s.files = ['README.md']
11
+ s.rubyforge_project = 'abc'
12
+ end
@@ -1,6 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
  require 'rubygems/test_case'
3
- require 'net/https'
3
+ require 'net/http'
4
+ require 'rubygems/openssl'
5
+
6
+ unless Gem::HAVE_OPENSSL
7
+ warn 'Skipping bundled certificates tests. openssl not found.'
8
+ end
9
+
4
10
  require 'rubygems/request'
5
11
 
6
12
  # = Testing Bundled CA
@@ -8,56 +14,47 @@ require 'rubygems/request'
8
14
  # The tested hosts are explained in detail here: https://github.com/rubygems/rubygems/commit/5e16a5428f973667cabfa07e94ff939e7a83ebd9
9
15
  #
10
16
 
11
- if ENV["CI"] || ENV["TEST_SSL"]
12
- class TestBundledCA < Gem::TestCase
13
-
14
- THIS_FILE = File.expand_path __FILE__
15
-
16
- def bundled_certificate_store
17
- store = OpenSSL::X509::Store.new
17
+ class TestBundledCA < Gem::TestCase
18
+ def bundled_certificate_store
19
+ store = OpenSSL::X509::Store.new
18
20
 
19
- ssl_cert_glob =
20
- File.expand_path '../../../lib/rubygems/ssl_certs/*/*.pem', THIS_FILE
21
-
22
- Dir[ssl_cert_glob].each do |ssl_cert|
23
- store.add_file ssl_cert
24
- end
25
-
26
- store
21
+ Gem::Request.get_cert_files.each do |ssl_cert|
22
+ store.add_file ssl_cert
27
23
  end
28
24
 
29
- def assert_https(host)
30
- if self.respond_to? :_assertions # minitest <= 4
31
- self._assertions += 1
32
- else # minitest >= 5
33
- self.assertions += 1
34
- end
35
- http = Net::HTTP.new(host, 443)
36
- http.use_ssl = true
37
- http.verify_mode = OpenSSL::SSL::VERIFY_PEER
38
- http.cert_store = bundled_certificate_store
39
- http.get('/')
40
- rescue Errno::ENOENT, Errno::ETIMEDOUT, SocketError
41
- skip "#{host} seems offline, I can't tell whether ssl would work."
42
- rescue OpenSSL::SSL::SSLError => e
43
- # Only fail for certificate verification errors
44
- if e.message =~ /certificate verify failed/
45
- flunk "#{host} is not verifiable using the included certificates. Error was: #{e.message}"
46
- end
47
- raise
48
- end
25
+ store
26
+ end
49
27
 
50
- def test_accessing_rubygems
51
- assert_https('rubygems.org')
28
+ def assert_https(host)
29
+ self.assertions += 1
30
+ http = Net::HTTP.new(host, 443)
31
+ http.use_ssl = true
32
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
33
+ http.cert_store = bundled_certificate_store
34
+ http.get('/')
35
+ rescue Errno::ENOENT, Errno::ETIMEDOUT, SocketError
36
+ skip "#{host} seems offline, I can't tell whether ssl would work."
37
+ rescue OpenSSL::SSL::SSLError => e
38
+ # Only fail for certificate verification errors
39
+ if e.message =~ /certificate verify failed/
40
+ flunk "#{host} is not verifiable using the included certificates. Error was: #{e.message}"
52
41
  end
42
+ raise
43
+ end
53
44
 
54
- def test_accessing_fastly
55
- assert_https('rubygems.global.ssl.fastly.net')
56
- end
45
+ def test_accessing_rubygems
46
+ assert_https('rubygems.org')
47
+ end
57
48
 
58
- def test_accessing_new_index
59
- assert_https('fastly.rubygems.org')
60
- end
49
+ def test_accessing_www_rubygems
50
+ assert_https('www.rubygems.org')
51
+ end
61
52
 
53
+ def test_accessing_staging
54
+ assert_https('staging.rubygems.org')
62
55
  end
63
- end
56
+
57
+ def test_accessing_new_index
58
+ assert_https('index.rubygems.org')
59
+ end
60
+ end if Gem::HAVE_OPENSSL
@@ -4,7 +4,6 @@ require 'rubygems'
4
4
  require 'shellwords'
5
5
 
6
6
  class TestConfig < Gem::TestCase
7
-
8
7
  def test_datadir
9
8
  util_make_gems
10
9
  spec = Gem::Specification.find_by_name("a")
@@ -25,5 +24,4 @@ class TestConfig < Gem::TestCase
25
24
  assert_equal(Gem.ruby, ruby)
26
25
  assert_match(/\/bad_rake.rb\z/, rake)
27
26
  end
28
-
29
27
  end
@@ -1,15 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
  require 'rubygems/test_case'
3
- # require 'rubygems/builder'
4
- # require 'rubygems/package'
5
3
  require 'rubygems/deprecate'
6
4
 
7
5
  class TestDeprecate < Gem::TestCase
8
-
9
6
  def setup
10
7
  super
11
8
 
12
- # Gem::Deprecate.saved_warnings.clear
13
9
  @original_skip = Gem::Deprecate.skip
14
10
  Gem::Deprecate.skip = false
15
11
  end
@@ -17,7 +13,6 @@ class TestDeprecate < Gem::TestCase
17
13
  def teardown
18
14
  super
19
15
 
20
- # Gem::Deprecate.saved_warnings.clear
21
16
  Gem::Deprecate.skip = @original_skip
22
17
  end
23
18
 
@@ -45,7 +40,18 @@ class TestDeprecate < Gem::TestCase
45
40
  end
46
41
 
47
42
  class Thing
43
+ extend Gem::Deprecate
44
+ attr_accessor :message
45
+ def foo
46
+ @message = "foo"
47
+ end
48
+ def bar
49
+ @message = "bar"
50
+ end
51
+ rubygems_deprecate :foo, :bar
52
+ end
48
53
 
54
+ class OtherThing
49
55
  extend Gem::Deprecate
50
56
  attr_accessor :message
51
57
  def foo
@@ -55,7 +61,6 @@ class TestDeprecate < Gem::TestCase
55
61
  @message = "bar"
56
62
  end
57
63
  deprecate :foo, :bar, 2099, 3
58
-
59
64
  end
60
65
 
61
66
  def test_deprecated_method_calls_the_old_method
@@ -74,7 +79,35 @@ class TestDeprecate < Gem::TestCase
74
79
 
75
80
  assert_equal "", out
76
81
  assert_match(/Thing#foo is deprecated; use bar instead\./, err)
77
- assert_match(/on or after 2099-03-01/, err)
82
+ assert_match(/in Rubygems [0-9]+/, err)
83
+ end
84
+
85
+ def test_rubygems_deprecate_command
86
+ require 'rubygems/command'
87
+ foo_command = Class.new(Gem::Command) do
88
+ extend Gem::Deprecate
89
+
90
+ rubygems_deprecate_command
91
+
92
+ def execute
93
+ puts "pew pew!"
94
+ end
95
+ end
96
+
97
+ Gem::Commands.send(:const_set, :FooCommand, foo_command)
98
+ assert Gem::Commands::FooCommand.new("foo").deprecated?
99
+ ensure
100
+ Gem::Commands.send(:remove_const, :FooCommand)
78
101
  end
79
102
 
103
+ def test_deprecated_method_outputs_a_warning_old_way
104
+ out, err = capture_io do
105
+ thing = OtherThing.new
106
+ thing.foo
107
+ end
108
+
109
+ assert_equal "", out
110
+ assert_match(/Thing#foo is deprecated; use bar instead\./, err)
111
+ assert_match(/on or after 2099-03-01/, err)
112
+ end
80
113
  end
@@ -7,18 +7,7 @@ require 'pathname'
7
7
  require 'tmpdir'
8
8
  require 'rbconfig'
9
9
 
10
- if File.exist?(File.join(Dir.tmpdir, "Gemfile"))
11
- raise "rubygems/bundler tests do not work correctly if there is #{ File.join(Dir.tmpdir, "Gemfile") }"
12
- end
13
-
14
- # TODO: push this up to test_case.rb once battle tested
15
-
16
- $LOAD_PATH.map! do |path|
17
- path.dup.tap(&Gem::UNTAINT)
18
- end
19
-
20
10
  class TestGem < Gem::TestCase
21
-
22
11
  PLUGINS_LOADED = [] # rubocop:disable Style/MutableConstant
23
12
 
24
13
  PROJECT_DIR = File.expand_path('../../..', __FILE__).tap(&Gem::UNTAINT)
@@ -31,7 +20,7 @@ class TestGem < Gem::TestCase
31
20
  common_installer_setup
32
21
 
33
22
  ENV.delete 'RUBYGEMS_GEMDEPS'
34
- @additional = %w[a b].map { |d| File.join @tempdir, d }
23
+ @additional = %w[a b].map {|d| File.join @tempdir, d }
35
24
 
36
25
  util_remove_interrupt_command
37
26
  end
@@ -48,12 +37,12 @@ class TestGem < Gem::TestCase
48
37
 
49
38
  a1.activate
50
39
 
51
- assert_equal %w(a-1), loaded_spec_names
40
+ assert_equal %w[a-1], loaded_spec_names
52
41
  assert_equal ["b (> 0)"], unresolved_names
53
42
 
54
43
  Gem.finish_resolve
55
44
 
56
- assert_equal %w(a-1 b-2 c-2), loaded_spec_names
45
+ assert_equal %w[a-1 b-2 c-2], loaded_spec_names
57
46
  assert_equal [], unresolved_names
58
47
  end
59
48
  end
@@ -72,12 +61,12 @@ class TestGem < Gem::TestCase
72
61
 
73
62
  a1.activate
74
63
 
75
- assert_equal %w(a-1), loaded_spec_names
64
+ assert_equal %w[a-1], loaded_spec_names
76
65
  assert_equal ["b (> 0)", "d (> 0)"], unresolved_names
77
66
 
78
67
  Gem.finish_resolve
79
68
 
80
- assert_equal %w(a-1 b-1 c-1 d-2), loaded_spec_names
69
+ assert_equal %w[a-1 b-1 c-1 d-2], loaded_spec_names
81
70
  assert_equal [], unresolved_names
82
71
  end
83
72
  end
@@ -95,12 +84,12 @@ class TestGem < Gem::TestCase
95
84
  a1.activate
96
85
  c1.activate
97
86
 
98
- assert_equal %w(a-1 c-1), loaded_spec_names
87
+ assert_equal %w[a-1 c-1], loaded_spec_names
99
88
  assert_equal ["b (> 0)"], unresolved_names
100
89
 
101
90
  Gem.finish_resolve
102
91
 
103
- assert_equal %w(a-1 b-1 c-1), loaded_spec_names
92
+ assert_equal %w[a-1 b-1 c-1], loaded_spec_names
104
93
  assert_equal [], unresolved_names
105
94
  end
106
95
  end
@@ -115,7 +104,7 @@ class TestGem < Gem::TestCase
115
104
 
116
105
  installed = Gem.install 'a', '= 1', :install_dir => gemhome2
117
106
 
118
- assert_equal %w[a-1], installed.map { |spec| spec.full_name }
107
+ assert_equal %w[a-1], installed.map {|spec| spec.full_name }
119
108
 
120
109
  assert_path_exists File.join(gemhome2, 'gems', 'a-1')
121
110
  end
@@ -134,7 +123,7 @@ class TestGem < Gem::TestCase
134
123
  rescue StandardError
135
124
  Gem.install 'a', '= 1', :install_dir => gemhome2
136
125
  end
137
- assert_equal %w[a-1], installed.map { |spec| spec.full_name }
126
+ assert_equal %w[a-1], installed.map {|spec| spec.full_name }
138
127
  end
139
128
 
140
129
  def test_self_install_permissions
@@ -161,10 +150,8 @@ class TestGem < Gem::TestCase
161
150
 
162
151
  def test_self_install_permissions_with_format_executable_and_non_standard_ruby_install_name
163
152
  Gem::Installer.exec_format = nil
164
- with_clean_path_to_ruby do
165
- ruby_install_name 'ruby27' do
166
- assert_self_install_permissions(format_executable: true)
167
- end
153
+ ruby_install_name 'ruby27' do
154
+ assert_self_install_permissions(format_executable: true)
168
155
  end
169
156
  ensure
170
157
  Gem::Installer.exec_format = nil
@@ -177,7 +164,7 @@ class TestGem < Gem::TestCase
177
164
  :prog_mode => win_platform? ? 0410 : 0510,
178
165
  :data_mode => 0640,
179
166
  :wrappers => true,
180
- :format_executable => format_executable
167
+ :format_executable => format_executable,
181
168
  }
182
169
  Dir.chdir @tempdir do
183
170
  Dir.mkdir 'bin'
@@ -220,7 +207,7 @@ class TestGem < Gem::TestCase
220
207
  end
221
208
  assert_equal(expected, result)
222
209
  ensure
223
- File.chmod(0755, *Dir.glob(@gemhome + '/gems/**/').map {|path| path.tap(&Gem::UNTAINT)})
210
+ File.chmod(0755, *Dir.glob(@gemhome + '/gems/**/').map {|path| path.tap(&Gem::UNTAINT) })
224
211
  end
225
212
 
226
213
  def test_require_missing
@@ -307,7 +294,23 @@ class TestGem < Gem::TestCase
307
294
  gem 'c'
308
295
  Gem.finish_resolve
309
296
 
310
- assert_equal %w(a-1 b-2 c-1), loaded_spec_names
297
+ assert_equal %w[a-1 b-2 c-1], loaded_spec_names
298
+ end
299
+
300
+ def test_activate_bin_path_in_debug_mode
301
+ a1 = util_spec 'a', '1' do |s|
302
+ s.executables = ['exec']
303
+ end
304
+
305
+ install_specs a1
306
+
307
+ require "open3"
308
+ output, status = Open3.capture2e(
309
+ { "GEM_HOME" => Gem.paths.home, "DEBUG_RESOLVER" => "1" },
310
+ *ruby_with_rubygems_in_load_path, "-e", "\"Gem.activate_bin_path('a', 'exec', '>= 0')\""
311
+ )
312
+
313
+ assert status.success?, output
311
314
  end
312
315
 
313
316
  def test_activate_bin_path_gives_proper_error_for_bundler
@@ -333,7 +336,7 @@ class TestGem < Gem::TestCase
333
336
  L
334
337
  end
335
338
 
336
- File.open("Gemfile", "w") { |f| f.puts('source "https://rubygems.org"') }
339
+ File.open("Gemfile", "w") {|f| f.puts('source "https://rubygems.org"') }
337
340
 
338
341
  e = assert_raises Gem::GemNotFoundException do
339
342
  load Gem.activate_bin_path("bundler", "bundle", ">= 0.a")
@@ -372,11 +375,11 @@ class TestGem < Gem::TestCase
372
375
  L
373
376
  end
374
377
 
375
- File.open("Gemfile", "w") { |f| f.puts('source "https://rubygems.org"') }
378
+ File.open("Gemfile", "w") {|f| f.puts('source "https://rubygems.org"') }
376
379
 
377
380
  load Gem.activate_bin_path("bundler", "bundle", ">= 0.a")
378
381
 
379
- assert_equal %w(bundler-2.0.0), loaded_spec_names
382
+ assert_equal %w[bundler-2.0.0], loaded_spec_names
380
383
  end
381
384
 
382
385
  def test_activate_bin_path_respects_underscore_selection_if_given
@@ -406,11 +409,11 @@ class TestGem < Gem::TestCase
406
409
  L
407
410
  end
408
411
 
409
- File.open("Gemfile", "w") { |f| f.puts('source "https://rubygems.org"') }
412
+ File.open("Gemfile", "w") {|f| f.puts('source "https://rubygems.org"') }
410
413
 
411
414
  load Gem.activate_bin_path("bundler", "bundle", "= 1.17.3")
412
415
 
413
- assert_equal %w(bundler-1.17.3), loaded_spec_names
416
+ assert_equal %w[bundler-1.17.3], loaded_spec_names
414
417
  end
415
418
 
416
419
  def test_self_bin_path_no_exec_name
@@ -657,7 +660,7 @@ class TestGem < Gem::TestCase
657
660
  assert_directory_exists util_cache_dir
658
661
  end
659
662
 
660
- unless win_platform? || Process.uid.zero? # only for FS that support write protection
663
+ unless win_platform? || Process.uid.zero? # only for FS that support write protection
661
664
  def test_self_ensure_gem_directories_write_protected
662
665
  gemdir = File.join @tempdir, "egd"
663
666
  FileUtils.rm_r gemdir rescue nil
@@ -709,7 +712,7 @@ class TestGem < Gem::TestCase
709
712
 
710
713
  discover_path = File.join 'lib', 'sff', 'discover.rb'
711
714
 
712
- foo1, foo2 = %w(1 2).map do |version|
715
+ foo1, foo2 = %w[1 2].map do |version|
713
716
  spec = quick_gem 'sff', version do |s|
714
717
  s.files << discover_path
715
718
  end
@@ -741,7 +744,7 @@ class TestGem < Gem::TestCase
741
744
 
742
745
  discover_path = File.join 'lib', 'sff', 'discover.rb'
743
746
 
744
- foo1, _ = %w(1 2).map do |version|
747
+ foo1, _ = %w[1 2].map do |version|
745
748
  spec = quick_gem 'sff', version do |s|
746
749
  s.files << discover_path
747
750
  end
@@ -762,7 +765,7 @@ class TestGem < Gem::TestCase
762
765
 
763
766
  expected = [
764
767
  File.expand_path('test/rubygems/sff/discover.rb', PROJECT_DIR),
765
- File.join(foo1.full_gem_path, discover_path)
768
+ File.join(foo1.full_gem_path, discover_path),
766
769
  ].sort
767
770
 
768
771
  assert_equal expected, Gem.find_files('sff/discover').sort
@@ -777,7 +780,7 @@ class TestGem < Gem::TestCase
777
780
 
778
781
  discover_path = File.join 'lib', 'sff', 'discover.rb'
779
782
 
780
- _, foo2 = %w(1 2).map do |version|
783
+ _, foo2 = %w[1 2].map do |version|
781
784
  spec = quick_gem 'sff', version do |s|
782
785
  s.files << discover_path
783
786
  end
@@ -1017,7 +1020,7 @@ class TestGem < Gem::TestCase
1017
1020
 
1018
1021
  Gem.refresh
1019
1022
 
1020
- Gem::Specification.each{|spec| assert spec.activated? if spec == s}
1023
+ Gem::Specification.each{|spec| assert spec.activated? if spec == s }
1021
1024
 
1022
1025
  Gem.loaded_specs.delete(s)
1023
1026
  Gem.refresh
@@ -1025,20 +1028,16 @@ class TestGem < Gem::TestCase
1025
1028
 
1026
1029
  def test_self_ruby_escaping_spaces_in_path
1027
1030
  with_clean_path_to_ruby do
1028
- with_bindir_and_exeext("C:/Ruby 1.8/bin", ".exe") do
1029
- ruby_install_name "ruby" do
1030
- assert_equal "\"C:/Ruby 1.8/bin/ruby.exe\"", Gem.ruby
1031
- end
1031
+ with_rb_config_ruby("C:/Ruby 1.8/bin/ruby.exe") do
1032
+ assert_equal "\"C:/Ruby 1.8/bin/ruby.exe\"", Gem.ruby
1032
1033
  end
1033
1034
  end
1034
1035
  end
1035
1036
 
1036
1037
  def test_self_ruby_path_without_spaces
1037
1038
  with_clean_path_to_ruby do
1038
- with_bindir_and_exeext("C:/Ruby18/bin", ".exe") do
1039
- ruby_install_name "ruby" do
1040
- assert_equal "C:/Ruby18/bin/ruby.exe", Gem.ruby
1041
- end
1039
+ with_rb_config_ruby("C:/Ruby18/bin/ruby.exe") do
1040
+ assert_equal "C:/Ruby18/bin/ruby.exe", Gem.ruby
1042
1041
  end
1043
1042
  end
1044
1043
  end
@@ -1090,7 +1089,7 @@ class TestGem < Gem::TestCase
1090
1089
  util_restore_RUBY_VERSION
1091
1090
  end
1092
1091
 
1093
- def test_self_ruby_version_with_prerelease
1092
+ def test_self_ruby_version_with_svn_prerelease
1094
1093
  util_set_RUBY_VERSION '2.6.0', -1, 63539, 'ruby 2.6.0preview2 (2018-05-31 trunk 63539) [x86_64-linux]'
1095
1094
 
1096
1095
  assert_equal Gem::Version.new('2.6.0.preview2'), Gem.ruby_version
@@ -1098,6 +1097,14 @@ class TestGem < Gem::TestCase
1098
1097
  util_restore_RUBY_VERSION
1099
1098
  end
1100
1099
 
1100
+ def test_self_ruby_version_with_git_prerelease
1101
+ util_set_RUBY_VERSION '2.7.0', -1, 'b563439274a402e33541f5695b1bfd4ac1085638', 'ruby 2.7.0preview3 (2019-11-23 master b563439274) [x86_64-linux]'
1102
+
1103
+ assert_equal Gem::Version.new('2.7.0.preview3'), Gem.ruby_version
1104
+ ensure
1105
+ util_restore_RUBY_VERSION
1106
+ end
1107
+
1101
1108
  def test_self_ruby_version_with_non_mri_implementations_with_mri_prerelase_compatibility
1102
1109
  util_set_RUBY_VERSION '2.6.0', -1, 63539, 'weirdjruby 9.2.0.0 (2.6.0preview2) 2018-05-24 81156a8 OpenJDK 64-Bit Server VM 25.171-b11 on 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11 [linux-x86_64]', 'weirdjruby', '9.2.0.0'
1103
1110
 
@@ -1106,7 +1113,7 @@ class TestGem < Gem::TestCase
1106
1113
  util_restore_RUBY_VERSION
1107
1114
  end
1108
1115
 
1109
- def test_self_ruby_version_with_trunk
1116
+ def test_self_ruby_version_with_svn_trunk
1110
1117
  util_set_RUBY_VERSION '1.9.2', -1, 23493, 'ruby 1.9.2dev (2009-05-20 trunk 23493) [x86_64-linux]'
1111
1118
 
1112
1119
  assert_equal Gem::Version.new('1.9.2.dev'), Gem.ruby_version
@@ -1114,6 +1121,14 @@ class TestGem < Gem::TestCase
1114
1121
  util_restore_RUBY_VERSION
1115
1122
  end
1116
1123
 
1124
+ def test_self_ruby_version_with_git_master
1125
+ util_set_RUBY_VERSION '2.7.0', -1, '5de284ec78220e75643f89b454ce999da0c1c195', 'ruby 2.7.0dev (2019-12-23T01:37:30Z master 5de284ec78) [x86_64-linux]'
1126
+
1127
+ assert_equal Gem::Version.new('2.7.0.dev'), Gem.ruby_version
1128
+ ensure
1129
+ util_restore_RUBY_VERSION
1130
+ end
1131
+
1117
1132
  def test_self_rubygems_version
1118
1133
  assert_equal Gem::Version.new(Gem::VERSION), Gem.rubygems_version
1119
1134
  end
@@ -1147,7 +1162,7 @@ class TestGem < Gem::TestCase
1147
1162
  def test_self_post_build
1148
1163
  assert_equal 1, Gem.post_build_hooks.length
1149
1164
 
1150
- Gem.post_build { |installer| }
1165
+ Gem.post_build {|installer| }
1151
1166
 
1152
1167
  assert_equal 2, Gem.post_build_hooks.length
1153
1168
  end
@@ -1155,7 +1170,7 @@ class TestGem < Gem::TestCase
1155
1170
  def test_self_post_install
1156
1171
  assert_equal 1, Gem.post_install_hooks.length
1157
1172
 
1158
- Gem.post_install { |installer| }
1173
+ Gem.post_install {|installer| }
1159
1174
 
1160
1175
  assert_equal 2, Gem.post_install_hooks.length
1161
1176
  end
@@ -1163,7 +1178,7 @@ class TestGem < Gem::TestCase
1163
1178
  def test_self_done_installing
1164
1179
  assert_empty Gem.done_installing_hooks
1165
1180
 
1166
- Gem.done_installing { |gems| }
1181
+ Gem.done_installing {|gems| }
1167
1182
 
1168
1183
  assert_equal 1, Gem.done_installing_hooks.length
1169
1184
  end
@@ -1171,7 +1186,7 @@ class TestGem < Gem::TestCase
1171
1186
  def test_self_post_reset
1172
1187
  assert_empty Gem.post_reset_hooks
1173
1188
 
1174
- Gem.post_reset { }
1189
+ Gem.post_reset {}
1175
1190
 
1176
1191
  assert_equal 1, Gem.post_reset_hooks.length
1177
1192
  end
@@ -1179,7 +1194,7 @@ class TestGem < Gem::TestCase
1179
1194
  def test_self_post_uninstall
1180
1195
  assert_equal 1, Gem.post_uninstall_hooks.length
1181
1196
 
1182
- Gem.post_uninstall { |installer| }
1197
+ Gem.post_uninstall {|installer| }
1183
1198
 
1184
1199
  assert_equal 2, Gem.post_uninstall_hooks.length
1185
1200
  end
@@ -1187,7 +1202,7 @@ class TestGem < Gem::TestCase
1187
1202
  def test_self_pre_install
1188
1203
  assert_equal 1, Gem.pre_install_hooks.length
1189
1204
 
1190
- Gem.pre_install { |installer| }
1205
+ Gem.pre_install {|installer| }
1191
1206
 
1192
1207
  assert_equal 2, Gem.pre_install_hooks.length
1193
1208
  end
@@ -1195,7 +1210,7 @@ class TestGem < Gem::TestCase
1195
1210
  def test_self_pre_reset
1196
1211
  assert_empty Gem.pre_reset_hooks
1197
1212
 
1198
- Gem.pre_reset { }
1213
+ Gem.pre_reset {}
1199
1214
 
1200
1215
  assert_equal 1, Gem.pre_reset_hooks.length
1201
1216
  end
@@ -1203,7 +1218,7 @@ class TestGem < Gem::TestCase
1203
1218
  def test_self_pre_uninstall
1204
1219
  assert_equal 1, Gem.pre_uninstall_hooks.length
1205
1220
 
1206
- Gem.pre_uninstall { |installer| }
1221
+ Gem.pre_uninstall {|installer| }
1207
1222
 
1208
1223
  assert_equal 2, Gem.pre_uninstall_hooks.length
1209
1224
  end
@@ -1232,7 +1247,7 @@ class TestGem < Gem::TestCase
1232
1247
 
1233
1248
  install_specs b1, b2, b3
1234
1249
 
1235
- specs1 = Gem::Specification.stubs.find_all { |s| s.name == 'b' }
1250
+ specs1 = Gem::Specification.stubs.find_all {|s| s.name == 'b' }
1236
1251
  Gem::Specification.reset
1237
1252
  specs2 = Gem::Specification.stubs_for('b')
1238
1253
  assert_equal specs1.map(&:version), specs2.map(&:version)
@@ -1255,7 +1270,8 @@ class TestGem < Gem::TestCase
1255
1270
  Gem.try_activate 'a_file'
1256
1271
  end
1257
1272
 
1258
- assert_match %r%Could not find 'b' %, e.message
1273
+ assert_match %r{Could not find 'b' }, e.message
1274
+ assert_match %r{at: #{a.spec_file}}, e.message
1259
1275
  end
1260
1276
 
1261
1277
  def test_self_try_activate_missing_prerelease
@@ -1275,7 +1291,7 @@ class TestGem < Gem::TestCase
1275
1291
  Gem.try_activate 'a_file'
1276
1292
  end
1277
1293
 
1278
- assert_match %r%Could not find 'b' \(= 1.0rc1\)%, e.message
1294
+ assert_match %r{Could not find 'b' \(= 1.0rc1\)}, e.message
1279
1295
  end
1280
1296
 
1281
1297
  def test_self_try_activate_missing_extensions
@@ -1355,6 +1371,8 @@ class TestGem < Gem::TestCase
1355
1371
  parts = [@userhome, '.gem', Gem.ruby_engine]
1356
1372
  parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty?
1357
1373
 
1374
+ FileUtils.mkdir_p File.join(parts)
1375
+
1358
1376
  assert_equal File.join(parts), Gem.user_dir
1359
1377
  end
1360
1378
 
@@ -1378,9 +1396,9 @@ class TestGem < Gem::TestCase
1378
1396
  r.gem "b", "= 1"
1379
1397
  end
1380
1398
 
1381
- activated = Gem::Specification.map { |x| x.full_name }
1399
+ activated = Gem::Specification.map {|x| x.full_name }
1382
1400
 
1383
- assert_equal %w!a-1 b-1 c-2!, activated.sort
1401
+ assert_equal %w[a-1 b-1 c-2], activated.sort
1384
1402
  end
1385
1403
 
1386
1404
  def test_self_needs_picks_up_unresolved_deps
@@ -1400,7 +1418,7 @@ class TestGem < Gem::TestCase
1400
1418
  require "d#{$$}"
1401
1419
  end
1402
1420
 
1403
- assert_equal %w!a-1 b-1 c-2 d-1 e-1!, loaded_spec_names
1421
+ assert_equal %w[a-1 b-1 c-2 d-1 e-1], loaded_spec_names
1404
1422
  end
1405
1423
  end
1406
1424
 
@@ -1470,7 +1488,6 @@ class TestGem < Gem::TestCase
1470
1488
  install_gem foo2
1471
1489
  end
1472
1490
 
1473
- Gem.searcher = nil
1474
1491
  Gem::Specification.reset
1475
1492
 
1476
1493
  gem 'foo'
@@ -1500,8 +1517,8 @@ class TestGem < Gem::TestCase
1500
1517
  def test_gem_path_ordering
1501
1518
  refute_equal Gem.dir, Gem.user_dir
1502
1519
 
1503
- write_file File.join(@tempdir, 'lib', "g.rb") { |fp| fp.puts "" }
1504
- write_file File.join(@tempdir, 'lib', 'm.rb') { |fp| fp.puts "" }
1520
+ write_file File.join(@tempdir, 'lib', "g.rb") {|fp| fp.puts "" }
1521
+ write_file File.join(@tempdir, 'lib', 'm.rb') {|fp| fp.puts "" }
1505
1522
 
1506
1523
  g = util_spec 'g', '1', nil, "lib/g.rb"
1507
1524
  m = util_spec 'm', '1', nil, "lib/m.rb"
@@ -1515,7 +1532,7 @@ class TestGem < Gem::TestCase
1515
1532
 
1516
1533
  tests = [
1517
1534
  [:dir0, [ Gem.dir, Gem.user_dir], m0],
1518
- [:dir1, [ Gem.user_dir, Gem.dir], m1]
1535
+ [:dir1, [ Gem.user_dir, Gem.dir], m1],
1519
1536
  ]
1520
1537
 
1521
1538
  tests.each do |_name, _paths, expected|
@@ -1556,8 +1573,8 @@ class TestGem < Gem::TestCase
1556
1573
  end
1557
1574
 
1558
1575
  def test_gem_path_ordering_short
1559
- write_file File.join(@tempdir, 'lib', "g.rb") { |fp| fp.puts "" }
1560
- write_file File.join(@tempdir, 'lib', 'm.rb') { |fp| fp.puts "" }
1576
+ write_file File.join(@tempdir, 'lib', "g.rb") {|fp| fp.puts "" }
1577
+ write_file File.join(@tempdir, 'lib', 'm.rb') {|fp| fp.puts "" }
1561
1578
 
1562
1579
  g = util_spec 'g', '1', nil, "lib/g.rb"
1563
1580
  m = util_spec 'm', '1', nil, "lib/m.rb"
@@ -1593,7 +1610,7 @@ class TestGem < Gem::TestCase
1593
1610
 
1594
1611
  Gem.use_gemdeps
1595
1612
 
1596
- assert_equal add_bundler_full_name(%W(a-1 b-1 c-1)), loaded_spec_names
1613
+ assert_equal add_bundler_full_name(%W[a-1 b-1 c-1]), loaded_spec_names
1597
1614
  end
1598
1615
 
1599
1616
  def test_auto_activation_of_used_gemdeps_file
@@ -1614,11 +1631,10 @@ class TestGem < Gem::TestCase
1614
1631
  ENV['RUBYGEMS_GEMDEPS'] = "-"
1615
1632
 
1616
1633
  expected_specs = [a, b, util_spec("bundler", Bundler::VERSION), c].compact
1617
- assert_equal expected_specs, Gem.use_gemdeps.sort_by { |s| s.name }
1634
+ assert_equal expected_specs, Gem.use_gemdeps.sort_by {|s| s.name }
1618
1635
  end
1619
1636
 
1620
- LIB_PATH = File.expand_path "../../../lib".dup.tap(&Gem::UNTAINT), __FILE__.dup.tap(&Gem::UNTAINT)
1621
- BUNDLER_LIB_PATH = File.expand_path $LOAD_PATH.find {|lp| File.file?(File.join(lp, "bundler.rb")) }.dup.tap(&Gem::UNTAINT)
1637
+ BUNDLER_LIB_PATH = File.expand_path $LOAD_PATH.find {|lp| File.file?(File.join(lp, "bundler.rb")) }
1622
1638
  BUNDLER_FULL_NAME = "bundler-#{Bundler::VERSION}".freeze
1623
1639
 
1624
1640
  def add_bundler_full_name(names)
@@ -1645,8 +1661,8 @@ class TestGem < Gem::TestCase
1645
1661
  ENV['RUBYGEMS_GEMDEPS'] = "-"
1646
1662
 
1647
1663
  path = File.join @tempdir, "gem.deps.rb"
1648
- cmd = [Gem.ruby.dup.tap(&Gem::UNTAINT), "-I#{LIB_PATH.tap(&Gem::UNTAINT)}",
1649
- "-I#{BUNDLER_LIB_PATH.tap(&Gem::UNTAINT)}", "-rrubygems"]
1664
+ cmd = [*ruby_with_rubygems_in_load_path,
1665
+ "-I#{BUNDLER_LIB_PATH}"]
1650
1666
  cmd << "-eputs Gem.loaded_specs.values.map(&:full_name).sort"
1651
1667
 
1652
1668
  File.open path, "w" do |f|
@@ -1683,8 +1699,8 @@ class TestGem < Gem::TestCase
1683
1699
  Dir.mkdir "sub1"
1684
1700
 
1685
1701
  path = File.join @tempdir, "gem.deps.rb"
1686
- cmd = [Gem.ruby.dup.tap(&Gem::UNTAINT), "-Csub1", "-I#{LIB_PATH.tap(&Gem::UNTAINT)}",
1687
- "-I#{BUNDLER_LIB_PATH.tap(&Gem::UNTAINT)}", "-rrubygems"]
1702
+ cmd = [*ruby_with_rubygems_in_load_path, "-Csub1",
1703
+ "-I#{BUNDLER_LIB_PATH}"]
1688
1704
  cmd << "-eputs Gem.loaded_specs.values.map(&:full_name).sort"
1689
1705
 
1690
1706
  File.open path, "w" do |f|
@@ -1731,12 +1747,24 @@ class TestGem < Gem::TestCase
1731
1747
  assert_nil Gem.find_unresolved_default_spec("README")
1732
1748
  end
1733
1749
 
1750
+ def test_register_default_spec_old_style_with_folder_starting_with_lib
1751
+ Gem.clear_default_specs
1752
+
1753
+ old_style = Gem::Specification.new do |spec|
1754
+ spec.files = ["libexec/bundle", "foo.rb", "bar.rb"]
1755
+ end
1756
+
1757
+ Gem.register_default_spec old_style
1758
+
1759
+ assert_equal old_style, Gem.find_unresolved_default_spec("foo.rb")
1760
+ end
1761
+
1734
1762
  def test_use_gemdeps
1735
1763
  gem_deps_file = 'gem.deps.rb'.tap(&Gem::UNTAINT)
1736
1764
  spec = util_spec 'a', 1
1737
1765
  install_specs spec
1738
1766
 
1739
- spec = Gem::Specification.find { |s| s == spec }
1767
+ spec = Gem::Specification.find {|s| s == spec }
1740
1768
  refute spec.activated?
1741
1769
 
1742
1770
  File.open gem_deps_file, 'w' do |io|
@@ -1747,7 +1775,7 @@ class TestGem < Gem::TestCase
1747
1775
 
1748
1776
  Gem.use_gemdeps gem_deps_file
1749
1777
 
1750
- assert_equal add_bundler_full_name(%W(a-1)), loaded_spec_names
1778
+ assert_equal add_bundler_full_name(%W[a-1]), loaded_spec_names
1751
1779
  refute_nil Gem.gemdeps
1752
1780
  end
1753
1781
 
@@ -1797,7 +1825,7 @@ class TestGem < Gem::TestCase
1797
1825
 
1798
1826
  spec = util_spec 'a', 1
1799
1827
  install_specs spec
1800
- spec = Gem::Specification.find { |s| s == spec }
1828
+ spec = Gem::Specification.find {|s| s == spec }
1801
1829
 
1802
1830
  refute spec.activated?
1803
1831
 
@@ -1807,7 +1835,7 @@ class TestGem < Gem::TestCase
1807
1835
 
1808
1836
  Gem.use_gemdeps
1809
1837
 
1810
- assert_equal add_bundler_full_name(%W(a-1)), loaded_spec_names
1838
+ assert_equal add_bundler_full_name(%W[a-1]), loaded_spec_names
1811
1839
  ensure
1812
1840
  ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
1813
1841
  end
@@ -1875,7 +1903,7 @@ You may need to `gem install -g` to install missing gems
1875
1903
  spec = util_spec 'a', 1
1876
1904
  install_specs spec
1877
1905
 
1878
- spec = Gem::Specification.find { |s| s == spec }
1906
+ spec = Gem::Specification.find {|s| s == spec }
1879
1907
  refute spec.activated?
1880
1908
 
1881
1909
  File.open 'x', 'w' do |io|
@@ -1884,7 +1912,7 @@ You may need to `gem install -g` to install missing gems
1884
1912
 
1885
1913
  Gem.use_gemdeps
1886
1914
 
1887
- assert_equal add_bundler_full_name(%W(a-1)), loaded_spec_names
1915
+ assert_equal add_bundler_full_name(%W[a-1]), loaded_spec_names
1888
1916
  ensure
1889
1917
  ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
1890
1918
  end
@@ -1903,35 +1931,60 @@ You may need to `gem install -g` to install missing gems
1903
1931
  assert platform_defaults.is_a? Hash
1904
1932
  end
1905
1933
 
1906
- def ruby_install_name(name)
1907
- orig_RUBY_INSTALL_NAME = RbConfig::CONFIG['ruby_install_name']
1908
- RbConfig::CONFIG['ruby_install_name'] = name
1934
+ # Ensure that `Gem.source_date_epoch` is consistent even if
1935
+ # $SOURCE_DATE_EPOCH has not been set.
1936
+ def test_default_source_date_epoch_doesnt_change
1937
+ old_epoch = ENV['SOURCE_DATE_EPOCH']
1938
+ ENV['SOURCE_DATE_EPOCH'] = nil
1909
1939
 
1910
- yield
1940
+ # Unfortunately, there is no real way to test this aside from waiting
1941
+ # enough for `Time.now.to_i` to change -- which is a whole second.
1942
+ #
1943
+ # Fortunately, we only need to do this once.
1944
+ a = Gem.source_date_epoch
1945
+ sleep 1
1946
+ b = Gem.source_date_epoch
1947
+ assert_equal a, b
1911
1948
  ensure
1912
- if orig_RUBY_INSTALL_NAME
1913
- RbConfig::CONFIG['ruby_install_name'] = orig_RUBY_INSTALL_NAME
1914
- else
1915
- RbConfig::CONFIG.delete 'ruby_install_name'
1916
- end
1949
+ ENV['SOURCE_DATE_EPOCH'] = old_epoch
1917
1950
  end
1918
1951
 
1919
- def with_bindir_and_exeext(bindir, exeext)
1920
- bindir(bindir) do
1921
- exeext(exeext) do
1952
+ def ruby_install_name(name)
1953
+ with_clean_path_to_ruby do
1954
+ orig_RUBY_INSTALL_NAME = RbConfig::CONFIG['ruby_install_name']
1955
+ RbConfig::CONFIG['ruby_install_name'] = name
1956
+
1957
+ begin
1922
1958
  yield
1959
+ ensure
1960
+ if orig_RUBY_INSTALL_NAME
1961
+ RbConfig::CONFIG['ruby_install_name'] = orig_RUBY_INSTALL_NAME
1962
+ else
1963
+ RbConfig::CONFIG.delete 'ruby_install_name'
1964
+ end
1923
1965
  end
1924
1966
  end
1925
1967
  end
1926
1968
 
1927
- def with_clean_path_to_ruby
1928
- orig_ruby = Gem.ruby
1969
+ def with_rb_config_ruby(path)
1970
+ rb_config_singleton_class = class << RbConfig; self; end
1971
+ orig_path = RbConfig.ruby
1929
1972
 
1930
- Gem.instance_variable_set :@ruby, nil
1973
+ redefine_method(rb_config_singleton_class, :ruby, path)
1931
1974
 
1932
1975
  yield
1933
1976
  ensure
1934
- Gem.instance_variable_set :@ruby, orig_ruby
1977
+ redefine_method(rb_config_singleton_class, :ruby, orig_path)
1978
+ end
1979
+
1980
+ def redefine_method(base, method, new_result)
1981
+ if RUBY_VERSION >= "2.5"
1982
+ base.alias_method(method, method)
1983
+ base.define_method(method) { new_result }
1984
+ else
1985
+ base.send(:alias_method, method, method)
1986
+ base.send(:define_method, method) { new_result }
1987
+ end
1935
1988
  end
1936
1989
 
1937
1990
  def with_plugin(path)
@@ -1979,5 +2032,4 @@ You may need to `gem install -g` to install missing gems
1979
2032
  def util_cache_dir
1980
2033
  File.join Gem.dir, "cache"
1981
2034
  end
1982
-
1983
2035
  end