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
@@ -1,14 +1,13 @@
1
1
  require 'rubygems/user_interaction'
2
2
 
3
3
  class Gem::SpecificationPolicy
4
-
5
4
  include Gem::UserInteraction
6
5
 
7
6
  VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z/.freeze # :nodoc:
8
7
 
9
8
  SPECIAL_CHARACTERS = /\A[#{Regexp.escape('.-_')}]+/.freeze # :nodoc:
10
9
 
11
- VALID_URI_PATTERN = %r{\Ahttps?:\/\/([^\s:@]+:[^\s:@]*@)?[A-Za-z\d\-]+(\.[A-Za-z\d\-]+)+\.?(:\d{1,5})?([\/?]\S*)?\z}.freeze # :nodoc:
10
+ VALID_URI_PATTERN = %r{\Ahttps?:\/\/([^\s:@]+:[^\s:@]*@)?[A-Za-z\d\-]+(\.[A-Za-z\d\-]+)+\.?(:\d{1,5})?([\/?]\S*)?\z}.freeze # :nodoc:
12
11
 
13
12
  METADATA_LINK_KEYS = %w[
14
13
  bug_tracker_uri
@@ -18,6 +17,7 @@ class Gem::SpecificationPolicy
18
17
  mailing_list_uri
19
18
  source_code_uri
20
19
  wiki_uri
20
+ funding_uri
21
21
  ].freeze # :nodoc:
22
22
 
23
23
  def initialize(specification)
@@ -32,13 +32,32 @@ class Gem::SpecificationPolicy
32
32
  attr_accessor :packaging
33
33
 
34
34
  ##
35
- # Checks that the specification contains all required fields, and does a
36
- # very basic sanity check.
35
+ # Does a sanity check on the specification.
37
36
  #
38
37
  # Raises InvalidSpecificationException if the spec does not pass the
39
38
  # checks.
39
+ #
40
+ # It also performs some validations that do not raise but print warning
41
+ # messages instead.
40
42
 
41
43
  def validate(strict = false)
44
+ validate_required!
45
+
46
+ validate_optional(strict) if packaging || strict
47
+
48
+ true
49
+ end
50
+
51
+ ##
52
+ # Does a sanity check on the specification.
53
+ #
54
+ # Raises InvalidSpecificationException if the spec does not pass the
55
+ # checks.
56
+ #
57
+ # Only runs checks that are considered necessary for the specification to be
58
+ # functional.
59
+
60
+ def validate_required!
42
61
  validate_nil_attributes
43
62
 
44
63
  validate_rubygems_version
@@ -65,16 +84,26 @@ class Gem::SpecificationPolicy
65
84
 
66
85
  validate_metadata
67
86
 
87
+ validate_licenses_length
88
+
89
+ validate_lazy_metadata
90
+
91
+ validate_duplicate_dependencies
92
+ end
93
+
94
+ def validate_optional(strict)
68
95
  validate_licenses
69
96
 
70
97
  validate_permissions
71
98
 
72
- validate_lazy_metadata
73
-
74
99
  validate_values
75
100
 
76
101
  validate_dependencies
77
102
 
103
+ validate_extensions
104
+
105
+ validate_removed_attributes
106
+
78
107
  if @warnings > 0
79
108
  if strict
80
109
  error "specification has warnings"
@@ -82,8 +111,6 @@ class Gem::SpecificationPolicy
82
111
  alert_warning help_text
83
112
  end
84
113
  end
85
-
86
- true
87
114
  end
88
115
 
89
116
  ##
@@ -122,14 +149,13 @@ class Gem::SpecificationPolicy
122
149
  end
123
150
 
124
151
  ##
125
- # Implementation for Specification#validate_dependencies
152
+ # Checks that no duplicate dependencies are specified.
126
153
 
127
- def validate_dependencies # :nodoc:
154
+ def validate_duplicate_dependencies # :nodoc:
128
155
  # NOTE: see REFACTOR note in Gem::Dependency about types - this might be brittle
129
- seen = Gem::Dependency::TYPES.inject({}) { |types, type| types.merge({ type => {}}) }
156
+ seen = Gem::Dependency::TYPES.inject({}) {|types, type| types.merge({ type => {}}) }
130
157
 
131
158
  error_messages = []
132
- warning_messages = []
133
159
  @specification.dependencies.each do |dep|
134
160
  if prev = seen[dep.type][dep.name]
135
161
  error_messages << <<-MESSAGE
@@ -139,7 +165,20 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
139
165
  end
140
166
 
141
167
  seen[dep.type][dep.name] = dep
168
+ end
169
+ if error_messages.any?
170
+ error error_messages.join
171
+ end
172
+ end
142
173
 
174
+ ##
175
+ # Checks that dependencies use requirements as we recommend. Warnings are
176
+ # issued when dependencies are open-ended or overly strict for semantic
177
+ # versioning.
178
+
179
+ def validate_dependencies # :nodoc:
180
+ warning_messages = []
181
+ @specification.dependencies.each do |dep|
143
182
  prerelease_dep = dep.requirements_list.any? do |req|
144
183
  Gem::Requirement.new(req).prerelease?
145
184
  end
@@ -174,11 +213,8 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
174
213
  warning_messages << ["open-ended dependency on #{dep} is not recommended", recommendation].join("\n") + "\n"
175
214
  end
176
215
  end
177
- if error_messages.any?
178
- error error_messages.join
179
- end
180
216
  if warning_messages.any?
181
- warning_messages.each { |warning_message| warning warning_message }
217
+ warning_messages.each {|warning_message| warning warning_message }
182
218
  end
183
219
  end
184
220
 
@@ -255,7 +291,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
255
291
  def validate_non_files
256
292
  return unless packaging
257
293
 
258
- non_files = @specification.files.reject {|x| File.file?(x) || File.symlink?(x)}
294
+ non_files = @specification.files.reject {|x| File.file?(x) || File.symlink?(x) }
259
295
 
260
296
  unless non_files.empty?
261
297
  error "[\"#{non_files.join "\", \""}\"] are not files"
