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
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/source'
4
4
 
5
5
  class TestGemSourceInstalled < Gem::TestCase
6
-
7
6
  def test_spaceship
8
7
  a1 = quick_gem 'a', '1'
9
8
  util_build_gem a1
@@ -17,20 +16,19 @@ class TestGemSourceInstalled < Gem::TestCase
17
16
 
18
17
  assert_equal(0, installed.<=>(installed), 'installed <=> installed')
19
18
 
20
- assert_equal(-1, remote. <=>(installed), 'remote <=> installed')
19
+ assert_equal(-1, remote.<=>(installed), 'remote <=> installed')
21
20
  assert_equal(1, installed.<=>(remote), 'installed <=> remote')
22
21
 
23
22
  assert_equal(1, installed.<=>(local), 'installed <=> local')
24
- assert_equal(-1, local. <=>(installed), 'local <=> installed')
23
+ assert_equal(-1, local.<=>(installed), 'local <=> installed')
25
24
 
26
- assert_equal(-1, specific. <=>(installed), 'specific <=> installed')
25
+ assert_equal(-1, specific.<=>(installed), 'specific <=> installed')
27
26
  assert_equal(1, installed.<=>(specific), 'installed <=> specific')
28
27
 
29
- assert_equal(1, git. <=>(installed), 'git <=> installed')
30
- assert_equal(-1, installed.<=>(git), 'installed <=> git')
28
+ assert_equal(1, git. <=>(installed), 'git <=> installed')
29
+ assert_equal(-1, installed.<=>(git), 'installed <=> git')
31
30
 
32
- assert_equal(1, vendor. <=>(installed), 'vendor <=> installed')
33
- assert_equal(-1, installed.<=>(vendor), 'installed <=> vendor')
31
+ assert_equal(1, vendor.<=>(installed), 'vendor <=> installed')
32
+ assert_equal(-1, installed.<=>(vendor), 'installed <=> vendor')
34
33
  end
35
-
36
34
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
+ require 'rubygems'
2
3
  require 'rubygems/source_list'
3
4
  require 'rubygems/test_case'
4
5
 
5
6
  class TestGemSourceList < Gem::TestCase
6
-
7
7
  def setup
8
8
  super
9
9
 
@@ -115,5 +115,4 @@ class TestGemSourceList < Gem::TestCase
115
115
  @sl.delete Gem::Source.new(@uri)
116
116
  assert_equal @sl.sources, []
117
117
  end
118
-
119
118
  end
@@ -5,7 +5,6 @@ require 'rubygems/source'
5
5
  require 'fileutils'
6
6
 
7
7
  class TestGemSourceLocal < Gem::TestCase
8
-
9
8
  def setup
10
9
  super
11
10
 
@@ -73,7 +72,7 @@ class TestGemSourceLocal < Gem::TestCase
73
72
 
74
73
  @sl.load_specs :released
75
74
 
76
- inner = [@a, @ap, @b].map { |t| t.name_tuple }.inspect
75
+ inner = [@a, @ap, @b].map {|t| t.name_tuple }.inspect
77
76
 
78
77
  assert_equal "#<Gem::Source::Local specs: #{inner}>", @sl.inspect
79
78
  end
@@ -93,16 +92,15 @@ class TestGemSourceLocal < Gem::TestCase
93
92
  installed = Gem::Source::Installed.new
94
93
  local = Gem::Source::Local.new
95
94
 
96
- assert_equal(0, local. <=>(local), 'local <=> local')
95
+ assert_equal(0, local.<=>(local), 'local <=> local')
97
96
 
98
- assert_equal(-1, remote. <=>(local), 'remote <=> local')
99
- assert_equal(1, local. <=>(remote), 'local <=> remote')
97
+ assert_equal(-1, remote.<=>(local), 'remote <=> local')
98
+ assert_equal(1, local.<=>(remote), 'local <=> remote')
100
99
 
101
- assert_equal(1, installed.<=>(local), 'installed <=> local')
102
- assert_equal(-1, local. <=>(installed), 'local <=> installed')
100
+ assert_equal(1, installed.<=>(local), 'installed <=> local')
101
+ assert_equal(-1, local.<=>(installed), 'local <=> installed')
103
102
 
104
- assert_equal(-1, specific. <=>(local), 'specific <=> local')
105
- assert_equal(1, local. <=>(specific), 'local <=> specific')
103
+ assert_equal(-1, specific.<=>(local), 'specific <=> local')
104
+ assert_equal(1, local.<=>(specific), 'local <=> specific')
106
105
  end
107
-
108
106
  end
@@ -2,7 +2,6 @@
2
2
  require 'rubygems/test_case'
3
3
 
4
4
  class TestGemSourceLock < Gem::TestCase
5
-
6
5
  def test_fetch_spec
7
6
  spec_fetcher do |fetcher|
8
7
  fetcher.spec 'a', 1
@@ -59,31 +58,31 @@ class TestGemSourceLock < Gem::TestCase
59
58
  lock = Gem::Source::Lock.new git
60
59
 
61
60
  assert_equal(1, lock.<=>(git), 'lock <=> git')
62
- assert_equal(-1, git .<=>(lock), 'git <=> lock')
61
+ assert_equal(-1, git.<=>(lock), 'git <=> lock')
63
62
  end
64
63
 
65
64
  def test_spaceship_installed
66
65
  installed = Gem::Source::Installed.new
67
66
  lock = Gem::Source::Lock.new installed
68
67
 
69
- assert_equal(1, lock. <=>(installed), 'lock <=> installed')
70
- assert_equal(-1, installed.<=>(lock), 'installed <=> lock')
68
+ assert_equal(1, lock.<=>(installed), 'lock <=> installed')
69
+ assert_equal(-1, installed.<=>(lock), 'installed <=> lock')
71
70
  end
72
71
 
73
72
  def test_spaceship_local
74
73
  local = Gem::Source::Local.new
75
74
  lock = Gem::Source::Lock.new local # nonsense
76
75
 
77
- assert_equal(1, lock. <=>(local), 'lock <=> local')
78
- assert_equal(-1, local.<=>(lock), 'local <=> lock')
76
+ assert_equal(1, lock.<=>(local), 'lock <=> local')
77
+ assert_equal(-1, local.<=>(lock), 'local <=> lock')
79
78
  end
80
79
 
81
80
  def test_spaceship_remote
82
81
  remote = Gem::Source.new @gem_repo
83
82
  lock = Gem::Source::Lock.new remote
84
83
 
85
- assert_equal(1, lock. <=>(remote), 'lock <=> remote')
86
- assert_equal(-1, remote.<=>(lock), 'remote <=> lock')
84
+ assert_equal(1, lock.<=>(remote), 'lock <=> remote')
85
+ assert_equal(-1, remote.<=>(lock), 'remote <=> lock')
87
86
  end
88
87
 
89
88
  def test_spaceship_specific_file
@@ -92,7 +91,7 @@ class TestGemSourceLock < Gem::TestCase
92
91
  specific = Gem::Source::SpecificFile.new gem
93
92
  lock = Gem::Source::Lock.new specific # nonsense
94
93
 
