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
@@ -4,21 +4,55 @@ require "rubygems/installer"
4
4
 
5
5
  module Bundler
6
6
  class RubyGemsGemInstaller < Gem::Installer
7
- unless respond_to?(:at)
8
- def self.at(*args)
9
- new(*args)
10
- end
7
+ def check_executable_overwrite(filename)
8
+ # Bundler needs to install gems regardless of binstub overwriting
11
9
  end
12
10
 
13
- attr_reader :options
11
+ def install
12
+ pre_install_checks
13
+
14
+ run_pre_install_hooks
15
+
16
+ spec.loaded_from = spec_file
17
+
18
+ # Completely remove any previous gem files
19
+ FileUtils.rm_rf gem_dir
20
+ FileUtils.rm_rf spec.extension_dir
21
+
22
+ FileUtils.mkdir_p gem_dir, :mode => 0o755
23
+
24
+ extract_files
25
+
26
+ build_extensions
27
+ write_build_info_file
28
+ run_post_build_hooks
29
+
30
+ generate_bin
31
+ generate_plugins
14
32
 
15
- def initialize(gem, options = {})
16
- @options = {}
17
- super
33
+ write_spec
34
+ write_cache_file
35
+
36
+ say spec.post_install_message unless spec.post_install_message.nil?
37
+
38
+ run_post_install_hooks
39
+
40
+ spec
18
41
  end
19
42
 
20
- def check_executable_overwrite(filename)
21
- # Bundler needs to install gems regardless of binstub overwriting
43
+ def generate_plugins
44
+ return unless Gem::Installer.instance_methods(false).include?(:generate_plugins)
45
+
46
+ latest = Gem::Specification.stubs_for(spec.name).first
47
+ return if latest && latest.version > spec.version
48
+
49
+ ensure_writable_dir @plugins_dir
50
+
51
+ if spec.plugins.empty?
52
+ remove_plugins_for(spec, @plugins_dir)
53
+ else
54
+ regenerate_plugins_for(spec, @plugins_dir)
55
+ end
22
56
  end
23
57
 
24
58
  def pre_install_checks
@@ -27,7 +61,7 @@ module Bundler
27
61
 
28
62
  def build_extensions
29
63
  extension_cache_path = options[:bundler_extension_cache_path]
30
- return super unless extension_cache_path && extension_dir = Bundler.rubygems.spec_extension_dir(spec)
64
+ return super unless extension_cache_path && extension_dir = spec.extension_dir
31
65
 
32
66
  extension_dir = Pathname.new(extension_dir)
33
67
  build_complete = SharedHelpers.filesystem_access(extension_cache_path.join("gem.build_complete"), :read, &:file?)
@@ -47,7 +81,7 @@ module Bundler
47
81
  end
48
82
  end
49
83
 
50
- private
84
+ private
51
85
 
52
86
  def validate_bundler_checksum(checksum)
53
87
  return true if Bundler.settings[:disable_checksum_validation]
@@ -73,7 +107,7 @@ module Bundler
73
107
 
74
108
  If you wish to continue installing the downloaded gem, and are certain it does not pose a \
75
109
  security issue despite the mismatching checksum, do the following:
76
- 1. run `bundle config disable_checksum_validation true` to turn off checksum verification
110
+ 1. run `bundle config set --local disable_checksum_validation true` to turn off checksum verification
77
111
  2. run `bundle install`
78
112
 