@@ -280,7 +316,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
280
316
  platform = @specification.platform
281
317
 
282
318
  case platform
283
- when Gem::Platform, Gem::Platform::RUBY # ok
319
+ when Gem::Platform, Gem::Platform::RUBY # ok
284
320
  else
285
321
  error "invalid platform #{platform.inspect}, see Gem::Platform"
286
322
  end
@@ -301,9 +337,8 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
301
337
  String
302
338
  end
303
339
 
304
- unless Array === val and val.all? {|x| x.kind_of?(klass)}
305
- raise(Gem::InvalidSpecificationException,
306
- "#{field} must be an Array of #{klass}")
340
+ unless Array === val and val.all? {|x| x.kind_of?(klass) }
341
+ error "#{field} must be an Array of #{klass}"
307
342
  end
308
343
  end
309
344
 
@@ -313,29 +348,35 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
313
348
  error "authors may not be empty"
314
349
  end
315
350
 
316
- def validate_licenses
351
+ def validate_licenses_length
317
352
  licenses = @specification.licenses
318
353
 
319
354
  licenses.each do |license|
320
355
  if license.length > 64
321
356
  error "each license must be 64 characters or less"
322
357
  end
358
+ end
359
+ end
360
+
361
+ def validate_licenses
362
+ licenses = @specification.licenses
323
363
 
364
+ licenses.each do |license|
324
365
  if !Gem::Licenses.match?(license)
325
366
  suggestions = Gem::Licenses.suggestions(license)
326
- message = <<-warning
367
+ message = <<-WARNING
327
368
  license value '#{license}' is invalid. Use a license identifier from
328
369
  http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard license.
329
- warning
330
- message += "Did you mean #{suggestions.map { |s| "'#{s}'"}.join(', ')}?\n" unless suggestions.nil?
370
+ WARNING
371
+ message += "Did you mean #{suggestions.map {|s| "'#{s}'" }.join(', ')}?\n" unless suggestions.nil?
331
372
  warning(message)
332
373
  end
333
374
  end
334
375
 
335
- warning <<-warning if licenses.empty?
376
+ warning <<-WARNING if licenses.empty?
336
377
  licenses is empty, but is recommended. Use a license identifier from
337
378
  http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard license.
338
- warning
379
+ WARNING
339
380
  end
340
381
 
341
382
  LAZY = '"FIxxxXME" or "TOxxxDO"'.gsub(/xxx/, '')
@@ -391,7 +432,7 @@ http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard li
391
432
  validate_shebang_line_in(executable)
392
433
  end
393
434
 
394
- @specification.files.select { |f| File.symlink?(f) }.each do |file|
435
+ @specification.files.select {|f| File.symlink?(f) }.each do |file|
395
436
  warning "#{file} is a symlink, which is not supported on all platforms"
396
437
  end
397
438
  end
@@ -408,6 +449,24 @@ http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard li
408
449
  warning "#{executable_path} is missing #! line"
409
450
  end
410
451
 
