rubygems-update 3.0.9 → 3.1.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (428) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +31 -8
  3. data/.travis.yml +9 -27
  4. data/CONTRIBUTING.md +13 -0
  5. data/History.txt +24 -28
  6. data/MAINTAINERS.txt +1 -6
  7. data/Manifest.txt +65 -15
  8. data/Rakefile +39 -23
  9. data/bin/gem +0 -6
  10. data/bundler/CHANGELOG.md +746 -570
  11. data/bundler/CODE_OF_CONDUCT.md +117 -23
  12. data/bundler/LICENSE.md +18 -19
  13. data/bundler/README.md +9 -8
  14. data/bundler/bundler.gemspec +8 -25
  15. data/bundler/exe/bundle +19 -3
  16. data/bundler/lib/bundler.rb +120 -67
  17. data/bundler/lib/bundler/build_metadata.rb +1 -3
  18. data/bundler/lib/bundler/capistrano.rb +4 -4
  19. data/bundler/lib/bundler/cli.rb +129 -121
  20. data/bundler/lib/bundler/cli/add.rb +27 -16
  21. data/bundler/lib/bundler/cli/common.rb +11 -12
  22. data/bundler/lib/bundler/cli/config.rb +161 -86
  23. data/bundler/lib/bundler/cli/console.rb +1 -1
  24. data/bundler/lib/bundler/cli/doctor.rb +4 -4
  25. data/bundler/lib/bundler/cli/exec.rb +4 -9
  26. data/bundler/lib/bundler/cli/gem.rb +5 -5
  27. data/bundler/lib/bundler/cli/info.rb +17 -5
  28. data/bundler/lib/bundler/cli/init.rb +1 -1
  29. data/bundler/lib/bundler/cli/install.rb +11 -10
  30. data/bundler/lib/bundler/cli/issue.rb +3 -3
  31. data/bundler/lib/bundler/cli/open.rb +10 -6
  32. data/bundler/lib/bundler/cli/outdated.rb +85 -81
  33. data/bundler/lib/bundler/cli/package.rb +8 -9
  34. data/bundler/lib/bundler/cli/plugin.rb +9 -2
  35. data/bundler/lib/bundler/cli/pristine.rb +1 -1
  36. data/bundler/lib/bundler/cli/show.rb +1 -1
  37. data/bundler/lib/bundler/cli/update.rb +31 -11
  38. data/bundler/lib/bundler/compact_index_client.rb +25 -9
  39. data/bundler/lib/bundler/compact_index_client/updater.rb +2 -6
  40. data/bundler/lib/bundler/current_ruby.rb +9 -7
  41. data/bundler/lib/bundler/definition.rb +35 -26
  42. data/bundler/lib/bundler/dependency.rb +16 -4
  43. data/bundler/lib/bundler/deployment.rb +1 -1
  44. data/bundler/lib/bundler/dsl.rb +15 -39
  45. data/bundler/lib/bundler/env.rb +8 -13
  46. data/bundler/lib/bundler/environment_preserver.rb +0 -1
  47. data/bundler/lib/bundler/feature_flag.rb +23 -34
  48. data/bundler/lib/bundler/fetcher.rb +14 -11
  49. data/bundler/lib/bundler/fetcher/compact_index.rb +26 -12
  50. data/bundler/lib/bundler/fetcher/dependency.rb +1 -1
  51. data/bundler/lib/bundler/fetcher/downloader.rb +4 -1
  52. data/bundler/lib/bundler/fetcher/index.rb +4 -2
  53. data/bundler/lib/bundler/friendly_errors.rb +4 -5
  54. data/bundler/lib/bundler/gem_helper.rb +39 -24
  55. data/bundler/lib/bundler/gem_helpers.rb +2 -4
  56. data/bundler/lib/bundler/gem_tasks.rb +1 -1
  57. data/bundler/lib/bundler/gem_version_promoter.rb +3 -3
  58. data/bundler/lib/bundler/graph.rb +2 -2
  59. data/bundler/lib/bundler/injector.rb +10 -8
  60. data/bundler/lib/bundler/inline.rb +19 -18
  61. data/bundler/lib/bundler/installer.rb +7 -14
  62. data/bundler/lib/bundler/installer/gem_installer.rb +5 -1
  63. data/bundler/lib/bundler/installer/parallel_installer.rb +4 -8
  64. data/bundler/lib/bundler/installer/standalone.rb +1 -2
  65. data/bundler/lib/bundler/lazy_specification.rb +2 -2
  66. data/bundler/lib/bundler/lockfile_parser.rb +13 -21
  67. data/bundler/lib/bundler/match_platform.rb +1 -1
  68. data/bundler/lib/bundler/plugin.rb +42 -29
  69. data/bundler/lib/bundler/plugin/api.rb +1 -1
  70. data/bundler/lib/bundler/plugin/api/source.rb +2 -2
  71. data/bundler/lib/bundler/plugin/index.rb +14 -3
  72. data/bundler/lib/bundler/plugin/installer.rb +28 -15
  73. data/bundler/lib/bundler/psyched_yaml.rb +1 -1
  74. data/bundler/lib/bundler/resolver.rb +72 -24
  75. data/bundler/lib/bundler/resolver/spec_group.rb +3 -2
  76. data/bundler/lib/bundler/retry.rb +2 -2
  77. data/bundler/lib/bundler/ruby_version.rb +4 -19
  78. data/bundler/lib/bundler/rubygems_ext.rb +10 -66
  79. data/bundler/lib/bundler/rubygems_gem_installer.rb +1 -8
  80. data/bundler/lib/bundler/rubygems_integration.rb +144 -395
  81. data/bundler/lib/bundler/runtime.rb +2 -9
  82. data/bundler/lib/bundler/settings.rb +15 -47
  83. data/bundler/lib/bundler/setup.rb +6 -5
  84. data/bundler/lib/bundler/shared_helpers.rb +58 -71
  85. data/bundler/lib/bundler/similarity_detector.rb +2 -2
  86. data/bundler/lib/bundler/source.rb +5 -5
  87. data/bundler/lib/bundler/source/git.rb +19 -12
  88. data/bundler/lib/bundler/source/git/git_proxy.rb +35 -39
  89. data/bundler/lib/bundler/source/metadata.rb +7 -2
  90. data/bundler/lib/bundler/source/path.rb +13 -8
  91. data/bundler/lib/bundler/source/rubygems.rb +11 -5
  92. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -2
  93. data/bundler/lib/bundler/source_list.rb +9 -12
  94. data/bundler/lib/bundler/spec_set.rb +23 -12
  95. data/bundler/lib/bundler/stub_specification.rb +18 -30
  96. data/bundler/lib/bundler/templates/Executable.bundler +23 -14
  97. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +3 -3
  98. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +8 -2
  99. data/bundler/lib/bundler/templates/newgem/README.md.tt +4 -3
  100. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -27
  101. data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +1 -1
  102. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -1
  103. data/bundler/lib/bundler/ui.rb +3 -3
  104. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  105. data/bundler/lib/bundler/ui/shell.rb +4 -8
  106. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
  107. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
  108. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
  109. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  110. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +151 -48
  111. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils/version.rb +5 -0
  112. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +6 -6
  113. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +2 -2
  114. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  115. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  116. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  117. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  118. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
  119. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  120. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
  121. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +30 -8
  122. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  123. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +4 -4
  124. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
  125. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +248 -279
  126. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  127. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  128. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  129. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +7 -2
  130. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -11
  131. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  132. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +1 -1
  133. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  134. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +11 -2
  135. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -1
  136. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +16 -17
  137. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +82 -0
  138. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  139. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  140. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  141. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +7 -2
  142. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +6 -6
  143. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
  144. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +52 -7
  145. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -1
  146. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
  147. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  148. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  149. data/bundler/lib/bundler/vendored_fileutils.rb +1 -6
  150. data/bundler/lib/bundler/vendored_molinillo.rb +1 -1
  151. data/bundler/lib/bundler/vendored_persistent.rb +7 -5
  152. data/bundler/lib/bundler/vendored_thor.rb +2 -2
  153. data/bundler/lib/bundler/version.rb +1 -20
  154. data/bundler/lib/bundler/version_ranges.rb +51 -5
  155. data/bundler/lib/bundler/vlad.rb +2 -2
  156. data/bundler/lib/bundler/worker.rb +1 -3
  157. data/bundler/lib/bundler/yaml_serializer.rb +2 -3
  158. data/bundler/man/bundle-add.1 +66 -0
  159. data/bundler/man/bundle-add.1.txt +58 -0
  160. data/bundler/man/bundle-add.ronn +7 -1
  161. data/bundler/man/bundle-binstubs.1 +40 -0
  162. data/bundler/man/bundle-binstubs.1.txt +48 -0
  163. data/bundler/man/bundle-binstubs.ronn +1 -1
  164. data/bundler/man/bundle-check.1 +31 -0
  165. data/bundler/man/bundle-check.1.txt +33 -0
  166. data/bundler/man/bundle-clean.1 +24 -0
  167. data/bundler/man/bundle-clean.1.txt +26 -0
  168. data/bundler/man/bundle-config.1 +497 -0
  169. data/bundler/man/bundle-config.1.txt +528 -0
  170. data/bundler/man/bundle-config.ronn +42 -40
  171. data/bundler/man/bundle-doctor.1 +44 -0
  172. data/bundler/man/bundle-doctor.1.txt +44 -0
  173. data/bundler/man/bundle-exec.1 +165 -0
  174. data/bundler/man/bundle-exec.1.txt +178 -0
  175. data/bundler/man/bundle-exec.ronn +1 -1
  176. data/bundler/man/bundle-gem.1 +80 -0
  177. data/bundler/man/bundle-gem.1.txt +91 -0
  178. data/bundler/man/bundle-info.1 +20 -0
  179. data/bundler/man/bundle-info.1.txt +21 -0
  180. data/bundler/man/bundle-init.1 +25 -0
  181. data/bundler/man/bundle-init.1.txt +34 -0
  182. data/bundler/man/bundle-init.ronn +1 -1
  183. data/bundler/man/bundle-inject.1 +33 -0
  184. data/bundler/man/bundle-inject.1.txt +32 -0
  185. data/bundler/man/bundle-install.1 +311 -0
  186. data/bundler/man/bundle-install.1.txt +401 -0
  187. data/bundler/man/bundle-install.ronn +9 -4
  188. data/bundler/man/bundle-list.1 +50 -0
  189. data/bundler/man/bundle-list.1.txt +43 -0
  190. data/bundler/man/bundle-lock.1 +84 -0
  191. data/bundler/man/bundle-lock.1.txt +93 -0
  192. data/bundler/man/bundle-open.1 +32 -0
  193. data/bundler/man/bundle-open.1.txt +29 -0
  194. data/bundler/man/bundle-outdated.1 +155 -0
  195. data/bundler/man/bundle-outdated.1.txt +131 -0
  196. data/bundler/man/bundle-package.1 +55 -0
  197. data/bundler/man/bundle-package.1.txt +79 -0
  198. data/bundler/man/bundle-platform.1 +61 -0
  199. data/bundler/man/bundle-platform.1.txt +57 -0
  200. data/bundler/man/bundle-pristine.1 +34 -0
  201. data/bundler/man/bundle-pristine.1.txt +44 -0
  202. data/bundler/man/bundle-remove.1 +31 -0
  203. data/bundler/man/bundle-remove.1.txt +34 -0
  204. data/bundler/man/bundle-show.1 +23 -0
  205. data/bundler/man/bundle-show.1.txt +27 -0
  206. data/bundler/man/bundle-update.1 +394 -0
  207. data/bundler/man/bundle-update.1.txt +390 -0
  208. data/bundler/man/bundle-update.ronn +3 -3
  209. data/bundler/man/bundle-viz.1 +39 -0
  210. data/bundler/man/bundle-viz.1.txt +39 -0
  211. data/bundler/man/bundle.1 +136 -0
  212. data/bundler/man/bundle.1.txt +116 -0
  213. data/bundler/man/bundle.ronn +2 -2
  214. data/bundler/man/gemfile.5 +686 -0
  215. data/bundler/man/gemfile.5.ronn +14 -18
  216. data/bundler/man/gemfile.5.txt +649 -0
  217. data/bundler/man/index.txt +25 -0
  218. data/lib/rubygems.rb +80 -48
  219. data/lib/rubygems/available_set.rb +1 -0
  220. data/lib/rubygems/basic_specification.rb +17 -6
  221. data/lib/rubygems/bundler_version_finder.rb +5 -0
  222. data/lib/rubygems/command.rb +34 -5
  223. data/lib/rubygems/command_manager.rb +0 -6
  224. data/lib/rubygems/commands/build_command.rb +21 -8
  225. data/lib/rubygems/commands/cert_command.rb +0 -1
  226. data/lib/rubygems/commands/cleanup_command.rb +7 -7
  227. data/lib/rubygems/commands/contents_command.rb +3 -3
  228. data/lib/rubygems/commands/dependency_command.rb +4 -3
  229. data/lib/rubygems/commands/environment_command.rb +0 -3
  230. data/lib/rubygems/commands/info_command.rb +2 -0
  231. data/lib/rubygems/commands/install_command.rb +12 -52
  232. data/lib/rubygems/commands/lock_command.rb +2 -2
  233. data/lib/rubygems/commands/mirror_command.rb +1 -0
  234. data/lib/rubygems/commands/open_command.rb +2 -1
  235. data/lib/rubygems/commands/outdated_command.rb +1 -0
  236. data/lib/rubygems/commands/owner_command.rb +2 -7
  237. data/lib/rubygems/commands/pristine_command.rb +3 -0
  238. data/lib/rubygems/commands/push_command.rb +4 -6
  239. data/lib/rubygems/commands/query_command.rb +94 -80
  240. data/lib/rubygems/commands/rdoc_command.rb +1 -0
  241. data/lib/rubygems/commands/setup_command.rb +10 -8
  242. data/lib/rubygems/commands/signin_command.rb +1 -0
  243. data/lib/rubygems/commands/specification_command.rb +1 -0
  244. data/lib/rubygems/commands/stale_command.rb +2 -0
  245. data/lib/rubygems/commands/uninstall_command.rb +1 -0
  246. data/lib/rubygems/commands/unpack_command.rb +2 -29
  247. data/lib/rubygems/commands/update_command.rb +14 -14
  248. data/lib/rubygems/commands/which_command.rb +1 -0
  249. data/lib/rubygems/commands/yank_command.rb +8 -2
  250. data/lib/rubygems/compatibility.rb +4 -4
  251. data/lib/rubygems/config_file.rb +28 -23
  252. data/lib/rubygems/core_ext/kernel_gem.rb +2 -5
  253. data/lib/rubygems/core_ext/kernel_require.rb +29 -2
  254. data/lib/rubygems/core_ext/kernel_warn.rb +10 -4
  255. data/lib/rubygems/defaults.rb +10 -17
  256. data/lib/rubygems/dependency.rb +21 -6
  257. data/lib/rubygems/dependency_installer.rb +19 -102
  258. data/lib/rubygems/dependency_list.rb +11 -10
  259. data/lib/rubygems/deprecate.rb +5 -5
  260. data/lib/rubygems/errors.rb +11 -2
  261. data/lib/rubygems/exceptions.rb +9 -0
  262. data/lib/rubygems/ext/builder.rb +24 -43
  263. data/lib/rubygems/ext/cmake_builder.rb +2 -0
  264. data/lib/rubygems/ext/ext_conf_builder.rb +11 -9
  265. data/lib/rubygems/ext/rake_builder.rb +1 -1
  266. data/lib/rubygems/gemcutter_utilities.rb +19 -26
  267. data/lib/rubygems/indexer.rb +9 -5
  268. data/lib/rubygems/installer.rb +26 -13
  269. data/lib/rubygems/installer_test_case.rb +86 -38
  270. data/lib/rubygems/local_remote_options.rb +1 -1
  271. data/lib/rubygems/mock_gem_ui.rb +4 -1
  272. data/lib/rubygems/name_tuple.rb +1 -0
  273. data/lib/rubygems/package.rb +37 -9
  274. data/lib/rubygems/package/tar_writer.rb +4 -4
  275. data/lib/rubygems/path_support.rb +2 -0
  276. data/lib/rubygems/platform.rb +2 -1
  277. data/lib/rubygems/psych_tree.rb +2 -0
  278. data/lib/rubygems/remote_fetcher.rb +5 -1
  279. data/lib/rubygems/request.rb +5 -3
  280. data/lib/rubygems/request/connection_pools.rb +4 -4
  281. data/lib/rubygems/request/http_pool.rb +1 -0
  282. data/lib/rubygems/request/https_pool.rb +2 -0
  283. data/lib/rubygems/request_set.rb +2 -2
  284. data/lib/rubygems/request_set/gem_dependency_api.rb +2 -2
  285. data/lib/rubygems/request_set/lockfile.rb +5 -2
  286. data/lib/rubygems/request_set/lockfile/parser.rb +4 -2
  287. data/lib/rubygems/request_set/lockfile/tokenizer.rb +2 -0
  288. data/lib/rubygems/requirement.rb +20 -18
  289. data/lib/rubygems/resolver.rb +4 -5
  290. data/lib/rubygems/resolver/activation_request.rb +19 -49
  291. data/lib/rubygems/resolver/best_set.rb +2 -2
  292. data/lib/rubygems/resolver/conflict.rb +0 -5
  293. data/lib/rubygems/resolver/installer_set.rb +3 -3
  294. data/lib/rubygems/resolver/lock_set.rb +1 -1
  295. data/lib/rubygems/resolver/lock_specification.rb +2 -2
  296. data/lib/rubygems/resolver/requirement_list.rb +1 -0
  297. data/lib/rubygems/resolver/specification.rb +1 -0
  298. data/lib/rubygems/resolver/stats.rb +2 -0
  299. data/lib/rubygems/security/signer.rb +3 -2
  300. data/lib/rubygems/server.rb +5 -4
  301. data/lib/rubygems/source_list.rb +1 -0
  302. data/lib/rubygems/spec_fetcher.rb +3 -16
  303. data/lib/rubygems/specification.rb +69 -133
  304. data/lib/rubygems/specification_policy.rb +7 -2
  305. data/{bundler/lib/bundler → lib/rubygems}/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -0
  306. data/{bundler/lib/bundler → lib/rubygems}/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -0
  307. data/{bundler/lib/bundler → lib/rubygems}/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -0
  308. data/lib/rubygems/stub_specification.rb +5 -2
  309. data/lib/rubygems/syck_hack.rb +2 -0
  310. data/lib/rubygems/test_case.rb +78 -227
  311. data/lib/rubygems/test_utilities.rb +17 -6
  312. data/lib/rubygems/text.rb +2 -3
  313. data/lib/rubygems/uninstaller.rb +15 -15
  314. data/lib/rubygems/user_interaction.rb +9 -1
  315. data/lib/rubygems/util.rb +5 -41
  316. data/lib/rubygems/util/licenses.rb +398 -396
  317. data/lib/rubygems/util/list.rb +2 -0
  318. data/lib/rubygems/validator.rb +9 -29
  319. data/lib/rubygems/version.rb +5 -3
  320. data/rubygems-update.gemspec +3 -3
  321. data/test/rubygems/plugin/load/rubygems_plugin.rb +2 -0
  322. data/test/rubygems/test_bundled_ca.rb +4 -7
  323. data/test/rubygems/test_deprecate.rb +3 -0
  324. data/test/rubygems/test_gem.rb +183 -176
  325. data/test/rubygems/test_gem_available_set.rb +3 -2
  326. data/test/rubygems/test_gem_bundler_version_finder.rb +3 -1
  327. data/test/rubygems/test_gem_command.rb +94 -5
  328. data/test/rubygems/test_gem_command_manager.rb +5 -13
  329. data/test/rubygems/test_gem_commands_build_command.rb +142 -4
  330. data/test/rubygems/test_gem_commands_cert_command.rb +15 -1
  331. data/test/rubygems/test_gem_commands_cleanup_command.rb +22 -6
  332. data/test/rubygems/test_gem_commands_dependency_command.rb +1 -1
  333. data/test/rubygems/test_gem_commands_environment_command.rb +1 -11
  334. data/test/rubygems/test_gem_commands_help_command.rb +2 -0
  335. data/test/rubygems/test_gem_commands_info_command.rb +1 -0
  336. data/test/rubygems/test_gem_commands_install_command.rb +207 -2
  337. data/test/rubygems/test_gem_commands_mirror.rb +1 -0
  338. data/test/rubygems/test_gem_commands_outdated_command.rb +1 -0
  339. data/test/rubygems/test_gem_commands_owner_command.rb +4 -5
  340. data/test/rubygems/test_gem_commands_pristine_command.rb +56 -4
  341. data/test/rubygems/test_gem_commands_push_command.rb +19 -14
  342. data/test/rubygems/test_gem_commands_query_command.rb +27 -2
  343. data/test/rubygems/test_gem_commands_setup_command.rb +62 -37
  344. data/test/rubygems/test_gem_commands_signin_command.rb +5 -4
  345. data/test/rubygems/test_gem_commands_sources_command.rb +20 -6
  346. data/test/rubygems/test_gem_commands_uninstall_command.rb +107 -50
  347. data/test/rubygems/test_gem_commands_update_command.rb +86 -23
  348. data/test/rubygems/test_gem_commands_yank_command.rb +46 -1
  349. data/test/rubygems/test_gem_config_file.rb +9 -2
  350. data/test/rubygems/test_gem_dependency.rb +6 -0
  351. data/test/rubygems/test_gem_dependency_installer.rb +67 -36
  352. data/test/rubygems/test_gem_dependency_list.rb +21 -14
  353. data/test/rubygems/test_gem_ext_builder.rb +5 -1
  354. data/test/rubygems/test_gem_ext_cmake_builder.rb +2 -0
  355. data/test/rubygems/test_gem_ext_configure_builder.rb +8 -0
  356. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +12 -0
  357. data/test/rubygems/test_gem_ext_rake_builder.rb +2 -0
  358. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -8
  359. data/test/rubygems/test_gem_indexer.rb +31 -40
  360. data/test/rubygems/test_gem_install_update_options.rb +31 -17
  361. data/test/rubygems/test_gem_installer.rb +383 -223
  362. data/test/rubygems/test_gem_package.rb +99 -14
  363. data/test/rubygems/test_gem_package_old.rb +57 -54
  364. data/test/rubygems/test_gem_package_tar_reader_entry.rb +6 -5
  365. data/test/rubygems/test_gem_package_tar_writer.rb +11 -6
  366. data/test/rubygems/test_gem_path_support.rb +19 -13
  367. data/test/rubygems/test_gem_platform.rb +4 -2
  368. data/test/rubygems/test_gem_rdoc.rb +1 -0
  369. data/test/rubygems/test_gem_remote_fetcher.rb +29 -16
  370. data/test/rubygems/test_gem_request.rb +19 -4
  371. data/test/rubygems/test_gem_request_connection_pools.rb +6 -2
  372. data/test/rubygems/test_gem_request_set.rb +33 -8
  373. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +1 -1
  374. data/test/rubygems/test_gem_request_set_lockfile.rb +1 -0
  375. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +2 -1
  376. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +2 -0
  377. data/test/rubygems/test_gem_requirement.rb +7 -1
  378. data/test/rubygems/test_gem_resolver.rb +67 -23
  379. data/test/rubygems/test_gem_resolver_activation_request.rb +3 -32
  380. data/test/rubygems/test_gem_resolver_conflict.rb +0 -4
  381. data/test/rubygems/test_gem_resolver_git_specification.rb +1 -0
  382. data/test/rubygems/test_gem_resolver_index_specification.rb +7 -2
  383. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -1
  384. data/test/rubygems/test_gem_resolver_installer_set.rb +3 -1
  385. data/test/rubygems/test_gem_resolver_specification.rb +2 -0
  386. data/test/rubygems/test_gem_security.rb +6 -2
  387. data/test/rubygems/test_gem_security_signer.rb +1 -0
  388. data/test/rubygems/test_gem_server.rb +7 -2
  389. data/test/rubygems/test_gem_silent_ui.rb +1 -0
  390. data/test/rubygems/test_gem_source.rb +7 -7
  391. data/test/rubygems/test_gem_source_fetch_problem.rb +1 -0
  392. data/test/rubygems/test_gem_source_git.rb +4 -9
  393. data/test/rubygems/test_gem_source_installed.rb +6 -6
  394. data/test/rubygems/test_gem_source_list.rb +1 -0
  395. data/test/rubygems/test_gem_source_local.rb +5 -4
  396. data/test/rubygems/test_gem_source_lock.rb +12 -12
  397. data/test/rubygems/test_gem_source_specific_file.rb +7 -6
  398. data/test/rubygems/test_gem_source_vendor.rb +4 -4
  399. data/test/rubygems/test_gem_specification.rb +75 -43
  400. data/test/rubygems/test_gem_stream_ui.rb +2 -0
  401. data/test/rubygems/test_gem_stub_specification.rb +3 -1
  402. data/test/rubygems/test_gem_text.rb +1 -0
  403. data/test/rubygems/test_gem_uninstaller.rb +31 -10
  404. data/test/rubygems/test_gem_util.rb +6 -4
  405. data/test/rubygems/test_gem_validator.rb +3 -4
  406. data/test/rubygems/test_gem_version.rb +16 -8
  407. data/test/rubygems/test_kernel.rb +1 -0
  408. data/test/rubygems/test_rake_package.rb +26 -0
  409. data/test/rubygems/test_remote_fetch_error.rb +1 -0
  410. data/test/rubygems/test_require.rb +107 -3
  411. data/util/bisect +31 -0
  412. data/util/ci.sh +50 -0
  413. data/util/generate_spdx_license_list.rb +4 -2
  414. data/util/rubocop +2 -2
  415. data/util/update_bundled_ca_certificates.rb +3 -1
  416. metadata +97 -25
  417. data/appveyor.yml +0 -43
  418. data/bundler/CONTRIBUTING.md +0 -17
  419. data/bundler/exe/bundle_ruby +0 -60
  420. data/bundler/lib/bundler/cli/cache.rb +0 -36
  421. data/bundler/lib/bundler/compatibility_guard.rb +0 -14
  422. data/bundler/lib/bundler/ssl_certs/.document +0 -1
  423. data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  424. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  425. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  426. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +0 -21
  427. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +0 -21
  428. data/util/ci +0 -82