95
- assert_equal(1, lock .<=>(specific), 'lock <=> specific')
94
+ assert_equal(1, lock.<=>(specific), 'lock <=> specific')
96
95
  assert_equal(-1, specific.<=>(lock), 'specific <=> lock')
97
96
  end
98
97
 
@@ -100,8 +99,8 @@ class TestGemSourceLock < Gem::TestCase
100
99
  vendor = Gem::Source::Vendor.new 'vendor/a'
101
100
  lock = Gem::Source::Lock.new vendor
102
101
 
103
- assert_equal(1, lock. <=>(vendor), 'lock <=> vendor')
104
- assert_equal(-1, vendor.<=>(lock), 'vendor <=> lock')
102
+ assert_equal(1, lock.<=>(vendor), 'lock <=> vendor')
103
+ assert_equal(-1, vendor.<=>(lock), 'vendor <=> lock')
105
104
  end
106
105
 
107
106
  def test_uri
@@ -110,5 +109,4 @@ class TestGemSourceLock < Gem::TestCase
110
109
 
111
110
  assert_equal URI(@gem_repo), lock.uri
112
111
  end
113
-
114
112
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/source'
4
4
 
5
5
  class TestGemSourceSpecificFile < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
 
@@ -46,16 +45,16 @@ class TestGemSourceSpecificFile < Gem::TestCase
46
45
  installed = Gem::Source::Installed.new
47
46
  local = Gem::Source::Local.new
48
47
 
49
- assert_equal(0, specific. <=>(specific), 'specific <=> specific')
48
+ assert_equal(0, specific.<=>(specific), 'specific <=> specific')
50
49
 
51
- assert_equal(-1, remote. <=>(specific), 'remote <=> specific')
52
- assert_equal(1, specific. <=>(remote), 'specific <=> remote')
50
+ assert_equal(-1, remote.<=>(specific), 'remote <=> specific')
51
+ assert_equal(1, specific.<=>(remote), 'specific <=> remote')
53
52
 
54
- assert_equal(-1, specific. <=>(local), 'specific <=> local')
55
- assert_equal(1, local. <=>(specific), 'local <=> specific')
53
+ assert_equal(-1, specific.<=>(local), 'specific <=> local')
54
+ assert_equal(1, local. <=>(specific), 'local <=> specific')
56
55
 
57
- assert_equal(-1, specific. <=>(installed), 'specific <=> installed')
58
- assert_equal(1, installed.<=>(specific), 'installed <=> specific')
56
+ assert_equal(-1, specific. <=>(installed), 'specific <=> installed')
57
+ assert_equal(1, installed.<=>(specific), 'installed <=> specific')
59
58
 
60
59
  a2 = quick_gem 'a', '2'
61
60
  util_build_gem a2
@@ -73,5 +72,4 @@ class TestGemSourceSpecificFile < Gem::TestCase
73
72
  assert_equal(0, a1_source.<=>(a1_source), 'a1_source <=> a1_source')
74
73
  assert_equal(1, a2_source.<=>(a1_source), 'a2_source <=> a1_source')
75
74
  end
76
-
77
75
  end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+ require 'rubygems/test_case'
3
+ require 'rubygems/source'
4
+
5
+ class TestGemSourceSubpathProblem < Gem::TestCase
6
+ def tuple(*args)
7
+ Gem::NameTuple.new(*args)
8
+ end
9
+
10
+ def setup
11
+ super
12
+
13
+ @gem_repo = "http://gems.example.com/private"
14
+
15
+ spec_fetcher
16
+
17
+ @source = Gem::Source.new(@gem_repo)
18
+
19
+ util_make_gems
20
+ end
21
+
22
+ def test_dependency_resolver_set
23
+ response = Net::HTTPResponse.new '1.1', 200, 'OK'
24
+ response.uri = URI('http://example')
25
+
26
+ @fetcher.data["#{@gem_repo}/"] = response
27
+
28
+ set = @source.dependency_resolver_set
29
+
30
+ assert_kind_of Gem::Resolver::APISet, set
31
+ end
32
+
33
+ def test_fetch_spec
34
+ @fetcher.data["#{@gem_repo}/#{Gem::MARSHAL_SPEC_DIR}#{@a1.spec_name}.rz"] = Zlib::Deflate.deflate(Marshal.dump(@a1))
35
+
36
+ spec = @source.fetch_spec tuple('a', Gem::Version.new(1), 'ruby')
37
+ assert_equal @a1.full_name, spec.full_name
38
+ end
39
+
40
+ def test_load_specs
41
+ @fetcher.data["#{@gem_repo}/latest_specs.#{Gem.marshal_version}.gz"] = util_gzip(Marshal.dump([
42
+ Gem::NameTuple.new(@a1.name, @a1.version, 'ruby'),
43
+ Gem::NameTuple.new(@b2.name, @b2.version, 'ruby'),
44
+ ]))
45
+
46
+ released = @source.load_specs(:latest).map {|spec| spec.full_name }
47
+ assert_equal %W[a-1 b-2], released
48
+ end
49
+ end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/source'
4
4
 
5
5
  class TestGemSourceVendor < Gem::TestCase
6
-
7
6
  def test_initialize
8
7
  source = Gem::Source::Vendor.new 'vendor/foo'
9
8
 
@@ -16,16 +15,15 @@ class TestGemSourceVendor < Gem::TestCase
16
15
  git = Gem::Source::Git.new 'a', 'a', 'master'
17
16
  installed = Gem::Source::Installed.new
18
17
 
19
- assert_equal(0, vendor. <=>(vendor), 'vendor <=> vendor')
18
+ assert_equal(0, vendor.<=>(vendor), 'vendor <=> vendor')
20
19
 
21
- assert_equal(1, vendor. <=>(remote), 'vendor <=> remote')
22
- assert_equal(-1, remote. <=>(vendor), 'remote <=> vendor')
20
+ assert_equal(1, vendor.<=>(remote), 'vendor <=> remote')
21
+ assert_equal(-1, remote.<=>(vendor), 'remote <=> vendor')
23
22
 
24
- assert_equal(1, vendor. <=>(git), 'vendor <=> git')
25
- assert_equal(-1, git. <=>(vendor), 'git <=> vendor')
23
+ assert_equal(1, vendor.<=>(git), 'vendor <=> git')
24
+ assert_equal(-1, git.<=>(vendor), 'git <=> vendor')
26
25
 
27
- assert_equal(1, vendor. <=>(installed), 'vendor <=> installed')
28
- assert_equal(-1, installed.<=>(vendor), 'installed <=> vendor')
26
+ assert_equal(1, vendor.<=>(installed), 'vendor <=> installed')
27
+ assert_equal(-1, installed.<=>(vendor), 'installed <=> vendor')
29
28
  end
30
-
31
29
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/spec_fetcher'
4
4
 
5
5
  class TestGemSpecFetcher < Gem::TestCase
6
-
7
6
  def tuple(*args)
8
7
  Gem::NameTuple.new(*args)
9
8
  end
@@ -173,10 +172,19 @@ class TestGemSpecFetcher < Gem::TestCase
173
172
  spec_fetcher do|fetcher|
174
173
  fetcher.spec 'example', 1
175
174
  fetcher.spec 'other-example', 1