452
+ def validate_removed_attributes # :nodoc:
453
+ @specification.removed_method_calls.each do |attr|
454
+ warning("#{attr} is deprecated and ignored. Please remove this from your gemspec to ensure that your gem continues to build in the future.")
455
+ end
456
+ end
457
+
458
+ def validate_extensions # :nodoc:
459
+ require_relative 'ext'
460
+ builder = Gem::Ext::Builder.new(@specification)
461
+
462
+ rake_extension = @specification.extensions.any? {|s| builder.builder_for(s) == Gem::Ext::RakeBuilder }
463
+ rake_dependency = @specification.dependencies.any? {|d| d.name == 'rake' }
464
+
465
+ warning <<-WARNING if rake_extension && !rake_dependency
466
+ You have specified rake based extension, but rake is not added as dependency. It is recommended to add rake as a dependency in gemspec since there's no guarantee rake will be already installed.
467
+ WARNING
468
+ end
469
+
411
470
  def warning(statement) # :nodoc:
412
471
  @warnings += 1
413
472
 
@@ -421,7 +480,6 @@ http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard li
421
480
  end
422
481
 
423
482
  def help_text # :nodoc:
424
- "See http://guides.rubygems.org/specification-reference/ for help"
483
+ "See https://guides.rubygems.org/specification-reference/ for help"
425
484
  end
426
-
427
485
  end
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
3
+ A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
4
+ Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
5
+ MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
6
+ A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
7
+ hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
8
+ RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
9
+ gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
10
+ KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
11
+ QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
12
+ XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
13
+ DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
14
+ LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
15
+ RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
16
+ jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
17
+ 6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
18
+ mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
19
+ Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
20
+ WD9f
21
+ -----END CERTIFICATE-----
@@ -5,7 +5,6 @@
5
5
  # information.
6
6
 
7
7
  class Gem::StubSpecification < Gem::BasicSpecification
8
-
9
8
  # :nodoc:
10
9
  PREFIX = "# stub: ".freeze
11
10
 
@@ -13,7 +12,6 @@ class Gem::StubSpecification < Gem::BasicSpecification
13
12
  OPEN_MODE = 'r:UTF-8:-'.freeze
14
13
 
15
14
  class StubLine # :nodoc: all
16
-
17
15
  attr_reader :name, :version, :platform, :require_paths, :extensions,
18
16
  :full_name
19
17
 
@@ -31,7 +29,7 @@ class Gem::StubSpecification < Gem::BasicSpecification
31
29
  # in their require paths, so lets take advantage of that by pre-allocating
32
30
  # a require path list for that case.
33
31
  REQUIRE_PATH_LIST = { # :nodoc:
34
- 'lib' => ['lib'].freeze
32
+ 'lib' => ['lib'].freeze,
35
33
  }.freeze
36
34
 
37
35
  def initialize(data, extensions)
@@ -56,7 +54,6 @@ class Gem::StubSpecification < Gem::BasicSpecification
56
54
  REQUIRE_PATHS[x] || x
57
55
  end
58
56
  end
59
-
60
57
  end
61
58
 
62
59
  def self.default_gemspec_stub(filename, base_dir, gems_dir)
@@ -212,5 +209,4 @@ class Gem::StubSpecification < Gem::BasicSpecification
212
209
  def stubbed?
213
210
  data.is_a? StubLine
214
211
  end
215
-
216
212
  end
@@ -40,13 +40,11 @@ module YAML # :nodoc:
40
40
  # should.
41
41
  module Syck
42
42
  class DefaultKey
43
-
44
43
  remove_method :to_s rescue nil
45
44
 
46
45
  def to_s
47
46
  '='
48
47
  end
49
-
50
48
  end
51
49
  end
52
50
 
@@ -12,7 +12,7 @@ if File.exist?(bundler_gemspec)
12
12
  end
13
13
 
14
14
  begin
15
- gem 'minitest', '~> 5.0'
15
+ gem 'minitest', '~> 5.13'
16
16
  rescue Gem::LoadError
17
17
  end
18
18
 
@@ -26,10 +26,25 @@ begin
26
26
  rescue LoadError
27
27
  end
28
28
 
29
- require 'bundler'
29
+ if File.exist?(bundler_gemspec)
30
+ require_relative '../../bundler/lib/bundler'
31
+ else
32
+ require 'bundler'
33
+ end
34
+
35
+ # Enable server plugin needed for bisection
36
+ if ENV["RG_BISECT_SERVER_PLUGIN"]
37
+ require ENV["RG_BISECT_SERVER_PLUGIN"]
38
+
39
+ Minitest.extensions << "server"
40
+ end
41
+
42
+ ENV["MT_NO_PLUGINS"] = "true"
30
43
 
