rubygems-update 3.1.0 → 3.2.0

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 (558) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +55 -19
  3. data/CONTRIBUTING.md +25 -11
  4. data/History.txt +435 -179
  5. data/Manifest.txt +44 -77
  6. data/POLICIES.md +2 -9
  7. data/README.md +5 -5
  8. data/Rakefile +50 -83
  9. data/bin/update_rubygems +2 -2
  10. data/bundler/CHANGELOG.md +1590 -1400
  11. data/bundler/README.md +6 -8
  12. data/bundler/UPGRADING.md +18 -32
  13. data/bundler/bundler.gemspec +3 -3
  14. data/bundler/exe/bundle +3 -0
  15. data/bundler/lib/bundler.rb +25 -7
  16. data/bundler/lib/bundler/build_metadata.rb +4 -12
  17. data/bundler/lib/bundler/cli.rb +56 -20
  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 +7 -16
  26. data/bundler/lib/bundler/cli/fund.rb +36 -0
  27. data/bundler/lib/bundler/cli/gem.rb +75 -11
  28. data/bundler/lib/bundler/cli/info.rb +8 -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 +12 -18
  32. data/bundler/lib/bundler/cli/issue.rb +2 -2
  33. data/bundler/lib/bundler/cli/list.rb +1 -1
  34. data/bundler/lib/bundler/cli/outdated.rb +2 -4
  35. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  36. data/bundler/lib/bundler/cli/pristine.rb +1 -1
  37. data/bundler/lib/bundler/cli/show.rb +1 -1
  38. data/bundler/lib/bundler/cli/update.rb +2 -0
  39. data/bundler/lib/bundler/compact_index_client.rb +1 -1
  40. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
  41. data/bundler/lib/bundler/compact_index_client/updater.rb +5 -5
  42. data/bundler/lib/bundler/definition.rb +47 -61
  43. data/bundler/lib/bundler/dep_proxy.rb +1 -1
  44. data/bundler/lib/bundler/dependency.rb +0 -9
  45. data/bundler/lib/bundler/dsl.rb +5 -9
  46. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  47. data/bundler/lib/bundler/env.rb +1 -1
  48. data/bundler/lib/bundler/environment_preserver.rb +26 -2
  49. data/bundler/lib/bundler/errors.rb +1 -0
  50. data/bundler/lib/bundler/feature_flag.rb +0 -3
  51. data/bundler/lib/bundler/fetcher.rb +4 -3
  52. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  53. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
  54. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  55. data/bundler/lib/bundler/fetcher/index.rb +3 -4
  56. data/bundler/lib/bundler/friendly_errors.rb +22 -13
  57. data/bundler/lib/bundler/gem_helper.rb +33 -19
  58. data/bundler/lib/bundler/gem_helpers.rb +6 -1
  59. data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
  60. data/bundler/lib/bundler/graph.rb +1 -1
  61. data/bundler/lib/bundler/index.rb +6 -2
  62. data/bundler/lib/bundler/injector.rb +22 -4
  63. data/bundler/lib/bundler/inline.rb +2 -2
  64. data/bundler/lib/bundler/installer.rb +35 -32
  65. data/bundler/lib/bundler/installer/gem_installer.rb +3 -3
  66. data/bundler/lib/bundler/installer/parallel_installer.rb +10 -10
  67. data/bundler/lib/bundler/installer/standalone.rb +2 -2
  68. data/bundler/lib/bundler/lazy_specification.rb +20 -9
  69. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  70. data/bundler/lib/bundler/lockfile_parser.rb +1 -1
  71. data/bundler/lib/bundler/man/.document +1 -0
  72. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
  73. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
  74. data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
  75. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  76. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  77. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +19 -30
  78. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  79. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
  80. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
  81. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  82. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
  83. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  84. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
  85. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +0 -0
  86. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  87. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  88. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  89. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  90. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  91. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  92. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  93. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
  94. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  95. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
  96. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
  97. data/bundler/lib/bundler/mirror.rb +2 -2
  98. data/bundler/lib/bundler/plugin.rb +30 -5
  99. data/bundler/lib/bundler/plugin/api/source.rb +1 -1
  100. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  101. data/bundler/lib/bundler/plugin/index.rb +10 -1
  102. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  103. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  104. data/bundler/lib/bundler/plugin/source_list.rb +1 -1
  105. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  106. data/bundler/lib/bundler/remote_specification.rb +5 -2
  107. data/bundler/lib/bundler/resolver.rb +32 -10
  108. data/bundler/lib/bundler/resolver/spec_group.rb +27 -6
  109. data/bundler/lib/bundler/retry.rb +1 -1
  110. data/bundler/lib/bundler/ruby_version.rb +1 -1
  111. data/bundler/lib/bundler/rubygems_ext.rb +53 -9
  112. data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
  113. data/bundler/lib/bundler/rubygems_integration.rb +35 -25
  114. data/bundler/lib/bundler/runtime.rb +4 -14
  115. data/bundler/lib/bundler/settings.rb +49 -46
  116. data/bundler/lib/bundler/setup.rb +5 -0
  117. data/bundler/lib/bundler/shared_helpers.rb +2 -2
  118. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  119. data/bundler/lib/bundler/source.rb +1 -1
  120. data/bundler/lib/bundler/source/git.rb +1 -1
  121. data/bundler/lib/bundler/source/git/git_proxy.rb +57 -60
  122. data/bundler/lib/bundler/source/path.rb +7 -3
  123. data/bundler/lib/bundler/source/path/installer.rb +8 -10
  124. data/bundler/lib/bundler/source/rubygems.rb +13 -16
  125. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  126. data/bundler/lib/bundler/source_list.rb +2 -2
  127. data/bundler/lib/bundler/spec_set.rb +2 -1
  128. data/bundler/lib/bundler/stub_specification.rb +17 -5
  129. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  130. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +7 -2
  131. data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -2
  132. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -5
  133. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  134. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  135. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  136. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  137. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  138. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  139. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  140. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +13 -5
  141. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
  142. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  143. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  144. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  145. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  146. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  147. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  148. data/bundler/lib/bundler/ui/shell.rb +5 -5
  149. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
  150. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  151. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
  152. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  153. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  154. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  155. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +38 -40
  156. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +72 -208
  157. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  158. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  159. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  160. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  161. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  162. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  163. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  164. data/bundler/lib/bundler/version.rb +1 -1
  165. data/bundler/lib/bundler/worker.rb +1 -1
  166. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  167. data/bundler/man/bundle-add.1 +1 -1
  168. data/bundler/man/bundle-binstubs.1 +5 -3
  169. data/bundler/man/bundle-cache.1 +1 -1
  170. data/bundler/man/bundle-check.1 +1 -1
  171. data/bundler/man/bundle-clean.1 +1 -1
  172. data/bundler/man/bundle-config.1 +16 -25
  173. data/bundler/man/bundle-doctor.1 +1 -1
  174. data/bundler/man/bundle-exec.1 +1 -1
  175. data/bundler/man/bundle-gem.1 +25 -3
  176. data/bundler/man/bundle-info.1 +1 -1
  177. data/bundler/man/bundle-init.1 +1 -1
  178. data/bundler/man/bundle-inject.1 +1 -1
  179. data/bundler/man/bundle-install.1 +30 -3
  180. data/bundler/man/bundle-list.1 +1 -1
  181. data/bundler/man/bundle-lock.1 +1 -1
  182. data/bundler/man/bundle-open.1 +1 -1
  183. data/bundler/man/bundle-outdated.1 +1 -1
  184. data/bundler/man/bundle-platform.1 +1 -1
  185. data/bundler/man/bundle-pristine.1 +1 -1
  186. data/bundler/man/bundle-remove.1 +1 -1
  187. data/bundler/man/bundle-show.1 +1 -1
  188. data/bundler/man/bundle-update.1 +1 -1
  189. data/bundler/man/bundle-viz.1 +1 -1
  190. data/bundler/man/bundle.1 +1 -1
  191. data/bundler/man/gemfile.5 +4 -4
  192. data/lib/rubygems.rb +138 -187
  193. data/lib/rubygems/available_set.rb +4 -6
  194. data/lib/rubygems/basic_specification.rb +12 -10
  195. data/lib/rubygems/bundler_version_finder.rb +14 -9
  196. data/lib/rubygems/command.rb +17 -17
  197. data/lib/rubygems/command_manager.rb +5 -6
  198. data/lib/rubygems/commands/build_command.rb +40 -20
  199. data/lib/rubygems/commands/cert_command.rb +2 -10
  200. data/lib/rubygems/commands/check_command.rb +0 -2
  201. data/lib/rubygems/commands/cleanup_command.rb +11 -7
  202. data/lib/rubygems/commands/contents_command.rb +4 -6
  203. data/lib/rubygems/commands/dependency_command.rb +6 -8
  204. data/lib/rubygems/commands/environment_command.rb +1 -3
  205. data/lib/rubygems/commands/fetch_command.rb +2 -4
  206. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  207. data/lib/rubygems/commands/help_command.rb +4 -4
  208. data/lib/rubygems/commands/info_command.rb +8 -5
  209. data/lib/rubygems/commands/install_command.rb +3 -5
  210. data/lib/rubygems/commands/list_command.rb +8 -7
  211. data/lib/rubygems/commands/lock_command.rb +1 -3
  212. data/lib/rubygems/commands/mirror_command.rb +0 -2
  213. data/lib/rubygems/commands/open_command.rb +0 -4
  214. data/lib/rubygems/commands/outdated_command.rb +0 -2
  215. data/lib/rubygems/commands/owner_command.rb +9 -3
  216. data/lib/rubygems/commands/pristine_command.rb +11 -5
  217. data/lib/rubygems/commands/push_command.rb +10 -46
  218. data/lib/rubygems/commands/query_command.rb +14 -344
  219. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  220. data/lib/rubygems/commands/search_command.rb +7 -7
  221. data/lib/rubygems/commands/server_command.rb +3 -1
  222. data/lib/rubygems/commands/setup_command.rb +158 -70
  223. data/lib/rubygems/commands/signin_command.rb +0 -2
  224. data/lib/rubygems/commands/signout_command.rb +0 -2
  225. data/lib/rubygems/commands/sources_command.rb +9 -7
  226. data/lib/rubygems/commands/specification_command.rb +8 -4
  227. data/lib/rubygems/commands/stale_command.rb +1 -3
  228. data/lib/rubygems/commands/uninstall_command.rb +2 -4
  229. data/lib/rubygems/commands/unpack_command.rb +1 -3
  230. data/lib/rubygems/commands/update_command.rb +59 -14
  231. data/lib/rubygems/commands/which_command.rb +0 -2
  232. data/lib/rubygems/commands/yank_command.rb +4 -6
  233. data/lib/rubygems/config_file.rb +11 -4
  234. data/lib/rubygems/core_ext/kernel_require.rb +29 -36
  235. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  236. data/lib/rubygems/defaults.rb +101 -7
  237. data/lib/rubygems/dependency.rb +3 -8
  238. data/lib/rubygems/dependency_installer.rb +5 -78
  239. data/lib/rubygems/dependency_list.rb +7 -9
  240. data/lib/rubygems/deprecate.rb +46 -1
  241. data/lib/rubygems/doctor.rb +4 -4
  242. data/lib/rubygems/errors.rb +3 -14
  243. data/lib/rubygems/exceptions.rb +2 -33
  244. data/lib/rubygems/ext.rb +6 -6
  245. data/lib/rubygems/ext/build_error.rb +2 -0
  246. data/lib/rubygems/ext/builder.rb +16 -35
  247. data/lib/rubygems/ext/cmake_builder.rb +5 -7
  248. data/lib/rubygems/ext/configure_builder.rb +4 -6
  249. data/lib/rubygems/ext/ext_conf_builder.rb +21 -19
  250. data/lib/rubygems/ext/rake_builder.rb +3 -5
  251. data/lib/rubygems/gem_runner.rb +3 -10
  252. data/lib/rubygems/gemcutter_utilities.rb +91 -15
  253. data/lib/rubygems/indexer.rb +1 -22
  254. data/lib/rubygems/install_update_options.rb +7 -7
  255. data/lib/rubygems/installer.rb +59 -57
  256. data/lib/rubygems/installer_test_case.rb +25 -11
  257. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  258. data/lib/rubygems/local_remote_options.rb +1 -1
  259. data/lib/rubygems/mock_gem_ui.rb +0 -6
  260. data/lib/rubygems/name_tuple.rb +3 -7
  261. data/lib/rubygems/openssl.rb +7 -0
  262. data/lib/rubygems/package.rb +14 -25
  263. data/lib/rubygems/package/digest_io.rb +0 -2
  264. data/lib/rubygems/package/file_source.rb +0 -2
  265. data/lib/rubygems/package/io_source.rb +0 -2
  266. data/lib/rubygems/package/old.rb +1 -3
  267. data/lib/rubygems/package/tar_header.rb +4 -6
  268. data/lib/rubygems/package/tar_reader.rb +0 -3
  269. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  270. data/lib/rubygems/package/tar_test_case.rb +2 -4
  271. data/lib/rubygems/package/tar_writer.rb +2 -12
  272. data/lib/rubygems/package_task.rb +1 -7
  273. data/lib/rubygems/path_support.rb +1 -3
  274. data/lib/rubygems/platform.rb +21 -12
  275. data/lib/rubygems/psych_tree.rb +0 -2
  276. data/lib/rubygems/query_utils.rb +353 -0
  277. data/lib/rubygems/rdoc.rb +0 -12
  278. data/lib/rubygems/remote_fetcher.rb +10 -27
  279. data/lib/rubygems/request.rb +4 -11
  280. data/lib/rubygems/request/connection_pools.rb +1 -5
  281. data/lib/rubygems/request/http_pool.rb +0 -2
  282. data/lib/rubygems/request/https_pool.rb +0 -2
  283. data/lib/rubygems/request_set.rb +5 -7
  284. data/lib/rubygems/request_set/gem_dependency_api.rb +6 -8
  285. data/lib/rubygems/request_set/lockfile.rb +8 -12
  286. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  287. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
  288. data/lib/rubygems/requirement.rb +20 -21
  289. data/lib/rubygems/resolver.rb +8 -11
  290. data/lib/rubygems/resolver/activation_request.rb +9 -3
  291. data/lib/rubygems/resolver/api_set.rb +4 -6
  292. data/lib/rubygems/resolver/api_specification.rb +21 -8
  293. data/lib/rubygems/resolver/best_set.rb +0 -2
  294. data/lib/rubygems/resolver/composed_set.rb +3 -5
  295. data/lib/rubygems/resolver/conflict.rb +2 -4
  296. data/lib/rubygems/resolver/current_set.rb +0 -2
  297. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  298. data/lib/rubygems/resolver/git_set.rb +0 -2
  299. data/lib/rubygems/resolver/git_specification.rb +0 -2
  300. data/lib/rubygems/resolver/index_set.rb +1 -3
  301. data/lib/rubygems/resolver/index_specification.rb +11 -2
  302. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  303. data/lib/rubygems/resolver/installer_set.rb +4 -7
  304. data/lib/rubygems/resolver/local_specification.rb +0 -2
  305. data/lib/rubygems/resolver/lock_set.rb +2 -4
  306. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  307. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  308. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  309. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  310. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  311. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  312. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  313. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  314. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  315. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  316. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  317. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  318. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  319. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  320. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  321. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  322. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  323. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  324. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  325. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  326. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  327. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  328. data/lib/rubygems/resolver/set.rb +0 -2
  329. data/lib/rubygems/resolver/source_set.rb +0 -2
  330. data/lib/rubygems/resolver/spec_specification.rb +0 -2
  331. data/lib/rubygems/resolver/specification.rb +1 -3
  332. data/lib/rubygems/resolver/stats.rb +0 -2
  333. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  334. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  335. data/lib/rubygems/s3_uri_signer.rb +2 -8
  336. data/lib/rubygems/safe_yaml.rb +4 -4
  337. data/lib/rubygems/security.rb +27 -34
  338. data/lib/rubygems/security/policy.rb +4 -8
  339. data/lib/rubygems/security/signer.rb +5 -7
  340. data/lib/rubygems/security/trust_dir.rb +1 -3
  341. data/lib/rubygems/server.rb +10 -12
  342. data/lib/rubygems/source.rb +13 -7
  343. data/lib/rubygems/source/git.rb +7 -8
  344. data/lib/rubygems/source/installed.rb +0 -2
  345. data/lib/rubygems/source/local.rb +2 -4
  346. data/lib/rubygems/source/lock.rb +0 -2
  347. data/lib/rubygems/source/specific_file.rb +0 -2
  348. data/lib/rubygems/source/vendor.rb +0 -2
  349. data/lib/rubygems/source_list.rb +6 -7
  350. data/lib/rubygems/spec_fetcher.rb +19 -18
  351. data/lib/rubygems/specification.rb +113 -126
  352. data/lib/rubygems/specification_policy.rb +88 -30
  353. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  354. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  355. data/lib/rubygems/stub_specification.rb +1 -5
  356. data/lib/rubygems/syck_hack.rb +0 -2
  357. data/lib/rubygems/test_case.rb +135 -118
  358. data/lib/rubygems/test_utilities.rb +6 -14
  359. data/lib/rubygems/uninstaller.rb +35 -16
  360. data/lib/rubygems/uri_formatter.rb +2 -3
  361. data/lib/rubygems/uri_parser.rb +0 -2
  362. data/lib/rubygems/user_interaction.rb +1 -26
  363. data/lib/rubygems/util.rb +15 -3
  364. data/lib/rubygems/util/licenses.rb +4 -6
  365. data/lib/rubygems/util/list.rb +0 -2
  366. data/lib/rubygems/validator.rb +1 -3
  367. data/lib/rubygems/version.rb +5 -7
  368. data/lib/rubygems/version_option.rb +6 -0
  369. data/rubygems-update.gemspec +2 -2
  370. data/setup.rb +2 -7
  371. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  372. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  373. data/test/rubygems/rubygems_plugin.rb +0 -2
  374. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  375. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  376. data/test/rubygems/test_bundled_ca.rb +42 -45
  377. data/test/rubygems/test_config.rb +0 -2
  378. data/test/rubygems/test_deprecate.rb +40 -7
  379. data/test/rubygems/test_gem.rb +153 -106
  380. data/test/rubygems/test_gem_available_set.rb +3 -5
  381. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
  382. data/test/rubygems/test_gem_command.rb +24 -7
  383. data/test/rubygems/test_gem_command_manager.rb +36 -5
  384. data/test/rubygems/test_gem_commands_build_command.rb +250 -15
  385. data/test/rubygems/test_gem_commands_cert_command.rb +4 -6
  386. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  387. data/test/rubygems/test_gem_commands_cleanup_command.rb +14 -5
  388. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  389. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  390. data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
  391. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  392. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
  393. data/test/rubygems/test_gem_commands_help_command.rb +15 -4
  394. data/test/rubygems/test_gem_commands_info_command.rb +6 -8
  395. data/test/rubygems/test_gem_commands_install_command.rb +32 -34
  396. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  397. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  398. data/test/rubygems/test_gem_commands_mirror.rb +1 -3
  399. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  400. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
  401. data/test/rubygems/test_gem_commands_owner_command.rb +59 -5
  402. data/test/rubygems/test_gem_commands_pristine_command.rb +43 -12
  403. data/test/rubygems/test_gem_commands_push_command.rb +38 -9
  404. data/test/rubygems/test_gem_commands_query_command.rb +12 -12
  405. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  406. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  407. data/test/rubygems/test_gem_commands_setup_command.rb +211 -124
  408. data/test/rubygems/test_gem_commands_signin_command.rb +33 -9
  409. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  410. data/test/rubygems/test_gem_commands_sources_command.rb +99 -3
  411. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  412. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  413. data/test/rubygems/test_gem_commands_uninstall_command.rb +2 -3
  414. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  415. data/test/rubygems/test_gem_commands_update_command.rb +116 -7
  416. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  417. data/test/rubygems/test_gem_commands_yank_command.rb +44 -8
  418. data/test/rubygems/test_gem_config_file.rb +7 -12
  419. data/test/rubygems/test_gem_dependency.rb +0 -2
  420. data/test/rubygems/test_gem_dependency_installer.rb +90 -193
  421. data/test/rubygems/test_gem_dependency_list.rb +10 -12
  422. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  423. data/test/rubygems/test_gem_doctor.rb +28 -2
  424. data/test/rubygems/test_gem_ext_builder.rb +26 -47
  425. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -23
  426. data/test/rubygems/test_gem_ext_configure_builder.rb +4 -20
  427. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -29
  428. data/test/rubygems/test_gem_ext_rake_builder.rb +14 -24
  429. data/test/rubygems/test_gem_gem_runner.rb +44 -1
  430. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
  431. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  432. data/test/rubygems/test_gem_indexer.rb +9 -15
  433. data/test/rubygems/test_gem_install_update_options.rb +14 -4
  434. data/test/rubygems/test_gem_installer.rb +265 -81
  435. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  436. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  437. data/test/rubygems/test_gem_package.rb +41 -39
  438. data/test/rubygems/test_gem_package_old.rb +4 -6
  439. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  440. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  441. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  442. data/test/rubygems/test_gem_package_tar_writer.rb +9 -6
  443. data/test/rubygems/test_gem_package_task.rb +46 -13
  444. data/test/rubygems/test_gem_path_support.rb +0 -2
  445. data/test/rubygems/test_gem_platform.rb +63 -6
  446. data/test/rubygems/test_gem_rdoc.rb +0 -2
  447. data/test/rubygems/test_gem_remote_fetcher.rb +168 -211
  448. data/test/rubygems/test_gem_request.rb +13 -17
  449. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  450. data/test/rubygems/test_gem_request_set.rb +72 -22
  451. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
  452. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -6
  453. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
  454. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
  455. data/test/rubygems/test_gem_requirement.rb +10 -4
  456. data/test/rubygems/test_gem_resolver.rb +6 -8
  457. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  458. data/test/rubygems/test_gem_resolver_api_set.rb +11 -13
  459. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -2
  460. data/test/rubygems/test_gem_resolver_best_set.rb +2 -4
  461. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  462. data/test/rubygems/test_gem_resolver_conflict.rb +1 -3
  463. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  464. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  465. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  466. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  467. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  468. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  469. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
  470. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  471. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  472. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  473. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  474. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  475. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  476. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  477. data/test/rubygems/test_gem_security.rb +22 -24
  478. data/test/rubygems/test_gem_security_policy.rb +7 -12
  479. data/test/rubygems/test_gem_security_signer.rb +10 -12
  480. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  481. data/test/rubygems/test_gem_server.rb +10 -14
  482. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  483. data/test/rubygems/test_gem_source.rb +17 -16
  484. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  485. data/test/rubygems/test_gem_source_git.rb +12 -13
  486. data/test/rubygems/test_gem_source_installed.rb +7 -9
  487. data/test/rubygems/test_gem_source_list.rb +1 -2
  488. data/test/rubygems/test_gem_source_local.rb +8 -10
  489. data/test/rubygems/test_gem_source_lock.rb +10 -12
  490. data/test/rubygems/test_gem_source_specific_file.rb +7 -9
  491. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  492. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  493. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  494. data/test/rubygems/test_gem_specification.rb +182 -131
  495. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  496. data/test/rubygems/test_gem_stub_specification.rb +4 -7
  497. data/test/rubygems/test_gem_text.rb +1 -3
  498. data/test/rubygems/test_gem_uninstaller.rb +134 -12
  499. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  500. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  501. data/test/rubygems/test_gem_util.rb +7 -7
  502. data/test/rubygems/test_gem_validator.rb +1 -3
  503. data/test/rubygems/test_gem_version.rb +1 -3
  504. data/test/rubygems/test_gem_version_option.rb +1 -3
  505. data/test/rubygems/test_kernel.rb +25 -10
  506. data/test/rubygems/test_project_sanity.rb +7 -2
  507. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  508. data/test/rubygems/test_require.rb +291 -56
  509. metadata +66 -100
  510. data/.bundle/config +0 -2
  511. data/.rubocop.yml +0 -91
  512. data/Gemfile +0 -8
  513. data/Gemfile.lock +0 -43
  514. data/bundler/CODE_OF_CONDUCT.md +0 -136
  515. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  516. data/bundler/man/bundle-add.1.txt +0 -58
  517. data/bundler/man/bundle-binstubs.1.txt +0 -48
  518. data/bundler/man/bundle-cache.1.txt +0 -78
  519. data/bundler/man/bundle-check.1.txt +0 -33
  520. data/bundler/man/bundle-clean.1.txt +0 -26
  521. data/bundler/man/bundle-config.1.txt +0 -528
  522. data/bundler/man/bundle-doctor.1.txt +0 -44
  523. data/bundler/man/bundle-exec.1.txt +0 -178
  524. data/bundler/man/bundle-gem.1.txt +0 -91
  525. data/bundler/man/bundle-info.1.txt +0 -21
  526. data/bundler/man/bundle-init.1.txt +0 -34
  527. data/bundler/man/bundle-inject.1.txt +0 -32
  528. data/bundler/man/bundle-install.1.txt +0 -401
  529. data/bundler/man/bundle-list.1.txt +0 -44
  530. data/bundler/man/bundle-lock.1.txt +0 -93
  531. data/bundler/man/bundle-open.1.txt +0 -29
  532. data/bundler/man/bundle-outdated.1.txt +0 -131
  533. data/bundler/man/bundle-platform.1.txt +0 -57
  534. data/bundler/man/bundle-pristine.1.txt +0 -44
  535. data/bundler/man/bundle-remove.1.txt +0 -34
  536. data/bundler/man/bundle-show.1.txt +0 -27
  537. data/bundler/man/bundle-update.1.txt +0 -390
  538. data/bundler/man/bundle-viz.1.txt +0 -39
  539. data/bundler/man/bundle.1.txt +0 -116
  540. data/bundler/man/gemfile.5.txt +0 -649
  541. data/lib/rubygems/source_local.rb +0 -7
  542. data/lib/rubygems/source_specific_file.rb +0 -6
  543. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  544. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  545. data/lib/ubygems.rb +0 -14
  546. data/tmp/.keep +0 -0
  547. data/util/CL2notes +0 -55
  548. data/util/bisect +0 -10
  549. data/util/ci.sh +0 -62
  550. data/util/cops/deprecations.rb +0 -52
  551. data/util/create_certs.rb +0 -171
  552. data/util/create_certs.sh +0 -27
  553. data/util/create_encrypted_key.rb +0 -16
  554. data/util/generate_spdx_license_list.rb +0 -63
  555. data/util/patch_with_prs.rb +0 -77
  556. data/util/rubocop +0 -8
  557. data/util/update_bundled_ca_certificates.rb +0 -139
  558. 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
 