@@ -63,9 +63,9 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
63
63
  uri = URI uri unless URI === uri
64
64
  uri.query = nil
65
65
 
66
- raise error unless api_set = @sets.find { |set|
66
+ raise error unless api_set = @sets.find do |set|
67
67
  Gem::Resolver::APISet === set and set.dep_uri == uri
68
- }
68
+ end
69
69
 
70
70
  index_set = Gem::Resolver::IndexSet.new api_set.source
71
71
 
@@ -153,8 +153,3 @@ class Gem::Resolver::Conflict
153
153
  end
154
154
 
155
155
  end
156
-
157
- ##
158
- # TODO: Remove in RubyGems 3
159
-
160
- Gem::Resolver::DependencyConflict = Gem::Resolver::Conflict # :nodoc:
@@ -55,9 +55,9 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
55
55
 
56
56
  found = find_all request
57
57
 
58
- found.delete_if { |s|
58
+ found.delete_if do |s|
59
59
  s.version.prerelease? and not s.local?
60
- } unless dependency.prerelease?
60
+ end unless dependency.prerelease?
61
61
 
62
62
  found = found.select do |s|
63
63
  Gem::Source::SpecificFile === s.source or
@@ -115,7 +115,7 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
115
115
  def find_all(req)
116
116
  res = []
