rubygems-update 3.1.2 → 3.2.6

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 (562) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +756 -489
  3. data/CODE_OF_CONDUCT.md +55 -19
  4. data/CONTRIBUTING.md +25 -11
  5. data/Manifest.txt +75 -104
  6. data/POLICIES.md +6 -12
  7. data/README.md +5 -5
  8. data/Rakefile +64 -92
  9. data/bin/update_rubygems +1 -1
  10. data/bundler/CHANGELOG.md +1636 -1422
  11. data/bundler/README.md +6 -8
  12. data/bundler/UPGRADING.md +18 -32
  13. data/bundler/bundler.gemspec +4 -4
  14. data/bundler/exe/bundle +3 -0
  15. data/bundler/lib/bundler.rb +32 -8
  16. data/bundler/lib/bundler/build_metadata.rb +4 -12
  17. data/bundler/lib/bundler/cli.rb +55 -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 +86 -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 -13
  43. data/bundler/lib/bundler/definition.rb +66 -82
  44. data/bundler/lib/bundler/dep_proxy.rb +16 -9
  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 +4 -4
  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 → lib/bundler/man}/bundle-add.1 +1 -1
  74. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
  75. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +5 -3
  76. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
  77. data/bundler/{man → lib/bundler/man}/bundle-cache.1 +1 -1
  78. data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
  79. data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
  80. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  81. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +1 -1
  82. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  83. data/bundler/{man → lib/bundler/man}/bundle-config.1 +16 -25
  84. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +19 -30
  85. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  86. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  87. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +1 -1
  88. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
  89. data/bundler/{man → lib/bundler/man}/bundle-gem.1 +25 -3
  90. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
  91. data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
  92. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  93. data/bundler/{man → lib/bundler/man}/bundle-init.1 +1 -1
  94. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
  95. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +1 -1
  96. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  97. data/bundler/{man → lib/bundler/man}/bundle-install.1 +30 -3
  98. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
  99. data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
  100. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  101. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  102. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  103. data/bundler/{man → lib/bundler/man}/bundle-open.1 +1 -1
  104. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  105. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
  106. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  107. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +1 -1
  108. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  109. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  110. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  111. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  112. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  113. data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
  114. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  115. data/bundler/{man → lib/bundler/man}/bundle-update.1 +1 -1
  116. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
  117. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +1 -1
  118. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  119. data/bundler/{man → lib/bundler/man}/bundle.1 +1 -1
  120. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
  121. data/bundler/{man → lib/bundler/man}/gemfile.5 +4 -4
  122. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
  123. data/bundler/{man → lib/bundler/man}/index.txt +0 -0
  124. data/bundler/lib/bundler/mirror.rb +2 -2
  125. data/bundler/lib/bundler/plugin.rb +30 -5
  126. data/bundler/lib/bundler/plugin/api/source.rb +1 -1
  127. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  128. data/bundler/lib/bundler/plugin/index.rb +10 -1
  129. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  130. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  131. data/bundler/lib/bundler/plugin/source_list.rb +1 -1
  132. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  133. data/bundler/lib/bundler/remote_specification.rb +5 -2
  134. data/bundler/lib/bundler/resolver.rb +43 -19
  135. data/bundler/lib/bundler/resolver/spec_group.rb +39 -24
  136. data/bundler/lib/bundler/retry.rb +1 -1
  137. data/bundler/lib/bundler/ruby_version.rb +1 -1
  138. data/bundler/lib/bundler/rubygems_ext.rb +69 -9
  139. data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
  140. data/bundler/lib/bundler/rubygems_integration.rb +26 -61
  141. data/bundler/lib/bundler/runtime.rb +4 -14
  142. data/bundler/lib/bundler/settings.rb +49 -46
  143. data/bundler/lib/bundler/shared_helpers.rb +2 -2
  144. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  145. data/bundler/lib/bundler/source.rb +1 -1
  146. data/bundler/lib/bundler/source/git.rb +23 -21
  147. data/bundler/lib/bundler/source/git/git_proxy.rb +82 -80
  148. data/bundler/lib/bundler/source/path.rb +7 -3
  149. data/bundler/lib/bundler/source/path/installer.rb +10 -10
  150. data/bundler/lib/bundler/source/rubygems.rb +23 -17
  151. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  152. data/bundler/lib/bundler/source_list.rb +2 -2
  153. data/bundler/lib/bundler/spec_set.rb +8 -10
  154. data/bundler/lib/bundler/stub_specification.rb +17 -7
  155. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  156. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  157. data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -2
  158. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  159. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  160. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  161. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  162. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  163. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  164. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  165. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  166. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +15 -7
  167. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  168. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  169. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  170. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  171. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  172. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  173. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  174. data/bundler/lib/bundler/ui/shell.rb +5 -5
  175. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
  176. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  177. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
  178. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  179. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  180. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  181. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +48 -46
  182. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -208
  183. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  184. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  185. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  186. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  187. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  188. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  189. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  190. data/bundler/lib/bundler/version.rb +1 -1
  191. data/bundler/lib/bundler/worker.rb +1 -1
  192. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  193. data/lib/rubygems.rb +138 -187
  194. data/lib/rubygems/available_set.rb +4 -6
  195. data/lib/rubygems/basic_specification.rb +12 -10
  196. data/lib/rubygems/bundler_version_finder.rb +14 -9
  197. data/lib/rubygems/command.rb +17 -17
  198. data/lib/rubygems/command_manager.rb +5 -6
  199. data/lib/rubygems/commands/build_command.rb +40 -20
  200. data/lib/rubygems/commands/cert_command.rb +2 -10
  201. data/lib/rubygems/commands/check_command.rb +0 -2
  202. data/lib/rubygems/commands/cleanup_command.rb +11 -7
  203. data/lib/rubygems/commands/contents_command.rb +4 -6
  204. data/lib/rubygems/commands/dependency_command.rb +6 -8
  205. data/lib/rubygems/commands/environment_command.rb +1 -3
  206. data/lib/rubygems/commands/fetch_command.rb +2 -4
  207. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  208. data/lib/rubygems/commands/help_command.rb +4 -4
  209. data/lib/rubygems/commands/info_command.rb +8 -5
  210. data/lib/rubygems/commands/install_command.rb +3 -5
  211. data/lib/rubygems/commands/list_command.rb +8 -7
  212. data/lib/rubygems/commands/lock_command.rb +1 -3
  213. data/lib/rubygems/commands/mirror_command.rb +0 -2
  214. data/lib/rubygems/commands/open_command.rb +0 -4
  215. data/lib/rubygems/commands/outdated_command.rb +0 -2
  216. data/lib/rubygems/commands/owner_command.rb +9 -4
  217. data/lib/rubygems/commands/pristine_command.rb +11 -5
  218. data/lib/rubygems/commands/push_command.rb +10 -47
  219. data/lib/rubygems/commands/query_command.rb +14 -344
  220. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  221. data/lib/rubygems/commands/search_command.rb +7 -7
  222. data/lib/rubygems/commands/server_command.rb +3 -1
  223. data/lib/rubygems/commands/setup_command.rb +101 -74
  224. data/lib/rubygems/commands/signin_command.rb +0 -2
  225. data/lib/rubygems/commands/signout_command.rb +0 -2
  226. data/lib/rubygems/commands/sources_command.rb +9 -7
  227. data/lib/rubygems/commands/specification_command.rb +8 -4
  228. data/lib/rubygems/commands/stale_command.rb +1 -3
  229. data/lib/rubygems/commands/uninstall_command.rb +2 -4
  230. data/lib/rubygems/commands/unpack_command.rb +1 -3
  231. data/lib/rubygems/commands/update_command.rb +59 -14
  232. data/lib/rubygems/commands/which_command.rb +0 -2
  233. data/lib/rubygems/commands/yank_command.rb +4 -7
  234. data/lib/rubygems/config_file.rb +11 -4
  235. data/lib/rubygems/core_ext/kernel_require.rb +29 -36
  236. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  237. data/lib/rubygems/defaults.rb +101 -7
  238. data/lib/rubygems/dependency.rb +3 -8
  239. data/lib/rubygems/dependency_installer.rb +6 -78
  240. data/lib/rubygems/dependency_list.rb +7 -9
  241. data/lib/rubygems/deprecate.rb +46 -1
  242. data/lib/rubygems/doctor.rb +4 -4
  243. data/lib/rubygems/errors.rb +3 -14
  244. data/lib/rubygems/exceptions.rb +2 -33
  245. data/lib/rubygems/ext.rb +6 -6
  246. data/lib/rubygems/ext/build_error.rb +2 -0
  247. data/lib/rubygems/ext/builder.rb +21 -39
  248. data/lib/rubygems/ext/cmake_builder.rb +6 -9
  249. data/lib/rubygems/ext/configure_builder.rb +5 -8
  250. data/lib/rubygems/ext/ext_conf_builder.rb +21 -19
  251. data/lib/rubygems/ext/rake_builder.rb +4 -6
  252. data/lib/rubygems/gem_runner.rb +3 -10
  253. data/lib/rubygems/gemcutter_utilities.rb +102 -21
  254. data/lib/rubygems/indexer.rb +1 -22
  255. data/lib/rubygems/install_update_options.rb +7 -7
  256. data/lib/rubygems/installer.rb +59 -80
  257. data/lib/rubygems/installer_test_case.rb +25 -11
  258. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  259. data/lib/rubygems/local_remote_options.rb +1 -1
  260. data/lib/rubygems/mock_gem_ui.rb +0 -6
  261. data/lib/rubygems/name_tuple.rb +3 -7
  262. data/lib/rubygems/openssl.rb +7 -0
  263. data/lib/rubygems/package.rb +14 -25
  264. data/lib/rubygems/package/digest_io.rb +0 -2
  265. data/lib/rubygems/package/file_source.rb +0 -2
  266. data/lib/rubygems/package/io_source.rb +0 -2
  267. data/lib/rubygems/package/old.rb +1 -3
  268. data/lib/rubygems/package/tar_header.rb +4 -6
  269. data/lib/rubygems/package/tar_reader.rb +0 -3
  270. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  271. data/lib/rubygems/package/tar_test_case.rb +2 -4
  272. data/lib/rubygems/package/tar_writer.rb +2 -12
  273. data/lib/rubygems/package_task.rb +1 -7
  274. data/lib/rubygems/path_support.rb +1 -3
  275. data/lib/rubygems/platform.rb +21 -16
  276. data/lib/rubygems/psych_tree.rb +0 -2
  277. data/lib/rubygems/query_utils.rb +353 -0
  278. data/lib/rubygems/rdoc.rb +0 -12
  279. data/lib/rubygems/remote_fetcher.rb +14 -29
  280. data/lib/rubygems/request.rb +4 -11
  281. data/lib/rubygems/request/connection_pools.rb +1 -5
  282. data/lib/rubygems/request/http_pool.rb +0 -2
  283. data/lib/rubygems/request/https_pool.rb +0 -2
  284. data/lib/rubygems/request_set.rb +7 -20
  285. data/lib/rubygems/request_set/gem_dependency_api.rb +6 -8
  286. data/lib/rubygems/request_set/lockfile.rb +8 -12
  287. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  288. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
  289. data/lib/rubygems/requirement.rb +21 -22
  290. data/lib/rubygems/resolver.rb +14 -12
  291. data/lib/rubygems/resolver/activation_request.rb +9 -3
  292. data/lib/rubygems/resolver/api_set.rb +31 -24
  293. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  294. data/lib/rubygems/resolver/api_specification.rb +24 -10
  295. data/lib/rubygems/resolver/best_set.rb +2 -4
  296. data/lib/rubygems/resolver/composed_set.rb +3 -5
  297. data/lib/rubygems/resolver/conflict.rb +2 -4
  298. data/lib/rubygems/resolver/current_set.rb +0 -2
  299. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  300. data/lib/rubygems/resolver/git_set.rb +0 -2
  301. data/lib/rubygems/resolver/git_specification.rb +0 -2
  302. data/lib/rubygems/resolver/index_set.rb +1 -3
  303. data/lib/rubygems/resolver/index_specification.rb +29 -2
  304. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  305. data/lib/rubygems/resolver/installer_set.rb +60 -13
  306. data/lib/rubygems/resolver/local_specification.rb +0 -2
  307. data/lib/rubygems/resolver/lock_set.rb +2 -4
  308. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  309. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  310. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  311. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  312. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  313. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  314. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  315. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  316. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  317. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  318. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  319. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  320. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  321. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  322. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  323. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  324. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  325. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  326. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  327. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  328. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  329. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  330. data/lib/rubygems/resolver/set.rb +0 -2
  331. data/lib/rubygems/resolver/source_set.rb +0 -2
  332. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  333. data/lib/rubygems/resolver/specification.rb +13 -3
  334. data/lib/rubygems/resolver/stats.rb +0 -2
  335. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  336. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  337. data/lib/rubygems/s3_uri_signer.rb +2 -8
  338. data/lib/rubygems/safe_yaml.rb +4 -4
  339. data/lib/rubygems/security.rb +27 -34
  340. data/lib/rubygems/security/policy.rb +4 -8
  341. data/lib/rubygems/security/signer.rb +5 -7
  342. data/lib/rubygems/security/trust_dir.rb +1 -3
  343. data/lib/rubygems/server.rb +16 -13
  344. data/lib/rubygems/source.rb +23 -12
  345. data/lib/rubygems/source/git.rb +7 -8
  346. data/lib/rubygems/source/installed.rb +0 -2
  347. data/lib/rubygems/source/local.rb +2 -4
  348. data/lib/rubygems/source/lock.rb +0 -2
  349. data/lib/rubygems/source/specific_file.rb +0 -2
  350. data/lib/rubygems/source/vendor.rb +0 -2
  351. data/lib/rubygems/source_list.rb +4 -7
  352. data/lib/rubygems/spec_fetcher.rb +19 -18
  353. data/lib/rubygems/specification.rb +122 -131
  354. data/lib/rubygems/specification_policy.rb +88 -30
  355. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  356. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  357. data/lib/rubygems/stub_specification.rb +1 -5
  358. data/lib/rubygems/syck_hack.rb +0 -2
  359. data/lib/rubygems/test_case.rb +120 -134
  360. data/lib/rubygems/test_utilities.rb +12 -19
  361. data/lib/rubygems/uninstaller.rb +35 -16
  362. data/lib/rubygems/uri_formatter.rb +2 -3
  363. data/lib/rubygems/uri_parser.rb +0 -2
  364. data/lib/rubygems/user_interaction.rb +1 -26
  365. data/lib/rubygems/util.rb +15 -3
  366. data/lib/rubygems/util/licenses.rb +4 -6
  367. data/lib/rubygems/util/list.rb +0 -2
  368. data/lib/rubygems/validator.rb +1 -3
  369. data/lib/rubygems/version.rb +5 -7
  370. data/lib/rubygems/version_option.rb +6 -0
  371. data/rubygems-update.gemspec +3 -3
  372. data/setup.rb +2 -7
  373. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  374. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  375. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  376. data/test/rubygems/rubygems_plugin.rb +0 -2
  377. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  378. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  379. data/test/rubygems/test_bundled_ca.rb +42 -45
  380. data/test/rubygems/test_config.rb +0 -2
  381. data/test/rubygems/test_deprecate.rb +40 -7
  382. data/test/rubygems/test_gem.rb +156 -99
  383. data/test/rubygems/test_gem_available_set.rb +3 -5
  384. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
  385. data/test/rubygems/test_gem_command.rb +24 -7
  386. data/test/rubygems/test_gem_command_manager.rb +36 -5
  387. data/test/rubygems/test_gem_commands_build_command.rb +250 -15
  388. data/test/rubygems/test_gem_commands_cert_command.rb +4 -6
  389. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  390. data/test/rubygems/test_gem_commands_cleanup_command.rb +14 -5
  391. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  392. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  393. data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
  394. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  395. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
  396. data/test/rubygems/test_gem_commands_help_command.rb +15 -4
  397. data/test/rubygems/test_gem_commands_info_command.rb +6 -8
  398. data/test/rubygems/test_gem_commands_install_command.rb +163 -34
  399. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  400. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  401. data/test/rubygems/test_gem_commands_mirror.rb +1 -3
  402. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  403. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
  404. data/test/rubygems/test_gem_commands_owner_command.rb +59 -5
  405. data/test/rubygems/test_gem_commands_pristine_command.rb +43 -12
  406. data/test/rubygems/test_gem_commands_push_command.rb +77 -9
  407. data/test/rubygems/test_gem_commands_query_command.rb +12 -12
  408. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  409. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  410. data/test/rubygems/test_gem_commands_setup_command.rb +160 -135
  411. data/test/rubygems/test_gem_commands_signin_command.rb +33 -9
  412. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  413. data/test/rubygems/test_gem_commands_sources_command.rb +99 -3
  414. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  415. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  416. data/test/rubygems/test_gem_commands_uninstall_command.rb +2 -3
  417. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  418. data/test/rubygems/test_gem_commands_update_command.rb +116 -7
  419. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  420. data/test/rubygems/test_gem_commands_yank_command.rb +44 -8
  421. data/test/rubygems/test_gem_config_file.rb +7 -12
  422. data/test/rubygems/test_gem_dependency.rb +0 -2
  423. data/test/rubygems/test_gem_dependency_installer.rb +116 -239
  424. data/test/rubygems/test_gem_dependency_list.rb +10 -12
  425. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  426. data/test/rubygems/test_gem_doctor.rb +28 -2
  427. data/test/rubygems/test_gem_ext_builder.rb +50 -47
  428. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -25
  429. data/test/rubygems/test_gem_ext_configure_builder.rb +6 -22
  430. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -29
  431. data/test/rubygems/test_gem_ext_rake_builder.rb +39 -24
  432. data/test/rubygems/test_gem_gem_runner.rb +44 -1
  433. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
  434. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  435. data/test/rubygems/test_gem_indexer.rb +9 -15
  436. data/test/rubygems/test_gem_install_update_options.rb +14 -4
  437. data/test/rubygems/test_gem_installer.rb +258 -115
  438. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  439. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  440. data/test/rubygems/test_gem_package.rb +41 -39
  441. data/test/rubygems/test_gem_package_old.rb +4 -6
  442. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  443. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  444. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  445. data/test/rubygems/test_gem_package_tar_writer.rb +9 -6
  446. data/test/rubygems/test_gem_package_task.rb +46 -13
  447. data/test/rubygems/test_gem_path_support.rb +0 -2
  448. data/test/rubygems/test_gem_platform.rb +71 -6
  449. data/test/rubygems/test_gem_rdoc.rb +0 -2
  450. data/test/rubygems/test_gem_remote_fetcher.rb +169 -212
  451. data/test/rubygems/test_gem_request.rb +13 -17
  452. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  453. data/test/rubygems/test_gem_request_set.rb +72 -22
  454. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
  455. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -6
  456. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
  457. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
  458. data/test/rubygems/test_gem_requirement.rb +43 -3
  459. data/test/rubygems/test_gem_resolver.rb +6 -8
  460. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  461. data/test/rubygems/test_gem_resolver_api_set.rb +60 -59
  462. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
  463. data/test/rubygems/test_gem_resolver_best_set.rb +27 -6
  464. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  465. data/test/rubygems/test_gem_resolver_conflict.rb +1 -3
  466. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  467. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  468. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  469. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  470. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  471. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  472. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
  473. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  474. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  475. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  476. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  477. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  478. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  479. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  480. data/test/rubygems/test_gem_security.rb +22 -24
  481. data/test/rubygems/test_gem_security_policy.rb +7 -12
  482. data/test/rubygems/test_gem_security_signer.rb +10 -12
  483. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  484. data/test/rubygems/test_gem_server.rb +10 -14
  485. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  486. data/test/rubygems/test_gem_source.rb +19 -18
  487. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  488. data/test/rubygems/test_gem_source_git.rb +12 -13
  489. data/test/rubygems/test_gem_source_installed.rb +7 -9
  490. data/test/rubygems/test_gem_source_list.rb +1 -2
  491. data/test/rubygems/test_gem_source_local.rb +8 -10
  492. data/test/rubygems/test_gem_source_lock.rb +10 -12
  493. data/test/rubygems/test_gem_source_specific_file.rb +7 -9
  494. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  495. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  496. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  497. data/test/rubygems/test_gem_specification.rb +188 -131
  498. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  499. data/test/rubygems/test_gem_stub_specification.rb +4 -7
  500. data/test/rubygems/test_gem_text.rb +1 -3
  501. data/test/rubygems/test_gem_uninstaller.rb +134 -12
  502. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  503. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  504. data/test/rubygems/test_gem_util.rb +7 -7
  505. data/test/rubygems/test_gem_validator.rb +1 -3
  506. data/test/rubygems/test_gem_version.rb +1 -3
  507. data/test/rubygems/test_gem_version_option.rb +1 -3
  508. data/test/rubygems/test_kernel.rb +25 -10
  509. data/test/rubygems/test_project_sanity.rb +7 -2
  510. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  511. data/test/rubygems/test_require.rb +291 -56
  512. data/test/test_changelog_generator.rb +17 -0
  513. metadata +79 -133
  514. data/.bundle/config +0 -2
  515. data/.rubocop.yml +0 -91
  516. data/Gemfile +0 -8
  517. data/Gemfile.lock +0 -43
  518. data/bundler/CODE_OF_CONDUCT.md +0 -136
  519. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  520. data/bundler/man/bundle-add.1.txt +0 -58
  521. data/bundler/man/bundle-binstubs.1.txt +0 -48
  522. data/bundler/man/bundle-cache.1.txt +0 -78
  523. data/bundler/man/bundle-check.1.txt +0 -33
  524. data/bundler/man/bundle-clean.1.txt +0 -26
  525. data/bundler/man/bundle-config.1.txt +0 -528
  526. data/bundler/man/bundle-doctor.1.txt +0 -44
  527. data/bundler/man/bundle-exec.1.txt +0 -178
  528. data/bundler/man/bundle-gem.1.txt +0 -91
  529. data/bundler/man/bundle-info.1.txt +0 -21
  530. data/bundler/man/bundle-init.1.txt +0 -34
  531. data/bundler/man/bundle-inject.1.txt +0 -32
  532. data/bundler/man/bundle-install.1.txt +0 -401
  533. data/bundler/man/bundle-list.1.txt +0 -43
  534. data/bundler/man/bundle-lock.1.txt +0 -93
  535. data/bundler/man/bundle-open.1.txt +0 -29
  536. data/bundler/man/bundle-outdated.1.txt +0 -131
  537. data/bundler/man/bundle-platform.1.txt +0 -57
  538. data/bundler/man/bundle-pristine.1.txt +0 -44
  539. data/bundler/man/bundle-remove.1.txt +0 -34
  540. data/bundler/man/bundle-show.1.txt +0 -27
  541. data/bundler/man/bundle-update.1.txt +0 -390
  542. data/bundler/man/bundle-viz.1.txt +0 -39
  543. data/bundler/man/bundle.1.txt +0 -116
  544. data/bundler/man/gemfile.5.txt +0 -649
  545. data/lib/rubygems/source_local.rb +0 -7
  546. data/lib/rubygems/source_specific_file.rb +0 -6
  547. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  548. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  549. data/lib/ubygems.rb +0 -14
  550. data/tmp/.keep +0 -0
  551. data/util/CL2notes +0 -55
  552. data/util/bisect +0 -10
  553. data/util/ci.sh +0 -62
  554. data/util/cops/deprecations.rb +0 -52
  555. data/util/create_certs.rb +0 -171
  556. data/util/create_certs.sh +0 -27
  557. data/util/create_encrypted_key.rb +0 -16
  558. data/util/generate_spdx_license_list.rb +0 -63
  559. data/util/patch_with_prs.rb +0 -77
  560. data/util/rubocop +0 -8
  561. data/util/update_bundled_ca_certificates.rb +0 -139
  562. data/util/update_changelog.rb +0 -67