79
113
  (More info: The expected SHA256 checksum was #{checksum.inspect}, but the \
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "monitor"
4
- require "rubygems"
5
- require "rubygems/config_file"
3
+ require "rubygems" unless defined?(Gem)
6
4
 
7
5
  module Bundler
8
6
  class RubygemsIntegration
9
7
  if defined?(Gem::Ext::Builder::CHDIR_MONITOR)
10
8
  EXT_LOCK = Gem::Ext::Builder::CHDIR_MONITOR
11
9
  else
10
+ require "monitor"
11
+
12
12
  EXT_LOCK = Monitor.new
13
13
  end
14
14
 
@@ -22,6 +22,7 @@ module Bundler
22
22
 
23
23
  def initialize
24
24
  @replaced_methods = {}
25
+ backport_ext_builder_monitor
25
26
  end
26
27
 
27
28
  def version
@@ -40,14 +41,22 @@ module Bundler
40
41
  Gem::Command.build_args = args
41
42
  end
42
43
 
43
- def load_path_insert_index
44
- Gem.load_path_insert_index
45
- end
46
-
47
44
  def loaded_specs(name)
48
45
  Gem.loaded_specs[name]
49
46
  end
50
47
 
48
+ def add_to_load_path(paths)
49
+ return Gem.add_to_load_path(*paths) if Gem.respond_to?(:add_to_load_path)
50
+
51
+ if insert_index = Gem.load_path_insert_index
52
+ # Gem directories must come after -I and ENV['RUBYLIB']
53
+ $LOAD_PATH.insert(insert_index, *paths)
54
+ else
55
+ # We are probably testing in core, -I and RUBYLIB don't apply
56
+ $LOAD_PATH.unshift(*paths)
57
+ end
58
+ end
59
+
51
60
  def mark_loaded(spec)
52
61
  if spec.respond_to?(:activated=)
53
62
  current = Gem.loaded_specs[spec.name]
@@ -93,11 +102,6 @@ module Bundler
93
102
  end.flatten(1)
94
103
  end
95
104
 
96
- def spec_extension_dir(spec)
97
- return unless spec.respond_to?(:extension_dir)
98
- spec.extension_dir
99
- end
100
-
101
105
  def stub_set_spec(stub, spec)
102
106
  stub.instance_variable_set(:@spec, spec)
103
107
  end
@@ -106,13 +110,8 @@ module Bundler
106
110
  obj.to_s
107
111
  end
108
112
 
109
- def platforms
110
- return [Gem::Platform::RUBY] if Bundler.settings[:force_ruby_platform]
111
- Gem.platforms
112
- end
113
-
114
113
  def configuration
115
- require "bundler/psyched_yaml"
114
+ require_relative "psyched_yaml"
116
115
  Gem.configuration
117
116
  rescue Gem::SystemExitException, LoadError => e
118
117
  Bundler.ui.error "#{e.class}: #{e.message}"
@@ -132,10 +131,16 @@ module Bundler
132
131
  end
133
132
 
134
133
  def inflate(obj)
135
- if defined?(Gem::Util)
136
- Gem::Util.inflate(obj)
134
+ Gem::Util.inflate(obj)
135
+ end
136
+
137
+ def correct_for_windows_path(path)
138
+ if Gem::Util.respond_to?(:correct_for_windows_path)
139
+ Gem::Util.correct_for_windows_path(path)
140
+ elsif path[0].chr == "/" && path[1].chr =~ /[a-z]/i && path[2].chr == ":"
141
+ path[1..-1]
137
142
  else
138
- Gem.inflate(obj)
143
+ path
139
144
  end
140
145
  end
141
146
 
@@ -196,14 +201,6 @@ module Bundler
196
201
  Gem::MARSHAL_SPEC_DIR
197
202
  end
198
203
 
199
- def config_map
200
- Gem::ConfigMap
201
- end
202
-
203
- def repository_subdirectories
204
- %w[cache doc gems specifications]
205
- end
206
-
207
204
  def clear_paths
208
205
  Gem.clear_paths
209
206
  end
@@ -212,26 +209,9 @@ module Bundler
212
209
  Gem.bin_path(gem, bin, ver)
213
210
  end
214
211
 
215
- def path_separator
216
- File::PATH_SEPARATOR
217
- end
218
-
219
- def preserve_paths
220
- # this is a no-op outside of RubyGems 1.8
221
- yield
222
- end
223
-
224
212
  def loaded_gem_paths
225
- # RubyGems 2.2+ can put binary extension into dedicated folders,
226
- # therefore use RubyGems facilities to obtain their load paths.
227
- if Gem::Specification.method_defined? :full_require_paths
228
- loaded_gem_paths = Gem.loaded_specs.map {|_, s| s.full_require_paths }
229
- loaded_gem_paths.flatten
230
- else
231
- $LOAD_PATH.select do |p|
232
- Bundler.rubygems.gem_path.any? {|gp| p =~ /^#{Regexp.escape(gp)}/ }
233
- end
234
- end
213
+ loaded_gem_paths = Gem.loaded_specs.map {|_, s| s.full_require_paths }
214
+ loaded_gem_paths.flatten
235
215
  end
236
216
 
237
217
  def load_plugins
@@ -242,6 +222,10 @@ module Bundler
242
222
  Gem.load_plugin_files(files) if Gem.respond_to?(:load_plugin_files)
243
223
  end
244
224
 
225
+ def load_env_plugins
226
+ Gem.load_env_plugins if Gem.respond_to?(:load_env_plugins)
227
+ end
228
+
245
229
  def ui=(obj)
246
230
  Gem::DefaultUserInteraction.ui = obj
247
231
  end
@@ -250,36 +234,6 @@ module Bundler
250
234
  EXT_LOCK
251
235
  end
252
236
 
253
- def fetch_specs(all, pre, &blk)
254
- require "rubygems/spec_fetcher"
255
- specs = Gem::SpecFetcher.new.list(all, pre)
256
- specs.each { yield } if block_given?
257
- specs
258
- end
259
-
260
- def fetch_prerelease_specs
261
- fetch_specs(false, true)
262
- rescue Gem::RemoteFetcher::FetchError
263
- {} # if we can't download them, there aren't any
264
- end
265
-
266
- # TODO: This is for older versions of RubyGems... should we support the
267
- # X-Gemfile-Source header on these old versions?
268
- # Maybe the newer implementation will work on older RubyGems?
269
- # It seems difficult to keep this implementation and still send the header.
270
- def fetch_all_remote_specs(remote)
271
- old_sources = Bundler.rubygems.sources
272
- Bundler.rubygems.sources = [remote.uri.to_s]
273
- # Fetch all specs, minus prerelease specs
274
- spec_list = fetch_specs(true, false)
275
- # Then fetch the prerelease specs
276
- fetch_prerelease_specs.each {|k, v| spec_list[k].concat(v) }
277
-
278
- spec_list.values.first
279
- ensure
280
- Bundler.rubygems.sources = old_sources
281
- end
282
-
283
237
  def with_build_args(args)
284
238
  ext_lock.synchronize do
285
239
  old_args = build_args
@@ -292,22 +246,11 @@ module Bundler
292
246
  end
293
247
  end
294
248
 
295
- def install_with_build_args(args)
296
- with_build_args(args) { yield }
297
- end
298
-
299
- def gem_from_path(path, policy = nil)
300
- require "rubygems/format"
301
- Gem::Format.from_file_by_path(path, policy)
302
- end
303
-
304
249
  def spec_from_gem(path, policy = nil)
305
250
  require "rubygems/security"
306
- require "bundler/psyched_yaml"
251
+ require_relative "psyched_yaml"
307
252
  gem_from_path(path, security_policies[policy]).spec
308
- rescue Gem::Package::FormatError
309
- raise GemspecError, "Could not read gem at #{path}. It may be corrupted."
310
- rescue Exception, Gem::Exception, Gem::Security::Exception => e
253
+ rescue Exception, Gem::Exception, Gem::Security::Exception => e # rubocop:disable Lint/RescueException
311
254
  if e.is_a?(Gem::Security::Exception) ||
312
255
  e.message =~ /unknown trust policy|unsigned gem/i ||
313
256
  e.message =~ /couldn't verify (meta)?data signature/i
@@ -319,23 +262,10 @@ module Bundler
319
262
  end
320
263
  end
321
264
 
322
- def build(spec, skip_validation = false)
323
- require "rubygems/builder"
324
- Gem::Builder.new(spec).build
325
- end
326
-
327
265
  def build_gem(gem_dir, spec)
328
266
  build(spec)
329
267
  end
330
268
 
331
- def download_gem(spec, uri, path)
332
- uri = Bundler.settings.mirror_for(uri)
333
- fetcher = Gem::RemoteFetcher.new(configuration[:http_proxy])
334
- Bundler::Retry.new("download gem from #{uri}").attempts do
335
- fetcher.download(spec, uri, path)
336
- end
337
- end
338
-
339
269
  def security_policy_keys
340
270
  %w[High Medium Low AlmostNo No].map {|level| "#{level}Security" }
341
271
  end
@@ -359,14 +289,6 @@ module Bundler
359
289
  end
360
290
  end
361
291
 
362
- def binstubs_call_gem?
363
- true
364
- end
365
-
366
- def stubs_provide_full_functionality?
367
- false
368
- end
369
-
370
292
  def replace_gem(specs, specs_by_name)
371
293
  reverse_rubygems_kernel_mixin
372
294
 
@@ -375,7 +297,6 @@ module Bundler
375
297
  kernel = (class << ::Kernel; self; end)
376
298
  [kernel, ::Kernel].each do |kernel_class|
377
299
  redefine_method(kernel_class, :gem) do |dep, *reqs|
378
- executables ||= specs.map(&:executables).flatten if ::Bundler.rubygems.binstubs_call_gem?
379
300
  if executables && executables.include?(File.basename(caller.first.split(":").first))
380
301
  break
381
302
  end
@@ -391,8 +312,13 @@ module Bundler
391
312
  end
392
313
 
393
314
  message = if spec.nil?
315
+ target_file = begin
316
+ Bundler.default_gemfile.basename
317
+ rescue GemfileNotFound
318
+ "inline Gemfile"
319
+ end
394
320
  "#{dep.name} is not part of the bundle." \
395
- " Add it to your #{Bundler.default_gemfile.basename}."
321
+ " Add it to your #{target_file}."
396
322
  else
397
323
  "can't activate #{dep}, already activated #{spec.full_name}. " \
398
324
  "Make sure all dependencies are added to Gemfile."
@@ -408,68 +334,50 @@ module Bundler
408
334
  raise e
409
335
  end
410
336
 
411
- # backwards compatibility shim, see https://github.com/bundler/bundler/issues/5102
337
+ # backwards compatibility shim, see https://github.com/rubygems/bundler/issues/5102
412
338
  kernel_class.send(:public, :gem) if Bundler.feature_flag.setup_makes_kernel_gem_public?
413
339
  end
414
340
  end
415
341
 
416
- def stub_source_index(specs)
417
- Gem::SourceIndex.send(:alias_method, :old_initialize, :initialize)
418
- redefine_method(Gem::SourceIndex, :initialize) do |*args|
419
- @gems = {}
420
- # You're looking at this thinking: Oh! This is how I make those
421
- # rubygems deprecations go away!
422
- #
423
- # You'd be correct BUT using of this method in production code
424
- # must be approved by the rubygems team itself!
425
- #
426
- # This is your warning. If you use this and don't have approval
427
- # we can't protect you.
428
- #
429
- Deprecate.skip_during do
430
- self.spec_dirs = *args
431
- add_specs(*specs)
432
- end
433
- end
434
- end
435
-
436
342
  # Used to make bin stubs that are not created by bundler work
437
343
  # under bundler. The new Gem.bin_path only considers gems in
438
344
  # +specs+
439
- def replace_bin_path(specs, specs_by_name)
345
+ def replace_bin_path(specs_by_name)
440
346
  gem_class = (class << Gem; self; end)
441
347
 
442
348
  redefine_method(gem_class, :find_spec_for_exe) do |gem_name, *args|
443
349
  exec_name = args.first
350
+ raise ArgumentError, "you must supply exec_name" unless exec_name
444
351
 
445
352
  spec_with_name = specs_by_name[gem_name]
446
- spec = if exec_name
447
- if spec_with_name && spec_with_name.executables.include?(exec_name)
448
- spec_with_name
449
- else
450
- specs.find {|s| s.executables.include?(exec_name) }
451
- end
452
- else
453
- spec_with_name
454
- end
353
+ matching_specs_by_exec_name = specs_by_name.values.select {|s| s.executables.include?(exec_name) }
354
+ spec = matching_specs_by_exec_name.delete(spec_with_name)
455
355
 
456
- unless spec
356
+ unless spec || !matching_specs_by_exec_name.empty?
457
357
  message = "can't find executable #{exec_name} for gem #{gem_name}"
458
- if !exec_name || spec_with_name.nil?
358
+ if spec_with_name.nil?
459
359
  message += ". #{gem_name} is not currently included in the bundle, " \
460
360
  "perhaps you meant to add it to your #{Bundler.default_gemfile.basename}?"
461
361
  end
462
362
  raise Gem::Exception, message
463
363
  end
464
364
 
465
- raise Gem::Exception, "no default executable for #{spec.full_name}" unless exec_name ||= spec.default_executable
466
-
467
- unless spec.name == gem_name
468
- Bundler::SharedHelpers.major_deprecation 2,
365
+ unless spec
366
+ spec = matching_specs_by_exec_name.shift
367
+ warn \
469
368
  "Bundler is using a binstub that was created for a different gem (#{spec.name}).\n" \
470
369
  "You should run `bundle binstub #{gem_name}` " \
471
370
  "to work around a system/bundle conflict."
472
371
  end
372
+
373
+ unless matching_specs_by_exec_name.empty?
374
+ conflicting_names = matching_specs_by_exec_name.map(&:name).join(", ")
375
+ warn \
376
+ "The `#{exec_name}` executable in the `#{spec.name}` gem is being loaded, but it's also present in other gems (#{conflicting_names}).\n" \
377
+ "If you meant to run the executable for another gem, make sure you use a project specific binstub (`bundle binstub <gem_name>`).\n" \
378
+ "If you plan to use multiple conflicting executables, generate binstubs for them and disambiguate their names."
379
+ end
380
+
473
381
  spec
474
382
  end
475
383
 
@@ -499,75 +407,35 @@ module Bundler
499
407
  end
500
408
  end
501
409
 
502
- # Because Bundler has a static view of what specs are available,
503
- # we don't #refresh, so stub it out.
504
- def replace_refresh
505
- gem_class = (class << Gem; self; end)
506
- redefine_method(gem_class, :refresh) {}
507
- end
508
-
509
410
  # Replace or hook into RubyGems to provide a bundlerized view
510
411
  # of the world.
511
412
  def replace_entrypoints(specs)
512
- specs_by_name = specs.reduce({}) do |h, s|
513
- h[s.name] = s
514
- h
515
- end
413
+ specs_by_name = add_default_gems_to(specs)
516
414
 
517
415
  replace_gem(specs, specs_by_name)
518
416
  stub_rubygems(specs)
519
- replace_bin_path(specs, specs_by_name)
520
- replace_refresh
417
+ replace_bin_path(specs_by_name)
521
418
 
522
419
  Gem.clear_paths
523
420
  end
524
421
 
525
- # This backports the correct segment generation code from RubyGems 1.4+
526
- # by monkeypatching it into the method in RubyGems 1.3.6 and 1.3.7.
527
- def backport_segment_generation
528
- redefine_method(Gem::Version, :segments) do
529
- @segments ||= @version.scan(/[0-9]+|[a-z]+/i).map do |s|
530
- /^\d+$/ =~ s ? s.to_i : s
531
- end
532
- end
533
- end
534
-
535
- # This backport fixes the marshaling of @segments.
536
- def backport_yaml_initialize
537
- redefine_method(Gem::Version, :yaml_initialize) do |_, map|
538
- @version = map["version"]
539
- @segments = nil
540
- @hash = nil
541
- end
542
- end
543
-
544
- # This backports base_dir which replaces installation path
545
- # RubyGems 1.8+
546
- def backport_base_dir
547
- redefine_method(Gem::Specification, :base_dir) do
548
- return Gem.dir unless loaded_from
549
- File.dirname File.dirname loaded_from
550
- end
551
- end
552
-
553
- def backport_cache_file
554
- redefine_method(Gem::Specification, :cache_dir) do
555
- @cache_dir ||= File.join base_dir, "cache"
422
+ # Add default gems not already present in specs, and return them as a hash.
423
+ def add_default_gems_to(specs)
424
+ specs_by_name = specs.reduce({}) do |h, s|
425
+ h[s.name] = s
426
+ h
556
427
  end
557
428
 
558
- redefine_method(Gem::Specification, :cache_file) do
559
- @cache_file ||= File.join cache_dir, "#{full_name}.gem"
560
- end
561
- end
429
+ Bundler.rubygems.default_stubs.each do |stub|
430
+ default_spec = stub.to_spec
431
+ default_spec_name = default_spec.name
432
+ next if specs_by_name.key?(default_spec_name)
562
433
 
563
- def backport_spec_file
564
- redefine_method(Gem::Specification, :spec_dir) do
565
- @spec_dir ||= File.join base_dir, "specifications"
434
+ specs << default_spec
435
+ specs_by_name[default_spec_name] = default_spec
566
436
  end
567
437
 
568
- redefine_method(Gem::Specification, :spec_file) do
569
- @spec_file ||= File.join spec_dir, "#{full_name}.gemspec"
570
- end
438
+ specs_by_name
571
439
  end
572
440
 
573
441
  def undo_replacements
@@ -613,286 +481,133 @@ module Bundler
613
481
  end
614
482
  end
615
483
 
616
- # RubyGems 1.4 through 1.6
617
- class Legacy < RubygemsIntegration
618
- def initialize
619
- super
620
- backport_base_dir
621
- backport_cache_file
622
- backport_spec_file
623
- backport_yaml_initialize
624
- end
625
-
626
- def stub_rubygems(specs)
627
- # RubyGems versions lower than 1.7 use SourceIndex#from_gems_in
628
- source_index_class = (class << Gem::SourceIndex; self; end)
629
- redefine_method(source_index_class, :from_gems_in) do |*args|
630
- Gem::SourceIndex.new.tap do |source_index|
631
- source_index.spec_dirs = *args
632
- source_index.add_specs(*specs)
633
- end
634
- end
635
- end
484
+ def stub_rubygems(specs)
485
+ Gem::Specification.all = specs
636
486
 
637
- def all_specs
638
- Gem.source_index.gems.values
639
- end
640
-
641
- def find_name(name)
642
- Gem.source_index.find_name(name)
643
- end
644
-
645
- def validate(spec)
646
- # These versions of RubyGems always validate in "packaging" mode,
647
- # which is too strict for the kinds of checks we care about. As a
648
- # result, validation is disabled on versions of RubyGems below 1.7.
487
+ Gem.post_reset do
488
+ Gem::Specification.all = specs
649
489
  end
650
490
 
651
- def post_reset_hooks
491
+ redefine_method((class << Gem; self; end), :finish_resolve) do |*|
652
492
  []
653
493
  end
654
-
655
- def reset
656
- end
657
494
  end
658
495
 
659
- # RubyGems versions 1.3.6 and 1.3.7
660
- class Ancient < Legacy
661
- def initialize
662
- super
663
- backport_segment_generation
664
- end
496
+ def plain_specs
497
+ Gem::Specification._all
665
498
  end
666
499
 
667
- # RubyGems 1.7
668
- class Transitional < Legacy
669
- def stub_rubygems(specs)
670
- stub_source_index(specs)
671
- end
672
-
673
- def validate(spec)
674
- # Missing summary is downgraded to a warning in later versions,
675
- # so we set it to an empty string to prevent an exception here.
676
- spec.summary ||= ""
677
- RubygemsIntegration.instance_method(:validate).bind(self).call(spec)
678
- end
500
+ def plain_specs=(specs)
501
+ Gem::Specification.all = specs
679
502
  end
680
503
 
681
- # RubyGems 1.8.5-1.8.19
682
- class Modern < RubygemsIntegration
683
- def stub_rubygems(specs)
684
- Gem::Specification.all = specs
685
-
686
- Gem.post_reset do
687
- Gem::Specification.all = specs
688
- end
689
-
690
- stub_source_index(specs)
691
- end
504
+ def fetch_specs(remote, name)
505
+ path = remote.uri.to_s + "#{name}.#{Gem.marshal_version}.gz"
506
+ fetcher = gem_remote_fetcher
507
+ fetcher.headers = { "X-Gemfile-Source" => remote.original_uri.to_s } if remote.original_uri
508
+ string = fetcher.fetch_path(path)
509
+ Bundler.load_marshal(string)
510
+ rescue Gem::RemoteFetcher::FetchError => e
511
+ # it's okay for prerelease to fail
512
+ raise e unless name == "prerelease_specs"
513
+ end
692
514
 
693
- def all_specs
694
- Gem::Specification.to_a
695
- end
515
+ def fetch_all_remote_specs(remote)
516
+ specs = fetch_specs(remote, "specs")
517
+ pres = fetch_specs(remote, "prerelease_specs") || []
696
518
 
697
- def find_name(name)
698
- Gem::Specification.find_all_by_name name
699
- end
519
+ specs.concat(pres)
700
520
  end
701
521
 
702
- # RubyGems 1.8.0 to 1.8.4
703
- class AlmostModern < Modern
704
- # RubyGems [>= 1.8.0, < 1.8.5] has a bug that changes Gem.dir whenever
705
- # you call Gem::Installer#install with an :install_dir set. We have to
706
- # change it back for our sudo mode to work.
707
- def preserve_paths
708
- old_dir = gem_dir
709
- old_path = gem_path
710
- yield
711
- Gem.use_paths(old_dir, old_path)
522
+ def download_gem(spec, uri, path)
523
+ uri = Bundler.settings.mirror_for(uri)
524
+ fetcher = gem_remote_fetcher
525
+ fetcher.headers = { "X-Gemfile-Source" => spec.remote.original_uri.to_s } if spec.remote.original_uri
526
+ Bundler::Retry.new("download gem from #{uri}").attempts do
527
+ fetcher.download(spec, uri, path)
712
528
  end
713
529
  end
714
530
 
715
- # RubyGems 1.8.20+
716
- class MoreModern < Modern
717
- # RubyGems 1.8.20 and adds the skip_validation parameter, so that's
718
- # when we start passing it through.
719
- def build(spec, skip_validation = false)
720
- require "rubygems/builder"
721
- Gem::Builder.new(spec).build(skip_validation)
722
- end
531
+ def gem_remote_fetcher
532
+ require "resolv"
533
+ proxy = configuration[:http_proxy]
534
+ dns = Resolv::DNS.new
535
+ Gem::RemoteFetcher.new(proxy, dns)
723
536
  end
724
537
 
725
- # RubyGems 2.0
726
- class Future < RubygemsIntegration
727
- def stub_rubygems(specs)
728
- Gem::Specification.all = specs
729
-
730
- Gem.post_reset do
731
- Gem::Specification.all = specs
732
- end
733
-
734
- redefine_method((class << Gem; self; end), :finish_resolve) do |*|
735
- []
736
- end
737
- end
738
-
739
- def all_specs
740
- Gem::Specification.to_a
741
- end
538
+ def gem_from_path(path, policy = nil)
539
+ require "rubygems/package"
540
+ p = Gem::Package.new(path)
541
+ p.security_policy = policy if policy
542
+ p
543
+ end
742
544
 
743
- def find_name(name)
744
- Gem::Specification.find_all_by_name name
745
- end
545
+ def build(spec, skip_validation = false)
546
+ require "rubygems/package"
547
+ Gem::Package.build(spec, skip_validation)
548
+ end
746
549
 
747
- def fetch_specs(source, remote, name)
748
- path = source + "#{name}.#{Gem.marshal_version}.gz"
749
- fetcher = gem_remote_fetcher
750
- fetcher.headers = { "X-Gemfile-Source" => remote.original_uri.to_s } if remote.original_uri
751
- string = fetcher.fetch_path(path)
752
- Bundler.load_marshal(string)
753
- rescue Gem::RemoteFetcher::FetchError => e
754
- # it's okay for prerelease to fail
755
- raise e unless name == "prerelease_specs"
756
- end
550
+ def repository_subdirectories
551
+ Gem::REPOSITORY_SUBDIRECTORIES
552
+ end
757
553
 
758
- def fetch_all_remote_specs(remote)
759
- source = remote.uri.is_a?(URI) ? remote.uri : URI.parse(source.to_s)
554
+ def install_with_build_args(args)
555
+ yield
556
+ end
760
557
 
761
- specs = fetch_specs(source, remote, "specs")
762
- pres = fetch_specs(source, remote, "prerelease_specs") || []
558
+ def path_separator
559
+ Gem.path_separator
560
+ end
763
561
 
764
- specs.concat(pres)
562
+ def all_specs
563
+ Gem::Specification.stubs.map do |stub|
564
+ StubSpecification.from_stub(stub)
765
565
  end
566
+ end
766
567
 
767
- def download_gem(spec, uri, path)
768
- uri = Bundler.settings.mirror_for(uri)
769
- fetcher = gem_remote_fetcher
770
- fetcher.headers = { "X-Gemfile-Source" => spec.remote.original_uri.to_s } if spec.remote.original_uri
771
- Bundler::Retry.new("download gem from #{uri}").attempts do
772
- fetcher.download(spec, uri, path)
568
+ def backport_ext_builder_monitor
569
+ # So we can avoid requiring "rubygems/ext" in its entirety
570
+ Gem.module_eval <<-RUBY, __FILE__, __LINE__ + 1
571
+ module Ext
773
572
  end
774
- end
573
+ RUBY
775
574
 
776
- def gem_remote_fetcher
777
- require "resolv"
778
- proxy = configuration[:http_proxy]
779
- dns = Resolv::DNS.new
780
- Bundler::GemRemoteFetcher.new(proxy, dns)
781
- end
782
-
783
- def gem_from_path(path, policy = nil)
784
- require "rubygems/package"
785
- p = Gem::Package.new(path)
786
- p.security_policy = policy if policy
787
- p
788
- end
575
+ require "rubygems/ext/builder"
789
576
 
790
- def build(spec, skip_validation = false)
791
- require "rubygems/package"
792
- Gem::Package.build(spec, skip_validation)
793
- end
794
-
795
- def repository_subdirectories
796
- Gem::REPOSITORY_SUBDIRECTORIES
797
- end
798
-
799
- def install_with_build_args(args)
800
- yield
801
- end
577
+ Gem::Ext::Builder.class_eval do
578
+ unless const_defined?(:CHDIR_MONITOR)
579
+ const_set(:CHDIR_MONITOR, EXT_LOCK)
580
+ end
802
581
 
803
- def path_separator
804
- Gem.path_separator
582
+ remove_const(:CHDIR_MUTEX) if const_defined?(:CHDIR_MUTEX)
583
+ const_set(:CHDIR_MUTEX, const_get(:CHDIR_MONITOR))
805
584
  end
806
585
  end
807
586
 
808
- # RubyGems 2.1.0
809
- class MoreFuture < Future
810
- def initialize
811
- super
812
- backport_ext_builder_monitor
813
- end
814
-
815
- def all_specs
816
- require "bundler/remote_specification"
817
- Gem::Specification.stubs.map do |stub|
818
- StubSpecification.from_stub(stub)
819
- end
820
- end
821
-
822
- def backport_ext_builder_monitor
823
- # So we can avoid requiring "rubygems/ext" in its entirety
824
- Gem.module_eval <<-RB, __FILE__, __LINE__ + 1
825
- module Ext
826
- end
827
- RB
828
-
829
- require "rubygems/ext/builder"
830
-
831
- Gem::Ext::Builder.class_eval do
832
- unless const_defined?(:CHDIR_MONITOR)
833
- const_set(:CHDIR_MONITOR, EXT_LOCK)
834
- end
835
-
836
- remove_const(:CHDIR_MUTEX) if const_defined?(:CHDIR_MUTEX)
837
- const_set(:CHDIR_MUTEX, const_get(:CHDIR_MONITOR))
838
- end
839
- end
587
+ def find_name(name)
588
+ Gem::Specification.stubs_for(name).map(&:to_spec)
589
+ end
840
590
 
841
- if Gem::Specification.respond_to?(:stubs_for)
842
- def find_name(name)
843
- Gem::Specification.stubs_for(name).map(&:to_spec)
844
- end
845
- else
846
- def find_name(name)
847
- Gem::Specification.stubs.find_all do |spec|
848
- spec.name == name
849
- end.map(&:to_spec)
850
- end
591
+ if Gem::Specification.respond_to?(:default_stubs)
592
+ def default_stubs
593
+ Gem::Specification.default_stubs("*.gemspec")
851
594
  end
852
-
853
- def use_gemdeps(gemfile)
854
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path(gemfile)
855
- require "bundler/gemdeps"
856
- runtime = Bundler.setup
857
- Bundler.ui = nil
858
- activated_spec_names = runtime.requested_specs.map(&:to_spec).sort_by(&:name)
859
- [Gemdeps.new(runtime), activated_spec_names]
595
+ else
596
+ def default_stubs
597
+ Gem::Specification.send(:default_stubs, "*.gemspec")
860
598
  end
599
+ end
861
600
 
862
- if provides?(">= 2.5.2")
863
- # RubyGems-generated binstubs call Kernel#gem
864
- def binstubs_call_gem?
865
- false
866
- end
867
-
868
- # only 2.5.2+ has all of the stub methods we want to use, and since this
869
- # is a performance optimization _only_,
870
- # we'll restrict ourselves to the most
871
- # recent RG versions instead of all versions that have stubs
872
- def stubs_provide_full_functionality?
873
- true
874
- end
875
- end
601
+ def use_gemdeps(gemfile)
602
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path(gemfile)
603
+ require_relative "gemdeps"
604
+ runtime = Bundler.setup
605
+ activated_spec_names = runtime.requested_specs.map(&:to_spec).sort_by(&:name)
606
+ [Gemdeps.new(runtime), activated_spec_names]
876
607
  end
877
608
  end
878
609
 
879
610
  def self.rubygems
880
- @rubygems ||= if RubygemsIntegration.provides?(">= 2.1.0")
881
- RubygemsIntegration::MoreFuture.new
882
- elsif RubygemsIntegration.provides?(">= 1.99.99")
883
- RubygemsIntegration::Future.new
884
- elsif RubygemsIntegration.provides?(">= 1.8.20")
885
- RubygemsIntegration::MoreModern.new
886
- elsif RubygemsIntegration.provides?(">= 1.8.5")
887
- RubygemsIntegration::Modern.new
888
- elsif RubygemsIntegration.provides?(">= 1.8.0")
889
- RubygemsIntegration::AlmostModern.new
890
- elsif RubygemsIntegration.provides?(">= 1.7.0")
891
- RubygemsIntegration::Transitional.new
892
- elsif RubygemsIntegration.provides?(">= 1.4.0")
893
- RubygemsIntegration::Legacy.new
894
- else # RubyGems 1.3.6 and 1.3.7
895
- RubygemsIntegration::Ancient.new
896
- end
611
+ @rubygems ||= RubygemsIntegration.new
897
612
  end
898
613
  end