175
+ fetcher.spec 'examp', 1
176
176
  end
177
177
 
178
- suggestions = @sf.suggest_gems_from_name('examplw')
178
+ suggestions = @sf.suggest_gems_from_name('examplw', :latest, 1)
179
179
  assert_equal ['example'], suggestions
180
+
181
+ suggestions = @sf.suggest_gems_from_name('other')
182
+ assert_equal ['other-example'], suggestions
183
+
184
+ suggestions = @sf.suggest_gems_from_name('exam')
185
+ assert suggestions.any? { ['examp'] }
186
+ assert suggestions.any? { ['example'] }
187
+ assert suggestions.any? { ['other-example'] }
180
188
  end
181
189
 
182
190
  def test_suggest_gems_from_name_prerelease
@@ -313,7 +321,7 @@ class TestGemSpecFetcher < Gem::TestCase
313
321
  specs, _ = @sf.available_specs(:prerelease)
314
322
 
315
323
  expected = Gem::NameTuple.from_list \
316
- [['a', v('2.a'), Gem::Platform::RUBY]]
324
+ [['a', v('2.a'), Gem::Platform::RUBY]]
317
325
 
318
326
  assert_equal expected, specs[@source]
319
327
  end
@@ -326,5 +334,4 @@ class TestGemSpecFetcher < Gem::TestCase
326
334
  assert_equal({}, specs)
327
335
  assert_kind_of Gem::SourceFetchProblem, errors.first
328
336
  end
329
-
330
337
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require 'benchmark'
3
3
  require 'rubygems/test_case'
4
+ require 'date'
4
5
  require 'pathname'
5
6
  require 'stringio'
6
7
  require 'rubygems/ext'
@@ -9,7 +10,6 @@ require 'rubygems/installer'
9
10
  require 'rubygems/platform'
10
11
 
11
12
  class TestGemSpecification < Gem::TestCase
12
-
13
13
  LEGACY_YAML_SPEC = <<-EOF.freeze
14
14
  --- !ruby/object:Gem::Specification
15
15
  rubygems_version: "1.0"
@@ -83,6 +83,11 @@ end
83
83
  def setup
84
84
  super
85
85
 
86
+ # Setting `@default_source_date_epoch` to `nil` effectively resets the
87
+ # value used for `Gem.source_date_epoch` whenever `$SOURCE_DATE_EPOCH`
88
+ # is not set.
89
+ Gem.instance_variable_set(:'@default_source_date_epoch', nil)
90
+
86
91
  @a1 = util_spec 'a', '1' do |s|
87
92
  s.executable = 'exec'
88
93
  s.test_file = 'test/suite.rb'
@@ -135,12 +140,12 @@ end
135
140
  install_specs c1, c2, b1, b2, a1
136
141
 
137
142
  a1.activate
138
- assert_equal %w(a-1), loaded_spec_names
143
+ assert_equal %w[a-1], loaded_spec_names
139
144
  assert_equal ["b (> 0)"], unresolved_names
140
145
 
141
146
  require "d#{$$}"
142
147
 
143
- assert_equal %w(a-1 b-2 c-2), loaded_spec_names
148
+ assert_equal %w[a-1 b-2 c-2], loaded_spec_names
144
149
  assert_equal [], unresolved_names
145
150
  end
146
151
  end
@@ -182,12 +187,12 @@ end
182
187
  install_specs c1, c2, b1, b2, a1
183
188
 
184
189
  a1.activate
185
- assert_equal %w(a-1), loaded_spec_names
190
+ assert_equal %w[a-1], loaded_spec_names
186
191
  assert_equal ["b (> 0)"], unresolved_names
187
192
 
188
193
  require "d#{$$}"
189
194
 
190
- assert_equal %w(a-1 b-2 c-2), loaded_spec_names
195
+ assert_equal %w[a-1 b-2 c-2], loaded_spec_names
191
196
  assert_equal [], unresolved_names
192
197
  end
193
198
  end
@@ -204,12 +209,12 @@ end
204
209
  install_specs c1, b1, a1, a2, c2, b2
205
210
 
206
211
  a2.activate
207
- assert_equal %w(a-2), loaded_spec_names
212
+ assert_equal %w[a-2], loaded_spec_names
208
213
  assert_equal ["b (> 0)"], unresolved_names
209
214
 
210
215
  require "d#{$$}"
211
216
 
212
- assert_equal %w(a-2 b-1 c-1), loaded_spec_names
217
+ assert_equal %w[a-2 b-1 c-1], loaded_spec_names
213
218
  assert_equal [], unresolved_names
214
219
  end
215
220
  end
@@ -226,12 +231,12 @@ end
226
231
  install_specs d1, c1, c2, b1, b2, a1
227
232
 
228
233
  a1.activate
229
- assert_equal %w(a-1), loaded_spec_names
234
+ assert_equal %w[a-1], loaded_spec_names
230
235
  assert_equal ["b (> 0)"], unresolved_names
231
236
 
232
237
  require "d#{$$}"
233
238
 
234
- assert_equal %w(a-1 d-1), loaded_spec_names
239
+ assert_equal %w[a-1 d-1], loaded_spec_names
235
240
  assert_equal ["b (> 0)"], unresolved_names
236
241
  end
237
242
  end
@@ -241,7 +246,7 @@ end
241
246
  a1 = util_spec "a", "1", "b" => "> 0"
242
247
  b1 = util_spec "b", "1", "c" => ">= 0" # unresolved
243
248
  b2 = util_spec "b", "2", "c" => ">= 0"
244
- c1 = util_spec "c", "1", nil, "lib/c#{$$}.rb" # 1st level
249
+ c1 = util_spec "c", "1", nil, "lib/c#{$$}.rb" # 1st level
245
250
  c2 = util_spec "c", "2", nil, "lib/c#{$$}.rb"
246
251
 
247
252
  install_specs c1, c2, b1, b2, a1
@@ -250,7 +255,7 @@ end
250
255
 
251
256
  require "c#{$$}"
252
257
 
253
- assert_equal %w(a-1 b-2 c-2), loaded_spec_names
258
+ assert_equal %w[a-1 b-2 c-2], loaded_spec_names
254
259
  end
255
260
  end
256
261
 
@@ -259,7 +264,7 @@ end
259
264
  a1 = util_spec "a", "1", "b" => "> 0"
260
265
  b1 = util_spec "b", "1", "c" => ">= 0" # unresolved
261
266
  b2 = util_spec "b", "2", "c" => ">= 0"
262
- c1 = util_spec "c", "1", "d" => ">= 0" # 1st level
267
+ c1 = util_spec "c", "1", "d" => ">= 0" # 1st level
263
268
  c2 = util_spec "c", "2", "d" => ">= 0"
264
269
  d1 = util_spec "d", "1", nil, "lib/d#{$$}.rb" # 2nd level
265
270
  d2 = util_spec "d", "2", nil, "lib/d#{$$}.rb"
@@ -270,7 +275,7 @@ end
270
275
 
271
276
  require "d#{$$}"
272
277
 
273
- assert_equal %w(a-1 b-2 c-2 d-2), loaded_spec_names
278
+ assert_equal %w[a-1 b-2 c-2 d-2], loaded_spec_names
274
279
  end