@@ -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
@@ -689,6 +692,11 @@ class TestGem < Gem::TestCase
689
692
  ensure
690
693
  FileUtils.chmod 0600, parent
691
694
  end
695
+
696
+ def test_self_ensure_gem_directories_non_existent_paths
697
+ Gem.ensure_gem_subdirectories '/proc/0123456789/bogus' # should not raise
698
+ Gem.ensure_gem_subdirectories 'classpath:/bogus/x' # JRuby embed scenario
699
+ end
692
700
  end
693
701
 
694
702
  def test_self_extension_dir_shared
@@ -709,7 +717,7 @@ class TestGem < Gem::TestCase
709
717
 
710
718
  discover_path = File.join 'lib', 'sff', 'discover.rb'
711
719
 
712
- foo1, foo2 = %w(1 2).map do |version|
720
+ foo1, foo2 = %w[1 2].map do |version|
713
721
  spec = quick_gem 'sff', version do |s|
714
722
  s.files << discover_path
715
723
  end
@@ -741,7 +749,7 @@ class TestGem < Gem::TestCase
741
749
 
742
750
  discover_path = File.join 'lib', 'sff', 'discover.rb'
743
751
 
744
- foo1, _ = %w(1 2).map do |version|
752
+ foo1, _ = %w[1 2].map do |version|
745
753
  spec = quick_gem 'sff', version do |s|