@@ -30,6 +30,8 @@ require 'bundler'
30
30
 
31
31
  require 'minitest/autorun'
32
32
 
33
+ ENV["JARS_SKIP"] = "true" if Gem.java_platform? # avoid unnecessary and noisy `jar-dependencies` post install hook
34
+
33
35
  require 'rubygems/deprecate'
34
36
 
35
37
  require 'fileutils'
@@ -78,14 +80,25 @@ module Gem
78
80
  end
79
81
  end
80
82
 
83
+ require "rubygems/command"
84
+
85
+ class Gem::Command
86
+ ##
87
+ # Allows resetting the hash of specific args per command. This method is
88
+ # available when requiring 'rubygems/test_case'
89
+
90
+ def self.specific_extra_args_hash=(value)
91
+ @specific_extra_args_hash = value
92
+ end
93
+ end
94
+
81
95
  ##
82
96
  # RubyGemTestCase provides a variety of methods for testing rubygems and
83
97
  # gem-related behavior in a sandbox. Through RubyGemTestCase you can install
84
98
  # and uninstall gems, fetch remote gems through a stub fetcher and be assured
85
99
  # your normal set of gems is not affected.
86
100
 
87
- class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Unit::TestCase)
88
-
101
+ class Gem::TestCase < Minitest::Test
89
102
  extend Gem::Deprecate
