rubygems-update 3.0.6 → 3.2.14

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 (628) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +1100 -436
  3. data/CODE_OF_CONDUCT.md +55 -19
  4. data/CONTRIBUTING.md +37 -10
  5. data/MAINTAINERS.txt +1 -6
  6. data/Manifest.txt +104 -64
  7. data/POLICIES.md +6 -12
  8. data/README.md +6 -6
  9. data/Rakefile +121 -111
  10. data/bin/gem +0 -6
  11. data/bin/update_rubygems +2 -2
  12. data/bundler/CHANGELOG.md +1788 -1251
  13. data/bundler/LICENSE.md +18 -19
  14. data/bundler/README.md +9 -10
  15. data/bundler/UPGRADING.md +215 -0
  16. data/bundler/bundler.gemspec +9 -26
  17. data/bundler/exe/bundle +22 -3
  18. data/bundler/lib/bundler.rb +233 -94
  19. data/bundler/lib/bundler/build_metadata.rb +5 -13
  20. data/bundler/lib/bundler/capistrano.rb +4 -4
  21. data/bundler/lib/bundler/cli.rb +221 -148
  22. data/bundler/lib/bundler/cli/add.rb +28 -16
  23. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  24. data/bundler/lib/bundler/cli/cache.rb +24 -17
  25. data/bundler/lib/bundler/cli/clean.rb +1 -1
  26. data/bundler/lib/bundler/cli/common.rb +25 -12
  27. data/bundler/lib/bundler/cli/config.rb +161 -86
  28. data/bundler/lib/bundler/cli/console.rb +1 -1
  29. data/bundler/lib/bundler/cli/doctor.rb +5 -5
  30. data/bundler/lib/bundler/cli/exec.rb +8 -20
  31. data/bundler/lib/bundler/cli/fund.rb +36 -0
  32. data/bundler/lib/bundler/cli/gem.rb +125 -32
  33. data/bundler/lib/bundler/cli/info.rb +29 -6
  34. data/bundler/lib/bundler/cli/init.rb +2 -2
  35. data/bundler/lib/bundler/cli/inject.rb +1 -1
  36. data/bundler/lib/bundler/cli/install.rb +27 -23
  37. data/bundler/lib/bundler/cli/issue.rb +5 -5
  38. data/bundler/lib/bundler/cli/list.rb +12 -10
  39. data/bundler/lib/bundler/cli/open.rb +10 -6
  40. data/bundler/lib/bundler/cli/outdated.rb +134 -109
  41. data/bundler/lib/bundler/cli/plugin.rb +19 -2
  42. data/bundler/lib/bundler/cli/pristine.rb +6 -1
  43. data/bundler/lib/bundler/cli/show.rb +2 -2
  44. data/bundler/lib/bundler/cli/update.rb +34 -12
  45. data/bundler/lib/bundler/compact_index_client.rb +26 -10
  46. data/bundler/lib/bundler/compact_index_client/cache.rb +6 -14
  47. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  48. data/bundler/lib/bundler/compact_index_client/updater.rb +8 -20
  49. data/bundler/lib/bundler/current_ruby.rb +9 -7
  50. data/bundler/lib/bundler/definition.rb +133 -132
  51. data/bundler/lib/bundler/dep_proxy.rb +16 -9
  52. data/bundler/lib/bundler/dependency.rb +19 -14
  53. data/bundler/lib/bundler/deployment.rb +1 -1
  54. data/bundler/lib/bundler/dsl.rb +54 -71
  55. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  56. data/bundler/lib/bundler/env.rb +9 -14
  57. data/bundler/lib/bundler/environment_preserver.rb +26 -3
  58. data/bundler/lib/bundler/errors.rb +1 -0
  59. data/bundler/lib/bundler/feature_flag.rb +19 -34
  60. data/bundler/lib/bundler/fetcher.rb +19 -16
  61. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  62. data/bundler/lib/bundler/fetcher/compact_index.rb +27 -13
  63. data/bundler/lib/bundler/fetcher/dependency.rb +1 -1
  64. data/bundler/lib/bundler/fetcher/downloader.rb +6 -3
  65. data/bundler/lib/bundler/fetcher/index.rb +8 -7
  66. data/bundler/lib/bundler/friendly_errors.rb +27 -19
  67. data/bundler/lib/bundler/gem_helper.rb +68 -37
  68. data/bundler/lib/bundler/gem_helpers.rb +38 -29
  69. data/bundler/lib/bundler/gem_tasks.rb +1 -1
  70. data/bundler/lib/bundler/gem_version_promoter.rb +5 -5
  71. data/bundler/lib/bundler/graph.rb +3 -3
  72. data/bundler/lib/bundler/index.rb +12 -7
  73. data/bundler/lib/bundler/injector.rb +32 -12
  74. data/bundler/lib/bundler/inline.rb +41 -30
  75. data/bundler/lib/bundler/installer.rb +41 -60
  76. data/bundler/lib/bundler/installer/gem_installer.rb +8 -4
  77. data/bundler/lib/bundler/installer/parallel_installer.rb +20 -26
  78. data/bundler/lib/bundler/installer/standalone.rb +18 -4
  79. data/bundler/lib/bundler/lazy_specification.rb +41 -27
  80. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  81. data/bundler/lib/bundler/lockfile_parser.rb +16 -33
  82. data/bundler/lib/bundler/{ssl_certs → man}/.document +0 -0
  83. data/bundler/lib/bundler/man/bundle-add.1 +66 -0
  84. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +7 -1
  85. data/bundler/lib/bundler/man/bundle-binstubs.1 +42 -0
  86. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
  87. data/bundler/lib/bundler/man/bundle-cache.1 +55 -0
  88. data/bundler/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +15 -15
  89. data/bundler/lib/bundler/man/bundle-check.1 +31 -0
  90. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  91. data/bundler/lib/bundler/man/bundle-clean.1 +24 -0
  92. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  93. data/bundler/lib/bundler/man/bundle-config.1 +488 -0
  94. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +59 -67
  95. data/bundler/lib/bundler/man/bundle-doctor.1 +44 -0
  96. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  97. data/bundler/lib/bundler/man/bundle-exec.1 +165 -0
  98. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +1 -1
  99. data/bundler/lib/bundler/man/bundle-gem.1 +102 -0
  100. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
  101. data/bundler/lib/bundler/man/bundle-info.1 +20 -0
  102. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  103. data/bundler/lib/bundler/man/bundle-init.1 +25 -0
  104. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +1 -1
  105. data/bundler/lib/bundler/man/bundle-inject.1 +33 -0
  106. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  107. data/bundler/lib/bundler/man/bundle-install.1 +338 -0
  108. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +34 -7
  109. data/bundler/lib/bundler/man/bundle-list.1 +50 -0
  110. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  111. data/bundler/lib/bundler/man/bundle-lock.1 +84 -0
  112. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  113. data/bundler/lib/bundler/man/bundle-open.1 +32 -0
  114. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  115. data/bundler/lib/bundler/man/bundle-outdated.1 +155 -0
  116. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  117. data/bundler/lib/bundler/man/bundle-platform.1 +61 -0
  118. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  119. data/bundler/lib/bundler/man/bundle-pristine.1 +34 -0
  120. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  121. data/bundler/lib/bundler/man/bundle-remove.1 +31 -0
  122. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  123. data/bundler/lib/bundler/man/bundle-show.1 +23 -0
  124. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  125. data/bundler/lib/bundler/man/bundle-update.1 +394 -0
  126. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +3 -3
  127. data/bundler/lib/bundler/man/bundle-viz.1 +39 -0
  128. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  129. data/bundler/lib/bundler/man/bundle.1 +136 -0
  130. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +2 -2
  131. data/bundler/lib/bundler/man/gemfile.5 +686 -0
  132. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +16 -20
  133. data/bundler/lib/bundler/man/index.txt +25 -0
  134. data/bundler/lib/bundler/match_platform.rb +1 -1
  135. data/bundler/lib/bundler/mirror.rb +5 -5
  136. data/bundler/lib/bundler/plugin.rb +75 -36
  137. data/bundler/lib/bundler/plugin/api.rb +1 -1
  138. data/bundler/lib/bundler/plugin/api/source.rb +12 -7
  139. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  140. data/bundler/lib/bundler/plugin/index.rb +24 -4
  141. data/bundler/lib/bundler/plugin/installer.rb +33 -22
  142. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  143. data/bundler/lib/bundler/plugin/source_list.rb +5 -1
  144. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  145. data/bundler/lib/bundler/remote_specification.rb +5 -4
  146. data/bundler/lib/bundler/resolver.rb +191 -87
  147. data/bundler/lib/bundler/resolver/spec_group.rb +76 -48
  148. data/bundler/lib/bundler/retry.rb +3 -3
  149. data/bundler/lib/bundler/ruby_version.rb +5 -20
  150. data/bundler/lib/bundler/rubygems_ext.rb +76 -72
  151. data/bundler/lib/bundler/rubygems_gem_installer.rb +47 -13
  152. data/bundler/lib/bundler/rubygems_integration.rb +159 -444
  153. data/bundler/lib/bundler/runtime.rb +6 -23
  154. data/bundler/lib/bundler/settings.rb +67 -93
  155. data/bundler/lib/bundler/setup.rb +11 -12
  156. data/bundler/lib/bundler/shared_helpers.rb +54 -80
  157. data/bundler/lib/bundler/similarity_detector.rb +3 -3
  158. data/bundler/lib/bundler/source.rb +12 -6
  159. data/bundler/lib/bundler/source/git.rb +47 -38
  160. data/bundler/lib/bundler/source/git/git_proxy.rb +101 -102
  161. data/bundler/lib/bundler/source/metadata.rb +7 -6
  162. data/bundler/lib/bundler/source/path.rb +20 -11
  163. data/bundler/lib/bundler/source/path/installer.rb +10 -10
  164. data/bundler/lib/bundler/source/rubygems.rb +56 -29
  165. data/bundler/lib/bundler/source/rubygems/remote.rb +3 -4
  166. data/bundler/lib/bundler/source_list.rb +32 -30
  167. data/bundler/lib/bundler/spec_set.rb +37 -25
  168. data/bundler/lib/bundler/stub_specification.rb +40 -34
  169. data/bundler/lib/bundler/templates/Executable.bundler +23 -14
  170. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  171. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  172. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +16 -2
  173. data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -5
  174. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  175. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  176. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  177. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  178. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  179. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  180. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  181. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  182. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +18 -31
  183. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  184. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  185. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  186. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  187. data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  188. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  189. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  190. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -1
  191. data/bundler/lib/bundler/ui.rb +3 -3
  192. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  193. data/bundler/lib/bundler/ui/shell.rb +7 -11
  194. data/bundler/lib/bundler/uri_credentials_filter.rb +10 -4
  195. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
  196. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
  197. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
  198. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  199. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +273 -147
  200. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +5 -6
  201. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
  202. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +36 -4
  203. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  204. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  205. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  206. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  207. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
  208. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  209. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +3 -3
  210. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +39 -11
  211. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +4 -4
  212. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  213. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +11 -0
  214. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +53 -51
  215. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
  216. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
  217. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  218. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  219. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  220. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +16 -9
  221. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +28 -13
  222. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  223. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
  224. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
  225. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +20 -9
  226. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +19 -8
  227. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
  228. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
  229. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +78 -0
  230. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  231. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
  232. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  233. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  234. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  235. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  236. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  237. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
  238. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
  239. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +21 -5
  240. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  241. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
  242. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
  243. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +65 -8
  244. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
  245. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
  246. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
  247. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  248. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  249. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  250. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +744 -0
  251. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +94 -0
  252. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  253. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1568 -0
  254. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +88 -0
  255. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  256. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  257. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +21 -0
  258. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +294 -0
  259. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  260. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +125 -0
  261. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  262. data/bundler/lib/bundler/vendored_fileutils.rb +1 -6
  263. data/bundler/lib/bundler/vendored_molinillo.rb +1 -1
  264. data/bundler/lib/bundler/vendored_persistent.rb +7 -12
  265. data/bundler/lib/bundler/vendored_thor.rb +2 -2
  266. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  267. data/bundler/lib/bundler/vendored_uri.rb +4 -0
  268. data/bundler/lib/bundler/version.rb +1 -20
  269. data/bundler/lib/bundler/version_ranges.rb +51 -5
  270. data/bundler/lib/bundler/vlad.rb +2 -2
  271. data/bundler/lib/bundler/worker.rb +2 -4
  272. data/bundler/lib/bundler/yaml_serializer.rb +3 -4
  273. data/lib/rubygems.rb +198 -222
  274. data/lib/rubygems/available_set.rb +4 -5
  275. data/lib/rubygems/basic_specification.rb +32 -19
  276. data/lib/rubygems/bundler_version_finder.rb +19 -9
  277. data/lib/rubygems/command.rb +73 -21
  278. data/lib/rubygems/command_manager.rb +5 -12
  279. data/lib/rubygems/commands/build_command.rb +51 -18
  280. data/lib/rubygems/commands/cert_command.rb +2 -11
  281. data/lib/rubygems/commands/check_command.rb +0 -2
  282. data/lib/rubygems/commands/cleanup_command.rb +17 -13
  283. data/lib/rubygems/commands/contents_command.rb +7 -9
  284. data/lib/rubygems/commands/dependency_command.rb +9 -10
  285. data/lib/rubygems/commands/environment_command.rb +1 -6
  286. data/lib/rubygems/commands/fetch_command.rb +2 -4
  287. data/lib/rubygems/commands/generate_index_command.rb +3 -2
  288. data/lib/rubygems/commands/help_command.rb +4 -4
  289. data/lib/rubygems/commands/info_command.rb +9 -4
  290. data/lib/rubygems/commands/install_command.rb +12 -54
  291. data/lib/rubygems/commands/list_command.rb +8 -7
  292. data/lib/rubygems/commands/lock_command.rb +3 -5
  293. data/lib/rubygems/commands/mirror_command.rb +0 -1
  294. data/lib/rubygems/commands/open_command.rb +1 -4
  295. data/lib/rubygems/commands/outdated_command.rb +0 -1
  296. data/lib/rubygems/commands/owner_command.rb +10 -10
  297. data/lib/rubygems/commands/pristine_command.rb +13 -9
  298. data/lib/rubygems/commands/push_command.rb +12 -51
  299. data/lib/rubygems/commands/query_command.rb +14 -330
  300. data/lib/rubygems/commands/rdoc_command.rb +0 -1
  301. data/lib/rubygems/commands/search_command.rb +7 -7
  302. data/lib/rubygems/commands/server_command.rb +3 -1
  303. data/lib/rubygems/commands/setup_command.rb +143 -101
  304. data/lib/rubygems/commands/signin_command.rb +0 -1
  305. data/lib/rubygems/commands/signout_command.rb +0 -2
  306. data/lib/rubygems/commands/sources_command.rb +22 -6
  307. data/lib/rubygems/commands/specification_command.rb +8 -3
  308. data/lib/rubygems/commands/stale_command.rb +1 -1
  309. data/lib/rubygems/commands/uninstall_command.rb +2 -3
  310. data/lib/rubygems/commands/unpack_command.rb +3 -32
  311. data/lib/rubygems/commands/update_command.rb +73 -28
  312. data/lib/rubygems/commands/which_command.rb +0 -1
  313. data/lib/rubygems/commands/yank_command.rb +10 -7
  314. data/lib/rubygems/compatibility.rb +4 -4
  315. data/lib/rubygems/config_file.rb +48 -27
  316. data/lib/rubygems/core_ext/kernel_gem.rb +7 -6
  317. data/lib/rubygems/core_ext/kernel_require.rb +44 -6
  318. data/lib/rubygems/core_ext/kernel_warn.rb +22 -13
  319. data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
  320. data/lib/rubygems/defaults.rb +110 -23
  321. data/lib/rubygems/dependency.rb +28 -14
  322. data/lib/rubygems/dependency_installer.rb +11 -166
  323. data/lib/rubygems/dependency_list.rb +17 -18
  324. data/lib/rubygems/deprecate.rb +51 -6
  325. data/lib/rubygems/doctor.rb +4 -4
  326. data/lib/rubygems/errors.rb +5 -7
  327. data/lib/rubygems/exceptions.rb +2 -24
  328. data/lib/rubygems/ext.rb +6 -6
  329. data/lib/rubygems/ext/build_error.rb +2 -0
  330. data/lib/rubygems/ext/builder.rb +45 -82
  331. data/lib/rubygems/ext/cmake_builder.rb +6 -7
  332. data/lib/rubygems/ext/configure_builder.rb +5 -8
  333. data/lib/rubygems/ext/ext_conf_builder.rb +27 -23
  334. data/lib/rubygems/ext/rake_builder.rb +4 -6
  335. data/lib/rubygems/gem_runner.rb +3 -10
  336. data/lib/rubygems/gemcutter_utilities.rb +111 -37
  337. data/lib/rubygems/indexer.rb +9 -26
  338. data/lib/rubygems/install_update_options.rb +7 -7
  339. data/lib/rubygems/installer.rb +91 -98
  340. data/lib/rubygems/installer_test_case.rb +104 -42
  341. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  342. data/lib/rubygems/local_remote_options.rb +1 -1
  343. data/lib/rubygems/mock_gem_ui.rb +1 -4
  344. data/lib/rubygems/name_tuple.rb +4 -7
  345. data/lib/rubygems/openssl.rb +7 -0
  346. data/lib/rubygems/package.rb +49 -32
  347. data/lib/rubygems/package/digest_io.rb +0 -2
  348. data/lib/rubygems/package/file_source.rb +0 -2
  349. data/lib/rubygems/package/io_source.rb +0 -2
  350. data/lib/rubygems/package/old.rb +1 -3
  351. data/lib/rubygems/package/tar_header.rb +4 -6
  352. data/lib/rubygems/package/tar_reader.rb +15 -12
  353. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  354. data/lib/rubygems/package/tar_test_case.rb +2 -4
  355. data/lib/rubygems/package/tar_writer.rb +6 -16
  356. data/lib/rubygems/package_task.rb +1 -7
  357. data/lib/rubygems/path_support.rb +2 -2
  358. data/lib/rubygems/platform.rb +22 -16
  359. data/lib/rubygems/query_utils.rb +353 -0
  360. data/lib/rubygems/rdoc.rb +0 -12
  361. data/lib/rubygems/remote_fetcher.rb +33 -59
  362. data/lib/rubygems/request.rb +11 -14
  363. data/lib/rubygems/request/connection_pools.rb +3 -7
  364. data/lib/rubygems/request/http_pool.rb +0 -1
  365. data/lib/rubygems/request_set.rb +10 -23
  366. data/lib/rubygems/request_set/gem_dependency_api.rb +9 -11
  367. data/lib/rubygems/request_set/lockfile.rb +13 -12
  368. data/lib/rubygems/request_set/lockfile/parser.rb +2 -2
  369. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -1
  370. data/lib/rubygems/requirement.rb +36 -35
  371. data/lib/rubygems/resolver.rb +20 -16
  372. data/lib/rubygems/resolver/activation_request.rb +27 -51
  373. data/lib/rubygems/resolver/api_set.rb +31 -24
  374. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  375. data/lib/rubygems/resolver/api_specification.rb +24 -10
  376. data/lib/rubygems/resolver/best_set.rb +4 -6
  377. data/lib/rubygems/resolver/composed_set.rb +3 -5
  378. data/lib/rubygems/resolver/conflict.rb +2 -9
  379. data/lib/rubygems/resolver/current_set.rb +0 -2
  380. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  381. data/lib/rubygems/resolver/git_set.rb +0 -2
  382. data/lib/rubygems/resolver/git_specification.rb +0 -2
  383. data/lib/rubygems/resolver/index_set.rb +1 -3
  384. data/lib/rubygems/resolver/index_specification.rb +32 -2
  385. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  386. data/lib/rubygems/resolver/installer_set.rb +63 -16
  387. data/lib/rubygems/resolver/local_specification.rb +0 -2
  388. data/lib/rubygems/resolver/lock_set.rb +3 -5
  389. data/lib/rubygems/resolver/lock_specification.rb +2 -4
  390. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  391. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  392. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
  393. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -6
  394. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  395. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  396. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  397. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  398. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  399. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  400. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  401. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  402. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
  403. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +76 -8
  404. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  405. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +12 -0
  406. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  407. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -165
  408. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  409. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  410. data/lib/rubygems/resolver/requirement_list.rb +0 -1
  411. data/lib/rubygems/resolver/set.rb +0 -2
  412. data/lib/rubygems/resolver/source_set.rb +0 -2
  413. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  414. data/lib/rubygems/resolver/specification.rb +13 -2
  415. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  416. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  417. data/lib/rubygems/s3_uri_signer.rb +15 -13
  418. data/lib/rubygems/safe_yaml.rb +4 -4
  419. data/lib/rubygems/security.rb +27 -34
  420. data/lib/rubygems/security/policy.rb +4 -8
  421. data/lib/rubygems/security/signer.rb +8 -9
  422. data/lib/rubygems/security/trust_dir.rb +1 -3
  423. data/lib/rubygems/server.rb +20 -16
  424. data/lib/rubygems/source.rb +30 -13
  425. data/lib/rubygems/source/git.rb +7 -8
  426. data/lib/rubygems/source/installed.rb +0 -2
  427. data/lib/rubygems/source/local.rb +2 -4
  428. data/lib/rubygems/source/lock.rb +0 -2
  429. data/lib/rubygems/source/specific_file.rb +0 -2
  430. data/lib/rubygems/source/vendor.rb +0 -2
  431. data/lib/rubygems/source_list.rb +6 -6
  432. data/lib/rubygems/spec_fetcher.rb +22 -34
  433. data/lib/rubygems/specification.rb +207 -278
  434. data/lib/rubygems/specification_policy.rb +135 -57
  435. data/{bundler/lib/bundler/ssl_certs/index.rubygems.org → lib/rubygems/ssl_certs/rubygems.org}/GlobalSignRootCA.pem +0 -0
  436. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  437. data/lib/rubygems/stub_specification.rb +4 -5
  438. data/lib/rubygems/test_case.rb +221 -341
  439. data/lib/rubygems/test_utilities.rb +22 -18
  440. data/lib/rubygems/text.rb +2 -3
  441. data/lib/rubygems/uninstaller.rb +49 -30
  442. data/lib/rubygems/uri_formatter.rb +2 -4
  443. data/lib/rubygems/uri_parser.rb +34 -0
  444. data/lib/rubygems/uri_parsing.rb +23 -0
  445. data/lib/rubygems/user_interaction.rb +3 -20
  446. data/lib/rubygems/util.rb +20 -44
  447. data/lib/rubygems/util/licenses.rb +400 -400
  448. data/lib/rubygems/validator.rb +9 -31
  449. data/lib/rubygems/version.rb +29 -21
  450. data/lib/rubygems/version_option.rb +6 -0
  451. data/rubygems-update.gemspec +4 -11
  452. data/setup.rb +2 -7
  453. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  454. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  455. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  456. data/test/rubygems/rubygems_plugin.rb +0 -2
  457. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  458. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  459. data/test/rubygems/test_bundled_ca.rb +42 -45
  460. data/test/rubygems/test_config.rb +0 -2
  461. data/test/rubygems/test_deprecate.rb +41 -5
  462. data/test/rubygems/test_gem.rb +405 -236
  463. data/test/rubygems/test_gem_available_set.rb +5 -6
  464. data/test/rubygems/test_gem_bundler_version_finder.rb +20 -2
  465. data/test/rubygems/test_gem_command.rb +144 -9
  466. data/test/rubygems/test_gem_command_manager.rb +40 -17
  467. data/test/rubygems/test_gem_commands_build_command.rb +386 -13
  468. data/test/rubygems/test_gem_commands_cert_command.rb +18 -6
  469. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  470. data/test/rubygems/test_gem_commands_cleanup_command.rb +35 -10
  471. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  472. data/test/rubygems/test_gem_commands_dependency_command.rb +1 -3
  473. data/test/rubygems/test_gem_commands_environment_command.rb +21 -33
  474. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  475. data/test/rubygems/test_gem_commands_generate_index_command.rb +32 -2
  476. data/test/rubygems/test_gem_commands_help_command.rb +16 -8
  477. data/test/rubygems/test_gem_commands_info_command.rb +6 -7
  478. data/test/rubygems/test_gem_commands_install_command.rb +368 -34
  479. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  480. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  481. data/test/rubygems/test_gem_commands_mirror.rb +1 -2
  482. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  483. data/test/rubygems/test_gem_commands_outdated_command.rb +18 -1
  484. data/test/rubygems/test_gem_commands_owner_command.rb +62 -9
  485. data/test/rubygems/test_gem_commands_pristine_command.rb +148 -16
  486. data/test/rubygems/test_gem_commands_push_command.rb +94 -21
  487. data/test/rubygems/test_gem_commands_query_command.rb +35 -10
  488. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  489. data/test/rubygems/test_gem_commands_server_command.rb +6 -4
  490. data/test/rubygems/test_gem_commands_setup_command.rb +228 -128
  491. data/test/rubygems/test_gem_commands_signin_command.rb +36 -11
  492. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  493. data/test/rubygems/test_gem_commands_sources_command.rb +193 -9
  494. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  495. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  496. data/test/rubygems/test_gem_commands_uninstall_command.rb +108 -52
  497. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  498. data/test/rubygems/test_gem_commands_update_command.rb +201 -29
  499. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  500. data/test/rubygems/test_gem_commands_yank_command.rb +86 -5
  501. data/test/rubygems/test_gem_config_file.rb +25 -13
  502. data/test/rubygems/test_gem_dependency.rb +6 -2
  503. data/test/rubygems/test_gem_dependency_installer.rb +169 -252
  504. data/test/rubygems/test_gem_dependency_list.rb +31 -26
  505. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  506. data/test/rubygems/test_gem_doctor.rb +28 -2
  507. data/test/rubygems/test_gem_ext_builder.rb +51 -44
  508. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -23
  509. data/test/rubygems/test_gem_ext_configure_builder.rb +6 -14
  510. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +21 -29
  511. data/test/rubygems/test_gem_ext_rake_builder.rb +39 -22
  512. data/test/rubygems/test_gem_gem_runner.rb +47 -2
  513. data/test/rubygems/test_gem_gemcutter_utilities.rb +16 -13
  514. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  515. data/test/rubygems/test_gem_indexer.rb +40 -55
  516. data/test/rubygems/test_gem_install_update_options.rb +45 -21
  517. data/test/rubygems/test_gem_installer.rb +661 -338
  518. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  519. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  520. data/test/rubygems/test_gem_package.rb +132 -45
  521. data/test/rubygems/test_gem_package_old.rb +56 -55
  522. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  523. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  524. data/test/rubygems/test_gem_package_tar_reader_entry.rb +6 -7
  525. data/test/rubygems/test_gem_package_tar_writer.rb +20 -12
  526. data/test/rubygems/test_gem_package_task.rb +46 -13
  527. data/test/rubygems/test_gem_path_support.rb +17 -13
  528. data/test/rubygems/test_gem_platform.rb +74 -7
  529. data/test/rubygems/test_gem_rdoc.rb +0 -1
  530. data/test/rubygems/test_gem_remote_fetcher.rb +223 -209
  531. data/test/rubygems/test_gem_request.rb +30 -19
  532. data/test/rubygems/test_gem_request_connection_pools.rb +2 -2
  533. data/test/rubygems/test_gem_request_set.rb +104 -29
  534. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +4 -6
  535. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -5
  536. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -10
  537. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -118
  538. data/test/rubygems/test_gem_requirement.rb +50 -4
  539. data/test/rubygems/test_gem_resolver.rb +73 -31
  540. data/test/rubygems/test_gem_resolver_activation_request.rb +3 -34
  541. data/test/rubygems/test_gem_resolver_api_set.rb +60 -59
  542. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
  543. data/test/rubygems/test_gem_resolver_best_set.rb +27 -6
  544. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  545. data/test/rubygems/test_gem_resolver_conflict.rb +1 -7
  546. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  547. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  548. data/test/rubygems/test_gem_resolver_git_specification.rb +1 -2
  549. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  550. data/test/rubygems/test_gem_resolver_index_specification.rb +7 -4
  551. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -3
  552. data/test/rubygems/test_gem_resolver_installer_set.rb +10 -10
  553. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  554. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  555. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  556. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  557. data/test/rubygems/test_gem_resolver_specification.rb +0 -2
  558. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  559. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  560. data/test/rubygems/test_gem_security.rb +27 -25
  561. data/test/rubygems/test_gem_security_policy.rb +7 -12
  562. data/test/rubygems/test_gem_security_signer.rb +11 -12
  563. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  564. data/test/rubygems/test_gem_server.rb +13 -12
  565. data/test/rubygems/test_gem_silent_ui.rb +0 -1
  566. data/test/rubygems/test_gem_source.rb +32 -17
  567. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -1
  568. data/test/rubygems/test_gem_source_git.rb +12 -18
  569. data/test/rubygems/test_gem_source_installed.rb +11 -13
  570. data/test/rubygems/test_gem_source_list.rb +1 -1
  571. data/test/rubygems/test_gem_source_local.rb +8 -9
  572. data/test/rubygems/test_gem_source_lock.rb +17 -19
  573. data/test/rubygems/test_gem_source_specific_file.rb +9 -10
  574. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  575. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  576. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  577. data/test/rubygems/test_gem_specification.rb +363 -245
  578. data/test/rubygems/test_gem_stream_ui.rb +3 -1
  579. data/test/rubygems/test_gem_stub_specification.rb +6 -7
  580. data/test/rubygems/test_gem_text.rb +1 -2
  581. data/test/rubygems/test_gem_uninstaller.rb +165 -22
  582. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  583. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  584. data/test/rubygems/test_gem_util.rb +17 -15
  585. data/test/rubygems/test_gem_validator.rb +4 -7
  586. data/test/rubygems/test_gem_version.rb +23 -10
  587. data/test/rubygems/test_gem_version_option.rb +1 -3
  588. data/test/rubygems/test_kernel.rb +25 -9
  589. data/test/rubygems/test_project_sanity.rb +20 -0
  590. data/test/rubygems/test_remote_fetch_error.rb +1 -2
  591. data/test/rubygems/test_require.rb +394 -56
  592. data/test/test_changelog_generator.rb +17 -0
  593. metadata +109 -155
  594. data/.rubocop.yml +0 -67
  595. data/.travis.yml +0 -38
  596. data/appveyor.yml +0 -43
  597. data/bundler/CODE_OF_CONDUCT.md +0 -42
  598. data/bundler/CONTRIBUTING.md +0 -17
  599. data/bundler/exe/bundle_ruby +0 -60
  600. data/bundler/lib/bundler/cli/package.rb +0 -49
  601. data/bundler/lib/bundler/compatibility_guard.rb +0 -14
  602. data/bundler/lib/bundler/gem_remote_fetcher.rb +0 -43
  603. data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  604. data/bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  605. data/bundler/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  606. data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  607. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  608. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  609. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  610. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  611. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  612. data/lib/rubygems/source_local.rb +0 -7
  613. data/lib/rubygems/source_specific_file.rb +0 -6
  614. data/lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  615. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  616. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  617. data/lib/ubygems.rb +0 -14
  618. data/util/CL2notes +0 -55
  619. data/util/ci +0 -82
  620. data/util/cops/deprecations.rb +0 -52
  621. data/util/create_certs.rb +0 -171
  622. data/util/create_certs.sh +0 -27
  623. data/util/create_encrypted_key.rb +0 -16
  624. data/util/generate_spdx_license_list.rb +0 -61
  625. data/util/patch_with_prs.rb +0 -77
  626. data/util/rubocop +0 -8
  627. data/util/update_bundled_ca_certificates.rb +0 -139
  628. data/util/update_changelog.rb +0 -67