275
280
  end
276
281
 
@@ -291,7 +296,7 @@ end
291
296
 
292
297
  require "d#{$$}"
293
298
 
294
- assert_equal %w(a-1 b-2 c-2 d-2), loaded_spec_names
299
+ assert_equal %w[a-1 b-2 c-2 d-2], loaded_spec_names
295
300
  end
296
301
  end
297
302
 
@@ -313,7 +318,7 @@ end
313
318
 
314
319
  require "d#{$$}"
315
320
 
316
- assert_equal %w(a-1 b-2 c-2 d-2), loaded_spec_names
321
+ assert_equal %w[a-1 b-2 c-2 d-2], loaded_spec_names
317
322
  end
318
323
  end
319
324
 
@@ -331,12 +336,12 @@ end
331
336
  install_specs c1, c2, c3, b1, b2, a1, a2, base
332
337
 
333
338
  base.activate
334
- assert_equal %w(0-1), loaded_spec_names
339
+ assert_equal %w[0-1], loaded_spec_names
335
340
  assert_equal ["A (>= 1)"], unresolved_names
336
341
 
337
342
  require "d#{$$}"
338
343
 
339
- assert_equal %w(0-1 A-2 b-2 c-2), loaded_spec_names
344
+ assert_equal %w[0-1 A-2 b-2 c-2], loaded_spec_names
340
345
  assert_equal [], unresolved_names
341
346
  end
342
347
  end
@@ -359,7 +364,7 @@ end
359
364
 
360
365
  require "d#{$$}"
361
366
 
362
- assert_includes [%w(a-1 b-2 c-3 d-2),%w(a-1 b-2 d-2)], loaded_spec_names
367
+ assert_includes [%w[a-1 b-2 c-3 d-2],%w[a-1 b-2 d-2]], loaded_spec_names
363
368
  end
364
369
  end
365
370
 
@@ -381,7 +386,7 @@ end
381
386
 
382
387
  require "d#{$$}"
383
388
 
384
- assert_includes [%w(a-1 b-2 d-2 xc-3), %w(a-1 b-2 d-2)], loaded_spec_names
389
+ assert_includes [%w[a-1 b-2 d-2 xc-3], %w[a-1 b-2 d-2]], loaded_spec_names
385
390
  end
386
391
  end
387
392
 
@@ -510,16 +515,16 @@ end
510
515
  require "b/c"
511
516
  end
512
517
 
513
- assert_equal %w(a-1 b-1), loaded_spec_names
518
+ assert_equal %w[a-1 b-1], loaded_spec_names
514
519
  end
515
520
 
516
521
  def test_self_activate_via_require_wtf
517
522
  save_loaded_features do
518
- a1 = util_spec "a", "1", "b" => "> 0", "d" => "> 0" # this
523
+ a1 = util_spec "a", "1", "b" => "> 0", "d" => "> 0" # this
519
524
  b1 = util_spec "b", "1", { "c" => ">= 1" }, "lib/b#{$$}.rb"
520
525
  b2 = util_spec "b", "2", { "c" => ">= 2" }, "lib/b#{$$}.rb" # this
521
526
  c1 = util_spec "c", "1"
522
- c2 = util_spec "c", "2" # this
527
+ c2 = util_spec "c", "2" # this
523
528
  d1 = util_spec "d", "1", { "c" => "< 2" }, "lib/d#{$$}.rb"
524
529
  d2 = util_spec "d", "2", { "c" => "< 2" }, "lib/d#{$$}.rb" # this
525
530
 
@@ -527,7 +532,7 @@ end
527
532
 
528
533
  a1.activate
529
534
 
530
- assert_equal %w(a-1), loaded_spec_names
535
+ assert_equal %w[a-1], loaded_spec_names
531
536
  assert_equal ["b (> 0)", "d (> 0)"], unresolved_names
532
537
 
533
538
  require "b#{$$}"
@@ -538,7 +543,7 @@ end
538
543
 
539
544
  assert_equal "unable to find a version of 'd' to activate", e.message
540
545
 
541
- assert_equal %w(a-1 b-2 c-2), loaded_spec_names
546
+ assert_equal %w[a-1 b-2 c-2], loaded_spec_names
542
547
  assert_equal ["d (> 0)"], unresolved_names
543
548
  end
544
549
  end
@@ -553,7 +558,7 @@ end
553
558
  install_specs c1, c2, b1, b2, a1
554
559
 
555
560
  a1.activate
556
- assert_equal %w(a-1 b-1 c-1), loaded_spec_names
561
+ assert_equal %w[a-1 b-1 c-1], loaded_spec_names
557
562
  end
558
563
 
559
564
  def test_self_activate_loaded
@@ -715,7 +720,7 @@ end
715
720
  version
716
721
  ]
717
722
 
718
- actual_value = Gem::Specification.attribute_names.map { |a| a.to_s }.sort
723
+ actual_value = Gem::Specification.attribute_names.map {|a| a.to_s }.sort
719
724
 
720
725
  assert_equal expected_value, actual_value
721
726
  end
@@ -790,7 +795,7 @@ bindir:
790
795
  op = spec.dependencies.first.requirement.requirements.first.first
791
796
  refute_kind_of YAML::Syck::DefaultKey, op
792
797
 
793
- refute_match %r%DefaultKey%, spec.to_ruby
798
+ refute_match %r{DefaultKey}, spec.to_ruby
794
799
  end
795
800
 
796
801
  def test_self_from_yaml_cleans_up_defaultkey
@@ -824,7 +829,7 @@ bindir:
824
829
  op = spec.dependencies.first.requirement.requirements.first.first
825
830
  refute_kind_of YAML::Syck::DefaultKey, op
826
831
 
827
- refute_match %r%DefaultKey%, spec.to_ruby
832
+ refute_match %r{DefaultKey}, spec.to_ruby
828
833
  end
829
834
 
830
835
  def test_self_from_yaml_cleans_up_defaultkey_from_newer_192
@@ -858,7 +863,7 @@ bindir:
858
863
  op = spec.dependencies.first.requirement.requirements.first.first
859
864
  refute_kind_of YAML::Syck::DefaultKey, op
860
865
 
861
- refute_match %r%DefaultKey%, spec.to_ruby
866
+ refute_match %r{DefaultKey}, spec.to_ruby
862
867
  end
863
868
 
864
869
  def test_self_from_yaml_cleans_up_Date_objects
@@ -939,7 +944,7 @@ dependencies: []
939
944
  assert_equal File.join(@tempdir, 'a-2.gemspec'), spec.loaded_from
940
945
  end
941
946
 
942
- if RUBY_VERSION < '2.7'
947
+ if RUBY_ENGINE == 'ruby' and RUBY_VERSION < '2.7'
943
948
  def test_self_load_tainted
944
949
  full_path = @a2.spec_file
945
950
  write_file full_path do |io|
@@ -1108,13 +1113,13 @@ dependencies: []
1108
1113
  install_specs @a1
1109
1114
 
1110
1115
  assert_includes Gem::Specification.all_names, 'a-1'