31
44
  require 'minitest/autorun'
32
45
 
46
+ ENV["JARS_SKIP"] = "true" if Gem.java_platform? # avoid unnecessary and noisy `jar-dependencies` post install hook
47
+
33
48
  require 'rubygems/deprecate'
34
49
 
35
50
  require 'fileutils'
@@ -78,14 +93,25 @@ module Gem
78
93
  end
79
94
  end
80
95
 
96
+ require "rubygems/command"
97
+
98
+ class Gem::Command
99
+ ##
100
+ # Allows resetting the hash of specific args per command. This method is
101
+ # available when requiring 'rubygems/test_case'
102
+
103
+ def self.specific_extra_args_hash=(value)
104
+ @specific_extra_args_hash = value
105
+ end
106
+ end
107
+
81
108
  ##
82
109
  # RubyGemTestCase provides a variety of methods for testing rubygems and
83
110
  # gem-related behavior in a sandbox. Through RubyGemTestCase you can install
84
111
  # and uninstall gems, fetch remote gems through a stub fetcher and be assured
85
112
  # your normal set of gems is not affected.
86
113
 
87
- class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Unit::TestCase)
88
-
114
+ class Gem::TestCase < Minitest::Test
89
115
  extend Gem::Deprecate
90
116
 
91
117
  attr_accessor :fetcher # :nodoc:
@@ -113,12 +139,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
113
139
  assert_equal expected.sort, loaded.sort if expected
114
140
  end
115
141
 
116
- # TODO: move to minitest
117
- def assert_path_exists(path, msg = nil)
118
- msg = message(msg) { "Expected path '#{path}' to exist" }
119
- assert File.exist?(path), msg
120
- end
121
-
122
142
  def assert_directory_exists(path, msg = nil)
123
143
  msg = message(msg) { "Expected path '#{path}' to be a directory" }
124
144
  assert_path_exists path
@@ -169,20 +189,24 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
169
189
  # original value when the block ends
170
190
  #
171
191
  def bindir(value)
172
- bindir = RbConfig::CONFIG['bindir']
192
+ with_clean_path_to_ruby do
193
+ bindir = RbConfig::CONFIG['bindir']
173
194
 
174
- if value
175
- RbConfig::CONFIG['bindir'] = value
176
- else
177
- RbConfig::CONFIG.delete 'bindir'
178
- end
195
+ if value
196
+ RbConfig::CONFIG['bindir'] = value
197
+ else
198
+ RbConfig::CONFIG.delete 'bindir'
199
+ end
179
200
 
180
- yield
181
- ensure
182
- if bindir
183
- RbConfig::CONFIG['bindir'] = bindir
184
- else
185
- RbConfig::CONFIG.delete 'bindir'
201
+ begin
202
+ yield
203
+ ensure
204
+ if bindir
205
+ RbConfig::CONFIG['bindir'] = bindir
206
+ else
207
+ RbConfig::CONFIG.delete 'bindir'
208
+ end
209
+ end
186
210
  end
187
211
  end
188
212
 
@@ -208,12 +232,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
208
232
  end
209
233
  end
210
234
 
211
- # TODO: move to minitest
212
- def refute_path_exists(path, msg = nil)
213
- msg = message(msg) { "Expected path '#{path}' to not exist" }
214
- refute File.exist?(path), msg
215
- end
216
-
217
235
  def scan_make_command_lines(output)