@@ -1,10 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
  require 'net/http'
3
- require 'time'
4
3
  require 'rubygems/user_interaction'
5
4
 
6
5
  class Gem::Request
7
-
8
6
  extend Gem::UserInteraction
9
7
  include Gem::UserInteraction
10
8
 
@@ -13,12 +11,13 @@ class Gem::Request
13
11
  def self.create_with_proxy(uri, request_class, last_modified, proxy) # :nodoc:
14
12
  cert_files = get_cert_files
15
13
  proxy ||= get_proxy_from_env(uri.scheme)
16
- pool = ConnectionPools.new proxy_uri(proxy), cert_files
14
+ pool = ConnectionPools.new proxy_uri(proxy), cert_files
17
15
 
18
16
  new(uri, request_class, last_modified, pool.pool_for(uri))
19
17
  end
20
18
 
21
19
  def self.proxy_uri(proxy) # :nodoc:
20
+ require "uri"
22
21
  case proxy
23
22
  when :no_proxy then nil
24
23
  when URI::HTTP then proxy
@@ -45,7 +44,8 @@ class Gem::Request
45
44
  end
46
45
 
47
46
  def self.configure_connection_for_https(connection, cert_files)
48
- require 'net/https'
47
+ raise Gem::Exception.new('OpenSSl is not available. Install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources') unless Gem::HAVE_OPENSSL
48
+
49
49
  connection.use_ssl = true