1111
- assert_includes Gem::Specification.stubs.map { |s| s.full_name }, 'a-1'
1116
+ assert_includes Gem::Specification.stubs.map {|s| s.full_name }, 'a-1'
1112
1117
 
1113
1118
  uninstall_gem @a1
1114
1119
  Gem::Specification.reset
1115
1120
 
1116
1121
  refute_includes Gem::Specification.all_names, 'a-1'
1117
- refute_includes Gem::Specification.stubs.map { |s| s.full_name }, 'a-1'
1122
+ refute_includes Gem::Specification.stubs.map {|s| s.full_name }, 'a-1'
1118
1123
  end
1119
1124
 
1120
1125
  def test_self_remove_spec_removed
@@ -1129,48 +1134,30 @@ dependencies: []
1129
1134
  Gem::Specification.reset
1130
1135
 
1131
1136
  refute_includes Gem::Specification.all_names, 'a-1'
1132
- refute_includes Gem::Specification.stubs.map { |s| s.full_name }, 'a-1'
1133
- end
1134
-
1135
- def test_self_stubs
1136
- Gem.loaded_specs.clear
1137
- Gem::Specification.class_variable_set(:@@stubs, nil)
1138
-
1139
- dir_standard_specs = File.join Gem.dir, 'specifications'
1140
- dir_default_specs = Gem.default_specifications_dir
1141
-
1142
- # Create gemspecs in three locations used in stubs
1143
- loaded_spec = Gem::Specification.new 'a', '3'
1144
- Gem.loaded_specs['a'] = loaded_spec
1145
- save_gemspec 'a', '2', dir_default_specs
1146
- save_gemspec 'a', '1', dir_standard_specs
1147
-
1148
- full_names = ['a-3', 'a-2', 'a-1']
1149
- assert_equal full_names, Gem::Specification.stubs.map { |s| s.full_name }
1150
-
1151
- Gem.loaded_specs.delete 'a'
1152
- Gem::Specification.class_variable_set(:@@stubs, nil)
1137
+ refute_includes Gem::Specification.stubs.map {|s| s.full_name }, 'a-1'
1153
1138
  end
1154
1139
 
1155
- def test_self_stubs_for
1140
+ def test_self_stubs_for_lazy_loading
1156
1141
  Gem.loaded_specs.clear
1157
1142
  Gem::Specification.class_variable_set(:@@stubs, nil)
1158
1143
 
1159
1144
  dir_standard_specs = File.join Gem.dir, 'specifications'
1160
- dir_default_specs = Gem.default_specifications_dir
1161
-
1162
- # Create gemspecs in three locations used in stubs
1163
- loaded_spec = Gem::Specification.new 'a', '3'
1164
- Gem.loaded_specs['a'] = loaded_spec
1165
- save_gemspec('a-2', '2', dir_default_specs) { |s| s.name = 'a' }
1166
- save_gemspec('a-1', '1', dir_standard_specs) { |s| s.name = 'a' }
1167
1145
 
1168
- full_names = ['a-3', 'a-2', 'a-1']
1146
+ save_gemspec('a-1', '1', dir_standard_specs){|s| s.name = 'a' }
1147
+ save_gemspec('b-1', '1', dir_standard_specs){|s| s.name = 'b' }
1169
1148
 
1170
- assert_equal full_names, Gem::Specification.stubs_for('a').map { |s| s.full_name }
1149
+ assert_equal ['a-1'], Gem::Specification.stubs_for('a').map {|s| s.full_name }
1171
1150
  assert_equal 1, Gem::Specification.class_variable_get(:@@stubs_by_name).length
1151
+ assert_equal ['b-1'], Gem::Specification.stubs_for('b').map {|s| s.full_name }
1152
+ assert_equal 2, Gem::Specification.class_variable_get(:@@stubs_by_name).length
1153
+
1154
+ assert_equal(
1155
+ Gem::Specification.stubs_for('a').map {|s| s.object_id },
1156
+ Gem::Specification.stubs_for('a').map {|s| s.object_id }
1157
+ )
1172
1158
 
1173
1159
  Gem.loaded_specs.delete 'a'
1160
+ Gem.loaded_specs.delete 'b'
1174
1161
  Gem::Specification.class_variable_set(:@@stubs, nil)
1175
1162
  end
1176
1163
 
@@ -1182,7 +1169,7 @@ dependencies: []
1182
1169
 
1183
1170
  # create user spec
1184
1171
  user_spec_dir = File.join Gem.user_dir, 'specifications'
1185
- FileUtils.mkdir_p(user_spec_dir) unless Dir.exist? user_spec_dir
1172
+ FileUtils.mkdir_p(user_spec_dir) unless Dir.exist? user_spec_dir
1186
1173
  # dirs doesn't include user ?
1187
1174
  Gem::Specification.dirs << user_spec_dir
1188
1175
 
@@ -1192,7 +1179,7 @@ dependencies: []
1192
1179
 
1193
1180
  #create specs
1194
1181
  platforms.each do |plat|
1195
- spec = Gem::Specification.new(gem, v) { |s| s.platform = plat }
1182
+ spec = Gem::Specification.new(gem, v) {|s| s.platform = plat }
1196
1183
  File.open File.join(user_spec_dir, "#{gem}-#{v}-#{plat}.gemspec"), 'w' do |io|
1197
1184
  io.write spec.to_ruby
1198
1185
  end
@@ -1383,12 +1370,12 @@ dependencies: []
1383
1370
  awesome.add_dependency :gem_name
1384
1371
  end
1385
1372
 
1386
- assert_equal %w[true gem_name], gem.dependencies.map { |dep| dep.name }
1373
+ assert_equal %w[true gem_name], gem.dependencies.map {|dep| dep.name }
1387
1374
  end
1388
1375
 
1389
1376
  def test_add_dependency_from_existing_dependency
1390
1377
  dep = Gem::Dependency.new("existing_dep", Gem::Requirement.new('> 1'), :runtime)
1391
- spec = Gem::Specification.new { |s| s.add_dependency dep }
1378
+ spec = Gem::Specification.new {|s| s.add_dependency dep }
1392
1379
  assert_equal dep, spec.dependencies.first
1393
1380
  end
1394
1381
 
@@ -1397,7 +1384,7 @@ dependencies: []
1397
1384
  awesome.add_development_dependency "monkey"
1398
1385
  end
1399
1386
 
1400
- monkey = gem.dependencies.detect { |d| d.name == "monkey" }
1387
+ monkey = gem.dependencies.detect {|d| d.name == "monkey" }
1401
1388
  assert_equal(:development, monkey.type)
1402
1389
  end
1403
1390
 
@@ -1495,7 +1482,7 @@ dependencies: []
1495
1482
  default = new_default_spec 'default', 2
1496
1483
  install_default_gems default
1497
1484
 
1498
- stub = Gem::Specification.stubs.find { |s| s.name == 'default' }
1485
+ stub = Gem::Specification.stubs.find {|s| s.name == 'default' }
1499
1486
  assert_predicate stub, :default_gem?
1500
1487
 
1501
1488
  stub = Gem::Specification.find_all_by_name('default').first
@@ -1850,7 +1837,6 @@ dependencies: []
1850
1837
  RbConfig::CONFIG['ENABLE_SHARED'], 'no'