746
754
  s.files << discover_path
747
755
  end
@@ -762,7 +770,7 @@ class TestGem < Gem::TestCase
762
770
 
763
771
  expected = [
764
772
  File.expand_path('test/rubygems/sff/discover.rb', PROJECT_DIR),
765
- File.join(foo1.full_gem_path, discover_path)
773
+ File.join(foo1.full_gem_path, discover_path),
766
774
  ].sort
767
775
 
768
776
  assert_equal expected, Gem.find_files('sff/discover').sort
@@ -777,7 +785,7 @@ class TestGem < Gem::TestCase
777
785
 
778
786
  discover_path = File.join 'lib', 'sff', 'discover.rb'
779
787
 
780
- _, foo2 = %w(1 2).map do |version|
788
+ _, foo2 = %w[1 2].map do |version|
781
789
  spec = quick_gem 'sff', version do |s|
782
790
  s.files << discover_path
783
791
  end
@@ -1017,7 +1025,7 @@ class TestGem < Gem::TestCase
1017
1025
 
1018
1026
  Gem.refresh
1019
1027
 
1020
- Gem::Specification.each{|spec| assert spec.activated? if spec == s}
1028
+ Gem::Specification.each{|spec| assert spec.activated? if spec == s }
1021
1029
 
1022
1030
  Gem.loaded_specs.delete(s)