117
117
 
118
- dep = req.dependency
118
+ dep = req.dependency
119
119
 
120
120
  return res if @ignore_dependencies and
121
121
  @always_install.none? { |spec| dep.match? spec }
@@ -16,7 +16,7 @@ class Gem::Resolver::LockSet < Gem::Resolver::Set
16
16
  Gem::Source::Lock.new source
17
17
  end
18
18
 
19
- @specs = []
19
+ @specs = []
20
20
  end
21
21
 
22
22
  ##
@@ -71,9 +71,9 @@ class Gem::Resolver::LockSpecification < Gem::Resolver::Specification
71
71
  # A specification constructed from the lockfile is returned
72
72
 
73
73
  def spec
74
- @spec ||= Gem::Specification.find { |spec|
74
+ @spec ||= Gem::Specification.find do |spec|
75
75
  spec.name == @name and spec.version == @version
76
- }
76
+ end
77
77
 
78
78
  @spec ||= Gem::Specification.new do |s|
79
79
  s.name = @name
@@ -79,4 +79,5 @@ class Gem::Resolver::RequirementList
79
79
  x = @exact[0,5]
80
80
  x + @list[0,5 - x.size]
81
81
  end
82
+
82
83
  end
@@ -111,4 +111,5 @@ class Gem::Resolver::Specification
111
111
  def local? # :nodoc:
112
112
  false
113
113
  end
114
+
114
115
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  class Gem::Resolver::Stats
3
+
3
4
  def initialize
4
5
  @max_depth = 0
5
6
  @max_requirements = 0
@@ -42,4 +43,5 @@ class Gem::Resolver::Stats
42
43
  $stdout.printf PATTERN, "Backtracking #", @backtracking
43
44
  $stdout.printf PATTERN, "Iteration #", @iterations
44
45
  end
46
+
45
47
  end
@@ -72,7 +72,7 @@ class Gem::Security::Signer
72
72
  @options = DEFAULT_OPTIONS.merge(options)
73
73
 
74
74
  unless @key
75
- default_key = File.join Gem.default_key_path
75
+ default_key = File.join Gem.default_key_path
76
76
  @key = default_key if File.exist? default_key
77
77
  end
78
78
 
@@ -85,7 +85,6 @@ class Gem::Security::Signer
85
85
  @digest_name = Gem::Security::DIGEST_NAME
86
86
 
87
87
  if @key && !@key.is_a?(OpenSSL::PKey::RSA)
88
- @passphrase ||= ask_for_password("Enter PEM pass phrase:")
89
88
  @key = OpenSSL::PKey::RSA.new(File.read(@key), @passphrase)
90
89
  end