1851
1838
 
1852
1839
  class << Gem
1853
-
1854
1840
  alias orig_default_ext_dir_for default_ext_dir_for
1855
1841
 
1856
1842
  remove_method :default_ext_dir_for
@@ -1858,7 +1844,6 @@ dependencies: []
1858
1844
  def Gem.default_ext_dir_for(base_dir)
1859
1845
  'elsewhere'
1860
1846
  end
1861
-
1862
1847
  end
1863
1848
 
1864
1849
  ext_spec
@@ -1872,20 +1857,18 @@ dependencies: []
1872
1857
  RbConfig::CONFIG['ENABLE_SHARED'] = enable_shared
1873
1858
 
1874
1859
  class << Gem
1875
-
1876
1860
  remove_method :default_ext_dir_for
1877
1861
 
1878
1862
  alias default_ext_dir_for orig_default_ext_dir_for
1879
-
1880
1863
  end
1881
1864
  end
1882
1865
 
1883
1866
  def test_files
1884
- @a1.files = %w(files bin/common)
1885
- @a1.test_files = %w(test_files bin/common)
1886
- @a1.executables = %w(executables common)
1887
- @a1.extra_rdoc_files = %w(extra_rdoc_files bin/common)
1888
- @a1.extensions = %w(extensions bin/common)
1867
+ @a1.files = %w[files bin/common]
1868
+ @a1.test_files = %w[test_files bin/common]
1869
+ @a1.executables = %w[executables common]
1870
+ @a1.extra_rdoc_files = %w[extra_rdoc_files bin/common]
1871
+ @a1.extensions = %w[extensions bin/common]
1889
1872
 