50
50
  connection.verify_mode =
51
51
  Gem.configuration.ssl_verify_mode || OpenSSL::SSL::VERIFY_PEER
@@ -77,12 +77,6 @@ class Gem::Request
77
77
  end
78
78
 
79
79
  connection
80
- rescue LoadError => e
81
- raise unless (e.respond_to?(:path) && e.path == 'openssl') ||
82
- e.message =~ / -- openssl$/
83
-
84
- raise Gem::Exception.new(
85
- 'Unable to require openssl, install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources')
86
80
  end
87
81
 
88
82
  def self.verify_certificate(store_context)
@@ -131,7 +125,7 @@ class Gem::Request
131
125
 
132
126
  def connection_for(uri)
133
127
  @connection_pool.checkout
134
- rescue defined?(OpenSSL::SSL) ? OpenSSL::SSL::SSLError : Errno::EHOSTDOWN,
128
+ rescue Gem::HAVE_OPENSSL ? OpenSSL::SSL::SSLError : Errno::EHOSTDOWN,
135
129
  Errno::EHOSTDOWN => e
136
130
  raise Gem::RemoteFetcher::FetchError.new(e.message, uri)
137
131
  end
@@ -149,6 +143,7 @@ class Gem::Request
149
143
  request.add_field 'Keep-Alive', '30'