1023
1031
  Gem.refresh
@@ -1025,20 +1033,16 @@ class TestGem < Gem::TestCase
1025
1033
 
1026
1034
  def test_self_ruby_escaping_spaces_in_path
1027
1035
  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
1036
+ with_rb_config_ruby("C:/Ruby 1.8/bin/ruby.exe") do
1037
+ assert_equal "\"C:/Ruby 1.8/bin/ruby.exe\"", Gem.ruby
1032
1038
  end
1033
1039
  end
1034
1040
  end
1035
1041
 
1036
1042
  def test_self_ruby_path_without_spaces
1037
1043
  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
1044
+ with_rb_config_ruby("C:/Ruby18/bin/ruby.exe") do
1045
+ assert_equal "C:/Ruby18/bin/ruby.exe", Gem.ruby
1042
1046
  end
1043
1047
  end
1044
1048
  end
@@ -1090,7 +1094,7 @@ class TestGem < Gem::TestCase
1090
1094
  util_restore_RUBY_VERSION
1091
1095
  end
1092
1096
 
1093
- def test_self_ruby_version_with_prerelease
1097
+ def test_self_ruby_version_with_svn_prerelease
1094
1098
  util_set_RUBY_VERSION '2.6.0', -1, 63539, 'ruby 2.6.0preview2 (2018-05-31 trunk 63539) [x86_64-linux]'