91
90
 
@@ -144,6 +143,8 @@ class Gem::Security::Signer
144
143
  raise Gem::Security::Exception, 'no certs provided' if @cert_chain.empty?
145
144
 
146
145
  if @cert_chain.length == 1 and @cert_chain.last.not_after < Time.now
146
+ alert("Your certificate has expired, trying to re-sign it...")
147
+
147
148
  re_sign_key(
148
149
  expiration_length: (Gem::Security::ONE_DAY * options[:expiration_length_days])
149
150
  )
@@ -607,13 +607,13 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
607
607
 
608
608
  Gem::Specification.each do |spec|
609
609
  total_file_count += spec.files.size
610
- deps = spec.dependencies.map { |dep|
610
+ deps = spec.dependencies.map do |dep|
611
611
  {
612
612
  "name" => dep.name,
613
613
  "type" => dep.type,
614
614
  "version" => dep.requirement.to_s,
615
615
  }
616
- }
616
+ end
617
617
 
618
618
  deps = deps.sort_by { |dep| [dep["name"].downcase, dep["version"]] }
619
619
  deps.last["is_last"] = true unless deps.empty?
@@ -754,9 +754,9 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
754
754
  # documentation - just put it underneath the main doc folder.
755
755
 
756
756
  def show_rdoc_for_pattern(pattern, res)
757
- found_gems = Dir.glob("{#{@gem_dirs.join ','}}/doc/#{pattern}").select {|path|
757
+ found_gems = Dir.glob("{#{@gem_dirs.join ','}}/doc/#{pattern}").select do |path|
758
758
  File.exist? File.join(path, 'rdoc/index.html')
759
- }
759
+ end
760
760
  case found_gems.length
761
761
  when 0
762
762
  return false
@@ -875,4 +875,5 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
875
875
 
876
876
  system("#{@launch} http://#{host}:#{@port}")
877
877
  end
878
+
878
879
  end
@@ -147,4 +147,5 @@ class Gem::SourceList
147
147
  @sources.delete_if { |x| x.uri.to_s == source.to_s }
148
148
  end
149
149
  end
150
+
150
151
  end
@@ -88,19 +88,8 @@ class Gem::SpecFetcher
88
88
 
89
89
  rejected_specs = {}
90
90
 
91
- if dependency.prerelease?
92
- if dependency.specific?
93
- type = :complete
94
- else
95
- type = :abs_latest
96
- end
97
- elsif dependency.latest_version?
98
- type = :latest
99
- else
100
- type = :released
101
- end
91
+ list, errors = available_specs(dependency.identity)
102
92
 
103
- list, errors = available_specs(type)
104
93
  list.each do |source, specs|
105
94
  if dependency.name.is_a?(String) && specs.respond_to?(:bsearch)
106
95
  start_index = (0 ... specs.length).bsearch{ |i| specs[i].name >= dependency.name }
@@ -138,7 +127,6 @@ class Gem::SpecFetcher
138
127
  return [tuples, errors]
139
128
  end
140
129
 
141
-
142
130
  ##
143
131
  # Return all gem name tuples who's names match +obj+
144
132
 
@@ -157,7 +145,6 @@ class Gem::SpecFetcher
157
145
  tuples
158
146
  end
159
147
 
160
-
161
148
  ##
162
149
  # Find and fetch specs that match +dependency+.
163
150
  #
@@ -189,7 +176,7 @@ class Gem::SpecFetcher
189
176
  max = gem_name.size / 2
190
177
  names = available_specs(type).first.values.flatten(1)
191
178
 
192
- matches = names.map { |n|
179
+ matches = names.map do |n|
193
180
  next unless n.match_platform?
194
181
 
195
182
  distance = levenshtein_distance gem_name, n.name.downcase.tr('_-', '')
@@ -199,7 +186,7 @@ class Gem::SpecFetcher
199
186
  return [n.name] if distance == 0
200
187
 
201
188
  [n.name, distance]
202
- }.compact
189
+ end.compact
203
190
 
204
191
  matches = if matches.empty? && type != :prerelease
205
192
  suggest_gems_from_name gem_name, :prerelease
@@ -6,7 +6,6 @@
6
6
  # See LICENSE.txt for permissions.
7
7
  #++
8
8
 
9
-
10
9
  require 'rubygems/version'
11
10
  require 'rubygems/requirement'
12
11
  require 'rubygems/platform'
@@ -15,7 +14,6 @@ require 'rubygems/basic_specification'
15
14
  require 'rubygems/stub_specification'
16
15
  require 'rubygems/specification_policy'
17
16
  require 'rubygems/util/list'
18
- require 'stringio'
19
17
 
20
18
  ##
21
19
  # The Specification class contains the information for a gem. Typically
@@ -85,14 +83,14 @@ class Gem::Specification < Gem::BasicSpecification
85
83
  'Deprecated "test_suite_file" in favor of the new, but equivalent, "test_files"',
86
84
  '"test_file=x" is a shortcut for "test_files=[x]"'
87
85
  ],