150
144
 
151
145
  if @last_modified
146
+ require 'time'
152
147
  request.add_field 'If-Modified-Since', @last_modified.httpdate
153
148
  end
154
149
 
@@ -168,9 +163,12 @@ class Gem::Request
168
163
 
169
164
  no_env_proxy = env_proxy.nil? || env_proxy.empty?
170
165
 
171
- return get_proxy_from_env 'http' if no_env_proxy and _scheme != 'http'
172
- return :no_proxy if no_env_proxy
166
+ if no_env_proxy
167
+ return (_scheme == 'https' || _scheme == 'http') ?
168
+ :no_proxy : get_proxy_from_env('http')
169
+ end
173
170
 
171
+ require "uri"
174
172
  uri = URI(Gem::UriFormatter.new(env_proxy).normalize)
175
173
 
176
174
  if uri and uri.user.nil? and uri.password.nil?
@@ -287,7 +285,6 @@ class Gem::Request
287
285
 
288
286
  ua
289
287
  end
290
-
291
288
  end
292
289
 
293
290
  require 'rubygems/request/http_pool'
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Gem::Request::ConnectionPools # :nodoc:
4
-
5
4
  @client = Net::HTTP
6
5
 
7
6
  class << self
@@ -29,7 +28,7 @@ class Gem::Request::ConnectionPools # :nodoc:
29
28
  end