1095
1099
 
1096
1100
  assert_equal Gem::Version.new('2.6.0.preview2'), Gem.ruby_version
@@ -1098,6 +1102,14 @@ class TestGem < Gem::TestCase
1098
1102
  util_restore_RUBY_VERSION
1099
1103
  end
1100
1104
 
1105
+ def test_self_ruby_version_with_git_prerelease
1106
+ util_set_RUBY_VERSION '2.7.0', -1, 'b563439274a402e33541f5695b1bfd4ac1085638', 'ruby 2.7.0preview3 (2019-11-23 master b563439274) [x86_64-linux]'
1107
+
1108
+ assert_equal Gem::Version.new('2.7.0.preview3'), Gem.ruby_version
1109
+ ensure
1110
+ util_restore_RUBY_VERSION
1111
+ end
1112
+
1101
1113
  def test_self_ruby_version_with_non_mri_implementations_with_mri_prerelase_compatibility
1102
1114
  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
1115
 
@@ -1106,7 +1118,7 @@ class TestGem < Gem::TestCase
1106
1118
  util_restore_RUBY_VERSION
1107
1119
  end
1108
1120
 
1109
- def test_self_ruby_version_with_trunk
1121
+ def test_self_ruby_version_with_svn_trunk
1110
1122
  util_set_RUBY_VERSION '1.9.2', -1, 23493, 'ruby 1.9.2dev (2009-05-20 trunk 23493) [x86_64-linux]'
1111
1123
 
1112
1124
  assert_equal Gem::Version.new('1.9.2.dev'), Gem.ruby_version
@@ -1114,6 +1126,14 @@ class TestGem < Gem::TestCase
1114
1126
  util_restore_RUBY_VERSION
1115
1127
  end
1116
1128
 
1129
+ def test_self_ruby_version_with_git_master
1130
+ util_set_RUBY_VERSION '2.7.0', -1, '5de284ec78220e75643f89b454ce999da0c1c195', 'ruby 2.7.0dev (2019-12-23T01:37:30Z master 5de284ec78) [x86_64-linux]'
1131
+
1132
+ assert_equal Gem::Version.new('2.7.0.dev'), Gem.ruby_version
1133
+ ensure
1134
+ util_restore_RUBY_VERSION
1135
+ end
1136
+
1117
1137
  def test_self_rubygems_version