218
236
  output.scan(/^#{Regexp.escape make_command}(?:[[:blank:]].*)?$/)
219
237
  end
@@ -245,21 +263,21 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
245
263
  def assert_contains_make_command(target, output, msg = nil)
246
264
  if output.match(/\n/)
247
265
  msg = message(msg) do
248
- 'Expected output containing make command "%s": %s' % [
266
+ "Expected output containing make command \"%s\", but was \n\nBEGIN_OF_OUTPUT\n%sEND_OF_OUTPUT" % [
249
267
  ('%s %s' % [make_command, target]).rstrip,
250
- output.inspect
268
+ output,
251
269
  ]
252
270
  end
253
271
  else
254
272
  msg = message(msg) do
255
273
  'Expected make command "%s": %s' % [
256
274
  ('%s %s' % [make_command, target]).rstrip,
257
- output.inspect
275
+ output,
258
276
  ]
259
277
  end
260
278
  end
261
279
 
262
- assert scan_make_command_lines(output).any? { |line|
280
+ assert scan_make_command_lines(output).any? {|line|
263
281
  make = parse_make_command_line(line)
264
282
 
265
283
  if make[:targets].include?(target)
@@ -273,9 +291,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
273
291
 
274
292
  include Gem::DefaultUserInteraction
275
293
 
276
- undef_method :default_test if instance_methods.include? 'default_test' or
277
- instance_methods.include? :default_test
278
-
279
294
  ##
280
295
  # #setup prepares a sandboxed location to install gems. All installs are
281
296
  # directed to a temporary directory. All install plugins are removed.
@@ -285,13 +300,18 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
285
300
  # or <tt>i686-darwin8.10.1</tt> otherwise.
286
301
 
287
302
  def setup
288
- super
289
-
290
303
  @orig_env = ENV.to_hash
304
+ @tmp = File.expand_path("tmp")
305
+
306
+ FileUtils.mkdir_p @tmp
291
307
 
292
308
  ENV['GEM_VENDOR'] = nil
293
309
  ENV['GEMRC'] = nil
310
+ ENV['XDG_CACHE_HOME'] = nil
311
+ ENV['XDG_CONFIG_HOME'] = nil
312
+ ENV['XDG_DATA_HOME'] = nil
294
313
  ENV['SOURCE_DATE_EPOCH'] = nil
314
+ ENV["TMPDIR"] = @tmp
295
315
 
296
316
  @current_dir = Dir.pwd
297
317
  @fetcher = nil
@@ -310,16 +330,10 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
310
330
 
311
331
  FileUtils.mkdir_p @tempdir
312
332
 
313
- # This makes the tempdir consistent on Windows.
314
- # Dir.tmpdir may return short path name, but Dir[Dir.tmpdir] returns long
315
- # path name. https://bugs.ruby-lang.org/issues/10819
316
- # File.expand_path or File.realpath doesn't convert path name to long path
317
- # name. Only Dir[] (= Dir.glob) works.
318
- # Short and long path name is specific to Windows filesystem.
319
- if win_platform?
320
- @tempdir = Dir[@tempdir][0]
321
- @tempdir.tap(&Gem::UNTAINT)
322
- end
333
+ @orig_SYSTEM_WIDE_CONFIG_FILE = Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE
334
+ Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
335
+ Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
336
+ File.join(@tempdir, 'system-gemrc')
323
337
 
324
338
  @gemhome = File.join @tempdir, 'gemhome'
325
339
  @userhome = File.join @tempdir, 'userhome'
@@ -331,9 +345,10 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
331
345
  ruby
332
346
  end
333
347
 
334
- @git = ENV['GIT'] || 'git'
348
+ @git = ENV['GIT'] || (win_platform? ? 'git.exe' : 'git')
335
349
 
336
350
  Gem.ensure_gem_subdirectories @gemhome
351
+ Gem.ensure_default_gem_subdirectories @gemhome
337
352
 
338
353
  @orig_LOAD_PATH = $LOAD_PATH.dup
339
354
  $LOAD_PATH.map! do |s|
@@ -353,32 +368,31 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
353
368
 
354
369
  ENV['HOME'] = @userhome
355
370
  Gem.instance_variable_set :@user_home, nil
371
+ Gem.instance_variable_set :@data_home, nil
356
372
  Gem.instance_variable_set :@gemdeps, nil
357
373
  Gem.instance_variable_set :@env_requirements_by_name, nil
358
374
  Gem.send :remove_instance_variable, :@ruby_version if
359
375
  Gem.instance_variables.include? :@ruby_version
360
376
 
361
- FileUtils.mkdir_p @gemhome
362
377
  FileUtils.mkdir_p @userhome
363
378
 
364
379
  ENV['GEM_PRIVATE_KEY_PASSPHRASE'] = PRIVATE_KEY_PASSPHRASE
365
380
 
366
- @default_dir = File.join @tempdir, 'default'
367
- @default_spec_dir = File.join @default_dir, "specifications", "default"
368
381
  if Gem.java_platform?
369
382
  @orig_default_gem_home = RbConfig::CONFIG['default_gem_home']
370
- RbConfig::CONFIG['default_gem_home'] = @default_dir
383
+ RbConfig::CONFIG['default_gem_home'] = @gemhome
371
384
  else
372
- Gem.instance_variable_set(:@default_dir, @default_dir)
385
+ Gem.instance_variable_set(:@default_dir, @gemhome)
373
386
  end
374
- FileUtils.mkdir_p @default_spec_dir
387
+
388
+ @orig_bindir = RbConfig::CONFIG["bindir"]
389
+ RbConfig::CONFIG["bindir"] = File.join @gemhome, "bin"
375
390
 
376
391
  Gem::Specification.unresolved_deps.clear
377
392
  Gem.use_paths(@gemhome)
378
393
 
379
- Gem::Security.reset
380
-
381
394
  Gem.loaded_specs.clear
395
+ Gem.instance_variable_set(:@activated_gem_paths, 0)
382
396
  Gem.clear_default_specs
383
397
  Bundler.reset!
384
398
 
@@ -419,11 +433,8 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
419
433
  $LOAD_PATH.replace @orig_LOAD_PATH if @orig_LOAD_PATH
420
434
  if @orig_LOADED_FEATURES
421
435
  if @orig_LOAD_PATH
422
- paths = @orig_LOAD_PATH.map {|path| File.join(File.expand_path(path), "/")}
423
436
  ($LOADED_FEATURES - @orig_LOADED_FEATURES).each do |feat|
424
- unless paths.any? {|path| feat.start_with?(path)}
425
- $LOADED_FEATURES.delete(feat)
426
- end
437
+ $LOADED_FEATURES.delete(feat) if feat.start_with?(@tmp)
427
438
  end
428
439
  else
429
440
  $LOADED_FEATURES.replace @orig_LOADED_FEATURES
@@ -442,8 +453,14 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
442
453
 
443
454
  ENV.replace(@orig_env)
444
455
 
456
+ Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
457
+ Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
458
+ @orig_SYSTEM_WIDE_CONFIG_FILE
459
+
445
460
  Gem.ruby = @orig_ruby if @orig_ruby
446
461
 
462
+ RbConfig::CONFIG['bindir'] = @orig_bindir
463
+
447
464
  if Gem.java_platform?
448
465
  RbConfig::CONFIG['default_gem_home'] = @orig_default_gem_home
449
466
  else
@@ -461,6 +478,17 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
461
478
  @back_ui.close
462
479
  end
463
480
 
481
+ def credential_setup
482
+ @temp_cred = File.join(@userhome, '.gem', 'credentials')
483
+ FileUtils.mkdir_p File.dirname(@temp_cred)
484
+ File.write @temp_cred, ':rubygems_api_key: 701229f217cdf23b1344c7b4b54ca97'
485
+ File.chmod 0600, @temp_cred
486
+ end
487
+
488
+ def credential_teardown
489
+ FileUtils.rm_rf @temp_cred
490
+ end
491
+
464
492
  def common_installer_setup
465
493
  common_installer_teardown
466
494
 
@@ -549,7 +577,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
549
577
  end
550
578
 
551
579
  def in_path?(executable) # :nodoc:
552
- return true if %r%\A([A-Z]:|/)% =~ executable and File.exist? executable
580
+ return true if %r{\A([A-Z]:|/)} =~ executable and File.exist? executable
553
581
 
554
582
  ENV['PATH'].split(File::PATH_SEPARATOR).any? do |directory|
555
583
  File.exist? File.join directory, executable
@@ -562,7 +590,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
562
590
  def install_gem(spec, options = {})
563
591
  require 'rubygems/installer'
564
592
 
565
- gem = File.join @tempdir, "gems", "#{spec.full_name}.gem"
593
+ gem = spec.cache_file
566
594
 
567
595
  unless File.exist? gem
568
596
  use_ui Gem::MockGemUi.new do
@@ -571,7 +599,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
571
599
  end
572
600
  end
573
601
 
574
- gem = File.join(@tempdir, File.basename(spec.cache_file)).tap(&Gem::UNTAINT)
602
+ gem = File.join(@tempdir, File.basename(gem)).tap(&Gem::UNTAINT)
575
603
  end
576
604
 
577
605
  Gem::Installer.at(gem, options.merge({:wrappers => true})).install
@@ -667,8 +695,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
667
695
  yield(s) if block_given?
668
696
  end
669
697
 
670
- Gem::Specification.map # HACK: force specs to (re-)load before we write
671
-
672
698
  written_path = write_file spec.spec_file do |io|
673
699
  io.write spec.to_ruby_for_cache
674
700
  end
@@ -728,7 +754,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
728
754
 
729
755
  def install_specs(*specs)
730
756
  specs.each do |spec|
731
- Gem::Installer.for_spec(spec).install
757
+ Gem::Installer.for_spec(spec, :force => true).install
732
758
  end
733
759
 
734
760
  Gem.searcher = nil
@@ -738,19 +764,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
738
764
  # Installs the provided default specs including writing the spec file
739
765
 
740
766
  def install_default_gems(*specs)
741
- install_default_specs(*specs)
742
-
743
- specs.each do |spec|
744
- File.open spec.loaded_from, 'w' do |io|
745
- io.write spec.to_ruby_for_cache
746
- end
747
- end
748
- end
749
-
750
- ##
751
- # Install the provided default specs
752
-
753
- def install_default_specs(*specs)
754
767
  specs.each do |spec|
755
768
  installer = Gem::Installer.for_spec(spec, :install_as_default => true)
756
769
  installer.install
@@ -772,18 +785,19 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
772
785
  ensure
773
786
  prefix = File.dirname(__FILE__) + "/"
774
787
  new_features = ($LOADED_FEATURES - old_loaded_features)
775
- old_loaded_features.concat(new_features.select {|f| f.rindex(prefix, 0)})
788
+ old_loaded_features.concat(new_features.select {|f| f.rindex(prefix, 0) })
776
789
  $LOADED_FEATURES.replace old_loaded_features
777
790
  end
778
791
 
779
792
  def new_default_spec(name, version, deps = nil, *files)
780
793
  spec = util_spec name, version, deps
781
794
 
782
- spec.loaded_from = File.join(@default_spec_dir, spec.spec_name)
795
+ spec.loaded_from = File.join(@gemhome, "specifications", "default", spec.spec_name)
783
796
  spec.files = files
784
797
 
785
798
  lib_dir = File.join(@tempdir, "default_gems", "lib")
786
799
  lib_dir.instance_variable_set(:@gem_prelude_index, lib_dir)
800
+ Gem.instance_variable_set(:@default_gem_load_paths, [*Gem.send(:default_gem_load_paths), lib_dir])
787
801
  $LOAD_PATH.unshift(lib_dir)
788
802
  files.each do |file|
789
803
  rb_path = File.join(lib_dir, file)
@@ -819,9 +833,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
819
833
  end
820
834
 
821
835
  if deps
822
- # Since Hash#each is unordered in 1.8, sort the keys and iterate that
823
- # way so the tests are deterministic on all implementations.
824
- deps.keys.sort.each do |n|
836
+ deps.keys.each do |n|
825
837
  spec.add_dependency n, (deps[n] || '>= 0')
826
838
  end
827
839
  end
@@ -833,9 +845,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
833
845
 
834
846
  util_build_gem spec
835
847
 
836
- cache_file = File.join @tempdir, 'gems', "#{spec.full_name}.gem"
837
- FileUtils.mkdir_p File.dirname cache_file
838
- FileUtils.mv spec.cache_file, cache_file
839
848
  FileUtils.rm spec.spec_file
840
849
  end
841
850
 
@@ -851,10 +860,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
851
860
  def util_gem(name, version, deps = nil, &block)
852
861
  if deps
853
862
  block = proc do |s|
854
- # Since Hash#each is unordered in 1.8, sort
855
- # the keys and iterate that way so the tests are
856
- # deterministic on all implementations.
857
- deps.keys.sort.each do |n|
863
+ deps.keys.each do |n|
858
864
  s.add_dependency n, (deps[n] || '>= 0')
859
865
  end
860
866
  end
@@ -1002,7 +1008,7 @@ Also, a list:
1002
1008
 
1003
1009
  spec_fetcher = Gem::SpecFetcher.fetcher
1004
1010
 
1005
- prerelease, all = all_specs.partition { |spec| spec.version.prerelease? }
1011
+ prerelease, all = all_specs.partition {|spec| spec.version.prerelease? }
1006
1012
  latest = Gem::Specification._latest_specs all_specs
1007
1013
 
1008
1014
  spec_fetcher.specs[@uri] = []
@@ -1024,7 +1030,7 @@ Also, a list:
1024
1030
  unless Gem::RemoteFetcher === @fetcher
1025
1031
  v = Gem.marshal_version
1026
1032
 
1027
- specs = all.map { |spec| spec.name_tuple }
1033
+ specs = all.map {|spec| spec.name_tuple }
1028
1034
  s_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic specs
1029
1035
 
1030
1036
  latest_specs = latest.map do |spec|
@@ -1033,7 +1039,7 @@ Also, a list:
1033
1039
 
1034
1040
  l_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic latest_specs
1035
1041
 
1036
- prerelease_specs = prerelease.map { |spec| spec.name_tuple }
1042
+ prerelease_specs = prerelease.map {|spec| spec.name_tuple }
1037
1043
  p_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic prerelease_specs
1038
1044
 
1039
1045
  @fetcher.data["#{@gem_repo}specs.#{v}.gz"] = s_zip
@@ -1204,7 +1210,7 @@ Also, a list:
1204
1210
 
1205
1211
  def build_rake_in(good=true)
1206
1212
  gem_ruby = Gem.ruby
1207
- Gem.ruby = @@ruby
1213
+ Gem.ruby = self.class.rubybin
1208
1214
  env_rake = ENV["rake"]
1209
1215
  rake = (good ? @@good_rake : @@bad_rake)
1210
1216
  ENV["rake"] = rake
@@ -1238,35 +1244,44 @@ Also, a list:
1238
1244
  end
1239
1245
 
1240
1246
  begin
1241
- require "rbconfig"
1242
- File.join(RbConfig::CONFIG["bindir"],
1243
- RbConfig::CONFIG["ruby_install_name"] +
1244
- RbConfig::CONFIG["EXEEXT"])
1247
+ Gem.ruby
1245
1248
  rescue LoadError
1246
1249
  "ruby"
1247
1250
  end
1248
1251
  end
1249
1252
 
1250
- class << self
1253
+ def ruby_with_rubygems_in_load_path
1254
+ [Gem.ruby, "-I", File.expand_path("..", __dir__)]
1255
+ end
1256
+
1257
+ def with_clean_path_to_ruby
1258
+ orig_ruby = Gem.ruby
1259
+
1260
+ Gem.instance_variable_set :@ruby, nil
1251
1261
 
1262
+ yield
1263
+ ensure
1264
+ Gem.instance_variable_set :@ruby, orig_ruby
1265
+ end
1266
+
1267
+ class << self
1252
1268
  # :nodoc:
1253
1269
  ##
1254
1270
  # Return the join path, with escaping backticks, dollars, and
1255
1271
  # double-quotes. Unlike `shellescape`, equal-sign is not escaped.
1272
+
1256
1273
  private
1257
1274
 
1258
1275
  def escape_path(*path)
1259
1276
  path = File.join(*path)
1260
- if %r'\A[-+:/=@,.\w]+\z' =~ path
1277
+ if %r{\A[-+:/=@,.\w]+\z} =~ path
1261
1278
  path
1262
1279
  else
1263
1280
  "\"#{path.gsub(/[`$"]/, '\\&')}\""
1264
1281
  end
1265
1282
  end
1266
-
1267
1283
  end
1268
1284
 
1269
- @@ruby = rubybin
1270
1285
  @@good_rake = "#{rubybin} #{escape_path(TEST_PATH, 'good_rake.rb')}"
1271
1286
  @@bad_rake = "#{rubybin} #{escape_path(TEST_PATH, 'bad_rake.rb')}"
1272
1287
 
@@ -1382,7 +1397,6 @@ Also, a list:
1382
1397
  # It is available by requiring Gem::TestCase.
1383
1398
 
1384
1399
  class StaticSet < Gem::Resolver::Set
1385
-
1386
1400
  ##
1387
1401
  # A StaticSet ignores remote because it has a fixed set of gems.
1388
1402
 
@@ -1419,7 +1433,7 @@ Also, a list:
1419
1433
  # Finds all gems matching +dep+ in this set.
1420
1434
 
1421
1435
  def find_all(dep)
1422
- @specs.find_all { |s| dep.match? s, @prerelease }
1436
+ @specs.find_all {|s| dep.match? s, @prerelease }
1423
1437
  end
1424
1438
 
1425
1439
  ##
@@ -1437,7 +1451,6 @@ Also, a list:
1437
1451
 
1438
1452
  def prefetch(reqs) # :nodoc:
1439
1453
  end
1440
-
1441
1454
  end
1442
1455
 
1443
1456
  ##
@@ -1504,34 +1517,7 @@ Also, a list:
1504
1517
  PRIVATE_KEY = nil
1505
1518
  PUBLIC_KEY = nil
1506
1519
  PUBLIC_CERT = nil
1507
- end if defined?(OpenSSL::SSL)
1508
-
1509
- end
1510
-
1511
- # require dependencies that are not discoverable once GEM_HOME and GEM_PATH
1512
- # are wiped
1513
- begin
1514
- gem 'rake'
1515
- rescue Gem::LoadError
1516
- end
1517
-
1518
- begin
1519
- require 'rake/packagetask'
1520
- rescue LoadError
1521
- end
1522
-
1523
- begin
1524
- gem 'rdoc'
1525
- require 'rdoc'
1526
-
1527
- require 'rubygems/rdoc'
1528
- rescue LoadError, Gem::LoadError
1529
- end
1530
-
1531
- begin
1532
- gem 'builder'
1533
- require 'builder/xchar'
1534
- rescue LoadError, Gem::LoadError
1520
+ end if Gem::HAVE_OPENSSL
1535
1521
  end
1536
1522
 
1537
1523
  require 'rubygems/test_utilities'