rubygems-update 3.1.2 → 3.2.3

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