1118
1138
  assert_equal Gem::Version.new(Gem::VERSION), Gem.rubygems_version
1119
1139
  end
@@ -1147,7 +1167,7 @@ class TestGem < Gem::TestCase
1147
1167
  def test_self_post_build
1148
1168
  assert_equal 1, Gem.post_build_hooks.length
1149
1169
 
1150
- Gem.post_build { |installer| }
1170
+ Gem.post_build {|installer| }
1151
1171
 
1152
1172
  assert_equal 2, Gem.post_build_hooks.length
1153
1173
  end
@@ -1155,7 +1175,7 @@ class TestGem < Gem::TestCase
1155
1175
  def test_self_post_install
1156
1176
  assert_equal 1, Gem.post_install_hooks.length
1157
1177
 
1158
- Gem.post_install { |installer| }
1178
+ Gem.post_install {|installer| }
1159
1179
 
1160
1180
  assert_equal 2, Gem.post_install_hooks.length
1161
1181
  end
@@ -1163,7 +1183,7 @@ class TestGem < Gem::TestCase
1163
1183
  def test_self_done_installing
1164
1184
  assert_empty Gem.done_installing_hooks
1165
1185
 
1166
- Gem.done_installing { |gems| }
1186
+ Gem.done_installing {|gems| }
1167
1187
 
1168
1188
  assert_equal 1, Gem.done_installing_hooks.length
1169
1189
  end
@@ -1171,7 +1191,7 @@ class TestGem < Gem::TestCase
1171
1191
  def test_self_post_reset
1172
1192
  assert_empty Gem.post_reset_hooks
1173
1193
 
1174
- Gem.post_reset { }
1194
+ Gem.post_reset {}
1175
1195
 
1176
1196
  assert_equal 1, Gem.post_reset_hooks.length
1177
1197
  end
@@ -1179,7 +1199,7 @@ class TestGem < Gem::TestCase
1179
1199
  def test_self_post_uninstall
1180
1200
  assert_equal 1, Gem.post_uninstall_hooks.length
1181
1201
 
1182
- Gem.post_uninstall { |installer| }
1202
+ Gem.post_uninstall {|installer| }
1183
1203
 
1184
1204
  assert_equal 2, Gem.post_uninstall_hooks.length
1185
1205
  end
@@ -1187,7 +1207,7 @@ class TestGem < Gem::TestCase
1187
1207
  def test_self_pre_install
1188
1208
  assert_equal 1, Gem.pre_install_hooks.length
1189
1209
 
1190
- Gem.pre_install { |installer| }
1210
+ Gem.pre_install {|installer| }
1191
1211
 
1192
1212
  assert_equal 2, Gem.pre_install_hooks.length
1193
1213
  end
@@ -1195,7 +1215,7 @@ class TestGem < Gem::TestCase
1195
1215
  def test_self_pre_reset
1196
1216
  assert_empty Gem.pre_reset_hooks
1197
1217
 
1198
- Gem.pre_reset { }
1218
+ Gem.pre_reset {}
1199
1219
 
1200
1220
  assert_equal 1, Gem.pre_reset_hooks.length
1201
1221
  end
@@ -1203,7 +1223,7 @@ class TestGem < Gem::TestCase
1203
1223
  def test_self_pre_uninstall
1204
1224
  assert_equal 1, Gem.pre_uninstall_hooks.length
1205
1225
 
1206
- Gem.pre_uninstall { |installer| }
1226
+ Gem.pre_uninstall {|installer| }
1207
1227
 
1208
1228
  assert_equal 2, Gem.pre_uninstall_hooks.length
1209
1229
  end
@@ -1232,7 +1252,7 @@ class TestGem < Gem::TestCase
1232
1252
 
1233
1253
  install_specs b1, b2, b3
1234
1254
 
1235
- specs1 = Gem::Specification.stubs.find_all { |s| s.name == 'b' }
1255
+ specs1 = Gem::Specification.stubs.find_all {|s| s.name == 'b' }
1236
1256
  Gem::Specification.reset
1237
1257
  specs2 = Gem::Specification.stubs_for('b')
1238
1258
  assert_equal specs1.map(&:version), specs2.map(&:version)
@@ -1255,7 +1275,8 @@ class TestGem < Gem::TestCase
1255
1275
  Gem.try_activate 'a_file'
1256
1276
  end
1257
1277
 