30
29
 
31
30
  def close_all
32
- @pools.each_value {|pool| pool.close_all}
31
+ @pools.each_value {|pool| pool.close_all }
33
32
  end
34
33
 
35
34
  private
@@ -40,7 +39,7 @@ class Gem::Request::ConnectionPools # :nodoc:
40
39
  def get_no_proxy_from_env
41
40
  env_no_proxy = ENV['no_proxy'] || ENV['NO_PROXY']
42
41
 
43
- return [] if env_no_proxy.nil? or env_no_proxy.empty?
42
+ return [] if env_no_proxy.nil? or env_no_proxy.empty?
44
43
 
45
44
  env_no_proxy.split(/\s*,\s*/)
46
45
  end
@@ -74,9 +73,7 @@ class Gem::Request::ConnectionPools # :nodoc:
74
73
  end
75
74
 
76
75
  def net_http_args(uri, proxy_uri)
77
- # URI::Generic#hostname was added in ruby 1.9.3, use it if exists, otherwise
78
- # don't support IPv6 literals and use host.
79
- hostname = uri.respond_to?(:hostname) ? uri.hostname : uri.host
76
+ hostname = uri.hostname
80
77
  net_http_args = [hostname, uri.port]
81
78
 
82
79
  no_proxy = get_no_proxy_from_env