1890
1873
  expected = %w[
1891
1874
  bin/common
@@ -1899,11 +1882,11 @@ dependencies: []
1899
1882
  end
1900
1883
 
1901
1884
  def test_files_append
1902
- @a1.files = %w(files bin/common)
1903
- @a1.test_files = %w(test_files bin/common)
1904
- @a1.executables = %w(executables common)
1905
- @a1.extra_rdoc_files = %w(extra_rdoc_files bin/common)
1906
- @a1.extensions = %w(extensions bin/common)
1885
+ @a1.files = %w[files bin/common]
1886
+ @a1.test_files = %w[test_files bin/common]
1887
+ @a1.executables = %w[executables common]
1888
+ @a1.extra_rdoc_files = %w[extra_rdoc_files bin/common]
1889
+ @a1.extensions = %w[extensions bin/common]
1907
1890
 
1908
1891
  expected = %w[
1909
1892
  bin/common
@@ -2017,7 +2000,7 @@ dependencies: []
2017
2000
  test_cases = {
2018
2001
  'i386-mswin32' => 'a-1-x86-mswin32-60',
2019
2002
  'i386-mswin32_80' => 'a-1-x86-mswin32-80',
2020
- 'i386-mingw32' => 'a-1-x86-mingw32'
2003
+ 'i386-mingw32' => 'a-1-x86-mingw32',
2021
2004
  }
2022
2005
 
2023
2006
  test_cases.each do |arch, expected|
@@ -2166,11 +2149,9 @@ dependencies: []
2166
2149
 
2167
2150
  def test_require_paths_default_ext_dir_for
2168
2151
  class << Gem
2169
-
2170
2152
  send :alias_method, :orig_default_ext_dir_for, :default_ext_dir_for
2171
2153
 
2172
2154
  remove_method :default_ext_dir_for
2173
-
2174
2155
  end
2175
2156
 
2176
2157
  def Gem.default_ext_dir_for(base_dir)
@@ -2186,11 +2167,9 @@ dependencies: []
2186
2167
  end
2187
2168
  ensure
2188
2169
  class << Gem
2189
-
2190
2170
  send :remove_method, :default_ext_dir_for
2191
2171
  send :alias_method, :default_ext_dir_for, :orig_default_ext_dir_for
2192
2172
  send :remove_method, :orig_default_ext_dir_for
2193
-
2194
2173
  end
2195
2174
  end
2196
2175
 
@@ -2292,12 +2271,12 @@ dependencies: []
2292
2271
  install_specs a1 # , a2, b1, b2, c1, c2
2293
2272
 
2294
2273
  a1.activate
2295
- assert_equal %w(a-1), loaded_spec_names
2274
+ assert_equal %w[a-1], loaded_spec_names
2296
2275
  assert_equal [], unresolved_names
2297
2276
 
2298
2277
  assert require "d#{$$}"
2299
2278
 
2300
- assert_equal %w(a-1), loaded_spec_names
2279
+ assert_equal %w[a-1], loaded_spec_names
2301
2280
  assert_equal [], unresolved_names
2302
2281
  end
2303
2282
  end
@@ -2315,12 +2294,12 @@ dependencies: []
2315
2294
 
2316
2295
  a1.activate
2317
2296
  c1.activate
2318
- assert_equal %w(a-1 c-1), loaded_spec_names
2297
+ assert_equal %w[a-1 c-1], loaded_spec_names
2319
2298
  assert_equal ["b (> 0)"], unresolved_names
2320
2299
 
2321
2300
  assert require "d#{$$}"
2322
2301
 
2323
- assert_equal %w(a-1 c-1), loaded_spec_names
2302
+ assert_equal %w[a-1 c-1], loaded_spec_names
2324
2303
  assert_equal ["b (> 0)"], unresolved_names
2325
2304
  end
2326
2305
  end
@@ -2343,7 +2322,7 @@ dependencies: []
2343
2322
 
2344
2323
  expected = %w[rake jabber4r pqa]
2345
2324
 
2346
- assert_equal expected, @c1.runtime_dependencies.map { |d| d.name }
2325
+ assert_equal expected, @c1.runtime_dependencies.map {|d| d.name }
2347
2326
  end
2348
2327
 
2349
2328
  def test_spaceship_name
@@ -2453,6 +2432,9 @@ end
2453
2432
  end
2454
2433
 
2455
2434
  def test_to_ruby_with_rsa_key
2435
+ require 'rubygems/openssl'
2436
+ skip 'openssl is missing' unless defined?(OpenSSL::PKey::RSA)
2437
+
2456
2438
  rsa_key = OpenSSL::PKey::RSA.new(2048)
2457
2439
  @a2.signing_key = rsa_key
2458
2440
  ruby_code = @a2.to_ruby
@@ -2656,7 +2638,7 @@ end
2656
2638
  def test_to_yaml_platform_empty_string
2657
2639
  @a1.instance_variable_set :@original_platform, ''
2658
2640
 
2659
- assert_match %r|^platform: ruby$|, @a1.to_yaml
2641
+ assert_match %r{^platform: ruby$}, @a1.to_yaml
2660
2642
  end
2661
2643
 
2662
2644
  def test_to_yaml_platform_legacy
@@ -2674,7 +2656,7 @@ end
2674
2656
  def test_to_yaml_platform_nil
2675
2657
  @a1.instance_variable_set :@original_platform, nil
2676
2658
 
2677
- assert_match %r|^platform: ruby$|, @a1.to_yaml
2659
+ assert_match %r{^platform: ruby$}, @a1.to_yaml
2678
2660
  end
2679
2661
 
2680
2662
  def test_validate
@@ -2718,7 +2700,7 @@ end
2718
2700
  @a1.validate
2719
2701
  end
2720
2702
 
2721
- assert_equal %{"#{f}" or "#{t}" is not an author}, e.message
2703
+ assert_equal %("#{f}" or "#{t}" is not an author), e.message
2722
2704
 
2723
2705
  @a1.authors = ["#{t} (who is writing this software)"]
2724
2706
 
@@ -2726,7 +2708,7 @@ end
2726
2708
  @a1.validate
2727
2709
  end
2728
2710
 
2729
- assert_equal %{"#{f}" or "#{t}" is not an author}, e.message
2711
+ assert_equal %("#{f}" or "#{t}" is not an author), e.message
2730
2712
  end
2731
2713
  end
2732
2714
 
@@ -2784,7 +2766,7 @@ end
2784
2766
  add_runtime_dependency 'l', '~> 1.2', '> 1.2.3'
2785
2767
  #{w}: open-ended dependency on o (>= 0) is not recommended
2786
2768
  use a bounded requirement, such as '~> x.y'
2787
- #{w}: See http://guides.rubygems.org/specification-reference/ for help
2769
+ #{w}: See https://guides.rubygems.org/specification-reference/ for help
2788
2770
  EXPECTED
2789
2771
 
2790
2772
  assert_equal expected, @ui.error, 'warning'
@@ -2816,7 +2798,7 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
2816
2798
  end
2817
2799
 
2818
2800
  assert_equal <<-EXPECTED, @ui.error
2819
- #{w}: See http://guides.rubygems.org/specification-reference/ for help
2801
+ #{w}: See https://guides.rubygems.org/specification-reference/ for help
2820
2802
  EXPECTED
2821
2803
  end
2822
2804
  end
@@ -2851,6 +2833,37 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
2851
2833
  end
2852
2834
  end
2853
2835
 
2836
+ def test_validate_rake_extension_have_rake_dependency_warning
2837
+ util_setup_validate
2838
+
2839
+ Dir.chdir @tempdir do
2840
+ @a1.extensions = ['Rakefile']
2841
+ File.write File.join(@tempdir, 'Rakefile'), ''
2842
+
2843
+ use_ui @ui do
2844
+ @a1.validate
2845
+ end
2846
+
2847
+ assert_match(/add rake as a dependency/, @ui.error)
2848
+ end
2849
+ end
2850
+
2851
+ def test_validate_rake_extension_have_rake_dependency_no_warning
2852
+ util_setup_validate
2853
+
2854
+ Dir.chdir @tempdir do
2855
+ @a1.extensions = ['Rakefile']
2856
+ @a1.add_runtime_dependency 'rake'
2857
+ File.write File.join(@tempdir, 'Rakefile'), ''
2858
+
2859
+ use_ui @ui do
2860
+ @a1.validate
2861
+ end
2862
+
2863
+ refute_match(/add rake as a dependency/, @ui.error)
2864
+ end
2865
+ end
2866
+
2854
2867
  def test_validate_description
2855
2868
  util_setup_validate
2856
2869
 
@@ -2878,7 +2891,7 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
2878
2891
  @a1.validate
2879
2892
  end
2880
2893
 
2881
- assert_equal %{"#{f}" or "#{t}" is not a description}, e.message
2894
+ assert_equal %("#{f}" or "#{t}" is not a description), e.message
2882
2895
 
2883
2896
  @a1.description = "#{t} (describe your package)"
2884
2897
 
@@ -2886,7 +2899,7 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
2886
2899
  @a1.validate
2887
2900
  end
2888
2901
 
2889
- assert_equal %{"#{f}" or "#{t}" is not a description}, e.message
2902
+ assert_equal %("#{f}" or "#{t}" is not a description), e.message
2890
2903
  end
2891
2904
  end
2892
2905
 
@@ -2900,7 +2913,7 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
2900
2913
  @a1.validate
2901
2914
  end
2902
2915
 
2903
- assert_equal %{"#{f}" or "#{t}" is not an email}, e.message
2916
+ assert_equal %("#{f}" or "#{t}" is not an email), e.message
2904
2917
 
2905
2918
  @a1.email = "#{t} (your e-mail)"
2906
2919
 
@@ -2908,7 +2921,7 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
2908
2921
  @a1.validate
2909
2922
  end
2910
2923
 
2911
- assert_equal %{"#{f}" or "#{t}" is not an email}, e.message
2924
+ assert_equal %("#{f}" or "#{t}" is not an email), e.message
2912
2925
  end
2913
2926
  end
2914
2927
 
@@ -2927,7 +2940,7 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
2927
2940
  end
2928
2941
  end
2929
2942
 
2930
- assert_match 'See http://guides.rubygems.org/specification-reference/ for help', @ui.error
2943
+ assert_match 'See https://guides.rubygems.org/specification-reference/ for help', @ui.error
2931
2944
  end
2932
2945
 
2933
2946
  def test_validate_executables
@@ -3022,8 +3035,8 @@ Please report a bug if this causes problems.
3022
3035
 
3023
3036
  specification.define_singleton_method(:find_all_by_name) do |dep_name|
3024
3037
  [
3025
- specification.new { |s| s.name = "z", s.version = Gem::Version.new("1") },
3026
- specification.new { |s| s.name = "z", s.version = Gem::Version.new("2") }
3038
+ specification.new {|s| s.name = "z", s.version = Gem::Version.new("1") },
3039
+ specification.new {|s| s.name = "z", s.version = Gem::Version.new("2") },
3027
3040
  ]
3028
3041
  end
3029
3042
 
@@ -3042,6 +3055,13 @@ Please report a bug if this causes problems.
3042
3055
  end
3043
3056
  end
3044
3057
 
3058
+ def test_duplicate_runtime_dependency
3059
+ expected = "WARNING: duplicated b dependency [\"~> 3.0\", \"~> 3.0\"]\n"
3060
+ assert_output nil, expected do
3061
+ @a1.add_runtime_dependency "b", "~> 3.0", "~> 3.0"
3062
+ end
3063
+ end
3064
+
3045
3065
  def set_orig(cls)
3046
3066
  s_cls = cls.singleton_class
3047
3067
  s_cls.send :alias_method, :orig_unresolved_deps , :unresolved_deps
@@ -3100,7 +3120,7 @@ Please report a bug if this causes problems.
3100
3120
 
3101
3121
  assert_equal '"ftp://rubygems.org" is not a valid HTTP URI', e.message
3102
3122
 
3103
- @a1.homepage = 'http://rubygems.org'
3123
+ @a1.homepage = 'https://rubygems.org/'
3104
3124
  assert_equal true, @a1.validate
3105
3125
 
3106
3126
  @a1.homepage = 'https://rubygems.org'
@@ -3117,10 +3137,36 @@ Please report a bug if this causes problems.
3117
3137
  @a1.validate
3118
3138
  end
3119
3139
 
3120
- assert_match <<-warning, @ui.error
3140
+ assert_match <<-WARNING, @ui.error
3121
3141
  WARNING: licenses is empty, but is recommended. Use a license identifier from
3122
3142
  http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
3123
- warning
3143
+ WARNING
3144
+ end
3145
+
3146
+ def test_validate_license_in_a_non_packaging_context
3147
+ util_setup_validate
3148
+
3149
+ use_ui @ui do
3150
+ @a1.licenses.clear
3151
+ @a1.validate(false)
3152
+ end
3153
+
3154
+ assert_empty @ui.error
3155
+ end
3156
+
3157
+ def test_removed_methods
3158
+ assert_equal Gem::Specification::REMOVED_METHODS, [:rubyforge_project=]
3159
+ end
3160
+
3161
+ def test_validate_removed_rubyforge_project
3162
+ util_setup_validate
3163
+
3164
+ use_ui @ui do
3165
+ @a1.rubyforge_project = 'invalid-attribute'
3166
+ @a1.validate
3167
+ end
3168
+
3169
+ assert_match "rubyforge_project= is deprecated", @ui.error
3124
3170
  end
3125
3171
 
3126
3172
  def test_validate_license_values
@@ -3131,10 +3177,10 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
3131
3177
  @a1.validate
3132
3178
  end
3133
3179
 
3134
- assert_match <<-warning, @ui.error
3180
+ assert_match <<-WARNING, @ui.error
3135
3181
  WARNING: license value 'BSD' is invalid. Use a license identifier from
3136
3182
  http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
3137
- warning
3183
+ WARNING
3138
3184
  end
3139
3185
 
3140
3186
  def test_validate_license_values_plus
@@ -3178,14 +3224,14 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
3178
3224
  @a1.validate
3179
3225
  end
3180
3226
 
3181
- assert_match <<-warning, @ui.error
3227
+ assert_match <<-WARNING, @ui.error
3182
3228
  WARNING: license value 'GPL-2.0+ FOO' is invalid. Use a license identifier from
3183
3229
  http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
3184
- warning
3185
- assert_match <<-warning, @ui.error
3230
+ WARNING
3231
+ assert_match <<-WARNING, @ui.error
3186
3232
  WARNING: license value 'GPL-2.0 FOO' is invalid. Use a license identifier from
3187
3233
  http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
3188
- warning
3234
+ WARNING
3189
3235
  end
3190
3236
 
3191
3237
  def test_validate_license_with_invalid_exception
@@ -3196,10 +3242,10 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
3196
3242
  @a1.validate
3197
3243
  end
3198
3244
 
3199
- assert_match <<-warning, @ui.error
3245
+ assert_match <<-WARNING, @ui.error
3200
3246
  WARNING: license value 'GPL-2.0+ WITH Autocofn-exception-2.0' is invalid. Use a license identifier from
3201
3247
  http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
3202
- warning
3248
+ WARNING
3203
3249
  end
3204
3250
 
3205
3251
  def test_validate_license_gives_suggestions
@@ -3210,11 +3256,11 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
3210
3256
  @a1.validate
3211
3257
  end
3212
3258
 
3213
- assert_match <<-warning, @ui.error
3259
+ assert_match <<-WARNING, @ui.error
3214
3260
  WARNING: license value 'ruby' is invalid. Use a license identifier from
3215
3261
  http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
3216
3262
  Did you mean 'Ruby'?
3217
- warning
3263
+ WARNING
3218
3264
  end
3219
3265
 
3220
3266
  def test_validate_empty_files
@@ -3310,7 +3356,7 @@ Did you mean 'Ruby'?
3310
3356
  spec.validate
3311
3357
  end
3312
3358
 
3313
- assert_match %r%^#{name}%, e.message
3359
+ assert_match %r{^#{name}}, e.message
3314
3360
  end
3315
3361
  end
3316
3362
  end
@@ -3410,7 +3456,7 @@ Did you mean 'Ruby'?
3410
3456
  @a1.validate
3411
3457
  end
3412
3458
 
3413
- assert_equal %{"#{f}" or "#{t}" is not a summary}, e.message
3459
+ assert_equal %("#{f}" or "#{t}" is not a summary), e.message
3414
3460
 
3415
3461
  @a1.summary = "#{t} (describe your package)"
3416
3462
 
@@ -3418,7 +3464,7 @@ Did you mean 'Ruby'?
3418
3464
  @a1.validate
3419
3465
  end
3420
3466
 
3421
- assert_equal %{"#{f}" or "#{t}" is not a summary}, e.message
3467
+ assert_equal %("#{f}" or "#{t}" is not a summary), e.message
3422
3468
  end
3423
3469
  end
3424
3470
 
@@ -3430,7 +3476,7 @@ Did you mean 'Ruby'?
3430
3476
  @a1.validate
3431
3477
  end
3432
3478
 
3433
- assert_match 'See http://guides.rubygems.org/specification-reference/ for help', @ui.error
3479
+ assert_match 'See https://guides.rubygems.org/specification-reference/ for help', @ui.error
3434
3480
  end
3435
3481
 
3436
3482
  def test_version
@@ -3532,7 +3578,8 @@ Did you mean 'Ruby'?
3532
3578
  s.metadata = {
3533
3579
  "one" => "two",
3534
3580
  "home" => "three",
3535
- "homepage_uri" => "https://example.com/user/repo"
3581
+ "homepage_uri" => "https://example.com/user/repo",
3582
+ "funding_uri" => "https://example.com/donate",
3536
3583
  }
3537
3584
  end
3538
3585
 
@@ -3792,7 +3839,7 @@ end
3792
3839
 
3793
3840
  default_gem_spec = new_default_spec("default", "2.0.0.0",
3794
3841
  nil, "default/gem.rb")
3795
- spec_path = File.join(@default_spec_dir, default_gem_spec.spec_name)
3842
+ spec_path = File.join(@gemhome, "specifications", "default", default_gem_spec.spec_name)
3796
3843
  write_file(spec_path) do |file|
3797
3844
  file.print(default_gem_spec.to_ruby)
3798
3845
  end
@@ -3817,12 +3864,17 @@ end
3817
3864
  FileUtils.mkdir_p "test"
3818
3865
  FileUtils.mkdir_p "bin"
3819
3866
 
3820
- FileUtils.touch File.join("ext", "a", "extconf.rb")
3821
- FileUtils.touch File.join("lib", "code.rb")
3822
- FileUtils.touch File.join("test", "suite.rb")
3867
+ begin
3868
+ umask_orig = File.umask(2)
3869
+ FileUtils.touch File.join("ext", "a", "extconf.rb")
3870
+ FileUtils.touch File.join("lib", "code.rb")
3871
+ FileUtils.touch File.join("test", "suite.rb")
3823
3872
 
3824
- File.open "bin/exec", "w", 0755 do |fp|
3825
- fp.puts "#!#{Gem.ruby}"
3873
+ File.open "bin/exec", "w", 0755 do |fp|
3874
+ fp.puts "#!#{Gem.ruby}"
3875
+ end
3876
+ ensure
3877
+ File.umask(umask_orig)
3826
3878
  end
3827
3879
  end
3828
3880
  end
@@ -3876,5 +3928,4 @@ end
3876
3928
  ensure
3877
3929
  $VERBOSE = old_verbose
3878
3930
  end
3879
-
3880
3931
  end