90
103
 
91
104
  attr_accessor :fetcher # :nodoc:
@@ -113,12 +126,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
113
126
  assert_equal expected.sort, loaded.sort if expected
114
127
  end
115
128
 
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
129
  def assert_directory_exists(path, msg = nil)
123
130
  msg = message(msg) { "Expected path '#{path}' to be a directory" }
124
131
  assert_path_exists path
@@ -164,10 +171,52 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
164
171
  end
165
172
  end
166
173
 
167
- # TODO: move to minitest
168
- def refute_path_exists(path, msg = nil)
169
- msg = message(msg) { "Expected path '#{path}' to not exist" }
170
- refute File.exist?(path), msg
174
+ ##
175
+ # Sets the bindir entry in RbConfig::CONFIG to +value+ and restores the
176
+ # original value when the block ends
177
+ #
178
+ def bindir(value)
179
+ with_clean_path_to_ruby do
180
+ bindir = RbConfig::CONFIG['bindir']
181
+
182
+ if value
183
+ RbConfig::CONFIG['bindir'] = value
184
+ else
185
+ RbConfig::CONFIG.delete 'bindir'
186
+ end
187
+
188
+ begin
189
+ yield
190
+ ensure
191
+ if bindir
192
+ RbConfig::CONFIG['bindir'] = bindir
193
+ else
194
+ RbConfig::CONFIG.delete 'bindir'
195
+ end
196
+ end
197
+ end
198
+ end
199
+
200
+ ##
201
+ # Sets the EXEEXT entry in RbConfig::CONFIG to +value+ and restores the
202
+ # original value when the block ends
203
+ #
204
+ def exeext(value)
205
+ exeext = RbConfig::CONFIG['EXEEXT']
206
+
207
+ if value
208
+ RbConfig::CONFIG['EXEEXT'] = value
209
+ else
210
+ RbConfig::CONFIG.delete 'EXEEXT'
211
+ end
212
+
213
+ yield
214
+ ensure
215
+ if exeext
216
+ RbConfig::CONFIG['EXEEXT'] = exeext
217
+ else
218
+ RbConfig::CONFIG.delete 'EXEEXT'
219
+ end
171
220
  end