@@ -95,5 +92,4 @@ class Gem::Request::ConnectionPools # :nodoc:
95
92
  net_http_args
96
93
  end
97
94
  end
98
-
99
95
  end
@@ -43,5 +43,4 @@ class Gem::Request::HTTPPool # :nodoc:
43
43
  connection.start
44
44
  connection
45
45
  end
46
-
47
46
  end
@@ -15,7 +15,6 @@ require 'tsort'
15
15
  # #=> ["nokogiri-1.6.0", "mini_portile-0.5.1", "pg-0.17.0"]
16
16
 
17
17
  class Gem::RequestSet
18
-
19
18
  include TSort
20
19
 
21
20
  ##
@@ -184,7 +183,7 @@ class Gem::RequestSet
184
183
  if req.installed?
185
184
  req.spec.spec.build_extensions
186
185
 
187
- if @always_install.none? { |spec| spec == req.spec.spec }
186
+ if @always_install.none? {|spec| spec == req.spec.spec }
188
187
  yield req, nil if block_given?
189
188
  next
190
189
  end
@@ -196,19 +195,8 @@ class Gem::RequestSet
196
195
  yield req, installer if block_given?
197
196
  end
198
197
  rescue Gem::RuntimeRequirementNotMetError => e
199
- recent_match = req.spec.set.find_all(req.request).sort_by(&:version).reverse_each.find do |s|
200
- s = s.spec
201
- s.required_ruby_version.satisfied_by?(Gem.ruby_version) &&
202
- s.required_rubygems_version.satisfied_by?(Gem.rubygems_version) &&
203
- Gem::Platform.installable?(s)
204
- end
205
- if recent_match
206
- suggestion = "The last version of #{req.request} to support your Ruby & RubyGems was #{recent_match.version}. Try installing it with `gem install #{recent_match.name} -v #{recent_match.version}`"
207
- suggestion += " and then running the current command again" unless @always_install.include?(req.spec.spec)
208
- else
209
- suggestion = "There are no versions of #{req.request} compatible with your Ruby & RubyGems"
210
- suggestion += ". Maybe try installing an older version of the gem you're looking for?" unless @always_install.include?(req.spec.spec)
211
- end
198
+ suggestion = "There are no versions of #{req.request} compatible with your Ruby & RubyGems"
199
+ suggestion += ". Maybe try installing an older version of the gem you're looking for?" unless @always_install.include?(req.spec.spec)
212
200
  e.suggestion = suggestion
213
201
  raise
214
202
  end
@@ -269,7 +257,7 @@ class Gem::RequestSet
269
257
  gem_home, ENV['GEM_HOME'] = ENV['GEM_HOME'], dir
270
258
 
271
259
  existing = force ? [] : specs_in(dir)
272
- existing.delete_if { |s| @always_install.include? s }
260
+ existing.delete_if {|s| @always_install.include? s }
273
261
 
274
262
  dir = File.expand_path dir
275
263
 
@@ -283,7 +271,7 @@ class Gem::RequestSet
283
271
  sorted_requests.each do |request|
284
272
  spec = request.spec
285
273
 
286
- if existing.find { |s| s.full_name == spec.full_name }
274
+ if existing.find {|s| s.full_name == spec.full_name }
287
275
  yield request, nil if block_given?
288
276
  next
289
277
  end
@@ -334,7 +322,7 @@ class Gem::RequestSet
334
322
 
335
323
  @git_set.root_dir = @install_dir
336
324
 
337
- lock_file = "#{File.expand_path(path)}.lock".dup.untaint
325
+ lock_file = "#{File.expand_path(path)}.lock".dup.tap(&Gem::UNTAINT)
338
326
  begin
339
327
  tokenizer = Gem::RequestSet::Lockfile::Tokenizer.from_file lock_file
340
328
  parser = tokenizer.make_parser self, []
@@ -386,7 +374,7 @@ class Gem::RequestSet
386
374
  q.text 'sets:'
387
375
 
388
376
  q.breakable
389
- q.pp @sets.map { |set| set.class }
377
+ q.pp @sets.map {|set| set.class }
390
378
  end
391
379
  end
392
380
 
@@ -440,7 +428,7 @@ class Gem::RequestSet
440
428
  end
441
429
 
442
430
  def specs
443
- @specs ||= @requests.map { |r| r.full_spec }
431
+ @specs ||= @requests.map {|r| r.full_spec }
444
432
  end
445
433
 
446
434
  def specs_in(dir)
@@ -457,9 +445,9 @@ class Gem::RequestSet
457
445
  node.spec.dependencies.each do |dep|
458
446
  next if dep.type == :development and not @development
459
447
 
460
- match = @requests.find { |r|
448
+ match = @requests.find do |r|
461
449
  dep.match? r.spec.name, r.spec.version, @prerelease
462
- }
450
+ end
463
451
 
464
452
  unless match
465
453
  next if dep.type == :development and @development_shallow
@@ -471,7 +459,6 @@ class Gem::RequestSet
471
459
  yield match
472
460
  end
473
461
  end
474
-
475
462
  end
476
463
 
477
464
  require 'rubygems/request_set/gem_dependency_api'
@@ -31,7 +31,6 @@
31
31
  # See `gem help install` and `gem help gem_dependencies` for further details.
32
32
 
33
33
  class Gem::RequestSet::GemDependencyAPI
34
-
35
34
  ENGINE_MAP = { # :nodoc:
36
35
  :jruby => %w[jruby],
37
36
  :jruby_18 => %w[jruby],
@@ -89,7 +88,7 @@ class Gem::RequestSet::GemDependencyAPI
89
88
  :truffleruby => Gem::Platform::RUBY,
90
89
  :x64_mingw => x64_mingw,
91
90
  :x64_mingw_20 => x64_mingw,
92
- :x64_mingw_21 => x64_mingw
91
+ :x64_mingw_21 => x64_mingw,
93
92
  }.freeze
94
93
 
95
94
  gt_eq_0 = Gem::Requirement.new '>= 0'
@@ -206,7 +205,7 @@ class Gem::RequestSet::GemDependencyAPI
206
205
  @git_set = @set.git_set
207
206
  @git_sources = {}
208
207
  @installing = false
209
- @requires = Hash.new { |h, name| h[name] = [] }
208
+ @requires = Hash.new {|h, name| h[name] = [] }
210
209
  @vendor_set = @set.vendor_set
211
210
  @source_set = @set.source_set
212
211
  @gem_sources = {}
@@ -235,7 +234,7 @@ class Gem::RequestSet::GemDependencyAPI
235
234
  return unless (groups & @without_groups).empty?
236
235
 
237
236
  dependencies.each do |dep|
238
- @set.gem dep.name, *dep.requirement
237
+ @set.gem dep.name, *dep.requirement.as_list
239
238
  end