1258
- assert_match %r%Could not find 'b' %, e.message
1278
+ assert_match %r{Could not find 'b' }, e.message
1279
+ assert_match %r{at: #{a.spec_file}}, e.message
1259
1280
  end
1260
1281
 
1261
1282
  def test_self_try_activate_missing_prerelease
@@ -1275,7 +1296,7 @@ class TestGem < Gem::TestCase
1275
1296
  Gem.try_activate 'a_file'
1276
1297
  end
1277
1298
 
1278
- assert_match %r%Could not find 'b' \(= 1.0rc1\)%, e.message
1299
+ assert_match %r{Could not find 'b' \(= 1.0rc1\)}, e.message
1279
1300
  end
1280
1301
 
1281
1302
  def test_self_try_activate_missing_extensions
@@ -1355,6 +1376,8 @@ class TestGem < Gem::TestCase
1355
1376
  parts = [@userhome, '.gem', Gem.ruby_engine]
1356
1377
  parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty?
1357
1378
 
1379
+ FileUtils.mkdir_p File.join(parts)
1380
+
1358
1381
  assert_equal File.join(parts), Gem.user_dir
1359
1382
  end
1360
1383
 
@@ -1378,9 +1401,9 @@ class TestGem < Gem::TestCase
1378
1401
  r.gem "b", "= 1"
1379
1402
  end
1380
1403
 
1381
- activated = Gem::Specification.map { |x| x.full_name }
1404
+ activated = Gem::Specification.map {|x| x.full_name }
1382
1405
 
1383
- assert_equal %w!a-1 b-1 c-2!, activated.sort
1406
+ assert_equal %w[a-1 b-1 c-2], activated.sort
1384
1407
  end
1385
1408
 
1386
1409
  def test_self_needs_picks_up_unresolved_deps
@@ -1400,7 +1423,7 @@ class TestGem < Gem::TestCase
1400
1423
  require "d#{$$}"
1401
1424
  end
1402
1425
 
1403
- assert_equal %w!a-1 b-1 c-2 d-1 e-1!, loaded_spec_names
1426
+ assert_equal %w[a-1 b-1 c-2 d-1 e-1], loaded_spec_names
1404
1427
  end
1405
1428
  end
1406
1429
 
@@ -1470,7 +1493,6 @@ class TestGem < Gem::TestCase
1470
1493
  install_gem foo2
1471
1494
  end
1472
1495
 
1473
- Gem.searcher = nil
1474
1496
  Gem::Specification.reset
1475
1497
 
1476
1498
  gem 'foo'
@@ -1500,8 +1522,8 @@ class TestGem < Gem::TestCase
1500
1522
  def test_gem_path_ordering
1501
1523
  refute_equal Gem.dir, Gem.user_dir
1502
1524
 
1503
- write_file File.join(@tempdir, 'lib', "g.rb") { |fp| fp.puts "" }
1504
- write_file File.join(@tempdir, 'lib', 'm.rb') { |fp| fp.puts "" }
1525
+ write_file File.join(@tempdir, 'lib', "g.rb") {|fp| fp.puts "" }
1526
+ write_file File.join(@tempdir, 'lib', 'm.rb') {|fp| fp.puts "" }
1505
1527
 
1506
1528
  g = util_spec 'g', '1', nil, "lib/g.rb"
1507
1529
  m = util_spec 'm', '1', nil, "lib/m.rb"
@@ -1515,7 +1537,7 @@ class TestGem < Gem::TestCase
1515
1537
 
1516
1538
  tests = [
1517
1539
  [:dir0, [ Gem.dir, Gem.user_dir], m0],
1518
- [:dir1, [ Gem.user_dir, Gem.dir], m1]
1540
+ [:dir1, [ Gem.user_dir, Gem.dir], m1],
1519
1541
  ]
1520
1542
 
1521
1543
  tests.each do |_name, _paths, expected|
@@ -1556,8 +1578,8 @@ class TestGem < Gem::TestCase
1556
1578
  end
1557
1579
 
1558
1580
  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 "" }
1581
+ write_file File.join(@tempdir, 'lib', "g.rb") {|fp| fp.puts "" }
1582
+ write_file File.join(@tempdir, 'lib', 'm.rb') {|fp| fp.puts "" }
1561
1583
 
1562
1584
  g = util_spec 'g', '1', nil, "lib/g.rb"
1563
1585
  m = util_spec 'm', '1', nil, "lib/m.rb"
@@ -1593,7 +1615,7 @@ class TestGem < Gem::TestCase
1593
1615
 
1594
1616
  Gem.use_gemdeps
1595
1617
 
1596
- assert_equal add_bundler_full_name(%W(a-1 b-1 c-1)), loaded_spec_names
1618
+ assert_equal add_bundler_full_name(%W[a-1 b-1 c-1]), loaded_spec_names
1597
1619
  end
1598
1620
 
1599
1621
  def test_auto_activation_of_used_gemdeps_file
@@ -1614,11 +1636,10 @@ class TestGem < Gem::TestCase
1614
1636
  ENV['RUBYGEMS_GEMDEPS'] = "-"
1615
1637
 
1616
1638
  expected_specs = [a, b, util_spec("bundler", Bundler::VERSION), c].compact
1617
- assert_equal expected_specs, Gem.use_gemdeps.sort_by { |s| s.name }
1639
+ assert_equal expected_specs, Gem.use_gemdeps.sort_by {|s| s.name }
1618
1640
  end
1619
1641
 
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)
1642
+ BUNDLER_LIB_PATH = File.expand_path $LOAD_PATH.find {|lp| File.file?(File.join(lp, "bundler.rb")) }
1622
1643
  BUNDLER_FULL_NAME = "bundler-#{Bundler::VERSION}".freeze
1623
1644
 
1624
1645
  def add_bundler_full_name(names)
@@ -1645,8 +1666,8 @@ class TestGem < Gem::TestCase
1645
1666
  ENV['RUBYGEMS_GEMDEPS'] = "-"
1646
1667
 
1647
1668
  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"]
1669
+ cmd = [*ruby_with_rubygems_in_load_path,
1670
+ "-I#{BUNDLER_LIB_PATH}"]
1650
1671
  cmd << "-eputs Gem.loaded_specs.values.map(&:full_name).sort"
1651
1672
 
1652
1673
  File.open path, "w" do |f|
@@ -1683,8 +1704,8 @@ class TestGem < Gem::TestCase
1683
1704
  Dir.mkdir "sub1"
1684
1705
 
1685
1706
  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"]
1707
+ cmd = [*ruby_with_rubygems_in_load_path, "-Csub1",
1708
+ "-I#{BUNDLER_LIB_PATH}"]
1688
1709
  cmd << "-eputs Gem.loaded_specs.values.map(&:full_name).sort"
1689
1710
 
1690
1711
  File.open path, "w" do |f|
@@ -1731,12 +1752,24 @@ class TestGem < Gem::TestCase
1731
1752
  assert_nil Gem.find_unresolved_default_spec("README")
1732
1753
  end
1733
1754
 
1755
+ def test_register_default_spec_old_style_with_folder_starting_with_lib
1756
+ Gem.clear_default_specs
1757
+
1758
+ old_style = Gem::Specification.new do |spec|
1759
+ spec.files = ["libexec/bundle", "foo.rb", "bar.rb"]
1760
+ end
1761
+
1762
+ Gem.register_default_spec old_style
1763
+
1764
+ assert_equal old_style, Gem.find_unresolved_default_spec("foo.rb")
1765
+ end
1766
+
1734
1767
  def test_use_gemdeps
1735
1768
  gem_deps_file = 'gem.deps.rb'.tap(&Gem::UNTAINT)