172
221
 
173
222
  def scan_make_command_lines(output)
@@ -203,19 +252,19 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
203
252
  msg = message(msg) do
204
253
  'Expected output containing make command "%s": %s' % [
205
254
  ('%s %s' % [make_command, target]).rstrip,
206
- output.inspect
255
+ output.inspect,
207
256
  ]
208
257
  end
209
258
  else
210
259
  msg = message(msg) do
211
260
  'Expected make command "%s": %s' % [
212
261
  ('%s %s' % [make_command, target]).rstrip,
213
- output.inspect
262
+ output.inspect,
214
263
  ]
215
264
  end
216
265
  end
217
266
 
218
- assert scan_make_command_lines(output).any? { |line|
267
+ assert scan_make_command_lines(output).any? {|line|
219
268
  make = parse_make_command_line(line)
220
269
 
221
270
  if make[:targets].include?(target)
@@ -229,9 +278,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
229
278
 
230
279
  include Gem::DefaultUserInteraction
231
280
 
232
- undef_method :default_test if instance_methods.include? 'default_test' or
233
- instance_methods.include? :default_test
234
-
235
281
  ##
236
282
  # #setup prepares a sandboxed location to install gems. All installs are
237
283
  # directed to a temporary directory. All install plugins are removed.
@@ -241,13 +287,18 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
241
287
  # or <tt>i686-darwin8.10.1</tt> otherwise.
242
288
 
243
289
  def setup
244
- super
245
-
246
290
  @orig_env = ENV.to_hash
291
+ @tmp = File.expand_path("tmp")
292
+
293
+ FileUtils.mkdir_p @tmp
247
294
 
248
295
  ENV['GEM_VENDOR'] = nil
249
296
  ENV['GEMRC'] = nil
297
+ ENV['XDG_CACHE_HOME'] = nil
298
+ ENV['XDG_CONFIG_HOME'] = nil
299
+ ENV['XDG_DATA_HOME'] = nil
250
300
  ENV['SOURCE_DATE_EPOCH'] = nil
301
+ ENV["TMPDIR"] = @tmp
251
302
 
252
303
  @current_dir = Dir.pwd
253
304
  @fetcher = nil
@@ -266,16 +317,10 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
266
317
 
267
318
  FileUtils.mkdir_p @tempdir
268
319
 
269
- # This makes the tempdir consistent on Windows.
270
- # Dir.tmpdir may return short path name, but Dir[Dir.tmpdir] returns long
271
- # path name. https://bugs.ruby-lang.org/issues/10819
272
- # File.expand_path or File.realpath doesn't convert path name to long path
273
- # name. Only Dir[] (= Dir.glob) works.
274
- # Short and long path name is specific to Windows filesystem.
275
- if win_platform?
276
- @tempdir = Dir[@tempdir][0]
277
- @tempdir.tap(&Gem::UNTAINT)
278
- end
320
+ @orig_SYSTEM_WIDE_CONFIG_FILE = Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE
321
+ Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
322
+ Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
323
+ File.join(@tempdir, 'system-gemrc')
279
324
 
280
325
  @gemhome = File.join @tempdir, 'gemhome'
281
326
  @userhome = File.join @tempdir, 'userhome'
@@ -287,9 +332,10 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
287
332
  ruby
288
333
  end
289
334
 
290
- @git = ENV['GIT'] || 'git'
335
+ @git = ENV['GIT'] || (win_platform? ? 'git.exe' : 'git')
291
336
 
292
337
  Gem.ensure_gem_subdirectories @gemhome
338
+ Gem.ensure_default_gem_subdirectories @gemhome
293
339
 
294
340
  @orig_LOAD_PATH = $LOAD_PATH.dup
295
341
  $LOAD_PATH.map! do |s|
@@ -309,32 +355,31 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
309
355
 
310
356
  ENV['HOME'] = @userhome
311
357
  Gem.instance_variable_set :@user_home, nil
358
+ Gem.instance_variable_set :@data_home, nil
312
359
  Gem.instance_variable_set :@gemdeps, nil
313
360
  Gem.instance_variable_set :@env_requirements_by_name, nil
314
361
  Gem.send :remove_instance_variable, :@ruby_version if
315
362
  Gem.instance_variables.include? :@ruby_version
316
363
 
317
- FileUtils.mkdir_p @gemhome
318
364
  FileUtils.mkdir_p @userhome
319
365
 
320
366
  ENV['GEM_PRIVATE_KEY_PASSPHRASE'] = PRIVATE_KEY_PASSPHRASE
321
367
 
322
- @default_dir = File.join @tempdir, 'default'
323
- @default_spec_dir = File.join @default_dir, "specifications", "default"
324
368
  if Gem.java_platform?
325
369
  @orig_default_gem_home = RbConfig::CONFIG['default_gem_home']
326
- RbConfig::CONFIG['default_gem_home'] = @default_dir
370
+ RbConfig::CONFIG['default_gem_home'] = @gemhome
327
371
  else
328
- Gem.instance_variable_set(:@default_dir, @default_dir)
372
+ Gem.instance_variable_set(:@default_dir, @gemhome)
329
373
  end
330
- FileUtils.mkdir_p @default_spec_dir
374
+
375
+ @orig_bindir = RbConfig::CONFIG["bindir"]
376
+ RbConfig::CONFIG["bindir"] = File.join @gemhome, "bin"
331
377
 
332
378
  Gem::Specification.unresolved_deps.clear
333
379
  Gem.use_paths(@gemhome)
334
380
 
335
- Gem::Security.reset
336
-
337
381
  Gem.loaded_specs.clear
382
+ Gem.instance_variable_set(:@activated_gem_paths, 0)
338
383
  Gem.clear_default_specs
339
384
  Bundler.reset!
340
385
 
@@ -375,11 +420,8 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
375
420
  $LOAD_PATH.replace @orig_LOAD_PATH if @orig_LOAD_PATH
376
421
  if @orig_LOADED_FEATURES
377
422
  if @orig_LOAD_PATH
378
- paths = @orig_LOAD_PATH.map {|path| File.join(File.expand_path(path), "/")}
379
423
  ($LOADED_FEATURES - @orig_LOADED_FEATURES).each do |feat|
380
- unless paths.any? {|path| feat.start_with?(path)}
381
- $LOADED_FEATURES.delete(feat)
382
- end
424
+ $LOADED_FEATURES.delete(feat) if feat.start_with?(@tmp)
383
425
  end
384
426
  else
385
427
  $LOADED_FEATURES.replace @orig_LOADED_FEATURES
@@ -398,8 +440,14 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
398
440
 
399
441
  ENV.replace(@orig_env)
400
442
 
443
+ Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
444
+ Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
445
+ @orig_SYSTEM_WIDE_CONFIG_FILE
446
+
401
447
  Gem.ruby = @orig_ruby if @orig_ruby
402
448
 
449
+ RbConfig::CONFIG['bindir'] = @orig_bindir
450
+
403
451
  if Gem.java_platform?
404
452
  RbConfig::CONFIG['default_gem_home'] = @orig_default_gem_home
405
453
  else
@@ -417,6 +465,17 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
417
465
  @back_ui.close
418
466
  end
419
467
 
468
+ def credential_setup
469
+ @temp_cred = File.join(@userhome, '.gem', 'credentials')
470
+ FileUtils.mkdir_p File.dirname(@temp_cred)
471
+ File.write @temp_cred, ':rubygems_api_key: 701229f217cdf23b1344c7b4b54ca97'
472
+ File.chmod 0600, @temp_cred
473
+ end
474
+
475
+ def credential_teardown
476
+ FileUtils.rm_rf @temp_cred
477
+ end
478
+
420
479
  def common_installer_setup
421
480
  common_installer_teardown
422
481
 
@@ -505,7 +564,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
505
564
  end
506
565
 
507
566
  def in_path?(executable) # :nodoc:
508
- return true if %r%\A([A-Z]:|/)% =~ executable and File.exist? executable
567
+ return true if %r{\A([A-Z]:|/)} =~ executable and File.exist? executable
509
568
 
510
569
  ENV['PATH'].split(File::PATH_SEPARATOR).any? do |directory|
511
570
  File.exist? File.join directory, executable
@@ -518,7 +577,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
518
577
  def install_gem(spec, options = {})
519
578
  require 'rubygems/installer'
520
579
 
521
- gem = File.join @tempdir, "gems", "#{spec.full_name}.gem"
580
+ gem = spec.cache_file
522
581
 
523
582
  unless File.exist? gem
524
583
  use_ui Gem::MockGemUi.new do
@@ -527,7 +586,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
527
586
  end
528
587
  end
529
588
 
530
- gem = File.join(@tempdir, File.basename(spec.cache_file)).tap(&Gem::UNTAINT)
589
+ gem = File.join(@tempdir, File.basename(gem)).tap(&Gem::UNTAINT)
531
590
  end
532
591
 
533
592
  Gem::Installer.at(gem, options.merge({:wrappers => true})).install
@@ -623,8 +682,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
623
682
  yield(s) if block_given?
624
683
  end
625
684
 
626
- Gem::Specification.map # HACK: force specs to (re-)load before we write
627
-
628
685
  written_path = write_file spec.spec_file do |io|
629
686
  io.write spec.to_ruby_for_cache
630
687
  end
@@ -684,7 +741,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
684
741
 
685
742
  def install_specs(*specs)
686
743
  specs.each do |spec|
687
- Gem::Installer.for_spec(spec).install
744
+ Gem::Installer.for_spec(spec, :force => true).install
688
745
  end
689
746
 
690
747
  Gem.searcher = nil
@@ -694,19 +751,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
694
751
  # Installs the provided default specs including writing the spec file
695
752
 
696
753
  def install_default_gems(*specs)
697
- install_default_specs(*specs)
698
-
699
- specs.each do |spec|
700
- File.open spec.loaded_from, 'w' do |io|
701
- io.write spec.to_ruby_for_cache
702
- end
703
- end
704
- end
705
-
706
- ##
707
- # Install the provided default specs
708
-
709
- def install_default_specs(*specs)
710
754
  specs.each do |spec|
711
755
  installer = Gem::Installer.for_spec(spec, :install_as_default => true)
712
756
  installer.install
@@ -728,18 +772,19 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
728
772
  ensure
729
773
  prefix = File.dirname(__FILE__) + "/"
730
774
  new_features = ($LOADED_FEATURES - old_loaded_features)
731
- old_loaded_features.concat(new_features.select {|f| f.rindex(prefix, 0)})
775
+ old_loaded_features.concat(new_features.select {|f| f.rindex(prefix, 0) })
732
776
  $LOADED_FEATURES.replace old_loaded_features
733
777
  end
734
778
 
735
779
  def new_default_spec(name, version, deps = nil, *files)
736
780
  spec = util_spec name, version, deps
737
781
 
738
- spec.loaded_from = File.join(@default_spec_dir, spec.spec_name)
782
+ spec.loaded_from = File.join(@gemhome, "specifications", "default", spec.spec_name)
739
783
  spec.files = files
740
784
 
741
785
  lib_dir = File.join(@tempdir, "default_gems", "lib")
742
786
  lib_dir.instance_variable_set(:@gem_prelude_index, lib_dir)
787
+ Gem.instance_variable_set(:@default_gem_load_paths, [*Gem.send(:default_gem_load_paths), lib_dir])
743
788
  $LOAD_PATH.unshift(lib_dir)
744
789
  files.each do |file|
745
790
  rb_path = File.join(lib_dir, file)
@@ -775,9 +820,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
775
820
  end
776
821
 
777
822
  if deps
778
- # Since Hash#each is unordered in 1.8, sort the keys and iterate that
779
- # way so the tests are deterministic on all implementations.
780
- deps.keys.sort.each do |n|
823
+ deps.keys.each do |n|
781
824
  spec.add_dependency n, (deps[n] || '>= 0')
782
825
  end
783
826
  end
@@ -789,9 +832,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
789
832
 
790
833
  util_build_gem spec
791
834
 
792
- cache_file = File.join @tempdir, 'gems', "#{spec.full_name}.gem"
793
- FileUtils.mkdir_p File.dirname cache_file
794
- FileUtils.mv spec.cache_file, cache_file
795
835
  FileUtils.rm spec.spec_file
796
836
  end
797
837
 
@@ -807,10 +847,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
807
847
  def util_gem(name, version, deps = nil, &block)
808
848
  if deps
809
849
  block = proc do |s|
810
- # Since Hash#each is unordered in 1.8, sort
811
- # the keys and iterate that way so the tests are
812
- # deterministic on all implementations.
813
- deps.keys.sort.each do |n|
850
+ deps.keys.each do |n|
814
851
  s.add_dependency n, (deps[n] || '>= 0')
815
852
  end
816
853
  end
@@ -958,7 +995,7 @@ Also, a list:
958
995
 
959
996
  spec_fetcher = Gem::SpecFetcher.fetcher
960
997
 
961
- prerelease, all = all_specs.partition { |spec| spec.version.prerelease? }
998
+ prerelease, all = all_specs.partition {|spec| spec.version.prerelease? }
962
999
  latest = Gem::Specification._latest_specs all_specs
963
1000
 
964
1001
  spec_fetcher.specs[@uri] = []
@@ -980,7 +1017,7 @@ Also, a list:
980
1017
  unless Gem::RemoteFetcher === @fetcher
981
1018
  v = Gem.marshal_version
982
1019
 
983
- specs = all.map { |spec| spec.name_tuple }
1020
+ specs = all.map {|spec| spec.name_tuple }
984
1021
  s_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic specs
985
1022
 
986
1023
  latest_specs = latest.map do |spec|
@@ -989,7 +1026,7 @@ Also, a list:
989
1026
 
990
1027
  l_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic latest_specs
991
1028
 
992
- prerelease_specs = prerelease.map { |spec| spec.name_tuple }
1029
+ prerelease_specs = prerelease.map {|spec| spec.name_tuple }
993
1030
  p_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic prerelease_specs
994
1031
 
995
1032
  @fetcher.data["#{@gem_repo}specs.#{v}.gz"] = s_zip
@@ -1160,7 +1197,7 @@ Also, a list:
1160
1197
 
1161
1198
  def build_rake_in(good=true)
1162
1199
  gem_ruby = Gem.ruby
1163
- Gem.ruby = @@ruby
1200
+ Gem.ruby = self.class.rubybin
1164
1201
  env_rake = ENV["rake"]
1165
1202
  rake = (good ? @@good_rake : @@bad_rake)
1166
1203
  ENV["rake"] = rake
@@ -1194,35 +1231,44 @@ Also, a list:
1194
1231
  end
1195
1232
 
1196
1233
  begin
1197
- require "rbconfig"
1198
- File.join(RbConfig::CONFIG["bindir"],
1199
- RbConfig::CONFIG["ruby_install_name"] +
1200
- RbConfig::CONFIG["EXEEXT"])
1234
+ Gem.ruby
1201
1235
  rescue LoadError
1202
1236
  "ruby"
1203
1237
  end
1204
1238
  end
1205
1239
 
1206
- class << self
1240
+ def ruby_with_rubygems_in_load_path
1241
+ [Gem.ruby, "-I", File.expand_path("..", __dir__)]
1242
+ end
1243
+
1244
+ def with_clean_path_to_ruby
1245
+ orig_ruby = Gem.ruby
1246
+
1247
+ Gem.instance_variable_set :@ruby, nil
1248
+
1249
+ yield
1250
+ ensure
1251
+ Gem.instance_variable_set :@ruby, orig_ruby
1252
+ end
1207
1253
 
1254
+ class << self
1208
1255
  # :nodoc:
1209
1256
  ##
1210
1257
  # Return the join path, with escaping backticks, dollars, and
1211
1258
  # double-quotes. Unlike `shellescape`, equal-sign is not escaped.
1259
+
1212
1260
  private
1213
1261
 
1214
1262
  def escape_path(*path)
1215
1263
  path = File.join(*path)
1216
- if %r'\A[-+:/=@,.\w]+\z' =~ path
1264
+ if %r{\A[-+:/=@,.\w]+\z} =~ path
1217
1265
  path
1218
1266
  else
1219
1267
  "\"#{path.gsub(/[`$"]/, '\\&')}\""