240
239
  end
241
240
 
@@ -280,7 +279,7 @@ class Gem::RequestSet::GemDependencyAPI
280
279
  # Loads the gem dependency file and returns self.
281
280
 
282
281
  def load
283
- instance_eval File.read(@path).untaint, @path, 1
282
+ instance_eval File.read(@path).tap(&Gem::UNTAINT), @path, 1
284
283
 
285
284
  self
286
285
  end
@@ -380,7 +379,7 @@ class Gem::RequestSet::GemDependencyAPI
380
379
  Gem::Requirement.create requirements
381
380
  end
382
381
 
383
- return unless gem_platforms options
382
+ return unless gem_platforms name, options
384
383
 
385
384
  groups = gem_group name, options
386
385
 
@@ -443,7 +442,7 @@ Gem dependencies file #{@path} requires #{name} more than once.
443
442
  Gem dependencies file #{@path} includes git reference for both ref and branch but only ref is used.
444
443
  WARNING
445
444
  end
446
- if (ref||branch) && tag
445
+ if (ref || branch) && tag
447
446
  warn <<-WARNING
448
447
  Gem dependencies file #{@path} includes git reference for both ref/branch and tag but only ref/branch is used.
449
448
  WARNING
@@ -483,7 +482,7 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
483
482
 
484
483
  def gem_group(name, options) # :nodoc:
485
484
  g = options.delete :group
486
- all_groups = g ? Array(g) : []
485
+ all_groups = g ? Array(g) : []
487
486
 
488
487
  groups = options.delete :groups
489
488
  all_groups |= groups if groups
@@ -533,7 +532,7 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
533
532
  # Handles the platforms: option from +options+. Returns true if the
534
533
  # platform matches the current platform.
535
534
 
536
- def gem_platforms(options) # :nodoc:
535
+ def gem_platforms(name, options) # :nodoc:
537
536
  platform_names = Array(options.delete :platform)
538
537
  platform_names.concat Array(options.delete :platforms)
539
538
  platform_names.concat @current_platforms if @current_platforms
@@ -544,7 +543,7 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
544
543
  raise ArgumentError, "unknown platform #{platform_name.inspect}" unless
545
544
  platform = PLATFORM_MAP[platform_name]
546
545
 
547
- next false unless Gem::Platform.match platform
546
+ next false unless Gem::Platform.match_gem? platform, name
548
547
 
549
548
  if engines = ENGINE_MAP[platform_name]
550
549
  next false unless engines.include? Gem.ruby_engine
@@ -842,5 +841,4 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
842
841
 
843
842
  Gem.sources << url
844
843
  end
845
-
846
844
  end
@@ -9,7 +9,6 @@ class Gem::RequestSet::Lockfile
9
9
  # Raised when a lockfile cannot be parsed
10
10
 
11
11
  class ParseError < Gem::Exception
12
-
13
12
  ##
14
13
  # The column where the error was encountered
15
14
 
@@ -77,15 +76,17 @@ class Gem::RequestSet::Lockfile
77
76
  @gem_deps_file = File.expand_path(gem_deps_file)
78
77
  @gem_deps_dir = File.dirname(@gem_deps_file)
79
78
 
80
- @gem_deps_file.untaint unless gem_deps_file.tainted?
79
+ if RUBY_VERSION < '2.7'
80
+ @gem_deps_file.untaint unless gem_deps_file.tainted?
81
+ end
81
82
 
82
- @platforms = []
83
+ @platforms = []
83
84
  end
84
85
 
85
86
  def add_DEPENDENCIES(out) # :nodoc:
86
87
  out << "DEPENDENCIES"
87
88
 