1736
1769
  spec = util_spec 'a', 1
1737
1770
  install_specs spec
1738
1771
 
1739
- spec = Gem::Specification.find { |s| s == spec }
1772
+ spec = Gem::Specification.find {|s| s == spec }
1740
1773
  refute spec.activated?
1741
1774
 
1742
1775
  File.open gem_deps_file, 'w' do |io|
@@ -1747,7 +1780,7 @@ class TestGem < Gem::TestCase
1747
1780
 
1748
1781
  Gem.use_gemdeps gem_deps_file
1749
1782
 
1750
- assert_equal add_bundler_full_name(%W(a-1)), loaded_spec_names
1783
+ assert_equal add_bundler_full_name(%W[a-1]), loaded_spec_names
1751
1784
  refute_nil Gem.gemdeps
1752
1785
  end
1753
1786
 
@@ -1797,7 +1830,7 @@ class TestGem < Gem::TestCase
1797
1830
 
1798
1831
  spec = util_spec 'a', 1
1799
1832
  install_specs spec
1800
- spec = Gem::Specification.find { |s| s == spec }
1833
+ spec = Gem::Specification.find {|s| s == spec }
1801
1834
 
1802
1835
  refute spec.activated?
1803
1836
 
@@ -1807,7 +1840,7 @@ class TestGem < Gem::TestCase
1807
1840
 
1808
1841
  Gem.use_gemdeps
1809
1842
 
1810
- assert_equal add_bundler_full_name(%W(a-1)), loaded_spec_names
1843
+ assert_equal add_bundler_full_name(%W[a-1]), loaded_spec_names
1811
1844
  ensure
1812
1845
  ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
1813
1846
  end
@@ -1875,7 +1908,7 @@ You may need to `gem install -g` to install missing gems
1875
1908
  spec = util_spec 'a', 1
1876
1909
  install_specs spec
1877
1910
 
1878
- spec = Gem::Specification.find { |s| s == spec }
1911
+ spec = Gem::Specification.find {|s| s == spec }
1879
1912
  refute spec.activated?
1880
1913
 
1881
1914
  File.open 'x', 'w' do |io|
@@ -1884,7 +1917,7 @@ You may need to `gem install -g` to install missing gems
1884
1917
 
1885
1918
  Gem.use_gemdeps
1886
1919
 
1887
- assert_equal add_bundler_full_name(%W(a-1)), loaded_spec_names
1920
+ assert_equal add_bundler_full_name(%W[a-1]), loaded_spec_names
1888
1921
  ensure
1889
1922
  ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
1890
1923
  end
@@ -1903,35 +1936,60 @@ You may need to `gem install -g` to install missing gems
1903
1936
  assert platform_defaults.is_a? Hash
1904
1937
  end
1905
1938
 
1906
- def ruby_install_name(name)
1907
- orig_RUBY_INSTALL_NAME = RbConfig::CONFIG['ruby_install_name']
1908
- RbConfig::CONFIG['ruby_install_name'] = name
1939
+ # Ensure that `Gem.source_date_epoch` is consistent even if
1940
+ # $SOURCE_DATE_EPOCH has not been set.
1941
+ def test_default_source_date_epoch_doesnt_change
1942
+ old_epoch = ENV['SOURCE_DATE_EPOCH']
1943
+ ENV['SOURCE_DATE_EPOCH'] = nil
1909
1944
 
1910
- yield
1945
+ # Unfortunately, there is no real way to test this aside from waiting
1946
+ # enough for `Time.now.to_i` to change -- which is a whole second.
1947
+ #
1948
+ # Fortunately, we only need to do this once.
1949
+ a = Gem.source_date_epoch
1950
+ sleep 1
1951
+ b = Gem.source_date_epoch
1952
+ assert_equal a, b
1911
1953
  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
1954
+ ENV['SOURCE_DATE_EPOCH'] = old_epoch
1917
1955
  end
1918
1956
 
1919
- def with_bindir_and_exeext(bindir, exeext)
1920
- bindir(bindir) do
1921
- exeext(exeext) do
1957
+ def ruby_install_name(name)
1958
+ with_clean_path_to_ruby do
1959
+ orig_RUBY_INSTALL_NAME = RbConfig::CONFIG['ruby_install_name']
1960
+ RbConfig::CONFIG['ruby_install_name'] = name
1961
+
1962
+ begin
1922
1963
  yield
1964
+ ensure
1965
+ if orig_RUBY_INSTALL_NAME
1966
+ RbConfig::CONFIG['ruby_install_name'] = orig_RUBY_INSTALL_NAME
1967
+ else
1968
+ RbConfig::CONFIG.delete 'ruby_install_name'
1969
+ end
1923
1970
  end
1924
1971
  end
1925
1972
  end
1926
1973
 
1927
- def with_clean_path_to_ruby
1928
- orig_ruby = Gem.ruby
1974
+ def with_rb_config_ruby(path)
1975
+ rb_config_singleton_class = class << RbConfig; self; end
1976
+ orig_path = RbConfig.ruby
1929
1977
 
1930
- Gem.instance_variable_set :@ruby, nil
1978
+ redefine_method(rb_config_singleton_class, :ruby, path)
1931
1979
 
1932
1980
  yield
1933
1981
  ensure
1934
- Gem.instance_variable_set :@ruby, orig_ruby
1982
+ redefine_method(rb_config_singleton_class, :ruby, orig_path)
1983
+ end
1984
+
1985
+ def redefine_method(base, method, new_result)
1986
+ if RUBY_VERSION >= "2.5"
1987
+ base.alias_method(method, method)
1988
+ base.define_method(method) { new_result }
1989
+ else
1990
+ base.send(:alias_method, method, method)
1991
+ base.send(:define_method, method) { new_result }
1992
+ end
1935
1993
  end
1936
1994
 
1937
1995
  def with_plugin(path)
@@ -1979,5 +2037,4 @@ You may need to `gem install -g` to install missing gems
1979
2037
  def util_cache_dir
1980
2038
  File.join Gem.dir, "cache"
1981
2039
  end
1982
-
1983
2040
  end