1220
1268
  end
1221
1269
  end
1222
-
1223
1270
  end
1224
1271
 
1225
- @@ruby = rubybin
1226
1272
  @@good_rake = "#{rubybin} #{escape_path(TEST_PATH, 'good_rake.rb')}"
1227
1273
  @@bad_rake = "#{rubybin} #{escape_path(TEST_PATH, 'bad_rake.rb')}"
1228
1274
 
@@ -1338,7 +1384,6 @@ Also, a list:
1338
1384
  # It is available by requiring Gem::TestCase.
1339
1385
 
1340
1386
  class StaticSet < Gem::Resolver::Set
1341
-
1342
1387
  ##
1343
1388
  # A StaticSet ignores remote because it has a fixed set of gems.
1344
1389
 
@@ -1375,7 +1420,7 @@ Also, a list:
1375
1420
  # Finds all gems matching +dep+ in this set.
1376
1421
 
1377
1422
  def find_all(dep)
1378
- @specs.find_all { |s| dep.match? s, @prerelease }
1423
+ @specs.find_all {|s| dep.match? s, @prerelease }
1379
1424
  end
1380
1425
 
1381
1426
  ##
@@ -1393,7 +1438,6 @@ Also, a list:
1393
1438
 
1394
1439
  def prefetch(reqs) # :nodoc:
1395
1440
  end
1396
-
1397
1441
  end
1398
1442
 
1399
1443
  ##
@@ -1460,34 +1504,7 @@ Also, a list:
1460
1504
  PRIVATE_KEY = nil
1461
1505
  PUBLIC_KEY = nil
1462
1506
  PUBLIC_CERT = nil
1463
- end if defined?(OpenSSL::SSL)
1464
-
1465
- end
1466
-
1467
- # require dependencies that are not discoverable once GEM_HOME and GEM_PATH
1468
- # are wiped
1469
- begin
1470
- gem 'rake'
1471
- rescue Gem::LoadError
1472
- end
1473
-
1474
- begin
1475
- require 'rake/packagetask'
1476
- rescue LoadError
1477
- end
1478
-
1479
- begin
1480
- gem 'rdoc'
1481
- require 'rdoc'
1482
-
1483
- require 'rubygems/rdoc'
1484
- rescue LoadError, Gem::LoadError
1485
- end
1486
-
1487
- begin
1488
- gem 'builder'
1489
- require 'builder/xchar'
1490
- rescue LoadError, Gem::LoadError
1507
+ end if Gem::HAVE_OPENSSL
1491
1508
  end
1492
1509
 
1493
1510
  require 'rubygems/test_utilities'