88
- out.concat @dependencies.sort_by { |name,| name }.map { |name, requirement|
89
+ out.concat @dependencies.sort_by {|name,| name }.map {|name, requirement|
89
90
  " #{name}#{requirement.for_lockfile}"
90
91
  }
91
92
 
@@ -99,12 +100,12 @@ class Gem::RequestSet::Lockfile
99
100
  request.spec.source.uri
100
101
  end
101
102
 
102
- source_groups.sort_by { |group,| group.to_s }.map do |group, requests|
103
+ source_groups.sort_by {|group,| group.to_s }.map do |group, requests|
103
104
  out << "GEM"
104
105
  out << " remote: #{group}"
105
106
  out << " specs:"
106
107
 
107
- requests.sort_by { |request| request.name }.each do |request|
108
+ requests.sort_by {|request| request.name }.each do |request|
108
109
  next if request.spec.name == 'bundler'
109
110
  platform = "-#{request.spec.platform}" unless
110
111
  Gem::Platform::RUBY == request.spec.platform
@@ -136,10 +137,10 @@ class Gem::RequestSet::Lockfile
136
137
  out << " revision: #{revision}"
137
138
  out << " specs:"
138
139
 
139
- requests.sort_by { |request| request.name }.each do |request|
140
+ requests.sort_by {|request| request.name }.each do |request|
140
141
  out << " #{request.name} (#{request.version})"
141
142
 
142
- dependencies = request.spec.dependencies.sort_by { |dep| dep.name }
143
+ dependencies = request.spec.dependencies.sort_by {|dep| dep.name }
143
144
  dependencies.each do |dep|
144
145
  out << " #{dep.name}#{dep.requirement.for_lockfile}"
145
146
  end
@@ -153,7 +154,7 @@ class Gem::RequestSet::Lockfile
153
154
  base = File.expand_path(base)
154
155
 
155
156
  if dest.index(base) == 0
156
- offset = dest[base.size+1..-1]
157
+ offset = dest[base.size + 1..-1]
157
158
 
158
159
  return '.' unless offset
159
160
 
@@ -181,9 +182,9 @@ class Gem::RequestSet::Lockfile
181
182
  def add_PLATFORMS(out) # :nodoc:
182
183
  out << "PLATFORMS"
183
184
 
184
- platforms = requests.map { |request| request.spec.platform }.uniq
185
+ platforms = requests.map {|request| request.spec.platform }.uniq
185
186
 
186
- platforms = platforms.sort_by { |platform| platform.to_s }
187
+ platforms = platforms.sort_by {|platform| platform.to_s }
187
188
 
188
189
  platforms.each do |platform|
189
190
  out << " #{platform}"
@@ -193,7 +194,7 @@ class Gem::RequestSet::Lockfile
193
194
  end
194
195
 
195
196
  def spec_groups
196
- requests.group_by { |request| request.spec.class }
197
+ requests.group_by {|request| request.spec.class }
197
198
  end
198
199
 
199
200
  ##
@@ -327,9 +327,9 @@ class Gem::RequestSet::Lockfile::Parser
327
327
 
328
328
  def pinned_requirement(name) # :nodoc:
329
329
  requirement = Gem::Dependency.new name
330
- specification = @set.sets.flat_map { |set|
330
+ specification = @set.sets.flat_map do |set|
331
331
  set.find_all(requirement)
332
- }.compact.first
332
+ end.compact.first
333
333
 
334
334
  specification && specification.version
335
335
  end
@@ -22,7 +22,7 @@ class Gem::RequestSet::Lockfile::Tokenizer
22
22
  end
23
23
 
24
24
  def to_a
25
- @tokens.map { |token| [token.type, token.value, token.column, token.line] }
25
+ @tokens.map {|token| [token.type, token.value, token.column, token.line] }
26
26
  end
27
27
 
28
28
  def skip(type)
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require "rubygems/version"
3
2
  require "rubygems/deprecate"
4
3
 
5
4
  ##
@@ -11,18 +10,18 @@ require "rubygems/deprecate"
11
10
 
12
11
  class Gem::Requirement
13
12
  OPS = { #:nodoc:
14
- "=" => lambda { |v, r| v == r },
15
- "!=" => lambda { |v, r| v != r },
16
- ">" => lambda { |v, r| v > r },
17
- "<" => lambda { |v, r| v < r },
18
- ">=" => lambda { |v, r| v >= r },
19
- "<=" => lambda { |v, r| v <= r },
20
- "~>" => lambda { |v, r| v >= r && v.release < r.bump }
13
+ "=" => lambda {|v, r| v == r },
14
+ "!=" => lambda {|v, r| v != r },
15
+ ">" => lambda {|v, r| v > r },
16
+ "<" => lambda {|v, r| v < r },
17
+ ">=" => lambda {|v, r| v >= r },
18
+ "<=" => lambda {|v, r| v <= r },
19
+ "~>" => lambda {|v, r| v >= r && v.release < r.bump },
21
20
  }.freeze
22
21
 
23
22
  SOURCE_SET_REQUIREMENT = Struct.new(:for_lockfile).new "!" # :nodoc:
24
23
 
25
- quoted = OPS.keys.map { |k| Regexp.quote k }.join "|"
24
+ quoted = OPS.keys.map {|k| Regexp.quote k }.join "|"
26
25
  PATTERN_RAW = "\\s*(#{quoted})?\\s*(#{Gem::Version::VERSION_PATTERN})\\s*".freeze # :nodoc:
27
26
 
28
27
  ##
@@ -31,10 +30,15 @@ class Gem::Requirement
31
30
  PATTERN = /\A#{PATTERN_RAW}\z/.freeze
32
31
 
33
32
  ##
34
- # The default requirement matches any version
33
+ # The default requirement matches any non-prerelease version
35
34
 
36
35
  DefaultRequirement = [">=", Gem::Version.new(0)].freeze
37
36
 
37
+ ##
38
+ # The default requirement matches any version
39
+
40
+ DefaultPrereleaseRequirement = [">=", Gem::Version.new("0.a")].freeze
41
+
38
42
  ##
39
43
  # Raised when a bad requirement is encountered
40
44
 
@@ -68,13 +72,14 @@ class Gem::Requirement
68
72
  end
69
73
  end
70
74
 
71
- ##
72
- # A default "version requirement" can surely _only_ be '>= 0'.
73
-
74
75
  def self.default
75
76
  new '>= 0'
76
77
  end
77
78
 
79
+ def self.default_prerelease
80
+ new '>= 0.a'
81
+ end
82
+
78
83
  ###
79
84
  # A source set requirement, used for Gemfiles and lockfiles
80
85
 
@@ -103,8 +108,10 @@ class Gem::Requirement
103
108
 
104
109
  if $1 == ">=" && $2 == "0"
105
110
  DefaultRequirement
111
+ elsif $1 == ">=" && $2 == "0.a"
112
+ DefaultPrereleaseRequirement
106
113
  else
107
- [$1 || "=", Gem::Version.new($2)]
114
+ [-($1 || "="), Gem::Version.new($2)]
108
115
  end
109
116
  end
110
117
 
@@ -128,8 +135,7 @@ class Gem::Requirement
128
135
  if requirements.empty?
129
136
  @requirements = [DefaultRequirement]
130
137
  else
131
- @requirements = requirements.map! { |r| self.class.parse r }
132
- sort_requirements!
138
+ @requirements = requirements.map! {|r| self.class.parse r }
133
139
  end
134
140
  end
135
141
 
@@ -140,10 +146,9 @@ class Gem::Requirement
140
146
  new = new.flatten
141
147
  new.compact!
142
148
  new.uniq!
143
- new = new.map { |r| self.class.parse r }
149
+ new = new.map {|r| self.class.parse r }
144
150
 
145
151
  @requirements.concat new
146
- sort_requirements!
147
152
  end
148
153
 
149
154
  ##
@@ -152,11 +157,11 @@ class Gem::Requirement
152
157
  def for_lockfile # :nodoc:
153
158
  return if [DefaultRequirement] == @requirements
154
159
 
155
- list = requirements.sort_by { |_, version|
160
+ list = requirements.sort_by do |_, version|
156
161
  version
157
- }.map { |op, version|
162
+ end.map do |op, version|
158
163
  "#{op} #{version}"
159
- }.uniq
164
+ end.uniq
160
165
 
161
166
  " (#{list.join ', '})"
162
167
  end
@@ -181,11 +186,11 @@ class Gem::Requirement
181
186
  end
182
187
 
183
188
  def as_list # :nodoc:
184
- requirements.map { |op, version| "#{op} #{version}" }
189
+ requirements.map {|op, version| "#{op} #{version}" }
185
190
  end
186
191
 
187
192
  def hash # :nodoc:
188
- requirements.hash
193
+ requirements.map {|r| r.first == "~>" ? [r[0], r[1].to_s] : r }.sort.hash
189
194
  end
190
195
 
191
196
  def marshal_dump # :nodoc:
@@ -226,7 +231,7 @@ class Gem::Requirement
226
231
  # are prereleases
227
232
 
228
233
  def prerelease?
229
- requirements.any? { |r| r.last.prerelease? }
234
+ requirements.any? {|r| r.last.prerelease? }
230
235
  end
231
236
 
232
237
  def pretty_print(q) # :nodoc:
@@ -242,7 +247,7 @@ class Gem::Requirement
242
247
  raise ArgumentError, "Need a Gem::Version: #{version.inspect}" unless
243
248
  Gem::Version === version
244
249
  # #28965: syck has a bug with unquoted '=' YAML.loading as YAML::DefaultKey
245
- requirements.all? { |op, rv| (OPS[op] || OPS["="]).call version, rv }
250
+ requirements.all? {|op, rv| (OPS[op] || OPS["="]).call version, rv }
246
251
  end
247
252
 
248
253
  alias :=== :satisfied_by?
@@ -265,7 +270,7 @@ class Gem::Requirement
265
270
  return unless Gem::Requirement === other
266
271
 
267
272
  # An == check is always necessary
268
- return false unless requirements == other.requirements
273
+ return false unless _sorted_requirements == other._sorted_requirements
269
274
 
270
275
  # An == check is sufficient unless any requirements use ~>
271
276
  return true unless _tilde_requirements.any?
@@ -277,8 +282,12 @@ class Gem::Requirement
277
282
 
278
283
  protected
279
284
 
285
+ def _sorted_requirements
286
+ @_sorted_requirements ||= requirements.sort_by(&:to_s)
287
+ end
288
+
280
289
  def _tilde_requirements
281
- requirements.select { |r| r.first == "~>" }
290
+ @_tilde_requirements ||= _sorted_requirements.select {|r| r.first == "~>" }
282
291
  end
283
292
 
284
293
  private
@@ -293,14 +302,6 @@ class Gem::Requirement
293
302
  end
294
303
  end
295
304
  end
296
-
297
- def sort_requirements! # :nodoc:
298
- @requirements.sort! do |l, r|
299
- comp = l.last <=> r.last # first, sort by the requirement's version
300
- next comp unless comp == 0
301
- l.first <=> r.first # then, sort by the operator (for stability)
302
- end
303
- end
304
305
  end
305
306
 
306
307
  class Gem::Version