88
- 2 => [
86
+ 2 => [
89
87
  'Added "required_rubygems_version"',
90
88
  'Now forward-compatible with future versions',
91
89
  ],
92
- 3 => [
90
+ 3 => [
93
91
  'Added Fixnum validation to the specification_version'
94
92
  ],
95
- 4 => [
93
+ 4 => [
96
94
  'Added sandboxed freeform metadata to the specification version.'
97
95
  ]
98
96
  }.freeze
@@ -111,6 +109,7 @@ class Gem::Specification < Gem::BasicSpecification
111
109
  # rubocop:disable Style/MutableConstant
112
110
  LOAD_CACHE = {} # :nodoc:
113
111
  # rubocop:enable Style/MutableConstant
112
+ LOAD_CACHE_MUTEX = Mutex.new
114
113
 
115
114
  private_constant :LOAD_CACHE if defined? private_constant
116
115
 
@@ -183,16 +182,16 @@ class Gem::Specification < Gem::BasicSpecification
183
182
 
184
183
  @@attributes = @@default_value.keys.sort_by { |s| s.to_s }
185
184
  @@array_attributes = @@default_value.reject { |k,v| v != [] }.keys
186
- @@nil_attributes, @@non_nil_attributes = @@default_value.keys.partition { |k|
185
+ @@nil_attributes, @@non_nil_attributes = @@default_value.keys.partition do |k|
187
186
  @@default_value[k].nil?
188
- }
187
+ end
189
188
 
190
189
  @@stubs_by_name = {}
191
190
 
192
191
  # Sentinel object to represent "not found" stubs
193
192
  NOT_FOUND = Struct.new(:to_spec, :this).new # :nodoc:
194
- @@spec_with_requirable_file = {}
195
- @@active_stub_with_requirable_file = {}
193
+ @@spec_with_requirable_file = {}
194
+ @@active_stub_with_requirable_file = {}
196
195
 
197
196
  ######################################################################
198
197
  # :section: Required gemspec attributes
@@ -733,6 +732,7 @@ class Gem::Specification < Gem::BasicSpecification
733
732
  # Formerly used to set rubyforge project.
734
733
 
735
734
  attr_writer :rubyforge_project
735
+ deprecate :rubyforge_project=, :none, 2019, 12
736
736
 
737
737
  ##
738
738
  # The Gem::Specification version of this gemspec.
@@ -755,7 +755,9 @@ class Gem::Specification < Gem::BasicSpecification
755
755
  end
756
756
 
757
757
  def self._clear_load_cache # :nodoc:
758
- LOAD_CACHE.clear
758
+ LOAD_CACHE_MUTEX.synchronize do
759
+ LOAD_CACHE.clear
760
+ end
759
761
  end
760
762
 
761
763
  def self.each_gemspec(dirs) # :nodoc:
@@ -771,15 +773,6 @@ class Gem::Specification < Gem::BasicSpecification
771
773
  end
772
774
  private_class_method :gemspec_stubs_in
773
775
 
774
- def self.default_stubs(pattern)
775
- base_dir = Gem.default_dir
776
- gems_dir = File.join base_dir, "gems"
777
- gemspec_stubs_in(default_specifications_dir, pattern) do |path|
778
- Gem::StubSpecification.default_gemspec_stub(path, base_dir, gems_dir)
779
- end
780
- end
781
- private_class_method :default_stubs
782
-
783
776
  def self.installed_stubs(dirs, pattern)
784
777
  map_stubs(dirs, pattern) do |path, base_dir, gems_dir|
785
778
  Gem::StubSpecification.gemspec_stub(path, base_dir, gems_dir)
@@ -788,11 +781,11 @@ class Gem::Specification < Gem::BasicSpecification
788
781
  private_class_method :installed_stubs
789
782
 
790
783
  def self.map_stubs(dirs, pattern) # :nodoc:
791
- dirs.flat_map { |dir|
784
+ dirs.flat_map do |dir|
792
785
  base_dir = File.dirname dir
793
786
  gems_dir = File.join base_dir, "gems"
794
787
  gemspec_stubs_in(dir, pattern) { |path| yield path, base_dir, gems_dir }
795
- }
788
+ end
796
789
  end
797
790
  private_class_method :map_stubs
798
791
 
@@ -819,7 +812,7 @@ class Gem::Specification < Gem::BasicSpecification
819
812
  def self.stubs
820
813
  @@stubs ||= begin
821
814
  pattern = "*.gemspec"
822
- stubs = Gem.loaded_specs.values + default_stubs(pattern) + installed_stubs(dirs, pattern)
815
+ stubs = Gem.loaded_specs.values + installed_stubs(dirs, pattern) + default_stubs(pattern)
823
816
  stubs = uniq_by(stubs) { |stub| stub.full_name }
824
817
 
825
818
  _resort!(stubs)
@@ -828,6 +821,17 @@ class Gem::Specification < Gem::BasicSpecification
828
821
  end
829
822
  end
830
823
 
824
+ ##
825
+ # Returns a Gem::StubSpecification for default gems
826
+
827
+ def self.default_stubs(pattern = "*.gemspec")
828
+ base_dir = Gem.default_dir
829
+ gems_dir = File.join base_dir, "gems"
830
+ gemspec_stubs_in(Gem.default_specifications_dir, pattern) do |path|
831
+ Gem::StubSpecification.default_gemspec_stub(path, base_dir, gems_dir)
832
+ end
833
+ end
834
+
831
835
  EMPTY = [].freeze # :nodoc:
832
836
 
833
837
  ##
@@ -839,8 +843,9 @@ class Gem::Specification < Gem::BasicSpecification
839
843
  @@stubs_by_name[name] || []
840
844
  else
841
845
  pattern = "#{name}-*.gemspec"
842
- stubs = Gem.loaded_specs.values + default_stubs(pattern) +
843
- installed_stubs(dirs, pattern).select { |s| Gem::Platform.match s.platform }
846
+ stubs = Gem.loaded_specs.values +
847
+ installed_stubs(dirs, pattern).select { |s| Gem::Platform.match s.platform } +
848
+ default_stubs(pattern)
844
849
  stubs = uniq_by(stubs) { |stub| stub.full_name }.group_by(&:name)
845
850
  stubs.each_value { |v| _resort!(v) }
846
851
 
@@ -850,69 +855,24 @@ class Gem::Specification < Gem::BasicSpecification
850
855
  end
851
856
 
852
857
  def self._resort!(specs) # :nodoc:
853
- specs.sort! { |a, b|
858
+ specs.sort! do |a, b|
854
859
  names = a.name <=> b.name
855
860
  next names if names.nonzero?
856
861
  b.version <=> a.version
857
- }
862
+ end
858
863
  end
859
864
 
860
865
  ##
861
866
  # Loads the default specifications. It should be called only once.
862
867
 
863
868
  def self.load_defaults
864
- each_spec([default_specifications_dir]) do |spec|
869
+ each_spec([Gem.default_specifications_dir]) do |spec|
865
870
  # #load returns nil if the spec is bad, so we just ignore
866
871
  # it at this stage
867
872
  Gem.register_default_spec(spec)
868
873
  end
869
874
  end
870
875
 
871
- ##
872
- # Adds +spec+ to the known specifications, keeping the collection
873
- # properly sorted.
874
-
875
- def self.add_spec(spec)
876
- warn "Gem::Specification.add_spec is deprecated and will be removed in RubyGems 3.0" unless Gem::Deprecate.skip
877
- # TODO: find all extraneous adds
878
- # puts
879
- # p :add_spec => [spec.full_name, caller.reject { |s| s =~ /minitest/ }]
880
-
881
- # TODO: flush the rest of the crap from the tests
882
- # raise "no dupes #{spec.full_name} in #{all_names.inspect}" if
883
- # _all.include? spec
884
-
885
- raise "nil spec!" unless spec # TODO: remove once we're happy with tests
886
-
887
- return if _all.include? spec
888
-
889
- _all << spec
890
- stubs << spec
891
- (@@stubs_by_name[spec.name] ||= []) << spec
892
- sort_by!(@@stubs_by_name[spec.name]) { |s| s.version }
893
- _resort!(_all)
894
- _resort!(stubs)
895
- end
896
-
897
- ##
898
- # Adds multiple specs to the known specifications.
899
-
900
- def self.add_specs(*specs)
901
- warn "Gem::Specification.add_specs is deprecated and will be removed in RubyGems 3.0" unless Gem::Deprecate.skip
902
-
903
- raise "nil spec!" if specs.any?(&:nil?) # TODO: remove once we're happy
904
-
905
- # TODO: this is much more efficient, but we need the extra checks for now
906
- # _all.concat specs
907
- # _resort!
908
-
909
- Gem::Deprecate.skip_during do
910
- specs.each do |spec| # TODO: slow
911
- add_spec spec
912
- end
913
- end
914
- end
915
-
916
876
  ##
917
877
  # Returns all specifications. This method is discouraged from use.
918
878
  # You probably want to use one of the Enumerable methods instead.
@@ -969,9 +929,9 @@ class Gem::Specification < Gem::BasicSpecification
969
929
  # Return the directories that Specification uses to find specs.
970
930
 
971
931
  def self.dirs
972
- @@dirs ||= Gem.path.collect { |dir|
932
+ @@dirs ||= Gem.path.collect do |dir|
973
933
  File.join dir.dup.untaint, "specifications"
974
- }
934
+ end
975
935
  end
976
936
 
977
937
  ##
@@ -1033,10 +993,10 @@ class Gem::Specification < Gem::BasicSpecification
1033
993
 
1034
994
  def self.find_by_path(path)
1035
995
  path = path.dup.freeze
1036
- spec = @@spec_with_requirable_file[path] ||= (stubs.find { |s|
996
+ spec = @@spec_with_requirable_file[path] ||= (stubs.find do |s|
1037
997
  next unless Gem::BundlerVersionFinder.compatible?(s)
1038
998
  s.contains_requirable_file? path
1039
- } || NOT_FOUND)
999
+ end || NOT_FOUND)
1040
1000
  spec.to_spec
1041
1001
  end
1042
1002
 
@@ -1045,18 +1005,18 @@ class Gem::Specification < Gem::BasicSpecification
1045
1005
  # amongst the specs that are not activated.
1046
1006
 
1047
1007
  def self.find_inactive_by_path(path)
1048
- stub = stubs.find { |s|
1008
+ stub = stubs.find do |s|
1049
1009
  next if s.activated?
1050
1010
  next unless Gem::BundlerVersionFinder.compatible?(s)
1051
1011
  s.contains_requirable_file? path
1052
- }
1012
+ end
1053
1013
  stub && stub.to_spec
1054
1014
  end
1055
1015
 
1056
1016
  def self.find_active_stub_by_path(path)
1057
- stub = @@active_stub_with_requirable_file[path] ||= (stubs.find { |s|
1017
+ stub = @@active_stub_with_requirable_file[path] ||= (stubs.find do |s|
1058
1018
  s.activated? and s.contains_requirable_file? path
1059
- } || NOT_FOUND)
1019
+ end || NOT_FOUND)
1060
1020
  stub.this
1061
1021
  end
1062
1022
 
@@ -1137,10 +1097,10 @@ class Gem::Specification < Gem::BasicSpecification
1137
1097
  result[spec.name][spec.platform] = spec
1138
1098
  end
1139
1099
 
1140
- result.map(&:last).map(&:values).flatten.reject { |spec|
1100
+ result.map(&:last).map(&:values).flatten.reject do |spec|
1141
1101
  minimum = native[spec.name]
1142
1102
  minimum && spec.version < minimum
1143
- }.sort_by{ |tup| tup.name }
1103
+ end.sort_by{ |tup| tup.name }
1144
1104
  end
1145
1105
 
1146
1106
  ##
@@ -1149,7 +1109,7 @@ class Gem::Specification < Gem::BasicSpecification
1149
1109
  def self.load(file)
1150
1110
  return unless file
1151
1111
 
1152
- _spec = LOAD_CACHE[file]
1112
+ _spec = LOAD_CACHE_MUTEX.synchronize { LOAD_CACHE[file] }
1153
1113
  return _spec if _spec
1154
1114
 
1155
1115
  file = file.dup.untaint
@@ -1164,7 +1124,14 @@ class Gem::Specification < Gem::BasicSpecification
1164
1124
 
1165
1125
  if Gem::Specification === _spec
1166
1126
  _spec.loaded_from = File.expand_path file.to_s
1167
- LOAD_CACHE[file] = _spec
1127
+ LOAD_CACHE_MUTEX.synchronize do
1128
+ prev = LOAD_CACHE[file]
1129
+ if prev
1130
+ _spec = prev
1131
+ else
1132
+ LOAD_CACHE[file] = _spec
1133
+ end
1134
+ end
1168
1135
  return _spec
1169
1136
  end
1170
1137
 
@@ -1239,17 +1206,6 @@ class Gem::Specification < Gem::BasicSpecification
1239
1206
  nil
1240
1207
  end
1241
1208
 
1242
- ##
1243
- # Removes +spec+ from the known specs.
1244
-
1245
- def self.remove_spec(spec)
1246
- warn "Gem::Specification.remove_spec is deprecated and will be removed in RubyGems 3.0" unless Gem::Deprecate.skip
1247
- _all.delete spec
1248
- stubs.delete_if { |s| s.full_name == spec.full_name }
1249
- (@@stubs_by_name[spec.name] || []).delete_if { |s| s.full_name == spec.full_name }
1250
- reset
1251
- end
1252
-
1253
1209
  ##
1254
1210
  # Is +name+ a required attribute?
1255
1211
 
@@ -1274,13 +1230,13 @@ class Gem::Specification < Gem::BasicSpecification
1274
1230
  @@all = nil
1275
1231
  @@stubs = nil
1276
1232
  @@stubs_by_name = {}
1277
- @@spec_with_requirable_file = {}
1278
- @@active_stub_with_requirable_file = {}
1233
+ @@spec_with_requirable_file = {}
1234
+ @@active_stub_with_requirable_file = {}
1279
1235
  _clear_load_cache
1280
1236
  unresolved = unresolved_deps
1281
1237
  unless unresolved.empty?
1282
1238
  w = "W" + "ARN"
1283
- warn "#{w}: Unresolved or ambigious specs during Gem::Specification.reset:"
1239
+ warn "#{w}: Unresolved or ambiguous specs during Gem::Specification.reset:"
1284
1240
  unresolved.values.each do |dep|
1285
1241
  warn " #{dep}"
1286
1242
 
@@ -1548,16 +1504,7 @@ class Gem::Specification < Gem::BasicSpecification
1548
1504
 
1549
1505
  paths = full_require_paths
1550
1506
 
1551
- # gem directories must come after -I and ENV['RUBYLIB']
1552
- insert_index = Gem.load_path_insert_index
1553
-
1554
- if insert_index
1555
- # gem directories must come after -I and ENV['RUBYLIB']
1556
- $LOAD_PATH.insert(insert_index, *paths)
1557
- else
1558
- # we are probably testing in core, -I and RUBYLIB don't apply
1559
- $LOAD_PATH.unshift(*paths)
1560
- end
1507
+ Gem.add_to_load_path(*paths)
1561
1508
  end
1562
1509
 
1563
1510
  ##
@@ -1583,7 +1530,7 @@ class Gem::Specification < Gem::BasicSpecification
1583
1530
  # a full path.
1584
1531
 
1585
1532
  def bin_dir
1586
- @bin_dir ||= File.join gem_dir, bindir # TODO: this is unfortunate
1533
+ @bin_dir ||= File.join gem_dir, bindir
1587
1534
  end
1588
1535
 
1589
1536
  ##
@@ -1675,12 +1622,12 @@ class Gem::Specification < Gem::BasicSpecification
1675
1622
 
1676
1623
  def conflicts
1677
1624
  conflicts = {}
1678
- self.runtime_dependencies.each { |dep|
1625
+ self.runtime_dependencies.each do |dep|
1679
1626
  spec = Gem.loaded_specs[dep.name]
1680
1627
  if spec and not spec.satisfies_requirement? dep
1681
1628
  (conflicts[spec] ||= []) << dep
1682
1629
  end
1683
- }
1630
+ end
1684
1631
  env_req = Gem.env_requirement(name)
1685
1632
  (conflicts[self] ||= []) << env_req unless env_req.satisfied_by? version
1686
1633
  conflicts
@@ -1690,9 +1637,9 @@ class Gem::Specification < Gem::BasicSpecification
1690
1637
  # return true if there will be conflict when spec if loaded together with the list of specs.
1691
1638
 
1692
1639
  def conficts_when_loaded_with?(list_of_specs) # :nodoc:
1693
- result = list_of_specs.any? { |spec|
1640
+ result = list_of_specs.any? do |spec|
1694
1641
  spec.dependencies.any? { |dep| dep.runtime? && (dep.name == name) && !satisfies_requirement?(dep) }
1695
- }
1642
+ end
1696
1643
  result
1697
1644
  end
1698
1645
 
@@ -1701,14 +1648,14 @@ class Gem::Specification < Gem::BasicSpecification
1701
1648
 
1702
1649
  def has_conflicts?
1703
1650
  return true unless Gem.env_requirement(name).satisfied_by?(version)
1704
- self.dependencies.any? { |dep|
1651
+ self.dependencies.any? do |dep|
1705
1652
  if dep.runtime?
1706
1653
  spec = Gem.loaded_specs[dep.name]
1707
1654
  spec and not spec.satisfies_requirement? dep
1708
1655
  else
1709
1656
  false
1710
1657
  end
1711
- }
1658
+ end
1712
1659
  end
1713
1660
 
1714
1661
  # The date this gem was created.
@@ -1720,7 +1667,7 @@ class Gem::Specification < Gem::BasicSpecification
1720
1667
  # https://reproducible-builds.org/specs/source-date-epoch/
1721
1668
 
1722
1669
  def date
1723
- @date ||= ENV["SOURCE_DATE_EPOCH"] ? Time.utc(*Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc.to_a[3..5].reverse) : TODAY
1670
+ @date ||= Time.utc(*Gem.source_date_epoch.utc.to_a[3..5].reverse)
1724
1671
  end
1725
1672
 
1726
1673
  DateLike = Object.new # :nodoc:
@@ -1977,8 +1924,7 @@ class Gem::Specification < Gem::BasicSpecification
1977
1924
  end
1978
1925
 
1979
1926
  def gems_dir
1980
- # TODO: this logic seems terribly broken, but tests fail if just base_dir
1981
- @gems_dir ||= File.join(loaded_from && base_dir || Gem.dir, "gems")
1927
+ @gems_dir ||= File.join(base_dir, "gems")
1982
1928
  end
1983
1929
 
1984
1930
  ##
@@ -2024,8 +1970,6 @@ class Gem::Specification < Gem::BasicSpecification
2024
1970
  yaml_initialize coder.tag, coder.map
2025
1971
  end
2026
1972
 
2027
-
2028
-
2029
1973
  eval <<-RB, binding, __FILE__, __LINE__ + 1
2030
1974
  def set_nil_attributes_to_nil
2031
1975
  #{@@nil_attributes.map {|key| "@#{key} = nil" }.join "; "}
@@ -2251,6 +2195,7 @@ class Gem::Specification < Gem::BasicSpecification
2251
2195
 
2252
2196
  attributes.each do |attr_name|
2253
2197
  current_value = self.send attr_name
2198
+ current_value = current_value.sort if %i(files test_files).include? attr_name
2254
2199
  if current_value != default_value(attr_name) or
2255
2200
  self.class.required_attribute? attr_name
2256
2201
 
@@ -2531,25 +2476,17 @@ class Gem::Specification < Gem::BasicSpecification
2531
2476
  result << nil
2532
2477
  result << " if s.respond_to? :specification_version then"
2533
2478
  result << " s.specification_version = #{specification_version}"
2479
+ result << " end"
2534
2480
  result << nil
2535
2481
 
2536
- result << " if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then"
2482
+ result << " if s.respond_to? :add_runtime_dependency then"
2537
2483
 
2538
2484
  dependencies.each do |dep|
2539
2485
  req = dep.requirements_list.inspect
2540
2486
  dep.instance_variable_set :@type, :runtime if dep.type.nil? # HACK
2541
- result << " s.add_#{dep.type}_dependency(%q<#{dep.name}>.freeze, #{req})"
2487
+ result << " s.add_#{dep.type}_dependency(%q<#{dep.name}>.freeze, #{req})"
2542
2488
  end
2543
2489
 
2544
- result << " else"
2545
-
2546
- dependencies.each do |dep|
2547
- version_reqs_param = dep.requirements_list.inspect
2548
- result << " s.add_dependency(%q<#{dep.name}>.freeze, #{version_reqs_param})"
2549
- end
2550
-
2551
- result << ' end'
2552
-
2553
2490
  result << " else"
2554
2491
  dependencies.each do |dep|
2555
2492
  version_reqs_param = dep.requirements_list.inspect
@@ -2599,6 +2536,7 @@ class Gem::Specification < Gem::BasicSpecification
2599
2536
  builder << self
2600
2537
  ast = builder.tree
2601
2538
 
2539
+ require 'stringio'
2602
2540
  io = StringIO.new
2603
2541
  io.set_encoding Encoding::UTF_8
2604
2542
 
@@ -2645,8 +2583,6 @@ class Gem::Specification < Gem::BasicSpecification
2645
2583
  # checks..
2646
2584
 
2647
2585
  def validate(packaging = true, strict = false)
2648
- require 'rubygems/user_interaction'
2649
- extend Gem::UserInteraction
2650
2586
  normalize
2651
2587
 
2652
2588
  validation_policy = Gem::SpecificationPolicy.new(self)